角色 | 实例IP | 实例端口 | 宿主机IP | 宿主机端口 |
master | 172.19.0.2 | 6382 | 192.168.1.200 | 6382 |
slave01 | 172.19.0.3 | 6383 | 192.168.1.200 | 6383 |
slave02 | 172.19.0.4 | 6384 | 192.168.1.200 | 6384 |
这里我习惯在home文件夹下创建文件夹
#创建文件夹,方便之后生成配置文件 cd /home mkdir redis
首先编写配置文件 redis-cluster.tmpl
#进入redis文件夹内 cd redis #创建配置文件 vi redis-cluster.tmpl
内容如下
# redis端口 port ${PORT} # 关闭保护模式 protected-mode no # 配置远程访问 bind 0.0.0.0 # 开启集群(配置主从节点需要关闭集群模式) cluster-enabled no # 集群节点配置 cluster-config-file nodes.conf # 超时 cluster-node-timeout 5000 # 集群节点IP host模式为宿主机IP cluster-announce-ip 172.19.0.1 # 集群节点端口 6379 - 6384 cluster-announce-port ${PORT} cluster-announce-bus-port 1${PORT} #配置主节点IP slaveof 172.19.0.2 6382 # 开启 appendonly 备份模式 appendonly yes # 每秒钟备份 appendfsync everysec # 对aof文件进行压缩时,是否执行同步操作 no-appendfsync-on-rewrite no # 当目前aof文件大小超过上一次重写时的aof文件大小的100%时会再次进行重写 auto-aof-rewrite-percentage 100 # 重写前AOF文件的大小最小值 默认 64mb auto-aof-rewrite-min-size 64mb # 配置数据库个数 databases 16
编写哨兵模式配置文件 sentinel.conf (在redis的bin 目录下有一个redis.sentinel文件,这个文件用于启动哨兵的配置文件,哨兵的配置文件需要我们自己去创建)
#创建哨兵模式配置文件 vi sentinel.conf
内容如下
# 添加守护进程模式 daemonize yes # 添加指明日志文件名 logfile "/usr/local/redis/sentinel_log.log" # 修改启动端口 port 26379 # 添加关闭保护模式 protected-mode no # 修改sentinel monitor为master的ip端口,最后的数字2表示: 有两个哨兵认证master挂掉,才会推选新的master sentinel monitor mymaster 172.19.0.2 6382 2 sentinel auth-pass mymaster GaosiDev sentinel down-after-milliseconds mymaster 30000 sentinel parallel-syncs mymaster 1 sentinel failover-timeout mymaster 10000 sentinel deny-scripts-reconfig yes
最后编写自动生成脚本 redis-cluster-config.sh
#创建自动生成脚本 vi redis-cluster-config.sh
内容如下
#! /bin/bash
# 6382 6384是准备创建的三个redis的端口区间 for port in `seq 6382 6384`; do mkdir -p ./redis-cluster/${port}/conf && PORT=${port} envsubst < ./redis-cluster.tmpl > ./redis-cluster/${port}/conf/redis.conf && cp ./sentinel.conf ./redis-cluster/${port}/conf/sentinel.conf && mkdir -p ./redis-cluster/${port}/data; done
#运行脚本 bash redis-cluster-config.sh
之后就会生成redis-cluster文件夹
首先创建网段
#创建网段 docker network create --driver bridge --subnet 172.19.0.1/24 redis_net
开始创建redis容器
docker run -d --network redis_net --ip 172.19.0.2 -p 6382:6382 -v /home/redis/redis-cluster/6382/conf/:/usr/local/etc/redis/ --name=redis1 redis:6.0.8 redis-server /usr/local/etc/redis/redis.conf --appendonly yes
docker run -d --network redis_net --ip 172.19.0.3 -p 6383:6383 -v /home/redis/redis-cluster/6383/conf/:/usr/local/etc/redis/ --name=redis2 redis:6.0.8 redis-server /usr/local/etc/redis/redis.conf --appendonly yes
docker run -d --network redis_net --ip 172.19.0.4 -p 6384:6384 -v /home/redis/redis-cluster/6384/conf/:/usr/local/etc/redis/ --name=redis3 redis:6.0.8 redis-server /usr/local/etc/redis/redis.conf --appendonly yes
#进入redis2容器 docker exec -it redis2 bash #启动哨兵模式 redis-server /usr/local/etc/redis/sentinel.conf --sentinel
#进入redis3容器 docker exec -it redis3 bash #启动哨兵模式 redis-server /usr/local/etc/redis/sentinel.conf --sentinel
至此搭建(一主多从(哨兵模式))redis完成。
测试时,可进入容器查看当前redis的master是否变化,
#登录redis redis-cli -h 172.19.0.3 -p 6383 -c #查看主从关系 info replication
文章整合至:https://blog.csdn.net/qq_38900565/article/details/108335532,https://blog.csdn.net/macro_g/article/details/82593996?utm_medium=distribute.wap_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.wap_blog_relevant_pic&dist_request_id=1332024.8086.16189865735716115&depth_1-utm_source=distribute.wap_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.wap_blog_relevant_pic,https://www.cnblogs.com/daleyzou/p/docker-redis-sentinel.html
Docker:docker搭建redis一主多从集群(配置哨兵模式)
原文:https://www.cnblogs.com/nhdlb/p/14687564.html