CentOS7下搭建Redis主从复制
(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