3台机器轻松搭建一个高可用Redis服务架构

 1.先搭建redis 主从

$ wget http://download.redis.io/releases/redis-4.0.9.tar.gz
$ tar xzf redis-4.0.9.tar.gz
$ cd redis-4.0.9
$ make

WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.

echo 511 > /proc/sys/net/core/somaxconn

WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect

vi /etc/sysctl.conf

net.core.somaxconn = 1024

vm.overcommit_memory = 1

sysctl -p 

WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
25651:M 21 May 15:38:38.418 * DB loaded from disk: 0.000 seconds

configuration

cluster-enabled <yes/no>:  如果yes在特定的Redis实例中启用Redis集群支持。否则,实例通常作为独立实例启动。

cluster-config-file <filename>:  请注意,尽管使用了此选项的名称,但这不是用户可编辑的配置文件,而是Redis群集节点在每次发生更改时自动保留群集配置(基本状态)的文件,以便能够在启动时重新读取它。该文件列出了集群中其他节点,状态,持久变量等等。由于某些消息接收,通常会将此文件重写并刷新到磁盘上。

cluster-node-timeout<milliseconds>:Redis集群节点可以不可用的最长时间,不会将其视为失败。如果主节点超过指定的时间不可达,它将由其从属设备进行故障切换。此参数控制Redis群集中的其他重要事项。值得注意的是,每个无法在指定时间内到达大多数主节点的节点将停止接受查询。

cluster-slave-validity-factor<factor>:如果设置为零,则无论主设备和从设备之间的链路保持断开连接的时间长短,从设备都将尝试故障切换主设备。如果该值为正值,则计算最大断开时间作为节点超时值乘以此选项提供的系数,并且如果节点是从属节点,则在主链路断开超过指定时间量时,它不会尝试启动故障切换。例如,如果节点超时设置为5秒,并且有效因子设置为10,则与主设备断开连接超过50秒的从设备将不会尝试对其主设备进行故障切换。请注意,如果没有从属服务器能够对其进行故障转移,则任何非零值都可能导致Redis群集在主服务器出现故障后不可用。在这种情况下,只有原始主节点重新加入集群时,集群才会返回可用。

cluster-migration-barrier<count>:主设备将保持连接的最小从设备数量,以便另一个从设备迁移到不受任何从设备覆盖的主设备。有关更多信息,请参阅本教程中有关副本迁移的相应部分。

cluster-require-full-coverage<yes/no>:如果将其设置为yes,则默认情况下,如果密钥空间的某个百分比未被任何节点覆盖,则集群停止接受写入。如果该选项设置为no,则即使只处理关于密钥子集的请求,群集仍将提供查询。

主 redis.conf 配置

port 2006

protected-mode no

dir "/var/redis/data/"

daemonize yes

requirepass "gkm"
masterauth "gkm"

logfile "/gongkongmall/log/redis/redis.log"

 

从 redis.conf 配置

port 2006

protected-mode no

dir "/var/redis/data/"

daemonize yes

requirepass "gkm"
masterauth "gkm"

logfile "/gongkongmall/log/redis/redis.log"

slaveof 192.168.0.108 2006

redis 启动 停止

$ ./redis-server ../redis.conf

$ ./redis-cli -h 192.168.0.102 -p 2006 -a gkm shutdown

执行info replication查看当前主从配置

./redis-cli -h 192.168.0.102 -p 2006 -a gkm INFO replication

2.Redis Sentinel

sentinel的基本知识

在部署前了解有关Sentinel的基本知识
1、您需要至少三个Sentinel实例才能实现可靠的部署。
2、三个Sentinel实例应放置在相信独立失败的计算机或虚拟机中。例如,不同的物理服务器或虚拟机在不同的可用区域上执行。
3、由于Redis使用异步复制,Sentinel + Redis分布式系统不保证在故障期间保留已确认的写入。然而,有些方法可以部署Sentinel,使窗口可以丢失局限于某些时刻的写入,而另外还有其他安全性较低的部署方式。
4、您的客户需要支持Sentinel。受欢迎的客户端库支持Sentinel,但不是全部。
5、如果您不在开发环境中进行不定期测试,或者在生产环境中可以更好地进行测试(如果可行),那么就没有安全的HA设置。你可能有一个错误的配置,只有当它太迟了(凌晨3点,当你的主站停止工作时)才会显现出来。
6、Sentinel,Docker或其他形式的网络地址转换或端口映射应该小心:Docker执行端口重新映射,打破其他Sentinel进程的Sentinel自动发现以及主服务器的从属列表

sentinel配置

sentinel monitor mymaster 192.168.0.102 2006 2
sentinel down-after-milliseconds mymaster 60000
sentinel failover-timeout mymaster 180000
sentinel parallel-syncs mymaster 1
daemonize yes
logfile /var/log/redis/redis-sentinel.log

配置说明

daemonize yes 以后台进程模式运行

sentinel monitor mymaster 192.168.0.102 6379 2

Sentinel去监视一个名为redis-master的主服务器,这个主服务器的IP地址为192.168.0.102 ,端口号为2006。将这个主服务器判断为失效至少需要2个Sentinel同意,一般设置为N/2+1(N为Sentinel总数)。只要同意Sentinel的数量不达标,自动故障迁移就不会执行。

sentinel down-after-milliseconds mymaster 60000

down-after-milliseconds选项指定了Sentinel认为服务器已经断线所需的毫秒数。如果服务器在给定的毫秒数之内,没有返回Sentinel发送的PING命令的回复,或者返回一个错误,那么Sentinel将这个服务器标记为主观下线(subjectively down,简称SDOWN)。

sentinel failover-timeout redis-master 180000

如果在多少毫秒内没有把宕掉的那台Master恢复,那Sentinel认为这是一次真正的宕机。在下一次选取时排除该宕掉的Master作为可用的节点,然后等待一定的设定值的毫秒数后再来探测该节点是否恢复,如果恢复就把它作为一台Slave加入Sentinel监测节点群,并在下一次切换时为他分配一个”选取号”。

sentinel parallel-syncs mymaster 2

parallel-syncs选项指定了在执行故障转移时,最多可以有多少个从服务器同时对新的主服务器进行同步。这个数字越小,完成故障转移所需的时间就越长。

sentinel auth-pass redis-master 000000

当Master设置了密码时,Sentinel连接Master和Slave时需要通过设置参数auth-pass配置相应密码。

sentinel notification-script redis-master /etc/redis/notify.sh

指定Sentinel检测到该监控的Redis实例failover时调用的报警脚本。脚本被允许执行的最大时间为60秒,超过这个时间脚本会被kill。该配置项可选,但线上系统建议配置。这里的通知脚本简单的记录一下failover事件。

启动redis-sentinel

./redis-sentinel  /etc/sentinel.conf

三个redis-sentinel服务启动完毕后,连接任意sentinel服务可以获知当前主redis服务信息

./redis-cli -h 192.168.0.102  -p 26379 INFO Sentinel

停掉一台

./redis-cli -h 192.168.0.102 -p 2006 -a gkm shutdown

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值