redis-主从复制

在redis集群中,自动配置主从结构,但是最少需要6台服务器。
不通过集群也可以配置redis主从结构。

1、结构:

一主一从,一主多从,主从从

2、工作原理:

①、slave向master发出数据同步的请求
②、master收到请求之后,会创建一个进程,这个进程在后台记录操作日志
③、日志写完之后会把这个日志文件发送给slave
④、slave会根据日志进行数据同步
# slave第一次会做完全同步,之后都是增量同步
# 从master中同步的数据会覆盖掉slave原有的数据,因此slave和master数据不必一致

3、主从配置:

# 仅需要对slave进行配置就可以了
redis-cli -h 192.168.4.52 -p 6352	#连接到4.52(想要成为slave的主机)
xxx> info replication	#查看复制信息,默认是master

命令行临时配置:(立刻生效,重启失效)
xxx> slaveof 192.168.4.51 6351	#指明master主机

永久配置:
vim /etc/redis/6379.conf
slaveof 192.168.4.51 6351	#指明master主机

slave还原为独立的主机:
xxx> slaveof no one
或者注释掉slaveof 192.168.4.51 6351

# 一主多从,主从从结构,都是对想要成为slave的主机进行上述操作

4、配置带有验证的主从:(slave需要密码才可以同步数据)

master配置:
vim /etc/redis/6379.conf
requirepass  123456	#为master设置密码

slave配置:
vim /etc/redis/6379.conf
masterauth  123456	#设置主机的密码
或者
xxx> config set masterauth  123456	#通过命令行临时配置
xxx> config rewrite masterauth  123456	#通过命令行修改配置文件,永久配置

5、哨兵服务:(主从从结构)

# 在集群当中,master故障之后,slave会成为新的master
# 如果想要在主从、主从从结构中实现这个功能,需要开启哨兵服务

# 一般采用主从从结构

配置哨兵:(#这里在单独的主机4.100上配置哨兵)
# 可以是单独的主机,可以是redis服务器,用于监视master
# 如果在单独的主机上配置,不需要开启redis服务

tar -zxf redis-4.0.8.tar.gz
cd redis-4.0.8/
make && make install	#之后可以不进行初始化,因为不需要redis服务

vim  /etc/sentinel.conf	#创建哨兵服务的主配置文件
port 26379							# 哨兵端口,自定义
daemonize yes						# 后台运行
logfile /var/log/sentinel/aaa.log		# 日志存储的文件,是具体的文件
sentinel   monitor   redis51   192.168.4.51   6379   1 #监视主服务器4.51, 自定义主机名为redis51,最后的1表示:有1个哨兵发现master坏掉之后就更换master
sentinel down-after-milliseconds redis51 60000		#  超过60000毫秒,认为master宕机
sentinel failover-timeout redis51  180000		# 故障转移的超时时长
sentinel parallel-syncs redis51 2		# 假设master宕机了,又从slave中选取了一个master,这个参数表示剩余的slave每次有2个连接到新的master上,从master上同步数据,这两个连接完毕之后再连接之后的2个slave到master上。一般使用默认 1 就可以了。
# 可以配置多条,用于监控不同master-slave集群。
bind  0.0.0.0    #哨兵服务地址(表示本机所有网络接口,基本上是监控本机的)
sentinel auth-pass  server51   123456   #主服务器密码,没有可以不设置

redis-sentinel /etc/sentinel.conf	#通过配置文件启动服务

# 当master宕机之后,哨兵会选择对应的slave成为新的master
# 选择新的master之后,哨兵服务的配置文件/etc/sentinel.conf也会发生变化
# 哨兵仍然监控当前的主机
# 当服务器恢复之后,成为当前master的slave,并且自动同步数据

写总结的第五十天!!!

补充:

基准压测:
	redis-benchmark	
		-h ip 
		-c 客户端数量(默认50) 
		-n 总请求数 (默认100000)
		-d set/get数据的大小(默认2bytes)


数据丢失的情况:
	1. 异步复制导致数据丢失,master上的数据还没来得及向slave上同步就宕机了。
	2. 集群脑裂,master所在的机器脱离了集群,这时候哨兵以为master故障,从而会选举一个新的master,那么就有两个master了,但是client那边还是会向之前的master上写数据,之前的master不会向最新的master上同步数据,因此就导致了数据的丢失。

解决数据丢失:(减少异步复制,脑裂导致的数据丢失的影响)
	vim /etc/redis/6379.conf
	min-slaves-to-write 1			# 451行
	min-slaves-max-lag 10		# 452行
	# 两个配置是一起使用的,表示至少有1个slave数据复制和同步的延迟不能超过10秒.
	# 如果master和slave的时延超过了10秒,那么master就不会再接受写请求了,这样就能把丢失的数据控制在10秒内。此时client的请求可以写入到本地的缓存,或者是写的消息队列中等过一段时间去拿写如的数据,或者是尝试写入其他的master。


sdown和odown:
	sdown:一个哨兵自己觉得master宕机,主观宕机。
	odown:quorum数量的哨兵觉得master宕机,客观宕机。
	

salve选举master算法:
	1. slave跟master断开的时长,如果大于某个值,则认为slave不适合作为master
	2. slave-priority小的。
	3. 如果slave-priority相同,选取slave数据多的(根据offset)。
	4. 如果都相同,就选取run id小的。


关于哨兵集群:
	多台机器做相同的哨兵配置就可以了。向哨兵集群中添加哨兵,会自动发现(通过订阅一个topic),如果某一个哨兵下线了,需要通知其他哨兵清理master状态。
	sentinel reset *		# 重置master状态,在所有哨兵上执行。
	sentinel master masterName		# 所有sentinel数量是否达成一致。

	slave下线:
	sentinel reset masterName		# 重置master状态,在所有哨兵上执行。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值