redis的主从复制就是主机数据更新后根据配置和策略自动同步到备机的master/slaver机制,master以写为主,slave以读为主.(主从复制中通常是一主二仆,一主一仆或者说是当前从机可以是下一个从机的主机)

主从复制的配置(一般是配从不配主):
1.复制多个redis.conf的配置文件,(我的是redis6380.conf,redis6381.conf)然后再使用vim对从机的配置文件进行修改
#两个从机的配置文件修改三个地方
#修改生成.rdb的文件名
The filename where to dump the DB
dbfilename "dump6380.rdb"
#修改日志文件名字
Specify the log file name. Also the empty string can be used to force
Redis to log on the standard output. Note that if you use standard
output for logging but daemonize, logs will be sent to /dev/null
logfile "6380.log"
#修改端口号
Accept connections on the specified port, default is 6379.
If port 0 is specified Redis will not listen on a TCP socket.
port 6380
配置完之后启动redis
#端口6379的redis
redis-server redis.conf
redis-cli -p 6379
#端口6380和6381qid启动和6379的一样只是端口号不一样
redis-server redis6380.conf
redis-cli -p 6380
启动完之后呢查看redis的情况
info replication #命令查看redis主从机情况

通过slaveof ip 端口 来进行主机对从机配置,执行完slaveof 命令后就能看到从机的主机信息
slaveof ip 6379


这里要注意的是从机复制是从头到尾进行复制而不是从接入主机开始复制某个key.
还有一种情况是如果主机down调后可以在从机执行slaveof no one 使当前数据库停止与其他数据库同步转成主数据库.

主从复制的原理:salve启动后成功连接到master后会发送一个sync命令,master接到命令后启动后台的存盘进程,同时收集所有接收到用于修改数据集的命令在后台进程执行完毕后,master将传送整个数据文件到slave,以完成一次完全同步.
全量复制:而slave服务在接收到数据库文件数据后,将其存盘并加重到内存.
增量复制:master继续将新的所有收集到的修改命令依次传给slave,完成同步
但是只要是重新连接master,依次完全同步(全量复制)将被自动执行.
注意的是:
如果主机故障没有执行slaveof no one 命令从机依旧是从机,而当主机重启后从机依旧跟随主机
二. redis的哨兵模式:就是slaveof no one 的自动版,在后台监控主机是否故障,如果故障,根据投票数自动将从库转成主库.
1.把/root/opt/redis-4.0.11/文件中的sentinel.conf复制一份出来或者直接创建sentinel.conf文件.再使用vim直接插入以下内容
#其中数字1表示主机挂掉后slave投票超过1的得票数多的成为主机
sentinel monitor (被监控的数据库名字) 127.0.0.1 6379 1

然后启动哨兵:
redis-sentinel redis-sentinel.conf
正常主从演示:原有的master挂了

投票新选

主从重新开工,使用info replication查看主从机情况

原有的主机回来后,也不会和新的主机冲突

缺点就是由于所有的写操作都是先在Master上操作,然后同步更新到Slave上,所以从Master同步到Slave机器有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,Slave机器数量的增加也会使这个问题更加严重。
网友评论