Docker redis主从搭建

Redis主从复制的过程原理 

1.当从库和主库建立MS关系后,会向主数据库发送SYNC命令

2.主库接收到SYNC命令后会开始在后台保存快照(RDB持久化过程),并将期间接收到的写命令缓存起来

3.当快照完成后,主Redis会将快照文件和所有缓存的写命令发送给从Redis

4.从Redis接收到后,会载入快照文件并且执行收到的缓存的命令

5.之后,主Redis每当接收到写命令时就会将命令发送从Redis,从而保证数据的一致

准备工作:下载redis.conf配置文件并修改配置分别拷贝为:redis-master.conf ,redis-slave1.conf

修改配置参数  

主机(Master)修改下载下来的redis.conf,主要修改参数如下:

#bind 127.0.0.1        #如果bind选项为空的话,则允许所有来自于可用网络接口的连接
protected-mode no      #保护模式,若为yes,只允许本地客户端连接
appendonly yes         #开启后,Redis会把每次写入的数据在接收后都写入appendonly.aof文件,每次启动时Redis都会先把这个文件的数据读入内存里


从机(Slave)修改下载下来的redis.conf,主要修改参数如下:

#bind 127.0.0.1
protected-mode no
appendonly yes

# replicaof <master ip> <master port>

replicaof 172.17.0.2 6379 #Redis主机(Master)IP 端口

1. 运行Redis

1.1 master(主库)

  # 运行服务 redis.conf需要下载修改配置  
    docker run -itd  --name  redis-master  -v /Users/yunwang/Documents/redis/redis-master.conf:/etc/redis.conf -v /Users/yunwang/Documents/redis/data:/data -p 6379:6379 redis



    # docker run -it --name redis-master -d -p 6379:6379 redis redis-server --requirepass 123456
    # 测试连接redis
    docker exec -it redis-master redis-cli -a 123456

1.2 slave(从库)

	# 运行服务
	# docker run -it --name redis-slave -d -p 6301:6379 redis redis-server --requirepass 234567 # 设定从库密码,可选
        docker run -itd  --name  redis-slave1  -v /Users/yunwang/Documents/redis/redis-slave.conf:/etc/redis.conf -v /Users/yunwang/Documents/redis/data:/data -p 6301:6379 redis

       docker run -itd  --name  redis-slave2  -v /Users/yunwang/Documents/redis/redis-slave.conf:/etc/redis.conf -v /Users/yunwang/Documents/redis/data:/data -p 6302:6379 redis
	# 测试连接redis
	docker exec -it redis-slave1 redis-cli
	# 进行密码认证
	auth <slave-password>
docker inspect redis-master  #查看容器内网ip

三个redis内网地址分别为:
redis-master 172.17.0.2:6379   6379
redis-slave1 172.17.0.3:6379    6301
redis-slave2 172.17.0.4:6379    6302

1.3查看信息

进入docker容器内部,查看当前redis角色(主还是从)    info replication

[root@tcy1 tcy]# docker exec -it reids-master /bin/bash
root@ab54741166e1:/data# redis-cli
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:0
master_replid:333dfec36d78274ea16fa0cd8f20cbfd8058b1ff
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
127.0.0.1:6379> 

目前三个都是master状态(即主人状态) 

 

2. 主从连接及查看

2.1 从库配置

  slaveof <master-ip> <master-port><master-ip>为主库服务ip,<master-port>表示主库所在端口,默认6379

➜  ~ docker exec -it redis-slave1 redis-cli    
127.0.0.1:6379> SLAVEOF 172.17.0.2 6379
OK
127.0.0.1:6379> quit

➜  ~ docker exec -it redis-slave2 redis-cli
127.0.0.1:6379> SLAVEOF 172.17.0.2 6379
OK
127.0.0.1:6379> 

2.2 密码认证

  config set masterauth <master-password><master-password>即为主库访问密码

2.3 测试命令

  进入reidis-master输入infoinfo Replication

➜  ~ docker exec -it redis-master redis-cli
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=172.17.0.3,port=6379,state=online,offset=498,lag=0
slave1:ip=172.17.0.4,port=6379,state=online,offset=498,lag=0
master_replid:8fbf1483a6e388156e8c643ad99df5a3ca311f74
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:498
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:498

从库信息:

➜  ~ docker exec -it redis-slave1 redis-cli
127.0.0.1:6379> info repliacation
127.0.0.1:6379>  info replication
# Replication
role:slave
master_host:172.17.0.2
master_port:6379
master_link_status:up
master_last_io_seconds_ago:5
master_sync_in_progress:0
slave_repl_offset:624
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:8fbf1483a6e388156e8c643ad99df5a3ca311f74
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:624
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:624

以后主库可以读写,从库只能读取。主库写入的信息及时会同步到从库。

3. Redis 主从复制、哨兵和集群三者区别

主从复制是为了数据备份哨兵是为了高可用,Redis主服务器挂了哨兵可以切换,集群则是因为单实例能力有限,搞多个分散压力,简短总结如下:

主从模式:备份数据、负载均衡,一个Master可以有多个Slaves。

sentinel发现master挂了后,就会从slave中重新选举一个master。

cluster是为了解决单机Redis容量有限的问题,将数据按一定的规则分配到多台机器。

sentinel着眼于高可用,Cluster提高并发量。

1. 主从模式:读写分离,备份,一个Master可以有多个Slaves。

2. 哨兵sentinel:监控,自动转移,哨兵发现主服务器挂了后,就会从slave中重新选举一个主服务器。

3. 集群:为了解决单机Redis容量有限的问题,将数据按一定的规则分配到多台机器,内存/QPS不受限于单机,可受益于分布式集群高扩展性。

 

同一个机器搭建直接修改复制修改配置文件并使用redis-server redis.conf 启动,redis.conf中设置对应的主从配置信息

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风雨「83」

你的鼓励将是我创作最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值