1. 程式人生 > >Redis採用Sentinel實現主從切換

Redis採用Sentinel實現主從切換

今天研究了一下Sentinel,實現了Redis的主從切換,下面簡單介紹一下。
以下是我使用的兩臺機器,沒有多餘的機器,所以把sentinel部署在了166上面,最好是三臺機器一起測試,效果會更明顯。
master:192.168.11.165 port:20081
slave:192.168.11.166 port:20080
sentinel:192.168.11.166 port:26379

Linux 安裝和配置Redis
一、Redis的安裝
1.Redis下載:wget http://download.redis.io/releases/redis-3.0.3.tar.gz
2.解壓:tar xzf redis-3.0.3.tar.gz
3.cd redis-3.0.3
4.make(編譯)
5.編譯完成進入src目錄下就看到了3個可執行檔案redis-server,redis-benchmark,redis-cli,還有個redis.conf和src同一層
6.拷貝這4個檔案到一個資料夾下,方便redis命令的操作,cp redis-server ../redis/
7.啟動redis服務:./redis-server redis.conf
8.netstat -tunpl | grep 20081
9.登入redis:./redis-cli -h 192.168.11.165 -p 20081 -a test

二、Redis的簡單配置
1.是否設定為守護程序:daemonize no 預設不是
2.繫結的主機地址:bind 127.0.0.1
3.當客戶端閒置多長時間後關閉連線:timeout 300 (如果設定為0表示關閉此設定)
4.日誌級別:Redis總共支援四個級別:debug、verbose、notice、warning,預設為verbose
Debug:記錄很多資訊,用於開發和測試
Varbose:有用的資訊,不像debug會記錄那麼多
Notice:普通的verbose,常用於生產環境
Warning:只有非常重要或者嚴重的資訊會記錄到日誌
5.資料庫數量設定databases:16
6.slaveof 192.168.11.165 20081(僅限於slave,master不需要配置)

Sentinel配置
port:26379
sentinel monitor mymaster 192.168.11.165 20081 1
sentinel auth-pass mymaster test

啟動
首先啟動master,./redis-cli -h 192.168.11.165 -p 20081 -a test
然後是slave,./redis-cli -h 192.168.11.166 -p 20080 -a test
最後是Sentinel,./redis-server ../sentinel.conf –sentinel
可以看到Sentinel上面打印出
18662:X 11 Jan 13:48:16.327 # Sentinel runid is a03d495123bedf371d41308c985127fa086b9541
18662:X 11 Jan 13:48:16.327 # +monitor master mymaster 192.168.11.166 20080 quorum 1
18662:X 11 Jan 13:48:47.487 * +slave slave 192.168.11.166:20080 192.168.11.166 20080 @ mymaster 192.168.11.165 20081
第二行代表監控的master名稱是mymaster,ip地址是192.168.11.165 port是20081
第三行表示加入166這個slave

主從切換
下面我們模仿災難,用命令./redis-cli -h 192.168.11.165 -p 20081 -a test 進入到master客戶端,然後執行shutdown命令使master關閉,看看Sentinel會發生什麼情況,可以看到Sentinel上面打印出

18747:X 11 Jan 13:55:23.204 # +sdown master mymaster 192.168.11.165 20081
18747:X 11 Jan 13:55:23.205 # +odown master mymaster 192.168.11.165 20081 #quorum 1/1
18747:X 11 Jan 13:55:23.205 # +new-epoch 16
18747:X 11 Jan 13:55:23.205 # +try-failover master mymaster 192.168.11.165 20081
18747:X 11 Jan 13:55:23.217 # +vote-for-leader ca166b082f7772e3958cc4284ebc748ce9608884 16
18747:X 11 Jan 13:55:23.217 # +elected-leader master mymaster 192.168.11.165 20081
18747:X 11 Jan 13:55:23.217 # +failover-state-select-slave master mymaster 192.168.11.165 20081
18747:X 11 Jan 13:55:23.277 # +selected-slave slave 192.168.11.166:20080 192.168.11.166 20080 @ mymaster 192.168.11.165 20081
18747:X 11 Jan 13:55:23.277 * +failover-state-send-slaveof-noone slave 192.168.11.166:20080 192.168.11.166 20080 @ mymaster 192.168.11.165 20081
18747:X 11 Jan 13:55:23.354 * +failover-state-wait-promotion slave 192.168.11.166:20080 192.168.11.166 20080 @ mymaster 192.168.11.165 20081
18747:X 11 Jan 13:55:24.272 # +promoted-slave slave 192.168.11.166:20080 192.168.11.166 20080 @ mymaster 192.168.11.165 20081
18747:X 11 Jan 13:55:24.272 # +failover-state-reconf-slaves master mymaster 192.168.11.165 20081
18747:X 11 Jan 13:55:24.334 # +failover-end master mymaster 192.168.11.165 20081
18747:X 11 Jan 13:55:24.334 # +switch-master mymaster 192.168.11.165 20081 192.168.11.166 20080
18747:X 11 Jan 13:55:24.335 * +slave slave 192.168.11.166:20081 192.168.11.166 20081 @ mymaster 192.168.11.166 20080
18747:X 11 Jan 13:55:24.335 * +slave slave 192.168.11.165:20081 192.168.11.165 20081 @ mymaster 192.168.11.166 20080

看到了+switch-master mymaster 192.168.11.165 20081 192.168.11.166 20080這一行了嗎,這就代表它已經自動把166這臺slave轉為了master
這一行18747:X 11 Jan 13:55:24.335 * +slave slave 192.168.11.165:20081 192.168.11.165 20081 @ mymaster 192.168.11.166 20080
表示165變為了slave,那麼真是這樣嗎,我們重新啟動165會怎麼樣呢,用命令./redis-server redis.conf啟動165看看會發生什麼,Sentinel上面打印出了18747:X 11 Jan 13:59:17.417 * +convert-to-slave slave 192.168.11.165:20081 192.168.11.165 20081 @ mymaster 192.168.11.166 20080
進入165客戶端,輸入命令INFO Replication,可以看到

Replication

role:slave
master_host:192.168.11.166
master_port:20080
master_link_status:up
master_last_io_seconds_ago:2
master_sync_in_progress:0
slave_repl_offset:3000
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
確實變為了slave,master_host:192.168.11.166
自此我們已經實現了Redis的主從切換了。