博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Redis主从配置及HA方案
阅读量:6228 次
发布时间:2019-06-21

本文共 3549 字,大约阅读时间需要 11 分钟。

首先说下主从同步Replication的原理

在Slave启动并连接到Master之后,它将主动发送一条SYNC命令。此后Master将启动后台存盘进程,同时收集所有接收到的用于修改数据集的命令,在后台进程执行完毕后,Master将传送整个数据库文件到Slave,以完成一次完全同步。而Slave服务器在接收到数据库文件数据之后将其存盘并加载到内存中。此后,Master继续将所有已经收集到的修改命令,和新的修改命令依次传送给Slaves,Slave将在本次执行这些数据修改命令,从而达到最终的数据同步。

如果Master和Slave之间的链接出现断连现象,Slave可以自动重连Master,但是在连接成功之后,一次完全同步将被自动执行。

 

服务器名称 内网IP

Master 172.30.21.96

Slave1 172.30.21.88
Slave2 172.30.21.89
Slave3 172.30.21.90
Slave4 172.30.21.91

master配置

logfile “/tmp/redis6379.log” # slaveof 
#master这个地方注释不打开,保持默认

启动master

./redis-server ../redis.conf &

slave配置

logfile “/tmp/redis6379.log”slaveof 172.30.21.96 6379

启动slave

./redis-server ../redis.conf &

检查启动结果

在各自服务器上用 redis-cli客户端连接redis,输入info指令,即可查看主从的状态。

master:

slave:

 

主从切换

Redis的主从架构,如果没有设置哨兵,那么如果master出现故障,需要手动将slave切换成master继续服务。下面先说明如何进行手动切换:

#在新的master上执行:SLAVEOF NO ONE#在其他的slave上执行:SLAVEOF 
<新的masterip>
<新的masterport>

原来的主redis恢复正常了,要重新切换回去。重新切回的步骤如下:

1 将现在的主redis的数据进行保存(save指令)2 将现在的主redis根目录下dump.rdb文件拷贝覆盖到原来主redis的根目录3 启动原来的主redis4 在现在的主redis中切换 SLAVEOF 
<旧的masterip>
<旧的masterport>
5 在其他的slave节点切换 SLAVEOF
<旧的masterip>
<旧的masterport>
6 完毕

自动切换(高可用方案配置)

  手动的方式容易造成失误,容易导致数据丢失,而且如果主从节点很多,切换起来也很麻烦。自动切换一般通过设置哨兵实现。哨兵可以对master和slave进行监控,并在master出现故障的时候,能自动将slave切换成master。

  redis哨兵(Redis Sentinel)的启动和redis实例的启动没有关系。所以可以在任何机器上启动redis哨兵。Redis Sentinel 是一个分布式系统,可以在整个redis主从架构中运行多个 Sentinel 进程(progress)。建议至少要保证有两个哨兵在运行,要不然物理机宕机后哨兵进程也不存在了,就无法进行主从切换。

  我们这里有5台redis服务器(1主4从),所以启动5个哨兵。每个哨兵的配置如下:

 修改sentinel.conf的配置:

logfile "/tmp/sentinel.log"sentinel monitor mymaster 172.30.21.96 6379 2 #这个2代表,当集群中有2个sentinel认为master挂了时,才能真正认为该master已经不可用了

启动sentinel(默认端口号26379)

./redis-sentinel ../sentinel.conf &

 

关于sentinel可以看,有很多的说明。这里列出一些主要的配置属性:

# 指明日志文件名logfile "/tmp/sentinel.log"# 哨兵监控的master,主从配置一样,这里只用输入redis主节点的ip/port和法定人数。sentinel monitor mymaster 172.30.21.96 6379 1# master或slave多长时间(默认30秒)不能使用后标记为s_down状态。sentinel down-after-milliseconds mymaster 5000# 若sentinel在该配置值内未能完成failover操作(即故障时master/slave自动切换),则认为本次failover失败。sentinel failover-timeout mymaster 18000# 设置master和slaves验证密码sentinel auth-pass mymaster 123456 # 指定了在执行故障转移时, 最多可以有多少个从服务器同时对新的主服务器进行同步sentinel parallel-syncs mymaster 1

 

通过哨兵查看集群的信息:

$ redis-cli -p 26379sentinel master mymaster//查看master的状态 SENTINEL slaves mymaster //查看salves的状态SENTINEL sentinels mymaster //查看哨兵的状态SENTINEL get-master-addr-by-name mymaster//获取当前master的地址info sentinel//查看哨兵信息

 

写个代码测试下:

public static void main(String[] args) {        Set
sentinels = new HashSet
(); sentinels.add(new HostAndPort("172.30.21.96", 26379).toString()); sentinels.add(new HostAndPort("172.30.21.88", 26379).toString()); sentinels.add(new HostAndPort("172.30.21.89", 26379).toString()); sentinels.add(new HostAndPort("172.30.21.90", 26379).toString()); sentinels.add(new HostAndPort("172.30.21.91", 26379).toString()); JedisSentinelPool sentinelPool = new JedisSentinelPool("mymaster", sentinels); System.out.println("Current master: " + sentinelPool.getCurrentHostMaster().toString()); Jedis master = sentinelPool.getResource(); //master.set("username","jager"); System.out.println(master.get("username")); sentinelPool.close(); sentinelPool.destroy(); }

 

参考文档:

http://blog.csdn.net/quiet_boy/article/details/53885406

http://www.cnblogs.com/Xrinehart/p/3502198.html

http://www.cnblogs.com/clor001/p/5409891.html

http://www.cnblogs.com/lulu/archive/2013/04/14/3021261.html

转载于:https://www.cnblogs.com/jager/p/6349860.html

你可能感兴趣的文章
关于Mac 下 Charles的使用 以及碰到无法抓包的问题
查看>>
7月份前端资源分享
查看>>
搜狗手机助手联合腾讯御安全 共建APP安全生态环境
查看>>
Codeigniter 4.0-dev 版源码学习笔记之五——相对于 3.x 的变化
查看>>
一条命令配置好ssh免密登录
查看>>
(译 & 转载) 2016 JavaScript 后起之秀
查看>>
代码迭代的几种方式
查看>>
GB(一)
查看>>
Gitter:高颜值GitHub小程序客户端诞生记
查看>>
Swift 烧脑体操(二) - 函数的参数
查看>>
V8十年故事:从农场诞生的星球最强JS引擎
查看>>
微服务网关Kong 1.0正式发布!提供100+项功能
查看>>
《The Startup Way》作者访谈
查看>>
慎用!BLEU评价NLP文本输出质量存在严重问题
查看>>
大规模集群中Docker镜像如何分发管理?试试Uber刚开源的Kraken
查看>>
阿里巴巴陈武:通过亿级用户App的实践验证,锤炼高质量APM体系
查看>>
高效运维最佳实践:如何做好On-call和事故响应?
查看>>
矩阵:如何使用矩阵操作进行 PageRank 计算?
查看>>
C# 8的新提案:new关键字类型推断
查看>>
方面和服务,差别大吗?
查看>>