1. 程式人生 > >docker容器安裝配置redis叢集

docker容器安裝配置redis叢集

最近想用docker容器製作一個redis叢集的映象,以免每次都要重新配置搭建。正好在github上發現一個已有的製作docker-redis-cluster的專案,感覺挺好用的,這裡推薦給大家:https://github.com/eloycoto/docker-redis-cluster

製作生成的docker-redis-cluster容器裡面有8個redis例項,其中6個例項構成3主3從的redis叢集(構成redis叢集至少需要3個主),使用的埠為7000至7005;另外兩個例項則是與redis叢集沒有關係的獨立執行的,以供非叢集模式的使用需求,使用的埠是7006和7007。

redis單例項的配置這裡就不多做說明,下面只對redis叢集的配置做下說明。

1 構成redis叢集的例項配置

#指定埠
port 7000
#設定叢集可用
cluster-enabled yes
#指定叢集生成的配置檔名。注意,這個配置檔案不是人為編輯的,是叢集在執行中自動生成的,記錄著叢集中其他節點、狀態資訊、變數等配置資訊,以便在啟動的時候能重讀到
cluster-config-file nodes.conf
#設定節點最大不可達時間,單位為毫秒。當主節點不可達時間超過這個設定時間,其對應的從節點將替換成為主節點;當一個節點在這個設定時間內不能訪問到大多數主節點,將停止接收請求
cluster-node-timeout 5000
#設定為aop模式
appendonly yes
#設定根目錄。即上面cluster-config-file引數指定的配置檔案將放在這個目錄下
dir /redis-data/7000 #設定槽是否需要全覆蓋。預設yes情況下,只要16384個槽沒有被全覆蓋,整個叢集就停止服務。設定no之後,只要還有部分key都繼續提供查詢處理 cluster-require-full-coverage no

將上面7000埠例項的配置再拷貝5份,並修改埠為7001到7005就完成了構成叢集的6個節點例項的配置。

2 redis叢集的啟動

1) 通常redis叢集的啟動方法
首先,將構成叢集需要的各redis例項啟動起來:

#例項啟動命令如下
redis-server /redis-conf/7000/redis.conf

此時,redis例項之間還並沒有構成叢集。

然後,使用redis-trib叢集管理工具(此工具依賴Ruby和RubyGems,以及redis擴充套件)來建立redis叢集:

./redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005

這裡使用的是create命令,選項–replicas 1的意思是對每個主節點生成一個副本,再後面跟的一串引數是構成叢集各例項的ip和埠。這個命令執行之後,redis-trib會出現一個叢集配置的提示資訊,輸入yes後才繼續向下執行。這個過程中,節點之間會相互通訊,叢集會被配置組建,並在節點之間分配槽位。當配置完成之後,會出現下面的資訊:

[OK] All 16384 slots covered

2) docker-redis-cluster容器中redis叢集的啟動方法
容器中使用的是supervisord來配置啟動各redis例項的,詳細可參考supervisord.conf

redis叢集的建立和使用,可以在start.sh指令碼中看到。由於redis-trib在建立叢集過程中會提示需要輸入的互動介面,所以這裡使用echo命令通過管道將yes傳給redis-trib:

echo "yes" | ruby /redis/src/redis-trib.rb create --replicas 1 ${IP}:7000 ${IP}:7001 ${IP}:7002 ${IP}:7003 ${IP}:7004 ${IP}:7005

最後說一下容器的使用方法,可以使用類似如下命令執行:

docker run -d -p 7000:7000 -p 7001:7001 -p 7002:7002 -p 7003:7003 -p 7004:7004 -p 7005:7005 -p 7006:7006 -p 7007:7007 docker-redis-cluster