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

本示例基於Centos 7,在阿里雲的三臺機器上部署redis集羣,假設目前使用的帳號爲release,擁有sudo權限。html

因爲Docker官方鏡像下載較慢,能夠開啓阿里雲的Docker鏡像下載加速器,可參考此文進行配置。redis

假設三臺主機的ip分別爲:docker

  • 主機一:192.168.0.1
  • 主機二:192.168.0.2
  • 主機三:192.168.0.3

三臺主機的安裝步驟類似,以主機一爲例:bash

1. 安裝docker服務:服務器

 sudo yum install -y docker

 

2. 啓動docker服務: app

sudo service docker start

 

3. 查找redis鏡像:ui

sudo docker search redis

 

4. 下載官方redis鏡像:阿里雲

sudo  docker pull docker.io/redis

 

5. 下載完後可檢查鏡像:spa

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

主機2、三上也一樣創建掛載目錄和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> 

至此,能夠肯定哨兵模式已啓動成功。

相關文章
相關標籤/搜索