運維學習(四)Docker環境下搭建Redis集羣——RedisCluster實現

一、關於Redis集羣需知的點

1.1 Redis的集羣方案

Redis目前的集羣方案有以下幾種:

1.RedisCluster:官方推薦,沒有中心節點

2.Codis:中間件產品,存在中心節點

3.Twemproxy:中間件產品,存在中心節點

帶中心節點的解決方案都存在中心節點掛掉後,Redis集羣失效的問題。

因此這裏將採用RedisCluster來實現。

 

1.2 RedisCluster的特點:

無中心節點,客戶端與redis節點直連,不需要中間代理層。

數據可以被分片存儲

管理方便,後續可自行增加或摘除節點。

 

1.3 Redis集羣高可用要注意的點

  • Reids集羣中應該包含奇數個Master(主),至少應該有3個Master。(因爲Redis集羣和PXC集羣都有選舉機制,當集羣中超過一半以上的節點掛掉,剩餘節點無法進行選舉,組成新的集羣)
  • Redis集羣中每個Master都應該有Slave(從)

redis集羣架構圖:

 

二、搭建Redis集羣

2.1 創建多臺Redis容器

拉取redis鏡像:

docker pull yyyyttttwwww/redis

這個鏡像是已經封裝了ruby環境供搭建集羣使用的,如果下載純淨版的redis鏡像需自行安裝環境。

 

對鏡像進行重命名:

docker tag yyyyttttwwww/redis redis

 

docker創建網段net2供Redis集羣使用:

docker network create --subnet=172.19.0.0/16 net2 

創建redis容器r1:

docker run -it -d --name r1 -p 5001:6379 --net=net2 --ip 172.19.0.2 redis bash

進入該容器:

docker exec -it r1 bash

 

有了redis容器還需要去修改reids的配置文件/usr/redis/redis.conf,因爲Redis是默認關閉RedisCluster這樣集羣的功能的,

只有修改了配置文件,redis纔可以加入到集羣裏。

搜索該配置文件,將如下這些配置項改爲如下配置:

 

在容器內啓動redis服務:

cd /usr/redis/src                        # 進入redis啓動程序所在目錄

./redis-server ../redis.conf         # redis-server是redis的啓動程序。指定配置文件啓動redis。

 

redis的第一個節點已經正常啓動,之後還需依次創建餘下5個redis容器,如上面的架構圖,一共需要6個redis節點:

之後就是如r1內的配置reids和啓動redis, 啓動所有redis容器內的redis服務。

 

2.2 搭建RedisCluster集羣

Redis自帶了創建集羣的工具redis-trib,redis-trib是基於Ruby的Redis集羣命令行工具,通過它可以創建出RedisCluster集羣。

但是通過它創建需要很多指令,可以使用寫好的腳本redis-trib.rb來創建。

 

在非官方的redis鏡像yyyyttttwwww/redis中已經安裝好了Ruby環境以及redis-trib.rb腳本。

按照以下指令,利用redis-trib.rb腳本來創建RedisCluster集羣即可:

 

2.3 進行測試

在r1容器中啓動redis的客戶端進行測試

/usr/redis/src/redis-cli -c       啓動redis客戶端

可以看到,在經過內部計算後,將a-10的鍵值對存到172.19.0.4這個r3節點中了,也就是架構圖中的第三臺Master。

 

那麼如果r3停掉了,應該由其slave節點接替master工作,是否是這樣呢?

執行指令:

docker pause r3    停止r3容器

docker exec -it r1 bash    進入r1容器內

/usr/redis/src/redis-cli -c             啓動redis客戶端

cluster nodes                 查看redis集羣各個節點狀態

從上圖可以看到172.19.0.4 這個master節點已經掛掉了。而原先的172.19.0.7對應的節點已經升級成爲新的master。

再次嘗試獲取數據,發現果然已經由172.19.0.7對應的節點接替了原本的master做操作:

 

如果讓r3恢復運行,這個節點是什麼狀態呢?

可以發現r3這個節點已經變成了slave。

到這裏通過RedisCluster搭建高可用的redis集羣就完成了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章