一、redis-3.28部署
yum install gcc tcl
wget http://download.redis.io/releases/redis-3.2.8.tar.gz
tar -zxvf redis-3.2.8.tar.gz
cd redis-3.2.8
mkdir -p /roobo/server/redis-3.2.8
make install PREFIX=/roobo/server/redis-3.2.8
ln -s /roobo/server/redis-3.2.8 /roobo/server/redis
cd /roobo/server/redis/bin
#啟動redis
./redis-server
#!/bin/bash
cd /roobo/server/redis
mkdir -p /roobo/server/redis/6379
mkdir -p /roobo/server/redis/6380
mkdir -p /roobo/server/redis/6381
sleep 5
echo "##############6379配置文件####################"
cat > /roobo/server/redis/6379/6379.conf <<EOF
# Redis使用后台模式
daemonize yes
# 關閉保護模式
protected-mode no
# 注釋以下內容開啟遠程訪問
# bind 127.0.0.1
# 修改啟動端口為6379
port 6379
# 修改pidfile指向路徑
pidfile /roobo/server/redis/6379/redis_6379.pid
EOF
sleep 2
echo "##############6380配置文件####################"
cat > /roobo/server/redis/6380/6380.conf <<EOF
# Redis使用后台模式
daemonize yes
# 關閉保護模式
protected-mode no
# 注釋以下內容開啟遠程訪問
# bind 127.0.0.1
# 修改啟動端口為6380
port 6380
# 修改pidfile指向路徑
pidfile /roobo/server/redis/6380/redis_6380.pid
EOF
sleep 2
echo "##############6381配置文件####################"
cat > /roobo/server/redis/6381/6381.conf <<EOF
# Redis使用后台模式
daemonize yes
# 關閉保護模式
protected-mode no
# 注釋以下內容開啟遠程訪問
# bind 127.0.0.1
# 修改啟動端口為6381
port 6381
# 修改pidfile指向路徑
pidfile /roobo/server/redis/6381/redis_6381.pid
EOF
#啟動三個實例
/roobo/server/redis/bin/redis-server /roobo/server/redis/6379/6379.conf
/roobo/server/redis/bin/redis-server /roobo/server/redis/6380/6380.conf
/roobo/server/redis/bin/redis-server /roobo/server/redis/6381/6381.conf
二、主從模式
一主--->二從

介紹在Redis中設置主從有2種方式:
1.在redis.conf中設置slaveof
a) slaveof <masterip> <masterport>
2、 使用redis-cli客戶端連接到redis服務,執行slaveof命令
a) slaveof <masterip> <masterport>
我們演示:第2種方式在重啟后將失去主從復制關系。
主庫 6371
從庫 6380,6381
#設置6380和6381為6379的從庫
#redis-cli
[root@instance-m4p7hj0t bin]# /roobo/server/redis/bin/redis-cli -h 172.16.0.4 -p 6380
172.16.0.4:6380> slaveof 172.16.0.4 6379
OK
[root@instance-m4p7hj0t bin]# /roobo/server/redis/bin/redis-cli -h 172.16.0.4 -p 6381
172.16.0.4:6381> slaveof 172.16.0.4 6379
OK
#查看主從,主庫:6379 ,從庫:6380,6381
[root@instance-m4p7hj0t ~]# /roobo/server/redis/bin/redis-cli -h 172.16.0.4 -p 6379
172.16.0.4:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=172.16.0.4,port=6380,state=online,offset=687,lag=1
slave1:ip=172.16.0.4,port=6381,state=online,offset=687,lag=1
master_repl_offset:687
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:686
172.16.0.4:6379> exit
role:角色信息
slaveX:從庫信息
connected_slaves:從庫數量
三、測試
在主庫寫入數據
[root@instance-m4p7hj0t bin]# /roobo/server/redis/bin/redis-cli -h 172.16.0.4 -p 6379
172.16.0.4:6379> set nulige 123
OK
在從庫讀取數據
#6380
[root@instance-m4p7hj0t ~]# /roobo/server/redis/bin/redis-cli -h 172.16.0.4 -p 6380
172.16.0.4:6380> get nulige
"123"
#從庫6381
[root@instance-m4p7hj0t ~]# /roobo/server/redis/bin/redis-cli -h 172.16.0.4 -p 6381
172.16.0.4:6381> get nulige
"123"
一、需求
(1)、模擬6379宕機,把6380切換為主,6381為從
(2)、當6379修復好后,再把6379掛為6380的從庫。
1、開始模擬6379宕機
/roobo/server/redis/bin/redis-cli -h 172.16.0.4 -p 6379
#關機(相當於宕機了)
shutdown
#取消主從關系
slave-read-only no
2、把6380切換為主
/roobo/server/redis/bin/redis-cli -h 172.16.0.4 -p 6380
#把從提升為主
172.16.0.4:6380> slaveof no one
OK
#查看
172.16.0.4:6380> info replication
# Replication
role:master
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
3、設置6381為6380的從
/roobo/server/redis/bin/redis-cli -h 172.16.0.4 -p 6381
slaveof 172.16.0.4 6380
#再在6380上面查看(備注:現在6380為主,6381就為從)
/roobo/server/redis/bin/redis-cli -h 172.16.0.4 -p 6380
172.16.0.4:6380> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=172.16.0.4,port=6381,state=online,offset=1,lag=0
master_repl_offset:1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:0
172.16.0.4:6380>
4、6379修好了,再把他加到6380的主下面,變成從庫。
[root@instance-m4p7hj0t ~]# /roobo/server/redis/bin/redis-server /roobo/server/redis/6379/6379.conf
[root@instance-m4p7hj0t ~]# /roobo/server/redis/bin/redis-cli -h 172.16.0.4 -p 6379
172.16.0.4:6379> slaveof 172.16.0.4 6380
OK
5、查看6380上面,現在已經是6380為主,6379和6381為從
/roobo/server/redis/bin/redis-cli -h 172.16.0.4 -p 6380
172.16.0.4:6380> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=172.16.0.4,port=6381,state=online,offset=239,lag=1
slave1:ip=172.16.0.4,port=6379,state=online,offset=239,lag=1
master_repl_offset:239
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:238
172.16.0.4:6380> exit
四、設置從庫只讀
默認情況下redis數據庫充當slave角色時是只讀的不能進行寫操作
可以在配置文件中開啟非只讀:
slave-read-only no
五、取消主從關系命令
SLAVEOF NO ONE
注:如果要取消Redis主從關系,可以在對應的從庫執行SLAVEOF NO ONE命令,取消主從關系
六、開啟無磁盤復制:
配置文件加參數:
repl-diskless-sync yes
七、主從從架構

后補。。。。。
八、redis3.2.8 sentinel模式一主兩從高可用環境搭建測試
原理:
例如下圖所示:

在Server1 掉線后:

升級Server2 為新的主服務器:

實現功能:
a、6379為主,6380為從庫,6381為從庫
b、6379為主,宕機自動切換到6381為主,再掛載6380和6379為從庫
(備注:因演示環境只有一台機,所以只配置了一個sentinel.conf,一主兩從環境,三台都要配置,並改參數為2,才能實現。)
實施步驟如下:
1、6379服務器為主,配置sentinel.conf
sentinel.conf
[root@instance-m4p7hj0t 6379]# pwd
/roobo/server/redis/6379
[root@instance-m4p7hj0t 6379]# ll
總用量 16
-rw-r--r-- 1 root root 253 8月 15 16:44 6379.conf
-rw-r--r-- 1 root root 91 8月 16 09:30 dump.rdb
-rw-r--r-- 1 root root 6 8月 16 09:30 redis_6379.pid
-rw-r--r-- 1 root root 192 8月 16 09:50 sentinel.conf
#sentinel配置文件
[root@instance-m4p7hj0t 6379]# cat sentinel.conf
port 26379
pidfile "/roobo/server/redis/6379/redis-sentinel.pid"
dir "/roobo/server/redis-3.2.8/6379"
daemonize yes
protected-mode no
logfile "/roobo/server/redis/6379/redis-sentinel.log"
#最后一位叄數1表示:sentinel只安裝了一台機,多台機設為2
sentinel monitor redisMaster 172.16.0.4 6381 1
sentinel down-after-milliseconds redisMaster 10000
sentinel parallel-syncs redisMaster 1
sentinel failover-timeout redisMaster 60000
2、查看6379配置信息,確認6379為主,其它兩節點為從
[root@instance-m4p7hj0t 6379]# /roobo/server/redis/bin/redis-cli -h 172.16.0.4 -p 6379
172.16.0.4:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=172.16.0.4,port=6381,state=online,offset=11016,lag=1
slave1:ip=172.16.0.4,port=6380,state=online,offset=11016,lag=1
master_repl_offset:11016
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:11015
3、啟動6379節點的sentinel服務
[root@instance-m4p7hj0t bin]# /roobo/server/redis/bin/redis-sentinel /roobo/server/redis/6379/sentinel.conf
#切換目錄到6379文件夾中
[root@instance-m4p7hj0t 6379]# cd /roobo/server/redis/6379
[root@instance-m4p7hj0t 6379]# ll
總用量 24
-rw-r--r-- 1 root root 253 8月 15 16:44 6379.conf
-rw-r--r-- 1 root root 91 8月 16 10:10 dump.rdb
-rw-r--r-- 1 root root 6 8月 16 09:30 redis_6379.pid
-rw-r--r-- 1 root root 1690 8月 16 10:14 redis-sentinel.log
-rw-r--r-- 1 root root 6 8月 16 10:14 redis-sentinel.pid
-rw-r--r-- 1 root root 611 8月 16 10:14 sentinel.conf
#查看日志
[root@instance-m4p7hj0t 6379]# tail -f redis-sentinel.log
`-._ `-._`-.__.-'_.-' _.-'
`-._ `-.__.-' _.-'
`-._ _.-'
`-.__.-'
28048:X 16 Aug 10:14:00.614 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
28048:X 16 Aug 10:14:00.628 # Sentinel ID is 9d235e0e09237ec250f33b00bc7369d080c4703a
28048:X 16 Aug 10:14:00.628 # +monitor master redisMaster 172.16.0.4 6379 quorum 1
28048:X 16 Aug 10:14:00.629 * +slave slave 172.16.0.4:6381 172.16.0.4 6381 @ redisMaster 172.16.0.4 6379
28048:X 16 Aug 10:14:00.632 * +slave slave 172.16.0.4:6380 172.16.0.4 6380 @ redisMaster 172.16.0.4 6379
4、演示6379宕機,6381原來是從庫,會自動切換為主庫(6381)
[root@instance-m4p7hj0t 6379]# /roobo/server/redis/bin/redis-cli -h 172.16.0.4 -p 6379
172.16.0.4:6379>shutdown (模擬宕機)
5、查看6379服務器上面的sentinel日志
[root@instance-m4p7hj0t 6379]# cd /roobo/server/redis/6379
[root@instance-m4p7hj0t 6379]# tail -f redis-sentinel.log
`-._ `-._`-.__.-'_.-' _.-'
`-._ `-.__.-' _.-'
`-._ _.-'
`-.__.-'
28048:X 16 Aug 10:14:00.614 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
28048:X 16 Aug 10:14:00.628 # Sentinel ID is 9d235e0e09237ec250f33b00bc7369d080c4703a
28048:X 16 Aug 10:14:00.628 # +monitor master redisMaster 172.16.0.4 6379 quorum 1
28048:X 16 Aug 10:14:00.629 * +slave slave 172.16.0.4:6381 172.16.0.4 6381 @ redisMaster 172.16.0.4 6379
28048:X 16 Aug 10:14:00.632 * +slave slave 172.16.0.4:6380 172.16.0.4 6380 @ redisMaster 172.16.0.4 6379
28048:X 16 Aug 10:16:58.258 # +sdown master redisMaster 172.16.0.4 6379 #顯示6379宕機了
28048:X 16 Aug 10:16:58.259 # +odown master redisMaster 172.16.0.4 6379 #quorum 1/1
28048:X 16 Aug 10:16:58.259 # +new-epoch 1
28048:X 16 Aug 10:16:58.260 # +try-failover master redisMaster 172.16.0.4 6379
28048:X 16 Aug 10:16:58.263 # +vote-for-leader 9d235e0e09237ec250f33b00bc7369d080c4703a 1
28048:X 16 Aug 10:16:58.263 # +elected-leader master redisMaster 172.16.0.4 6379
28048:X 16 Aug 10:16:58.264 # +failover-state-select-slave master redisMaster 172.16.0.4 6379
28048:X 16 Aug 10:16:58.326 # +selected-slave slave 172.16.0.4:6381 172.16.0.4 6381 @ redisMaster 172.16.0.4 6379
28048:X 16 Aug 10:16:58.326 * +failover-state-send-slaveof-noone slave 172.16.0.4:6381 172.16.0.4 6381 @ redisMaster4 6379
28048:X 16 Aug 10:16:58.378 * +failover-state-wait-promotion slave 172.16.0.4:6381 172.16.0.4 6381 @ redisMaster 17279
28048:X 16 Aug 10:16:58.722 # +promoted-slave slave 172.16.0.4:6381 172.16.0.4 6381 @ redisMaster 172.16.0.4 6379
28048:X 16 Aug 10:16:58.723 # +failover-state-reconf-slaves master redisMaster 172.16.0.4 6379
28048:X 16 Aug 10:16:58.795 * +slave-reconf-sent slave 172.16.0.4:6380 172.16.0.4 6380 @ redisMaster 172.16.0.4 6379
28048:X 16 Aug 10:16:59.776 * +slave-reconf-inprog slave 172.16.0.4:6380 172.16.0.4 6380 @ redisMaster 172.16.0.4 63
28048:X 16 Aug 10:17:00.786 * +slave-reconf-done slave 172.16.0.4:6380 172.16.0.4 6380 @ redisMaster 172.16.0.4 6379
28048:X 16 Aug 10:17:00.886 # +failover-end master redisMaster 172.16.0.4 6379
28048:X 16 Aug 10:17:00.887 # +switch-master redisMaster 172.16.0.4 6379 172.16.0.4 6381 #切換6381為主
28048:X 16 Aug 10:17:00.887 * +slave slave 172.16.0.4:6380 172.16.0.4 6380 @ redisMaster 172.16.0.4 6381
28048:X 16 Aug 10:17:00.887 * +slave slave 172.16.0.4:6379 172.16.0.4 6379 @ redisMaster 172.16.0.4 6381
28048:X 16 Aug 10:17:10.923 # +sdown slave 172.16.0.4:6379 172.16.0.4 6379 @ redisMaster 172.16.0.4 6381
6、如何確認6381為主,並加入6380為從
[root@instance-m4p7hj0t ~]# /roobo/server/redis/bin/redis-cli -h 172.16.0.4 -p 6381
172.16.0.4:6381> info replication
# Replication
role:master #當前6381為主
connected_slaves:1
slave0:ip=172.16.0.4,port=6380,state=online,offset=1998,lag=0 #6380為從
master_repl_offset:1998
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:1997
7、修改6379,再把他加為6381的從
#啟動6379服務
[root@instance-m4p7hj0t ~]# /roobo/server/redis/bin/redis-server /roobo/server/redis/6379/6379.conf
#登錄6379
[root@instance-m4p7hj0t ~]# /roobo/server/redis/bin/redis-cli -h 172.16.0.4 -p 6379
#加到6381為從
172.16.0.4:6379> slaveof 172.16.0.4 6381
OK
8、查看6381是否,加入6379和8380為從
[root@instance-m4p7hj0t ~]# /roobo/server/redis/bin/redis-cli -h 172.16.0.4 -p 6381
172.16.0.4:6381> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=172.16.0.4,port=6380,state=online,offset=11173,lag=1
slave1:ip=172.16.0.4,port=6379,state=online,offset=11173,lag=1
master_repl_offset:11173
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:11172
172.16.0.4:6381> exit
這樣就實現了,6379為主,宕機自動切換到6381為主,再掛載6380和6379為從的全部過程。
參考:
一主多從模式和主從從架構
https://blog.csdn.net/RobertoHuang/article/details/70766809
redis3.2.8 sentinel模式一主兩從高可用環境搭建測試
https://blog.csdn.net/busbanana/article/details/71213812
redis集群模式 (集群三主三從模式)
https://blog.csdn.net/varyall/article/details/78856450
