1.準備好4臺機器
192.168.42.150 redis-node1 #主 192.168.42.151 redis-node2 #從 192.168.42.152 redis-node3 #從 192.168.42.153 redis-node4 #從
將主機解析寫入hosts文件,分發至每臺機器
2.安裝redis,配置好基本配置
(1) 4臺機器,分別安裝redis
cd /usr/local/src wget http://192.168.42.26/install_package/down/redis-3.2.3-1.el7.x86_64.rpm yum install redis-3.2.3-1.el7.x86_64.rpm -y
(2) 4臺機分別配置好,配置文件,做好備份
cp /etc/redis.conf{,.back} vim redis.conf daemonize yes bind 192.168.42.150 #改為各個節點的IP
(3) 依照上面設定的從主機,在從主機配置文件中開啟從配置(需要配置3臺機器)
# slaveof <masterip> <masterport> slaveof 192.168.42.150 6379
(4) 啟動redis-server(4臺同時啟動)
redis-server /etc/redis.conf
(5) 在主機器上登錄redis
[root@redis-node1 ~]# redis-cli -h 192.168.42.150 192.168.42.150:6379> 192.168.42.150:6379> keys * 1) "magedu" 192.168.42.150:6379> 192.168.42.150:6379> set ok "verygood!!!" OK 192.168.42.150:6379> get ok "verygood!!!" 192.168.42.150:6379>
登錄其他3臺從服務器
redis-cli -h 192.168.42.151 redis-cli -h 192.168.42.152 redis-cli -h 192.168.42.153
拿153做示例: [root@redis-node4 src]# redis-cli -h 192.168.42.153 192.168.42.153:6379> keys * 1) "magedu" 192.168.42.153:6379> 192.168.42.153:6379> get ok "verygood!!!" 192.168.42.153:6379>
至此為至redis主/從已經實現,在主節點上查看信息
192.168.42.150:6379> INFO Replication # Replication role:master connected_slaves:3 slave0:ip=192.168.42.151,port=6379,state=online,offset=22806,lag=1 slave1:ip=192.168.42.152,port=6379,state=online,offset=22806,lag=1 slave2:ip=192.168.42.153,port=6379,state=online,offset=22806,lag=1 master_repl_offset:22806 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:2 repl_backlog_histlen:22805
接下來在四個結點上配置sentinel,實現故障轉移。此處實現累似于MariaDB的MHA 在上面我們已經配置好主從復制集群,現在我們需要添加一臺機器[192.168.42.154]來做高可用 同樣我們需要設置好,IP,主機名,下載安裝redis
192.168.42.154 redis-sentinel #將主機解析追加至其他的4臺的hosts文件中,本機也需要一份 cd /usr/local/src wget http://192.168.42.26/install_package/down/redis-3.2.3-1.el7.x86_64.rpm yum install redis-3.2.3-1.el7.x86_64.rpm -y
(1)配置sentinel
# sentinel monitor <master-name> <ip> <redis-port> <quorum> #法定人數 cp /etc/redis-sentinel.conf{,.back} vim /etc/redis-sentinel.conf daemonize yes sentinel monitor mymaster 192.168.42.150 6379 1 sentinel down-after-milliseconds mymaster 5000 sentinel failover-timeout mymaster 18000 sentinel auth-pass mymaster centos.123 #這是認證選項,我們這里的主節點并沒有開啟認證
(2)啟動sentinel
redis-sentinel /etc/redis-sentinel.conf
查看端口是否已經啟動
[root@redis-sentinel src]# ss -tnl State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:22 *:* LISTEN 0 100 127.0.0.1:25 *:* LISTEN 0 511 *:26379 *:* LISTEN 0 128 :::22 :::* LISTEN 0 100 ::1:25 :::* LISTEN 0 511 :::26379 :::*
(3)模擬故障:
192.168.42.150:6379 pkill redis #查看 [root@redis-node1 ~]# ss -tnl State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:22 *:* LISTEN 0 100 127.0.0.1:25 *:* LISTEN 0 128 :::22 :::* LISTEN 0 100 ::1:25
(4)查看故障是否轉移
登錄192.168.42.151:6379 #巧了,恰好151變成主了 192.168.42.151:6379> 192.168.42.151:6379> INFO Replication # Replication role:master connected_slaves:2 slave0:ip=192.168.42.153,port=6379,state=online,offset=5413,lag=1 slave1:ip=192.168.42.152,port=6379,state=online,offset=5413,lag=2 master_repl_offset:5413 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:2 repl_backlog_histlen:5412 192.168.42.151:6379> 登錄192.168.42.152:6379查看,的確是151變成主了 192.168.42.152:6379> INFO Replication # Replication role:slave master_host:192.168.42.151 master_port:6379 master_link_status:up master_last_io_seconds_ago:1 master_sync_in_progress:0 slave_repl_offset:11402 slave_priority:100 slave_read_only:1 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 192.168.42.152:6379>
(4)我們再把151的進程殺了,再來看一次,可以看到只有一主一從了
192.168.42.152:6379> INFO Replication # Replication role:master connected_slaves:1 slave0:ip=192.168.42.153,port=6379,state=online,offset=1625,lag=1 master_repl_offset:1768 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:2 repl_backlog_histlen:1767 192.168.42.152:6379>
(5)最后我們將殺死的兩臺redis恢復,再來查看
192.168.42.152:6379> INFO Replication # Replication role:master connected_slaves:3 slave0:ip=192.168.42.153,port=6379,state=online,offset=12763,lag=1 slave1:ip=192.168.42.151,port=6379,state=online,offset=12763,lag=1 slave2:ip=192.168.42.150,port=6379,state=online,offset=12763,lag=0 master_repl_offset:12763 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:2 repl_backlog_histlen:12762 192.168.42.152:6379> 可以看出此時的1主3從又回來了,不過此時主節點,是152 回到150,和151的節點查看效果 192.168.42.150:6379> INFO Replication # Replication role:slave master_host:192.168.42.152 master_port:6379 master_link_status:up master_last_io_seconds_ago:2 master_sync_in_progress:0 slave_repl_offset:23555 slave_priority:100 slave_read_only:1 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 192.168.42.150:6379> 192.168.42.151:6379> INFO Replication # Replication role:slave master_host:192.168.42.152 master_port:6379 master_link_status:up master_last_io_seconds_ago:1 master_sync_in_progress:0 slave_repl_offset:20782 slave_priority:100 slave_read_only:1 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
接下來我們配置有密碼認證的主從和高可用
我們之前在配置sentinel,時還記得 #法定人數嗎,判斷為失效至少需要2個 Sentinel進程的同意,只要同意Sentinel的數量不達標,自動failover就不會執行
sentinel monitor #法定人數
我們現在將154這臺干脆也做成redis的從服務器,而sentinel,是這5臺的集合(150,151,152,153,154)
(1).將153的配置文件推到154一份
scp /etc/redis.conf{,.back} root@192.168.42.154:/etc/ 到154這邊稍微修改一下 vim /etc/redis.conf bind 192.168.42.154
因此這次我們是要做密碼認證的,因此5臺機器都需要加上密碼
(2).我們現在查看之前做了 sentinel后,配置文件系統自動幫我們改了,現在我們要恢復到初始狀態,重新來過
所有的配置文件還需要設置我們的密碼(為了方便管理,我們這里統一設置成magedu) requirepass magedu
所有從節點加上
#masterauth <master-password> masterauth magedu slaveof 192.168.42.150 6379
(3).密碼設置好之后,啟動所有服務
redis-server /etc/redis.conf ss -tnl
登錄150,需要認證了
[root@redis-node1 ~]# redis-cli -h 192.168.42.150 192.168.42.150:6379> keys * (error) NOAUTH Authentication required. [root@redis-node1 ~]# redis-cli -h 192.168.42.150 192.168.42.150:6379> keys * (error) NOAUTH Authentication required. 192.168.42.150:6379> keys * (error) NOAUTH Authentication required. 192.168.42.150:6379> AUTH magedu OK
同樣的,我們需要登錄認證其他機器
再150機器上設置key 192.168.42.150:6379> set zlyc "zai lai yi ci" OK 192.168.42.150:6379> get zlyc "zai lai yi ci" 192.168.42.150:6379> 其他機器讀取OK 192.168.42.151:6379> get zlyc "zai lai yi ci" 192.168.42.151:6379>
原創文章,作者:srayban,如若轉載,請注明出處:http://www.www58058.com/81688
這里有個坑,CentOS7 daemonize 由systemd托管了,所以這里不應該設置為yes,不然一退出終端,redis進程就GG了。