Docker 快速搭建主从 + 哨兵监控
程序员文章站
2022-07-04 18:27:35
安装 Redis 执行命令 我的官方群点击此处。 docker pull redis 部署方案 启动三台机器,6379 容器作为主节点,其余作为从节点 开始准备工作 目录结构 ├── conf │ ├── redis_6379.conf │ ├── redis_6380.conf │ ├── red ......
安装 redis
执行命令
我的官方群点击此处。
docker pull redis
部署方案
启动三台机器,6379 容器作为主节点,其余作为从节点
开始准备工作
目录结构
├── conf
│ ├── redis_6379.conf
│ ├── redis_6380.conf
│ ├── redis_6381.conf
│ ├── sentinel_26379.conf
│ ├── sentinel_26380.conf
│ └── sentinel_26381.conf
├── data_6379
│ ├── appendonly.aof
│ └── dump.rdb
├── data_6380
│ └── dump.rdb
├── data_6381
│ └── dump.rdb
└── scripts
├── run.sh
└── sentinel.sh
redis_.conf 配置文件
下载配置文件,具体配置另行调整即可
https://raw.githubusercontent.com/antirez/redis/5.0/redis.conf
sentinel_.conf 配置文件
port 26379
dir "/etc/redis"
sentinel monitor mymaster 172.17.0.2 6379 1
sentinel down-after-milliseconds mymaster 60000
sentinel failover-timeout mymaster 180000
run.sh 启动脚本文件
#!/usr/bin/env bash
set -e
# 脚本当前目录
cpath=$(cd $(dirname "$0") || exit; pwd)
# 根目录
dirpath=$(dirname "$cpath")
# 获取端口
port="$1"
if [[ ! "$port" ]]; then
port=6379
fi
# 创建数据目录
mkdir -p "$dirpath"/data_"$port"
# 删除已启动服务
containerid=$(docker ps -a | grep "redis_$port" | awk -f' ' '{print $1}')
if [[ "$containerid" ]]; then
echo "正在删除服务:${containerid}"
docker rm -f ${containerid} > /dev/null
fi
# 启动服务
docker run -itd --privileged=true -p "$port":6379 --name redis_"$port" \
-v="$dirpath"/conf/redis_"$port".conf:/etc/redis/redis.conf \
-v="$dirpath"/data_"$port":/data \
redis \
redis-server /etc/redis/redis.conf
sentinel.sh 启动脚本文件
#!/usr/bin/env bash
set -e
# 脚本当前目录
cpath=$(cd $(dirname "$0") || exit; pwd)
# 根目录
dirpath=$(dirname "$cpath")
# 设置端口
port=$1
if [[ ! "$port" ]]; then
port=26379
fi
# 删除已启动服务
containerid=$(docker ps -a | grep "sentinel_$port" | awk -f' ' '{print $1}')
if [[ "$containerid" ]]; then
echo "正在删除服务:${containerid}"
docker rm -f ${containerid} > /dev/null
fi
# 启动服务
docker run -itd --privileged=true -p "$port":26379 --name "sentinel_$port" \
-v="${dirpath}/conf/sentinel_${port}.conf":/etc/redis/sentinel.conf \
-w=/etc/redis/ \
redis \
redis-server /etc/redis/sentinel.conf --sentinel
注意
启动 sentinel 服务如果如下错误
1:x 10 may 2020 08:10:48.234 # warning: the tcp backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
1:x 10 may 2020 08:10:48.235 # sentinel config file /etc/redis/sentinel.conf is not writable: permission denied. exiting...
解决方案
- 在 docker run 中增加 ==-w=/etc/redis/==,具体见
sentinel.sh
脚本 - 修改目录权限
docker run -it --rm --privileged=true -v=/root/docker-config/redis/conf/:/etc/redis/ redis chown -r redis /etc/redis
主要语句:==chown -r redis /etc/redis==
查看修改后的权限
root@desktop-q13ei52:~/docker-config/redis# docker run -it --rm --privileged=true -v=/root/docker-config/redis/conf/:/etc/redis/ redis ls -l /etc/redis/
total 204
-rw-r--r-- 1 redis root 61793 may 10 07:41 redis_6379.conf
-rw-r--r-- 1 redis root 61864 may 10 12:52 redis_6380.conf
-rw-r--r-- 1 redis root 61890 may 10 12:52 redis_6381.conf
-rw-r--r-- 1 redis root 459 may 10 12:52 sentinel_26379.conf
-rw-r--r-- 1 redis root 161 may 10 07:56 sentinel_26380.conf
-rw-r--r-- 1 redis root 161 may 10 10:16 sentinel_26381.conf
启动 redis 服务
启动主服务
sh scripts/run.sh 6379
启动从服务
sh scripts/run.sh 6380
sh scripts/run.sh 6381
进入从服务
docker exec -it redis_6380 bash
docker exec -it redis_6381 bash
# 进入容器后执行命令
redis-cli
# 设置为从服务
slaveof 172.17.0.2 6379
效果图
启动 sentinel 服务
sh scripts/sentinel.sh
效果图
手动停止主服务
- 目前机器服务结构如下
root@desktop-q13ei52:~/docker-config/redis# docker ps
container id image command created status ports names
e518580ce8eb redis "docker-entrypoint.s…" about a minute ago up about a minute 6379/tcp, 0.0.0.0:26379->26379/tcp sentinel_26379
e2ef253d3513 redis "docker-entrypoint.s…" 2 hours ago up 2 hours 0.0.0.0:6381->6379/tcp redis_6381
15fdc81eb530 redis "docker-entrypoint.s…" 2 hours ago up 2 hours 0.0.0.0:6380->6379/tcp redis_6380
77f4fdc84cb1 redis "docker-entrypoint.s…" 2 hours ago up 2 hours 0.0.0.0:6379->6379/tcp redis_6379
执行命令:docker stop redis_6379
1:x 10 may 2020 12:52:15.634 # +sdown master mymaster 172.17.0.2 6379
1:x 10 may 2020 12:52:15.634 # +odown master mymaster 172.17.0.2 6379 #quorum 1/1
1:x 10 may 2020 12:52:15.634 # +new-epoch 1
1:x 10 may 2020 12:52:15.634 # +try-failover master mymaster 172.17.0.2 6379
1:x 10 may 2020 12:52:15.649 # +vote-for-leader 6905a137af7baedbdfce4978d1d9126fdaad4faf 1
1:x 10 may 2020 12:52:15.649 # +elected-leader master mymaster 172.17.0.2 6379
1:x 10 may 2020 12:52:15.649 # +failover-state-select-slave master mymaster 172.17.0.2 6379
1:x 10 may 2020 12:52:15.725 # +selected-slave slave 172.17.0.3:6379 172.17.0.3 6379 @ mymaster 172.17.0.2 6379
1:x 10 may 2020 12:52:15.725 * +failover-state-send-slaveof-noone slave 172.17.0.3:6379 172.17.0.3 6379 @ mymaster 172.17.0.2 6379
1:x 10 may 2020 12:52:15.781 * +failover-state-wait-promotion slave 172.17.0.3:6379 172.17.0.3 6379 @ mymaster 172.17.0.2 6379
1:x 10 may 2020 12:52:16.798 # +promoted-slave slave 172.17.0.3:6379 172.17.0.3 6379 @ mymaster 172.17.0.2 6379
1:x 10 may 2020 12:52:16.798 # +failover-state-reconf-slaves master mymaster 172.17.0.2 6379
1:x 10 may 2020 12:52:16.845 * +slave-reconf-sent slave 172.17.0.4:6379 172.17.0.4 6379 @ mymaster 172.17.0.2 6379
1:x 10 may 2020 12:52:17.837 * +slave-reconf-inprog slave 172.17.0.4:6379 172.17.0.4 6379 @ mymaster 172.17.0.2 6379
1:x 10 may 2020 12:52:17.837 * +slave-reconf-done slave 172.17.0.4:6379 172.17.0.4 6379 @ mymaster 172.17.0.2 6379
1:x 10 may 2020 12:52:17.937 # +failover-end master mymaster 172.17.0.2 6379
# 生成执行故障转移
1:x 10 may 2020 12:52:17.937 # +switch-master mymaster 172.17.0.2 6379 172.17.0.3 6379
1:x 10 may 2020 12:52:17.938 * +slave slave 172.17.0.4:6379 172.17.0.4 6379 @ mymaster 172.17.0.3 6379
1:x 10 may 2020 12:52:17.938 * +slave slave 172.17.0.2:6379 172.17.0.2 6379 @ mymaster 172.17.0.3 6379
1:x 10 may 2020 12:53:18.010 # +sdown slave 172.17.0.2:6379 172.17.0.2 6379 @ mymaster 172.17.0.3 6379
注意
已经掉线的 172.17.0.2:6379
主节点重新上线后将自动切换为从服务
更多学习内容请访问:
腾讯t3-t4标准精品php架构师教程目录大全,只要你看完保证薪资上升一个台阶(持续更新)