docker创建redis主从复制
第一步 创建主节点容器
执行命令
docker run -p 6379:6379 --name redis-master -v /tmp/config/redis/data/6379:/data -v /tmp/config/redis/6379/redis.conf:/etc/redis/redis.conf -d redis redis-server /etc/redis/redis.conf --appendonly yes
参数说明
-p 6379:6379 #端口
--name redis-master #容器名称
-v /tmp/config/redis/data/6379:/data -v /tmp/config/redis/6379/redis.conf:/etc/redis/redis.conf #挂载目录,这里需要自己创建redis.conf
-d redis redis-server /etc/redis/redis.conf #以指定配置文件启动
--appendonly yes #开启持久化
主节点配置文件
# 允许所有ip地址访问
bind 0.0.0.0
# 以守护进程的方式运行,就是关闭了远程连接窗口,redis依然运行,使用容器时必须注释,否则启动容器失败
# daemonize yes
# 设置需要密码才能访问
requirepass 19460
# 设置redis持久化,默认是no
appendonly yes
# 设置主节点的密码(当主节点设置了requirepass配置时需要配置该项或者需要搭建哨兵模式的时候也需要配置该项,因为如果主节宕机重启之后就会# # 装换为slave节点,这个时候需要去连接sentinel选举出来的新的master节点)
# masterauth root
第二步 进入容器获取ip
执行docker inspect redis-master
找出master节点的ip
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.5"
这里ip为172.17.0.5
第三步创建两个从节点
执行命令
创建第一个从节点
docker run -p 6380:6379 --name redis-slave1 -v /tmp/config/redis/data/6380:/data -v /tmp/config/redis/6380/redis.conf:/etc/redis/redis.conf -d redis redis-server /etc/redis/redis.conf --appendonly yes
创建第二个从节点
docker run -p 6381:6379 --name redis-slave2 -v /tmp/config/redis/data/6381:/data -v /tmp/config/redis/6381/redis.conf:/etc/redis/redis.conf -d redis redis-server /etc/redis/redis.conf --appendonly yes
配置文件(两个从节点一样)
# 允许所有ip地址访问
bind 0.0.0.0
# 以守护进程的方式运行,就是关闭了远程连接窗口,redis依然运行,使用容器时必须注释,否则启动容器失败
# daemonize yes
# 设置需要密码才能访问
requirepass 19460
# 设置redis持久化,默认是no
appendonly yes
# 设置主节点的密码(当主节点设置了requirepass配置时需要配置该项)
masterauth 19460
# 主从模式下主节点的IP和PORT(这里要根据实际情况来定,我这里使用的是容器内部的IP和端口)
# 这里也可以使用容器的名称,使用容器名称的时候在构建容器的时候就需要使用--link参数
# 这里也可以使用物理地址,使用物理地址的时候在构建容器的时候就需要使用--net参数
replicaof 172.17.05 6379
验证
- 执行
docker exec -it redis-master redis-cli
进入容器 - 执行
info replication
出现下面的信息说明配置成功
# Replication
role:master
connected_slaves:2
slave0:ip=172.17.0.6,port=6379,state=online,offset=182,lag=1
slave1:ip=172.17.0.7,port=6379,state=online,offset=182,lag=1
- 在主节点写入数据,进入从节点读取