(1).实验环境
youxi1 192.168.1.6 Master服务器
youxi2 192.168.1.7 Slave服务器
(2).实验
1)两台服务器上yum安装Redis,启动并设置开机自启
详细查看:CentOS7下yum安装Redis
2)修改Master服务器上的配置
[root@youxi1 ~]# vim /etc/redis.conf
bind 0.0.0.0 //第69行,设置监听地址。0.0.0.0表示监听所有地址
requirepass 123456 //第507行,设置认证密码
[root@youxi1 ~]# systemctl restart redis
如果防火墙是开启状态,记得添加端口号
[root@youxi1 ~]# firewall-cmd --permanent --zone=public --add-port=6379/tcp && firewall-cmd --reload
success
success
3)修改Slave服务器上的配置
[root@youxi2 ~]# vim /etc/redis.conf
replicaof 192.168.1.6 6379 //第286行,设置master的IP地址和端口号
masterauth 123456 //第293行,设置master的认证密码
[root@youxi2 ~]# systemctl restart redis
4)查看master和slave的状态信息
查看master的状态信息
[root@youxi1 ~]# redis-cli
127.0.0.1:6379> auth 123456
OK
127.0.0.1:6379> info replication
# Replication
role:master //这是一台master
connected_slaves:1 //连接slave服务器的数量
slave0:ip=192.168.1.7,port=6379,state=online,offset=350,lag=1 //slave服务器的信息
master_replid:e26e1e0953261c81b2ca2de08ce8ebda264eeabf
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:350
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:350
查看slave的状态信息
[root@youxi2 ~]# redis-cli
127.0.0.1:6379> info replication
# Replication
role:slave //这是一台slave
master_host:192.168.1.6 //master服务器的IP地址
master_port:6379 //master服务器的端口号
master_link_status:up //连接状态
master_last_io_seconds_ago:5
master_sync_in_progress:0
slave_repl_offset:112
slave_priority:100
slave_read_only:1 //成为slave服务器后,只读
connected_slaves:0
master_replid:e26e1e0953261c81b2ca2de08ce8ebda264eeabf
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:112
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:112
5)测试
在master服务器上创建一个键值,然后到slave上查看
[root@youxi1 ~]# redis-cli
127.0.0.1:6379> auth 123456
OK
127.0.0.1:6379> set user youxi
OK
[root@youxi2 ~]# redis-cli
127.0.0.1:6379> get user
"youxi"
这就成功了。
(3).主从复制高级配置参数
CentOS7下yum安装Redis已经记载了,这里复制一下,便于查看。
/*第218到220行,快照存储策略,存到磁盘的持久化策略
*第一个数字是单位时间,单位为秒;第二个数字是键值发生变化的次数
* 例如第一个,900秒内至少发生1次键值变化,则做一次快照(持久化)
* 第二个就是,300秒内至少发生10次键值变化,则做一次快照(持久化)
* 所有条件是并列关系,根据不同的键值变化选择使用规则
*/
save 900 1
save 300 10
save 60 10000
//第235行,在进行快照备份时,一旦发生错误是否停止,默认yes即可
stop-writes-on-bgsave-error yes
//第241行,指定RDB文件是否压缩。yes表示压缩,会消耗CPU资源
rdbcompression yes
/*第250行,是否对RDB文件做校验码检测。
*此项定义在redis启动时加载RDB文件是否对文件检查校验码,在redis生成RDB文件是会生成校验信息,在redis再次启动或装载RDB文件时,是否检测校验信息。
*如果检测的情况下会消耗时间,会导致redis启动时慢,但是能够判断RDB文件是否产生错误。
*/
rdbchecksum yes
//第253行,RDB文件名称
dbfilename dump.rdb
//第263行,RDB文件存放的路径
dir /var/lib/redis
//第286行,定义Master服务器的IP和端口,主从复制的配置信息
# replicaof <masterip> <masterport>
//第293行,定义Master服务器的密码,主从复制的配置信息
# masterauth <master-password>
//第308行,当从端在主从复制过程中与主端断开连接,yes表示继续提供服务,即使数据可能不是最新的;no表示对请求返回错误信息
replica-serve-stale-data yes
//第324行,从端只读
replica-read-only yes
//第355行,默认不使用diskless(无磁盘)同步方式
repl-diskless-sync no
//第367行,diskless(无磁盘)方式进行数据传递之前会有一个时间的延迟,以便从端能够进行到待传送的目标队列中,默认5秒
repl-diskless-sync-delay 5
//第373行,从端向主端发送ping的时间间隔,默认10秒
# repl-ping-replica-period 10
//第385行,设置超时时间
# repl-timeout 60
/*第400行,是否启用TCP_NODELAY。
* 如果启用则会使用少量的TCP包和带宽去进行数据传输到从端,速度较慢;
* 如果不启用则使用较多的带宽进行数据传输,速度较快。
*/
repl-disable-tcp-nodelay no
/*第413行,设置backlog的大小。backlog是一个缓冲区,在从端失联时存放要同步到从端的数据。
* 因此当从端重连时,一般是不需要完全同步的。backlog越大,从端可以失联的时间就越长(相对来说)
*/
# repl-backlog-size 1mb
//第426行,一段时间后,从端还没有连上master,那么backlog(缓冲区)的内存将被释放。0表示永不释放,默认3600秒
# repl-backlog-ttl 3600
//第441行,从端的优先级设置,数字越小优先级越高。主端故障会根据优先级高的从端来进行恢复。如果设置的是0,那么该从端永远不会被选中
replica-priority 100
//第457到458行,当主端的可用从端小于3个或网路延迟岛屿10秒时,主端拒绝接收用户的写请求。
# min-replicas-to-write 3
# min-replicas-max-lag 10