Redis支持一個(gè)master服務(wù)器對多個(gè)slave服務(wù)器同步,同步使用發(fā)布/訂閱機(jī)制。
1個(gè)master對多個(gè)slave,還可以進(jìn)行分層,每個(gè)slave下可以再同步slave,擴(kuò)展成樹狀結(jié)構(gòu)。
Redis默認(rèn)的端口是6379,我們?yōu)榱瞬挥绊懺蠷edis,使用新的端口
master 配置 redis_master.conf
port 6300requirepass 123456masterauth 123456daemonize yes
slave1 配置 redis_slave1.conf 設(shè)為master的slave
port 6301slaveof 127.0.0.1 6300requirepass 123456masterauth 123456daemonize yes
slave2 配置 redis_slave2.conf 設(shè)為master的slave
port 6302slaveof 127.0.0.1 6300requirepass 123456masterauth 123456daemonize yes
daemonize 表示后臺啟動。
requirepass 為主機(jī)認(rèn)證密碼。
masterauth 為從機(jī)訪問主機(jī)驗(yàn)證密碼,需要與主機(jī)的requirepass一致。
因后面需要演示主從切換,因此三組conf的驗(yàn)證密碼都一致。
依次啟動master, slave1, slave2
redis-server redis_master.confredis-server redis_slave1.confredis-server redis_slave2.conf
執(zhí)行后查看是否啟動成功
ps aux|grep redisroot 1858 Ss 3:55 0:00.01 redis-server *:6302 root 1849 Ss 3:54 0:00.01 redis-server *:6301 root 1842 Ss 3:54 0:00.02 redis-server *:6300
進(jìn)入master,設(shè)置key abc的值為123
redis-cli -p 6300127.0.0.1:6300 auth 123456OK127.0.0.1:6300 set abc 123OK127.0.0.1:6300 get abc 123
分別進(jìn)入slave1, slave2檢查是否同步數(shù)據(jù)
slave1:
redis-cli -p 6301127.0.0.1:6301 auth 123456OK127.0.0.1:6301 get abc 123 127.0.0.1:6301
slave2:
redis-cli -p 6302127.0.0.1:6302 auth 123456OK127.0.0.1:6302 get abc 123 127.0.0.1:6302
進(jìn)入master修改key abc的值為456
127.0.0.1:6300 set abc 456OK127.0.0.1:6300 get abc 456
檢查slave1, slave2是否同步
slave1:
127.0.0.1:6301 get abc 456
slave2:
127.0.0.1:6302 get abc 456Redis主從切換
在運(yùn)行過程中,如果master出現(xiàn)問題,我們可以通過設(shè)置,把另一臺slave機(jī)自動設(shè)為master使用。這里主要用到Redis的sentinel功能來實(shí)現(xiàn)主從切換。
sentinel1.conf
port 26301sentinel monitor master 127.0.0.1 6300 2sentinel auth-pass master 123456logfile /tmp/sentinel.log daemonize yes
sentinel2.conf
port 26302sentinel monitor master 127.0.0.1 6300 2sentinel auth-pass master 123456logfile /tmp/sentinel.log daemonize yes
sentinel monitor master 127.0.0.1 6300 2 中的 2 表示有2個(gè)以上的sentinel服務(wù)檢測到master失效,才會執(zhí)行主從切換。
啟動兩個(gè)sentinel進(jìn)程
redis-server sentinel1.conf --sentinelredis-server sentinel2.conf --sentinelps aux|grep redisroot 2643 Ss 4:28 0:00.02 redis-server *:26302 [sentinel] root 2636 Ss 4:28 0:00.02 redis-server *:26301 [sentinel]
Redis日志可以看到,啟動成功開始監(jiān)控
Running mode=sentinel, port=26301.Sentinel ID is 3a23343948cd7f26662ccba1d01b92955311ef52+monitor master master 127.0.0.1 6300 quorum 2+slave slave 127.0.0.1:6301 127.0.0.1 6301 @ master 127.0.0.1 6300+slave slave 127.0.0.1:6302 127.0.0.1 6302 @ master 127.0.0.1 6300Running mode=sentinel, port=26302.Sentinel ID is ce0ee2af6b454205a3e475763945f505a10a7d6a+monitor master master 127.0.0.1 6300 quorum 2+slave slave 127.0.0.1:6301 127.0.0.1 6301 @ master 127.0.0.1 6300+slave slave 127.0.0.1:6302 127.0.0.1 6302 @ master 127.0.0.1 6300+sentinel sentinel 3a23343948cd7f26662ccba1d01b92955311ef52 127.0.0.1 26301 @ master 127.0.0.1 6300+sentinel sentinel ce0ee2af6b454205a3e475763945f505a10a7d6a 127.0.0.1 26302 @ master 127.0.0.1 6300
終止master,測試主從切換
kill master進(jìn)程后,sentinel判斷master失效,執(zhí)行主從切換處理。
日志如下:
+failover-state-reconf-slaves master master 127.0.0.1 6300+slave-reconf-sent slave 127.0.0.1:6301 127.0.0.1 6301 @ master 127.0.0.1 6300+config-update-from sentinel 3a23343948cd7f26662ccba1d01b92955311ef52 127.0.0.1 26301 +switch-master master 127.0.0.1 6300 127.0.0.1 6302+slave slave 127.0.0.1:6301 127.0.0.1 6301 @ master 127.0.0.1 6302+slave slave 127.0.0.1:6300 127.0.0.1 6300 @ master 127.0.0.1 6302-odown master master 127.0.0.1 6300+slave-reconf-inprog slave 127.0.0.1:6301 127.0.0.1 6301 @ master 127.0.0.1 6300+slave-reconf-done slave 127.0.0.1:6301 127.0.0.1 6301 @ master 127.0.0.1 6300+failover-end master master 127.0.0.1 6300+switch-master master 127.0.0.1 6300 127.0.0.1 6302+convert-to-slave slave 127.0.0.1:6300 127.0.0.1 6300 @ master 127.0.0.1 6302
從日志可以看出,主從切換執(zhí)行了以下操作:
1.將slave2切換為新的master,redis_slave2.conf 中的 slaveof 127.0.0.1 6300 被自動刪除。
2.將redis_slave1.conf的 slaveof 127.0.0.1 6300 自動更新為 slaveof 127.0.0.1 6302,使用slave2作為新的master。
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時(shí)間聯(lián)系我們修改或刪除,多謝。
新聞熱點(diǎn)
疑難解答
圖片精選