redis 主從復制實戰

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

(0)
sraybansrayban
上一篇 2017-07-18
下一篇 2017-07-18

相關推薦

  • vsftpd

    練習:完成vsftpd配置 (1) 禁錮系統用戶于家目錄 [root@node3 ~]# yum -y install vsftpd [root@node3 ~]# vim /etc/vsftpd/vsftpd.conf chroot_local_user=YES &n…

    Linux干貨 2016-10-16
  • N21沉舟第六周作業

    N21沉舟第六周作業 1、  復制/etc/rc.d/rc.sysinit文件至/tmp目錄,將/tmp/rc.sysinit文件中的以至少一個空白字符開頭的行的行首加#; cp /etc/rc.d/rc.sysinit /tmp vim /tmp/rc.sysinit %s/^[[:space:]]\+/#&…

    Linux干貨 2016-08-08
  • Btrfs文件系統

    btrfs文件系統特性: 1、多物理卷支持 Btrfs可由多個底層物理卷組成:支持raid,以聯機添加,移除,修改 2、寫時復制機制(cow) ????復制,更新及替換指針,而非就地更新。在文件進行修改的時候,首先將文件復制一份出來,在復制的文件中進行修改,修改完成后,將指向原有文件的指針指向到修改完成的文件上,若修改完成的文件出現錯誤,則我們可以通過源文件…

    2016-04-10
  • 馬哥教育網絡班21期第7周課程練習

    1、創建一個10G分區,并格式為ext4文件系統;    (1) 要求其block大小為2048, 預留空間百分比為2, 卷標為MYDATA, 默認掛載屬性包含acl;    (2) 掛載至/data/mydata目錄,要求掛載時禁止程序自動運行,且不更新文件的訪問時間戳; [root@centos7study&nbs…

    Linux干貨 2016-08-29
  • vim的簡介與使用

          vi命令是UNIX操作系統和類UNIX操作系統中最通用的全屏幕純文本編輯器。Linux中的vi編輯器叫vim,它是vi的增強版(vi Improved),與vi編輯器完全兼容,而且實現了很多增強功能。      vi編輯器支持編輯模式和命令模式,編輯模式下可…

    Linux干貨 2016-08-15
  • day6總結

    主要內容: useradd與usermod對比 groupadd與groupmod對比 passwd與chage對比 gpasswd與groupmems對比 切換用戶 chown與chgrp用法 一般權限與特殊權限 chmod用法   useradd創建用戶的初始信息存放在/etc/login.defs和/etc//default/useradd文…

    系統運維 2016-08-08

評論列表(1條)

  • PowerMichael
    PowerMichael 2017-07-30 21:11

    這里有個坑,CentOS7 daemonize 由systemd托管了,所以這里不應該設置為yes,不然一退出終端,redis進程就GG了。

欧美性久久久久