Docker應用系列(一)| 構建Redis哨兵集群


本示例基於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> 

至此,可以確定哨兵模式已啟動成功。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM