redis主從搭建+哨兵(docker):
"""推薦使用國內daocloud鏡像,鏡像地址:daocloud.io/library/"""
1. # 拉取鏡像
docker pull daocloud.io/library/redis:latest
2. # 使用docker啓動3個redis容器服務,分別使用到6379、6380、6381端口
docker run --name redis6379 -p 6379:6379 -d daocloud.io/library/redis --appendonly yes
docker run --name redis6380 -p 6380:6379 -d daocloud.io/library/redis --appendonly yes
docker run --name redis6381 -p 6381:6379 -d daocloud.io/library/redis --appendonly yes
3. # 查看3個容器的IP
docker inspect --format='{{.NetworkSettings.IPAddress}}' redis6379
docker inspect --format='{{.NetworkSettings.IPAddress}}' redis6380
docker inspect --format='{{.NetworkSettings.IPAddress}}' redis6381
172.17.0.4 redis6379 # master
172.17.0.5 redis6380 # slave1
172.17.0.6 redis6381 # slave2
4. #進入docker容器內部, 使用redis-cli命令修改 redis6380、redis6381 的主機爲 172.17.0.4:6379
docker exec -ti 容器id /bin/bash # 進入docker容器內部
redis-cli
SLAVEOF 172.17.0.4 6379
5. # 查看redis6379是否已經擁有2個從機:
127.0.0.1:6379> info replication
role:maste
connected_slaves:2
slave0:ip=172.17.0.6,port=6379,state=online,offset=224,lag=0
slave1:ip=172.17.0.5,port=6379,state=online,offset=224,lag=1
master_replid:e65a5e233e9caa53a3e2d1d17e3622be2bc70de9
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:224
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:224
# 哨兵
1. 接下來直接進入3臺redis容器內部進行配置。
docker exec -ti 容器id /bin/bash # 進入docker容器內部
2. 進入根目錄創建 sentinel.conf 文件
cd / && touch sentinel.conf
3. 修改文件內容爲, 每一臺配置完全一樣:
sentinel monitor mymaster 172.17.0.4 6379 1
4. 最後,啓動Redis哨兵:
使用 "redis-sentinel /sentinel.conf &" 啓動Redis哨兵監控
使用 "ps -ef |grep redis" 命令,可以看到redis-server和redis-sentinel正在運行
5. 驗證哨兵機制下的自動主從切換
我們將主 redis6379 進程kill掉。 # 停止redis6379容器
稍等幾秒鐘後,就有另外一臺從升級爲主機,實驗時是 redis6380 升級爲了主。 # 切換過程有點慢,大公司不能容忍,必須要cluster集羣。
用info命令查詢可以看到 redis6380 服務器的角色變成的master。說明自動主從切換成功。
然後重新啓動之前被kill掉的 主 redis6379 服務器,啓動後用info命令查看,可以發現其變成了 redis6380 的從服務器。