Docker下配置redis主从复制详细过程
Docker下配置redis主从复制详细过程
2019年03月19日 16:00:37 累了困了喝六神 阅读数:116 标签: redis主从 docker docker搭建redis docker-redis 更多
个人分类: 学习笔记
环境
- 同一宿主机两个docker容器,请提前安装好docker
- master:172.17.0.2
- slave:172.17.0.3
配置redis.conf
[root@server1 ~]# tar zxf redis-4.0.8.tar.gz
[root@server1 ~]# cd redis-4.0.8/
[root@server1 ~]# mkdir -p /mnt/redis/conf.d
[root@server1 ~]# cp redis.conf /mnt/redis/conf.d/redis-master.conf
[root@server1 ~]# cp redis.conf /mnt/redis/conf.d/redis-slave.conf
- 1
- 2
- 3
- 4
5
主节点 redis-master.conf
[root@server1 ~]# cd /mnt/redis/conf.d/
vim redis-master.conf
69 bind 0.0.0.0 # 连接开放
88 protected-mode no # 保护模式关闭
136 daemonize yes # 服务后台运行
814 cluster-enabled yes
822 cluster-config-file nodes-6379.conf
827 cluster-node-timeout 15000
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
从节点 redis-slave.conf
[root@server1 conf.d]# vim redis-slave.conf
69 bind 0.0.0.0 # 连接开放
88 protected-mode no # 保护模式关闭
136 daemonize yes # 服务后台运行
- 1
- 2
- 3
- 4
redis-master容器搭建
获取镜像,创建容器
[root@server1 ~]# docker pull redis
[root@swarm1 conf.d]# docker run -it --name redis-master -v /mnt/redis/conf.d/redis-master.conf:/usr/local/etc/redis/redis.conf -d -p 6300:6379 redis /bin/bash
[root@swarm1 conf.d]# docker inspect redis-master | grep IPA # 挂载.conf文件,宿主机端口6300
"SecondaryIPAddresses": null,
"IPAddress": "172.17.0.2",
"IPAMConfig": null,
"IPAddress": "172.17.0.2",
[root@swarm1 conf.d]# docker attach redis-master
root@077db232f8b1:/data# redis-server /usr/local/etc/redis/redis.conf
root@077db232f8b1:/data# redis-cli
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:0
redis-master写入数据时报错:(error)CLUSTERDOWN Hash slot not served”
原因: 运行容器时挂载的 /mnt/redis/conf.d/redis-master.conf 文件中开启了cluster-enable,注释该内容后重新运行容器[root@server1 ~]# cd /mnt/redis/conf.d/
[root@server1 conf.d]# vim redis-master.conf
814 #cluster-enabled yes
[root@swarm1 conf.d]# docker run -it --name redis-master -v /mnt/redis/conf.d/redis-master.conf:/usr/local/etc/redis/redis.conf -d -p 6300:6379 redis /bin/bash
077db232f8b1d257185190e7f21b694e8db8df0ba9ccf497d82bfe5ebf08bad3
[root@swarm1 conf.d]# docker attach redis-master
root@077db232f8b1:/data# redis-server /usr/local/etc/redis/redis.conf
root@077db232f8b1:/data# redis-cli
127.0.0.1:6379> set new old # 测试数据创建成功
OK
redis-slave容器搭建
容器创建
[root@swarm1 conf.d]# docker run -it --name redis-slave -v /mnt/redis/conf.d/redis-slave.conf:/usr/local/etc/redis/redis.conf -d -p 6301:6379 redis /bin/bash
[root@swarm1 conf.d]# docker inspect redis-slave | grep IPA
"SecondaryIPAddresses": null,
"IPAddress": "172.17.0.3",
"IPAMConfig": null,
"IPAddress": "172.17.0.3",
[root@swarm1 conf.d]# docker attach redis-master
root@077db232f8b1:/data# redis-server /usr/local/etc/redis/redis.conf
root@574c798128ee:/data# redis-cli
127.0.0.1:6379> slaveof 172.17.0.2 6379 # 链接到master节点,因同一宿主机中的容器通过docker0进行网络
OK # 通信,即就相当于同属于一个子网中,所以直接连接容器内服务端口
127.0.0.1:6379> info replication
# Replication
role:slave # 该容器redis服务为从节点
master_host:172.17.0.2 # 主节点
master_port:6300
master_link_status:down
主节点查看
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=172.17.0.3,port=6379,state=online,offset=28,lag=1 # slave容器ip
127.0.0.1:6379> get new # 测试数据成功
"old"
还没有评论,来说两句吧...