redis主从复制可以实现读写分离,主角色支持读写,从角色只读。
实现主从复制需要至少两个redis数据库,可以通过两种方案实现。
本次采用第二种方式,工作中基本也都是第二种方式,第一种方式的集群没有意义。
使用虚拟机创建3台服务器(这里使用配置为centos7.3-x64),使用物理主机或者云服务器均可。
三台主机IP分别指定为
分别为三台服务器安装redis(也可以通过scp命令将主服务器安装好的文件夹复制到从服务器,scp /.../redis-5.0.5 ip:/.../)
配置主从复制只需要修改从服务器配置文件即可,主服务器无需配置。
redis.config
[root@vm123 bin]# vim ../etc/redis.conf
// 追加以下配置 slaveof masterIP masterPort 保存并退出
slaveof 192.168.204.121 6379
// 启动从服务
[root@vm123 bin]# ./redis-server ../etc/redis.conf
45496:C 07 Aug 2020 00:03:15.162 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
45496:C 07 Aug 2020 00:03:15.162 # Redis version=5.0.5, bits=64, commit=00000000, modified=0, pid=45496, just started
45496:C 07 Aug 2020 00:03:15.162 # Configuration loaded
// 启动客户端,使用info查看角色,出现如下信息
[root@vm123 bin]# ./redis-cli -h 192.168.204.123
# Replication
role:slave // 角色:从
master_host:192.168.204.121 // 主IP
master_port:6379 // 主端口
# Replication
role:master // 角色:主
connected_slaves:2 // 从连接数:2
slave0:ip=192.168.204.122,port=6379,state=online,offset=1929,lag=1 // 从0信息
slave1:ip=192.168.204.123,port=6379,state=online,offset=1929,lag=0 // 从1信息
// 主为空
192.168.204.121:6379> keys *
(empty list or set)
// 从1为空
192.168.204.122:6379> keys *
(empty list or set)
// 从2为空
192.168.204.123:6379> keys *
(empty list or set)
// 主
192.168.204.121:6379> set name zmc
OK
192.168.204.121:6379> get name
"zmc"
// 从1
192.168.204.122:6379> get name
"zmc"
// 从2
192.168.204.123:6379> get name
"zmc"
// 主
192.168.204.121:6379> del name
(integer) 1
192.168.204.121:6379> get name
(nil)
// 从1
192.168.204.122:6379> get name
(nil)
// 从2
192.168.204.123:6379> get name
(nil)
// 从1
192.168.204.122:6379> set age 18
(error) READONLY You can‘t write against a read only replica.
// 从2
192.168.204.123:6379> set age 18
(error) READONLY You can‘t write against a read only replica.
redis主从复制的配置很简单,抛开redis本身的问题,服务器之间通讯可能会发生以下问题,提供解决思路。
Q. 从服务器配置后,主服务器显示从服务器连接数为0.
A. 1. 查看从服务器指定IP和端口是否正确。
Q. 服务器间能ping通,且telnet其他端口(比如22)能通,而redis端口(默认6379)连接拒绝。
A. 1. 查看防火墙是否放开6379端口。
redis.config
配置文件,将bind 127.0.0.1修改为IP后重启redis服务,再次尝试。Q. 修改bind后客户端无法连接
A. 客户端默认使用127.0.0.1:6379,修改bind后启动客户端时使用 -h IP参数指定修改后的IP。
原文:https://www.cnblogs.com/bcomll/p/13449971.html