網站的訪問量慢慢上來了。為了網站的性能方面,開始用了redis做緩存策略。剛開始的時候,redis是一個單點,當一台機器岩機的時候,redis的 服務完全停止,這時就會影響其他服務的正常運行。費話不多說了,下面利用redis sentinel做一個主從切換的集群管理。做這個集群管理的時候,查過很多資料才完全了解,他是怎么做的。
java 客戶端請看:
http://blog.mkfree.com/posts/52b146e6479e5a64742fddd0
參考資料:http://redis.io/topics/sentinel 我也是看這篇文章。
環境配置:
由於我這次配置沒有太多的機器,我用了vagrant 去開了多台虛擬機。然后搭好了環境。
redis的安裝請參考:redis 簡單官方腳本安裝方法(linux)
集群配置最少需要三台機器,那么我就三台虛擬機,三台虛擬機分別安裝同樣的redis的環境
ip分別:
- 192.168.9.17 (redis sentinel 集群監控)
- 192.168.9.18 (redis 主)
- 192.168.9.19 (redis 從)
redis配置:
主的redis配置文件,使用默認的配置文件就可以了,如果你需要設計其他參數
從的redis配置文件,添加
#從的redis配置文件,需要添加 vim /etc/redis/6379.conf slaveof 192.168.9.18 6379
啟動主從redis
#啟動主redis(192.168.9.18) /etc/init.d/redis_6379.conf start #啟動從redis(192.168.9.19) /etc/init.d/redis_6379.conf start
查看主redis信息
#查看主redis的信息 redis-cli -h 192.168.9.18 info Replication # Replication role:master #代表192.168.9.18:6379 這台redis是主 connected_slaves:1 slave0:192.168.9.18,6379,online
查看從redis信息
#查看主redis的信息 redis-cli -h 192.168.9.19 info Replication # Replication role:slave #代表192.168.9.18:6379 這台redis是主 master_host:192.168.9.18 master_port:6379 master_link_status:up master_last_io_seconds_ago:4 master_sync_in_progress:0 slave_priority:100 slave_read_only:1 connected_slaves:0
配置redis sentinel集群監控服務 1.添加一份redis sentinel 配置文件
vim /etc/redis/sentinel.conf ##redis-0 ##sentinel實例之間的通訊端口 port 26379 #master1 sentinel monitor master1 192.168.9.18 6379 1 sentinel down-after-milliseconds master1 5000 sentinel failover-timeout master1 900000 sentinel can-failover master1 yes sentinel parallel-syncs master1 2 #master2 可以添加多組主從的redis監聽 ... .. ..
2.有配置文件了,那么啟動redis sentinel做redis集群監聽redis-sentinel sentinel.conf --sentinel
好了,所有環境都搭好了。下面開始正式的演示 1.正常演示。
- 把主的redis啟動
- 把從的redis啟動
- 把redis sentinel 集群監聽啟動
觀察redis sentinel 日志信息
這里很清楚地看到,從的redis加入了集群
[4925] 15 Oct 03:42:21.889 * +slave slave 192.168.9.19:6379 192.168.9.19 6379 @ master1 192.168.9.18 6379
執行以下命令,查看redis主從信息
[root@localhost vagrant]# redis-cli -h 192.168.9.17 -p 26379 info Sentinel # Sentinel sentinel_masters:1 sentinel_tilt:0 sentinel_running_scripts:0 sentinel_scripts_queue_length:0 master0:name=master1,status=ok,address=192.168.9.18:6379,slaves=1,sentinels=1
那么表示一切都正常了。你的redis sentinel集群已經配置成功!
2.故障演示
2.1當主的redis 服務器岩機了,會發生什么情況呢?
執行以下命令使用主的redis服務停止
redis-cli -h 192.168.9.18 -p 6379 shutdown #表示把192.168.9.18這台redis 關閉
這張圖片很清晰地反應到,redis sentinel 監控到主的redis服務停止,然后自動把從的redis切換到主。
再執行以下命令,查看redis主從信息
[root@localhost vagrant]# redis-cli -h 192.168.33.111 -p 26379 info Sentinel # Sentinel sentinel_masters:1 sentinel_tilt:0 sentinel_running_scripts:0 sentinel_scripts_queue_length:0 master0:name=master1,status=ok,address=192.168.9.19:6379,slaves=1,sentinels=1
2.2 當我們已經發現,一台redis發生故障了,可能會收到一些故障信息,那么再把服務已關閉的redis恢復服務狀態,會發生怎么樣的情況呢?
redis sentinel 集群服務,會把上次主redis重新加入服務中,但是他再以不是主的redis了,變成從的reids。