天天看點

redis高可用、哨兵模式docker環境下部署

本次搭建的結構為:

1個master,2個slave

哨兵 sentinel 也運作在這三個容器中

第一步定制鏡像

定制鏡像隻是為了後面使用起來更友善

首先運作一個redis容器

docker run --name redis-A -p 6379:6379 -d redis --port 6379
           

使用 docker ps 指令可以看到容器已經運作

然後運作

docker exec -it redis-A /bin/bash
           

進入容器開始定制我們的redis鏡像,主要是指容器中哨兵的配置.

我使用的是建立一個腳本來啟動 sentinel

touch start-sentinel.sh
           
使用vim 編輯腳本。這個容器中還要安裝vim
echo "deb http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse" >>/etc/apt/sources.list
echo "deb http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse" >>/etc/apt/sources.list
echo "deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse" >>/etc/apt/sources.list
echo "deb http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse" >>/etc/apt/sources.list
echo "deb http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse" >>/etc/apt/sources.list
echo "deb-src http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse" >>/etc/apt/sources.list
echo "deb-src http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse" >>/etc/apt/sources.list
echo "deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse" >>/etc/apt/sources.list
echo "deb-src http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse" >>/etc/apt/sources.list
echo "deb-src http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse" >>/etc/apt/sources.list
#更新安裝源
apt-get update 
#使用強制安裝
apt-get install -f vim
           
編輯腳本:
#!/bin/sh
#master ip
host=$1
#master port
port=$2
#sentinel 端口
sport=$3
#sentinel 端口不設定給
if [ ! -n "$sport" ];then
sport=26379
fi
cd /
#開始寫入配置檔案
echo "sentinel monitor mymaster $host $port 2" >sentinel.conf
echo "port $sport">>sentinel.conf
#啟動哨兵 &可以背景運作
redis-sentinel /sentinel.conf &
           

執行:chmod +x start-sentinel.sh 賦予執行權限

輸入 ps -ef|grep redis 檢視運作情況:

redis高可用、哨兵模式docker環境下部署
到此鏡像定制完畢,重新送出鏡像 以便使用
#先停止容器 
docker stop redis-A  
#将容器commit成為一個鏡像  
docker commit redis-A redis-a  
#運作容器 
docker run -p 8080:8080 -p 8081:8081 -v /home/data/:/home/data/ -dt newImageB
           
redis高可用、哨兵模式docker環境下部署
docker images指令就可以看到剛剛送出的鏡像

第二步 建立節點

使用我們定制的容器開始建立3個節點
docker run --name redis-node1 -p 7000:7000 -p 27000:27000 -d redis-a --port 7000
docker run --name redis-node2 -p 7001:7001 -p 27001:27001 -d redis-a --port 7001
docker run --name redis-node3 -p 7002:7002 -p 27002:27002 -d redis-a --port 7002
           
這裡我一映射了哨兵的端口是為了測試spring 內建redis(随後會寫)
#先檢視三個節點對應的ip位址
docker inspect redis-node1
#我的是
#172.17.0.4 7000
#172.17.0.5 7001
#172.17.0.6 7002
#進入node2,node3 分别設定SLAVE
docker exec -it redis-node2 /bin/bash
redis-cli -p 7001
SLAVEOF 172.17.0.4 7000
           
redis高可用、哨兵模式docker環境下部署

然後進入node1

可以看到已結連結到兩個從節點

redis高可用、哨兵模式docker環境下部署
最後用腳本分别啟動哨兵
cd /
#哨兵端口已建立容器時輸入為準
./start-sentinel.sh 172.17.0.4 7000 27000
           
可以看到3個哨兵已經啟動。
redis高可用、哨兵模式docker環境下部署
停掉 redis-node1容器 可以看到 重新選舉出了新的master
redis高可用、哨兵模式docker環境下部署
redis高可用、哨兵模式docker環境下部署

作者:websky

連結:https://www.jianshu.com/p/0c6759eba031

腳本列出所有容器對應的名稱,端口,及ip

ps -ef|grep redis

docker inspect -f='{{.Name}} {{.NetworkSettings.IPAddress}} {{.HostConfig.PortBindings}}' $(docker ps -aq)
           

繼續閱讀