Docker下实现redis主从复制
Posted 是渣渣呀
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker下实现redis主从复制相关的知识,希望对你有一定的参考价值。
单机模拟集群实现
注:redis新版的配置文件和旧版有些区别
(旧版的)
(新版的)
创建两个文件夹redis1和redis2
准备好redis 的配置文件redis.conf(见)
将config下的配置文件分别拷贝到redis1 和 redis2里去
分别修改redis1和redis2下的配置文件(redis1的端口设置为6379,redis2为6380,以及在redis2中加入slaveof master-ip master-port 或者是 replicaof )----我们把redis1作为主服务器,redis2为副的
注:1* 一定要daemonize no,因为该配置和docker run中-d参数冲突,会导致容器一直启动失败!!
2* 就是主redis服务器所在的 ip 和 端口号,并且中间不要加 :
[root@zch ~]# mkdir -p /usr/local/docker/redis/config/redis1
[root@zch ~]# mkdir -p /usr/local/docker/redis/config/redis2
[root@zch config]# cd /usr/local/docker/redis/config/
[root@zch config]# ls
redis1 redis2 redis.conf
[root@zch config]# cp redis.conf redis1/
[root@zch config]# cp redis.conf redis2/
[root@zch config]# vim redis1/redis.conf
[root@zch config]# vim redis2/redis.conf
- 然后就可以启动两个redis容器了(命名为redis1和redis2)
[root@zch config]# docker run -d --name redis1 -v /usr/local/docker/redis/config/redis1/redis.conf:/etc/redis.conf -v /usr/local/docker/redis/data:/data -p 6379:6379 redis:6.0.12 redis-server /etc/redis.conf
ffeac01946f1d34115734fb1405a68f5a020e6bb1b0f6100c6dbd257630ffe7a
[root@zch config]# docker run -d --name redis2 -v /usr/local/docker/redis/config/redis2/redis.conf:/etc/redis.conf -v /usr/local/docker/redis/data:/data -p 6380:6380 redis:6.0.12 redis-server /etc/redis.conf
ca58fb27e6f92d12afacebafaa854692f99fab9db4ce8fe66af8304cf8e9fffc
[root@zch config]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ca58fb27e6f9 redis:6.0.12 "docker-entrypoint.s…" 13 seconds ago Up 12 seconds 6379/tcp, 0.0.0.0:6380->6380/tcp redis2
ffeac01946f1 redis:6.0.12 "docker-entrypoint.s…" 52 seconds ago Up 51 seconds 0.0.0.0:6379->6379/tcp redis1
- 于是,我们对主从复制进行一下简单的测试
- 先进入redis1的客户端访问,进行一些简单的存取数据(info replication可以查看主从的信息等)
- 再进入redis2的客户端查看(一定要加 -p 映射端口,否则就是访问6379,肯定会被拒绝)
[root@zch config]# docker exec -it redis1 redis-cli
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> set hero1 libai
OK
127.0.0.1:6379> set hero2 kaidie
OK
127.0.0.1:6379> set hero3 nakelulu
OK
127.0.0.1:6379> set hero4 ailin
OK
127.0.0.1:6379> keys *
1) "hero4"
2) "hero3"
3) "hero1"
4) "hero2"
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=123.57.254.115,port=6380,state=online,offset=7828,lag=0
master_replid:11a868928e6bf83e39a1ecb924e538f7d998bf41
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:7828
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:7828
127.0.0.1:6379> exit
[root@zch config]# docker exec -it redis2 redis-cli -p 6380
127.0.0.1:6380> keys *
1) "hero2"
2) "hero1"
3) "hero3"
4) "hero4"
127.0.0.1:6380> info replication
# Replication
role:slave
master_host:123.57.254.115
master_port:6379
master_link_status:up
master_last_io_seconds_ago:8
master_sync_in_progress:0
slave_repl_offset:7716
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:11a868928e6bf83e39a1ecb924e538f7d998bf41
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:7716
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:6807
repl_backlog_histlen:910
127.0.0.1:6380> exit
这时,我们可以发现虽然只在redis1里进行了操作,但是redis2中也出现了同样的数据,这就说明主从复制成功了!!!
(redis1的配置文件)
(redis2的配置文件)
以上是关于Docker下实现redis主从复制的主要内容,如果未能解决你的问题,请参考以下文章