2018年3月24日 星期六

複製、硝兵模式 Redis (四)

※複製

好幾台 redis 伺服器,有階級的關係,分成 master 和 slave,slave 下面還可以有 slave

以下創建四個伺服器,關係如下:

將 redis.conf 複製 4 個,然後修改,分別設定不同的 port
###NETWORK###
port 6379~6382

###GENERAL###
daemonize yes
pidfile /var/run/redis_6380.pid
#logfile "6380.log"


###SNAPSHOTTING###
dbfilename dump6380.rdb


port 6381 比其他 port 多做以下的設定
###REPLICATION###
slaveof 127.0.0.1 6379




1.6381 一啟動伺服器會直接是 6379 的 slave,其他必需做 slaveof 的動作才可以




2.還沒下 slaveof 之前,如果 master 已有一些資料,slaveof 之後,連 master 之前的也能取
但如果 slave 本來在 slaveof 之前已有的資料,slaveof 之後會不見,也就是會被 master 整體覆蓋


3.slave 只能讀不能寫,6380是 master,也是 slave,但 info  replication 時,還是顯示 slave,所以也不能寫

4.master 掛掉後,slave還是有值。master 回來後,一切照舊

5.slave掛掉又回來後會變成master,必需重新用 slaveof,除非有在 redis.conf 設定 (如6381)

6.slaveof no one 命令:如果 master 掛了,可以下這個指令,可以變成 master
如 6380 下這個指令會變成 master,脫離了 master,當然值還是存在
此時 6381 還是乖乖的在等 master,可以再 6381 使用 slaveof 連到新的 master (6380)
這時候 6380 有 6381 和 6382
6379 回來後(還是 master),和 6380~6382 一點關係也沒有了



※硝兵模式

master 掛了之後會自動選出新的 master,不用下 slaveof no one

需設定 sentinel.conf
格式:sentinel monitor 被監控的 master 名稱 IP port 超過多少票就是 master
sentinel monitor xxx 127.0.0.1 6379 1
xxx 掛了,誰的票超過1票,就會變成master

redis-sentinel sentinel.conf

master掛了之後,要等約 30 秒左右才會選出新的 master

舊 master 回來後,一開始是 master,過了幾秒後會變 slave

沒有留言:

張貼留言