本文主要介绍Redis主从复制的详细配置步骤。
1.主-从模式;
2.主-从-从模式。
一、主-从模式
1.主从模式从结构上来看,其实就是拥有master和slave的redis集群,其拓扑结构如图所示:
注意:Redis集群不用安装多个Redis,只需复制多个配置文件,修改即可。因此,本文的前提是用户需要自己安装好redis。
2.在安装好redis的前提下,复制三份配置文件到自己定义的某个目录下,如图:
3.修改redis_6379.conf、redis_6380.conf、redis_6381.conf三个配置文件,如下所述:
# vim ./6379/redis_6379.conf
# Redis使用后台模式
daemonize yes
# 关闭保护模式
protected-mode no
# 注释以下内容开启远程访问
# bind 127.0.0.1
# 修改启动端口为6379
port 6379
# 修改pidfile指向路径
pidfile /usr/local/redis/etc/6379/redis_6379.pid
注意:以此类推,修改端口6380及6381配置。
4.启动三个终端,在各自端口上分别启动redis实例,如图:
由上图可知,已经在6379/6380/6381三个端口上启动了三个redis服务器。
5.使用【redis-cli -h host -p port】客户端连接命令,任意进入一个redis服务器,如图,这里使用【redis-cli -h 192.168.1.107 -p 6379】进入了6379服务器:
由上图可知,该redis还未配置有slave。
6.配置主从服务
说明:主从服务的配置方式有两种:
(1). 在redis.conf配置文件中设置slaveof
slaveof <masterip> <masterport>
(2).使用redis-cli客户端连接到redis服务,执行slaveof命令(此方式在重启后将失去主从复制关系)
slaveof <masterip> <masterport>
本示例在此使用第二种方式作为演示,如下所示。
#1.使用Redis客户端连接上6380端口
[root@localhost 6380]# /usr/local/redis/bin/redis-cli -h 192.168.1.107 -p 6381
192.168.1.107:6381> slaveof 192.168.1.107 6379
OK
#2.使用Redis客户端连接上6381端口
[root@localhost 6381]# /usr/local/redis/bin/redis-cli -h 192.168.1.107 -p 6380
192.168.1.107:6380> slaveof 192.168.1.107 6379
OK
OK,经此设置,即可将6380和6381两个实例都设置为6379实例的slave。
7.查看redis的主从关系
使用Redis客户端连接上6379端口
# redis-cli -h 192.168.1.107 -p 6379
查看master主从关系 如下图所示
192.168.1.107:6379> info replication
使用Redis客户端连接上6380端口或6381端口
# redis-cli -h 192.168.1.107 -p 6380
查看slave的主从关系 如下图所示
192.168.1.107:6380> info replication
8.测试
(1).在master写入数据
(2).在slave读取数据
(3).在slave写入数据
192.168.1.107:6380> set a 123
(error) READONLY You can't write against a read only slave.
说明:默认情况下redis数据库充当master角色时是可读可写,而slave角色时是只读的,可以在配置文件中开启非只读:slave-read-only no。
一、主-从-从模式
之所以会出现该模式,是因为redis的主从模式的缺点是所有的slave节点数据的复制和同步都由master节点来处理,会造成master节点压力太大,所以出现使用主-从-从模式来缓解master压力。
1.主从从模式从结构上来看,其实就是在主从模式的基础上,为slave增加slave的模式,其拓扑结构如图所示:
2.前面步骤同主从模式一致,只是在设置主从模式时,设置6381为6380的slave,如图:
192.168.1.107:6381> slaveof 192.168.1.107 6380
OK
3.查看主-从-从关系
(1).使用redis客户端登录6379
使用redis客户端登录6379,可以看到该redis实例充当master,如图:
(2).使用redis客户端登录6380
使用redis客户端登录6380,可以看到该redis实例既充当是master,也充当slave,如图:
(3).使用redis客户端登录6381
使用redis客户端登录6381,可以看到该redis实例充当slave,如图:
4.测试
(1).在master写入数据
192.168.1.107:6379> set a 123
OK
(2).在slave读取数据
192.168.1.107:6381> get a
"123"
192.168.1.107:6380> get a
"123"