〇、目標
1.在一台Centos7虛擬機中,以Docker搭建Redis集群(redis版本為5.0.x)。
2.六個節點,三主三從。
〇、准備
1.新建文件夾以放置各個節點的配置文件
2.編寫各節點的配置文件
(1)從官網下載配置文件模板:
使用命令: wget http://download.redis.io/redis-stable/redis.conf -O <文件名>
例如 wget http://download.redis.io/redis-stable/redis.conf -O ./7001/redis7001.conf
(2)修改如下:
#bind 127.0.0.1 #注釋掉
port 700* #6份配置文件,從7001到7006
appendonly yes #允許持久化
cluster-enable yes #開啟集群
cluster-config-file nodes-7001.conf #存放各節點信息,會自動生成該文件
cluster-node-timeout 15000 #節點失效檢測響應的超時時間
#各節點之間通信所用ip、端口與總線端口
cluster-announce-ip 192.168.22.130 #宿主機ip
cluster-announce-port 700* #6份配置文件,cong7001到7006
cluster-announce-bus-port 1700* #6份配置文件,從17001到17006
一、創建Redis鏡像
1.使用外部配置文件在docker中創建redis鏡像
(其他幾個節點鏡像以同樣方式創建,注意修改名稱與路徑):
# 參數說明:
# --restart always (docker啟動時,本鏡像也自動啟動)
# --name <容器名>
# --net <模式> (鏡像的網絡配置,host表示使用本地主機的網絡)
# --privileged <true|false> (權限,true表示擁有root權限)
# -v <本地配置文件映射容器配置文件> -v <本地文件夾掛載到容器文件夾>
# -d (表示以守護進程方式啟動容器)
# redis redis-server <文件名> (啟動redis服務並制定配置文件)
# 注意:使用host模式的-p參數沒用,不必指定
docker run --restart always --name redis-cluster-7001 --net host --privileged=true -v /usr/local/docker/redis-cluster/7001/redis7001.conf:/usr/local/docker/redis-cluster/7001/redis7001.conf -v /usr/local/docker/redis-cluster/7001/data:/usr/local/docker/redis-cluster/7001/data -d redis redis-server /usr/local/docker/redis-cluster/7001/redis7001.conf
2.查看鏡像
三、創建集群
1.進入其中一個鏡像:
2.創建集群
#因為網絡配置是host模式,則 <宿主機ip>:<port> (6個節點)
redis-cli --cluster create 192.168.22.130:7001 192.168.22.130:7002 192.168.22.130:7003 192.168.22.130:7004 192.168.22.130:7005 192.168.22.130:7006 --cluster-replicas 1
3.測試
#進入其中一個節點
redis-cli -c -p 7001
#查看集群信息
cluster nodes
四、注意
1.ruby
在Redis5.0.x已經不使用ruby和redis-trib.rb創建集群了
2.創建集群過程中中斷
再次創建時,會顯示[ERR] Node <ip>:<port> is not empty .......
解決方法是刪除鏡像,重新創建鏡像:
#停止鏡像 docker stop <鏡像名或鏡像id> #刪除鏡像 #docker rm <鏡像名或鏡像id> #重新創建
3.創建集群時一直waiting......
原因可能是節點的網絡配置(ip、端口等)出了問題。注意創建鏡像時要使用--net參數,配置文件內的ip、端口要指定好,以及檢查一下防火牆。
4.redis鏡像的狀態(status)一直顯示restart
使用 docker logs <鏡像名或鏡像id> 命令查看出了什么問題