redis主从复制

单机最大的弊端:容量有瓶颈、QPS瓶颈(高可用)、读写分离

生产环境不能在一台机器上。

一主一从,主就是master 从就是slave

一主多从,主就是master 从就是多个slave

20200508190730

它的数据流向是单项的,只能从master到slave

实现方式有两种:

slaveof 命令:

通过命令来做主从复制

(命令在slave机器上输入)

20200508190710

取消主从复制

20200508190720

配置:

通过配置文件来做主从复制

slaveof ip port  //master的ip和端口

slave-read-only yes   //从节点只能读

 

对这两种方式优缺点进行总结:

20200508191515

 

 

现在我们就使用docker来演示一下

首先我们先下载redis

 然后创建第一台redis,master

进入新建的redis01主机

 

当然我们可以使用便捷的方式,创建第一台redis,master

命令说明:
-p 6379:6379 : 将容器的6379端口映射到主机的6379端口
-v $PWD/data:/data : 将主机中当前目录下的data挂载到容器的/data
redis-server –appendonly yes : 在容器执行redis-server启动命令,并打开redis持久化配置

连接容器

查看容器

 

二、主从复制

1.运行redis镜像

首先使用docker启动3个redis容器服务,分别使用到6379、6380、6381端口

 

2.配置redis集群

使用如下命令查看容器内网的ip地址等信息

20190609101658159

3个redis的内网ip地址为:

 

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

可以看到当前3台redis都是master角色,使用redis-cli命令修改redis-6380、redis-6381的主机为172.17.0.2:6379

再次查看redis-6379主机info,已经有两个从机了.20190609102037197

测试

slave1

slave2

好了,redis主从配置完毕了。

注意,如果在从节点机器上set key value后,再slaveof,之前的数据会被清空。

 

读写分离

master负责写,slave负责读

20200508213919

 

 

危险:有可能,你的主机宕机了,恢复时没有争取持久化,从节点机器会复制主节点的空数据,完蛋了

运维需要,人工提前从从节点中选择一条作为主节点,并执行slaveof  no one 命令。很麻烦。

发表评论