一、docker容器化的redis cluster最難搞的就是網絡問題,這邊記錄一下集羣搭建過程。
二、dockerfile
FROM redis:5.0.14 MAINTAINER xbd RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
三、docker-compose.yml
version: "2" services: xbd-redis-1: build: context: ./ dockerfile: ./config/Dockerfile/Dockerfile-redis image: xbd-redis-1 restart: always container_name: xbd-redis-1 ports: - 6379:6379 - 16379:16379 environment: - TZ=Asia/Shanghai privileged: true command: ['redis-server', '--bind 0.0.0.0', '--protected-mode yes', '--daemonize no', '--requirepass xbd', '--maxmemory 1GB', '--maxmemory-policy allkeys-lru', '--cluster-enabled yes', '--cluster-config-file nodes-6379.conf', '--cluster-node-timeout 15000', '--cluster-replica-validity-factor 10', '--cluster-migration-barrier 1', '--cluster-require-full-coverage yes', '--cluster-replica-no-failover no', '--cluster-announce-ip 192.168.5.14', '--cluster-announce-port 6379', '--cluster-announce-bus-port 16379'] xbd-redis-2: build: context: ./ dockerfile: ./config/Dockerfile/Dockerfile-redis image: xbd-redis-2 restart: always container_name: xbd-redis-2 ports: - 6380:6379 - 16380:16379 environment: - TZ=Asia/Shanghai privileged: true command: ['redis-server', '--bind 0.0.0.0', '--protected-mode yes', '--daemonize no', '--requirepass xbd', '--maxmemory 1GB', '--maxmemory-policy allkeys-lru', '--cluster-enabled yes', '--cluster-config-file nodes-6379.conf', '--cluster-node-timeout 15000', '--cluster-replica-validity-factor 10', '--cluster-migration-barrier 1', '--cluster-require-full-coverage yes', '--cluster-replica-no-failover no', '--cluster-announce-ip 192.168.5.14', '--cluster-announce-port 6380', '--cluster-announce-bus-port 16380'] xbd-redis-3: build: context: ./ dockerfile: ./config/Dockerfile/Dockerfile-redis image: xbd-redis-3 restart: always container_name: xbd-redis-3 ports: - 6381:6379 - 16381:16379 environment: - TZ=Asia/Shanghai privileged: true command: ['redis-server', '--bind 0.0.0.0', '--protected-mode yes', '--daemonize no', '--requirepass xbd', '--maxmemory 1GB', '--maxmemory-policy allkeys-lru', '--cluster-enabled yes', '--cluster-config-file nodes-6379.conf', '--cluster-node-timeout 15000', '--cluster-replica-validity-factor 10', '--cluster-migration-barrier 1', '--cluster-require-full-coverage yes', '--cluster-replica-no-failover no', '--cluster-announce-ip 192.168.5.14', '--cluster-announce-port 6381', '--cluster-announce-bus-port 16381'] xbd-redis-4: build: context: ./ dockerfile: ./config/Dockerfile/Dockerfile-redis image: xbd-redis-4 restart: always container_name: xbd-redis-4 ports: - 6382:6379 - 16382:16379 environment: - TZ=Asia/Shanghai privileged: true command: ['redis-server', '--bind 0.0.0.0', '--protected-mode yes', '--daemonize no', '--requirepass xbd', '--maxmemory 1GB', '--maxmemory-policy allkeys-lru', '--cluster-enabled yes', '--cluster-config-file nodes-6379.conf', '--cluster-node-timeout 15000', '--cluster-replica-validity-factor 10', '--cluster-migration-barrier 1', '--cluster-require-full-coverage yes', '--cluster-replica-no-failover no', '--cluster-announce-ip 192.168.5.14', '--cluster-announce-port 6382', '--cluster-announce-bus-port 16382']
參數說明
# 綁定IP bind 0.0.0.0 # 保護模式 protected-mode yes # docker原因不用守護進程 daemonize no # 認證密碼 requirepass xbd # 最大內存,按實際要求設定 maxmemory 1GB # 內存回收策略 maxmemory-policy allkeys-lru # 集羣開啓 cluster-enabled yes # 節點記錄文件,自動寫入 cluster-config-file nodes-6379.conf # 節點超時時間 cluster-node-timeout 15000 # 故障轉移的超時時間 cluster-replica-validity-factor 10 # 最少副本數量 cluster-migration-barrier 1 # 控制集羣高可用,設置爲yes,則允許在分片不可用或者集羣路由未完全分配的情況下,其他的分片仍然提供服務 cluster-require-full-coverage yes # # 選項設置爲yes時,會阻止replicas嘗試對其master在主故障期間進行故障轉移 # 然而,master仍然可以執行手動故障轉移,如果強制這樣做的話。 cluster-replica-no-failover no # 真實IP,docker時使用 cluster-announce-ip 192.168.5.14 # 端口 cluster-announce-port 6379 # 內部端口 cluster-announce-bus-port 16379'
詳細參數說明:https://www.cnblogs.com/ll409546297/p/16922764.html
四、部署
1)運行docker容器
docker-compose up &
2)手動建立集羣
redis-cli -a xbd --cluster create 192.168.5.14:6379 192.168.5.14:6380 192.168.5.14:6381 192.168.5.14:6382
集羣會出現:
3)集羣查看和確認hash槽
可以確認,集羣已經成功,並且自動分配了hash槽。
3)測試(一定要帶-c,主要聲明集羣模式):
redis-cli -h 192.168.5.14 -p 6379 -a xbd -c
確認自己做了節點遷移,數據存儲和查詢。