環境: 主伺服器:192.168.10.10 Centos 7 redis-5.0.4 從伺服器:192.168.10.129 Centos 7 redis-5.0.4 從伺服器:192.168.10.130 Centos 7 redis-5.0.4 關於如何安裝redis不再本文討論範圍內,不過您 ...
環境:
主伺服器:192.168.10.10 Centos 7 redis-5.0.4
從伺服器:192.168.10.129 Centos 7 redis-5.0.4
從伺服器:192.168.10.130 Centos 7 redis-5.0.4
關於如何安裝redis不再本文討論範圍內,不過您可以參考https://www.cnblogs.com/caesar-id/p/10846541.html
1、自定義192.168.10.10主伺服器配置文件
[root@localhost ~]# vim /etc/myredis.conf bind 192.168.10.10 // 綁定本機IP地址 port 9000 // redis埠號 daemonize yes // 設置後臺啟動 pidfile /var/log/redis/myredis.pid // 指定redis進程文件位置,為了方便我就放在了日誌文件中,大家自行定義。 loglevel notice // 設置日誌等級 logfile /var/log/redis/myredis.log // 設置日誌文件 dbfilename dump.rdb dir /opt/redis-5.0.4/data/myredis // redis資料庫文件路徑 protected-mode no // 為了方便這裡關閉了安全模式,實際中應開啟次選項
註意:這裡的路徑必須存在,redis沒有智能到幫你把路徑都創建好的,所以你需要自己創建上面所需要的文件路徑。
2、創建配置文件中對應的目錄
[root@localhost ~]# mkdir -p /var/log/redis // redis的日誌文件存放路徑 [root@localhost ~]# mkdir -p /opt/redis-5.0.4/data/myredis // 創建redis的資料庫存儲目錄
到此主伺服器的配置已經算是初步完成。下麵配置從伺服器
3、自定義從伺服器192.168.10.129配置文件
[root@localhost ~]# vim /etc/myredis.conf bind 192.168.10.129 // 綁定本機IP地址 port 9001 // 為了和主伺服器區分這裡使用9001 daemonize yes // 設置後臺啟動 pidfile /var/log/redis/myredis.pid // 指定redis進程文件位置,為了方便我就放在了日誌文件中,大家自行定義。 loglevel notice // 設置日誌等級 logfile /var/log/redis/myredis.log // 設置日誌文件 dbfilename dump.rdb dir /opt/redis-5.0.4/data/myredis // redis資料庫文件路徑 protected-mode no // 為了方便這裡關閉了安全模式,實際中應開啟次選項 slaveof 192.168.10.10 9000 // 主伺服器的IP和埠
4、同樣創建配置文件中對應的路徑
[root@localhost ~]# mkdir -p /var/log/redis // redis的日誌文件存放路徑 [root@localhost ~]# mkdir -p /opt/redis-5.0.4/data/myredis // 創建redis的資料庫存儲目錄
此時從伺服器192.168.10.129配置初步完成,下麵配置從伺服器192.168.10.30。
5、 自定義從伺服器192.168.10.129配置文件
[root@localhost ~]# vim /etc/myredis.conf bind 192.168.10.130 // 綁定本機IP地址 port 9002 // 為了區分這裡使用9002 daemonize yes // 設置後臺啟動 pidfile /var/log/redis/myredis.pid // 指定redis進程文件位置,為了方便我就放在了日誌文件中,大家自行定義。 loglevel notice // 設置日誌等級 logfile /var/log/redis/myredis.log // 設置日誌文件 dbfilename dump.rdb dir /opt/redis-5.0.4/data/myredis // redis資料庫文件路徑 protected-mode no // 為了方便這裡關閉了安全模式,實際中應開啟次選項 slaveof 192.168.10.10 9000 // 主伺服器的IP和埠
6、創建配置文件中對應的路徑
[root@localhost ~]# mkdir -p /var/log/redis // redis的日誌文件存放路徑 [root@localhost ~]# mkdir -p /opt/redis-5.0.4/data/myredis // 創建redis的資料庫存儲目錄
好了主從關係到此算是配置完成,下麵我們進行驗證配置是否正確。
7、驗證主從配置
7.1開啟192.168.10.10主伺服器的redis
[root@localhost ~]# redis-server /etc/myredis.conf
[root@localhost ~]# ps -ef | grep redis
如果你看到上圖說明我們的主伺服器192.168.10.10中的redis已經運行起來了。
7.2開啟192.168.10.129從伺服器的redis
[root@localhost ~]# redis-server /etc/myredis.conf
[root@localhost ~]# ps -ef | grep redis
非常幸運的跑起來了。
7.3開啟192.168.10.130從伺服器的redis
[root@localhost ~]# redis-server /etc/myredis.conf
[root@localhost ~]# ps -ef | grep redis
一切都很順利。
7.4登陸192.168.10.10主伺服器查看主從關係
[root@localhost ~]# redis-cli -p 9000 -h 192.168.10.10
希望你也能看到和上面一樣的信息。
7.5登陸192.168.10.129從伺服器查看主從關係
[root@localhost ~]# redis-cli -p 9001 -h 192.168.10.129
7.6登陸192.168.10.130從伺服器查看主從關係
[root@localhost ~]# redis-cli -p 9001 -h 192.168.10.129
7.7在主伺服器添加一個鍵查看是否會同步到從伺服器
上面雖然是實現了主從複製的功能,但是如果我們的主伺服器突然掛了呢?我們知道從伺服器是只讀的,沒有寫入的許可權。我們來看下殺掉主進程會變成什麼樣子。
8、刪掉主伺服器192.168.10.10的redis
9、查看從伺服器狀態
上面的結果我確信並不是我們想要的,我們想要的是主伺服器在突發情況下down後,有一臺從伺服器能夠代替主伺服器繼續工作。
這裡有兩種解決方案:
- 我們手動指定一臺從伺服器為主伺服器。
- 通過哨兵實現自動在從伺服器中選舉出一個主伺服器。
1、手動指定192.168.10.129為主伺服器(關閉伺服器的從伺服器的角色)
[root@localhost ~]# redis-cli -p 9001 -h 192.168.10.129 192.168.10.129:9001> slaveof no one // 關閉從伺服器角色
1.1、在192.168.10.130從伺服器中指定主伺服器是192.168.10.129
[root@localhost ~]# redis-cli -p 9002 -h 192.168.10.130 192.168.10.130:9002> slaveof no one // 關閉從伺服器角色 192.168.10.130:9002> slaveof 192.168.10.129 9001 // 指定主伺服器是192.168.10.129
1.2、最終查看配置如下
也許你會認為這種方式很low並且不智能,我也認為你說的是對的。
在進行下麵哨兵選舉前,請先把192.168.10.10,192.168.10.129和192.168.10.130的配置文件調整為初始狀態。因為上面已經指定了192.168.10.129為主伺服器,
192.168.10.130是192.168.10.129的從伺服器,192.168.10.10是一臺單獨的主伺服器,你也可以把192.168.10.10調整為192.168.10.129的從伺服器。不過這樣你就會和我下麵做的不太一樣了。但無論怎樣,調整好配置文件,重新啟動主/從伺服器的redis在進行下麵的操作。
2、通過哨兵選舉,在從伺服器中選擇一個從伺服器作為主伺服器。
2.1先停止所有主、從伺服器的redis
[root@localhost ~]# pkill -9 redis
·2.2在主伺服器192.168.10.10中添加哨兵的配置文件
[root@localhost ~]# vim /etc/myredis-sentinel.conf bind 192.168.10.10 // 綁定本機地址 port 9500 // 哨兵埠 dir "/opt/redis-5.0.4/data/myredis-sentinel" // 哨兵工作目錄 logfile "/var/log/redis/mysentinel.log" // 哨兵日誌文件位置 daemonize yes // 開啟守護進程 protected-mode no // 關閉安全模式
sentinel monitor myredis 192.168.10.10 9000 2 // myredis是主節點的別名,後面是主節點的IP地址及主節點redis的埠號,數字2表示判斷主節點是否down需要最少2個哨兵進行確認
sentinel down-after-milliseconds myredis 30000 // 每個哨兵會定期發送ping確認主節點是否可以連接,如果在3000毫秒沒有回覆,就認為主節點不可達。
sentinel parallel-syncs myredis 1 // 當多個哨兵都認為主節點不可達時,主節點哨兵會做故障轉移。並選出一個新的主節點。這個數字越小故障轉移就越慢,但如果越大會導致多個從節點同時向新主機節點複製數據,導致數據不可用。
sentinel failover-timeout myredis 180000 // 故障轉移超時時間。
2.3創建哨兵的工作目錄
[root@localhost ~]# mkdir -p /opt/redis-5.0.4/data/myredis-sentinel
2.4添加從伺服器192.168.10.129的哨兵配置文件
[root@localhost ~]# vim /etc/myredis-sentinel.con bind 192.168.10.129 // 綁定本機地址 port 9501 // 哨兵的埠號 dir "/opt/redis-5.0.4/data/myredis-sentinel" // 哨兵工作目錄 logfile "/var/log/redis/mysentinel.log" // 哨兵日誌目錄 daemonize yes // 開啟守護進程 protected-mode no // 關閉安全模式
sentinel monitor myredis 192.168.10.10 9000 2 // myredis是主節點的別名,後面是主節點的IP地址及主節點redis的埠號,數字2表示判斷主節點是否down需要最少2個哨兵進行確認
sentinel down-after-milliseconds myredis 30000 // 每個哨兵會定期發送ping確認主節點是否可以連接,如果在3000毫秒沒有回覆,就認為主節點不可達。
sentinel parallel-syncs myredis 1 // 當多個哨兵都認為主節點不可達時,主節點哨兵會做故障轉移。並選出一個新的主節點。這個數字越小故障轉移就越慢,但如果越大會導致多個從節點同時向新主機節點複製數據,導致數據不可用。
sentinel failover-timeout myredis 180000 // 故障轉移超時時間。
2.5創建哨兵的工作目錄
[root@localhost ~]# mkdir -p /opt/redis-5.0.4/data/myredis-sentinel
2.6添加從伺服器192.168.10.130的哨兵配置文件
[root@localhost ~]# vim /etc/myredis-sentinel.conf bind 192.168.10.130 // 綁定本機地址 port 9502 // 哨兵埠號 dir "/opt/redis-5.0.4/data/myredis-sentinel" // 哨兵工作目錄 logfile "/var/log/redis/mysentinel.log" // 哨兵日誌目錄 daemonize yes // 開啟守護進程 protected-mode no // 關閉安全模式
sentinel monitor myredis 192.168.10.10 9000 2 // myredis是主節點的別名,後面是主節點的IP地址及主節點redis的埠號,數字2表示判斷主節點是否down需要最少2個哨兵進行確認
sentinel down-after-milliseconds myredis 30000 // 每個哨兵會定期發送ping確認主節點是否可以連接,如果在3000毫秒沒有回覆,就認為主節點不可達。
sentinel parallel-syncs myredis 1 // 當多個哨兵都認為主節點不可達時,主節點哨兵會做故障轉移。並選出一個新的主節點。這個數字越小故障轉移就越慢,但如果越大會導致多個從節點同時向新主機節點複製數據,導致數據不可用。
sentinel failover-timeout myredis 180000 // 故障轉移超時時間。
2.7創建哨兵的工作目錄
[root@localhost ~]# mkdir -p /opt/redis-5.0.4/data/myredis-sentinel
2.8開啟主/從伺服器的redis服務
[root@localhost ~]# redis-server /etc/myredis.conf
2.9查看主從關係
由上圖可知,redis的主從關係正常。
2.10.1開啟主/從哨兵服務
[root@localhost ~]# redis-sentinel /etc/myredis-sentinel.conf
2.10.2查看哨兵當前狀態
[root@localhost ~]# redis-cli -p 9500 -h 192.168.10.10 info sentinel // 查看主伺服器的哨兵(在主伺服器192.168.10.10) [root@localhost ~]# redis-cli -p 9501 -h 192.168.10.129 info sentinel // 查看從伺服器的哨兵(在從伺服器192.168.10.129) [root@localhost ~]# redis-cli -p 9502 -h 192.168.10.130 info sentinel // 查看從伺服器的哨兵(在從伺服器192.168.10.130)
2.10.3殺掉主伺服器192.168.10.10的redis服務,查看哨兵是否會在從伺服器中選舉出一臺主伺服器。
[root@localhost ~]# ps -ef | grep redis // 查看redis的進程號 [root@localhost ~]# kill -9 6483 // 根據redis的進程id殺掉它
殺掉主伺服器後查看兩個從伺服器的狀態
發現兩台從伺服器都已經檢測到主伺服器192.168.10.10的redis已經無法連接,我們稍等片刻,在來看看我們的哨兵是否盡職盡責,為我們自動選舉出一臺主伺服器。
好了哨兵值守就演示到這裡吧。