本示例基於Centos 7,在阿里雲的三台機器上部署redis集群,假設目前使用的賬號為release,擁有sudo權限。
由於Docker官方鏡像下載較慢,可以開啟阿里雲的Docker鏡像下載加速器,可參考此文進行配置。
假設三台主機的ip分別為:
- 主機一:192.168.0.1
- 主機二:192.168.0.2
- 主機三:192.168.0.3
三台主機的安裝步驟相似,以主機一為例:
1. 安裝docker服務:
sudo yum install -y docker
2. 啟動docker服務:
sudo service docker start
3. 查找redis鏡像:
sudo docker search redis
4. 下載官方redis鏡像:
sudo docker pull docker.io/redis
5. 下載完后可檢查鏡像:
sudo docker images
6. 主機上建立掛載目錄和redis配置文件:
mkdir -p /data/redis_data cd /data/redis_data touch redis.conf vi redis.conf
主機一上的redis.conf配置信息如下:
logfile "redis.log" port 6379 dir /data appendonly yes appendfilename appendonly.aof requirepass 1234
主機二、三上也同樣建立掛載目錄和redis配置文件,其內容稍有不同:
logfile "redis.log" port 6379 dir /data appendonly yes appendfilename appendonly.aof slaveof 192.168.0.1 6389 masterauth 1234 requirepass 1234
配置說明:
- dir:工作目錄
- logfile:日志文件在工作目錄下
- slaveof:指明為主機一的從機
- requirepass:redis客戶端連接的認證密碼,若不需要可不配置
- masterauth:主從redis同步的認證密碼,與連接密碼同,若不需要可不用配置
- appendonly:是否需要持久化,yes為需要
7. 三台主機上都啟動容器:
sudo docker run -p 6379:6379 -v /data/redis_data/:/data --name redis-6379 -d docker.io/redis redis-server redis.conf
命令說明:
- -p 6379:6379 : 將容器的6379端口映射到主機的6379端口
- -v /data/redis_data:/data : 將主機中目錄/data/redis_data掛載到容器的/data
- --name redis-6379: 給出容器名稱
- -d: 后台運行
- docker.io/redis: 鏡像名稱
- redis-server redis.conf: redis的啟動命令,指定配置文件
經過這一步后,三台主機已經建立了主從關系。
8. 查看容器運行情況:
sudo docker ps -a
運行中的容器,其狀態為Up,
若要停止並刪除容器,其命令為:
sudo docker stop 容器id sudo docker rm 容器id
9. 觀察容器內部redis的情況:
sudo docker exec -it 容器id /bin/bash
該命令可進入容器內部,其默認的工作目錄即為/data,再執行redis-cli命令,觀察redis信息:
[release@sh-lbs02 6389-sentinel]$ sudo docker exec -it cac /bin/bash root@cac589144cfd:/data# redis-cli 127.0.0.1:6379> info NOAUTH Authentication required. 127.0.0.1:6379> auth SVKFGKPaFT OK 127.0.0.1:6379> info # Server ... # Replication role:slave master_host:192.168.0.1 master_port:6379 ...
至此,可確認三台主機的主從模式已經建立成功。
10. 主機上建立哨兵目錄和其配置文件:
cd /data/redis_data touch sentinel.conf vi sentinel.conf
三台主機上sentinel.conf的內容相同,如下:
logfile "sentinel.log" sentinel monitor mymaster 192.168.0.1 6379 1 sentinel auth-pass mymaster 1234
配置說明:
- logfile "sentinel.log":輸出日志目錄
- sentinel monitor mymaster 192.168.0.1 6379 1:哨兵監控的主服務器名稱為mymaster,ip為192.168.0.1,端口為6379,將這個主服務器標記為失效至少需要1個哨兵進程的同意
- sentinel auth-pass mymaster 1234 : 哨兵的認證密碼
11. 三台主機上啟動哨兵模式:
sudo docker run -p 26379:26379 -v /data/redis_data/:/data --name redis-26379 -d docker.io/redis redis-sentinel sentinel.conf
命令說明:
- -p 26379:26379 : 將容器的26379端口映射到主機的26379端口
- -v /data/redis_data:/data : 將主機中目錄/data/redis_data掛載到容器的/data
- --name redis-26379: 給出容器名稱
- -d: 后台運行
- docker.io/redis: 鏡像名稱
- redis-sentinel sentinel.conf: sentinel的啟動命令,指定配置文件
經過這一步后,哨兵模式已經建立起來。可通過觀察日志查看啟動情況
12. 觀察容器內哨兵情況:
sudo docker exec -it 容器id /bin/bash
該命令可進入哨兵容器內部,其默認的工作目錄即為/data,再執行redis-cli命令,觀察redis信息:
[release@sh-lbs02 6389-sentinel]$ sudo docker exec -it 25 /bin/bash root@259da4458937:/data# redis-cli -h 127.0.0.1 -p 26379 127.0.0.1:26379> info # Server ... # Sentinel sentinel_masters:1 sentinel_tilt:0 sentinel_running_scripts:0 sentinel_scripts_queue_length:0 sentinel_simulate_failure_flags:0 master0:name=mymaster,status=ok,address=192.168.0.1:6379,slaves=2,sentinels=4 127.0.0.1:26379>
至此,可以確定哨兵模式已啟動成功。