Redis基于HA的集群布署 -- Redis Sentinel

来源:互联网 发布:推荐有品质的淘宝女装 编辑:程序博客网 时间:2024/06/05 14:14

Redis基于HA的集群布署 – Redis Sentinel

Redis Sentinel规划

考虑到大多数学习者环境有限,我们使用如下配置:

IP 端口 身份 192.168.41.128 7001 master 192.168.41.128 7002 slave 192.168.41.128 26379 sentinel

所以我们在一台服务器上安装3个目录:

  • redis1-对应master
  • redis2-对应slave
  • redis-sentinel对应sentinel,它使用26379这个端口来监控master和slave

因此我们使用redis-stable源码包来如此构建我们的实验环境:

[root@bogon redis-stable]# make PREFIX=/usr/local/redis1 install[root@bogon redis-stable]# make PREFIX=/usr/local/redis2 install[root@bogon redis-stable]# make PREFIX=/usr/local/redis-sentinel install

根据redis安装教程安装 三个测试redis

Sentinel中的配置

更改/usr/local/redis-sentinel/bin/sentinel.conf文件:

port 26379  daemonize yes  logfile "/var/log/redis/sentinel.log"  sentinel monitor master1 192.168.56.101 7001 1  sentinel down-after-milliseconds master1 1000  sentinel failover-timeout master1 5000  #sentinel can-failover master1 yes #remove from 2.8 and aboved version  
  1. daemonize yes – 以后台进程模式运行

  2. port 26379 – 哨兵的端口号,该端口号默认为26379,不得与任何redis node的端口号重复

  3. logfile “/var/log/redis/sentinel.log“ – log文件所在地

  4. sentinel monitor master1 192.168.56.101 7001 1 – (第一次配置时)哨兵对哪个master进行监测,此处的master1为一“别名”可以任意如sentinel-26379,然后哨兵会通过这个别名后的IP知道整个该master内的slave关系。因此你不用在此配置slave是什么而由哨兵自己去维护这个“链表”。

  5. sentinel monitor master1 192.168.56.101 7001 1 – 这边有一个“1”,这个“1”代表当新master产生时,同时进行“slaveof”到新master并进行同步复制的slave个数。在salve执行salveof与同步时,将会终止客户端请求。此值较大,意味着“集群”终止客户端请求的时间总和和较大。此值较小,意味着“集群”在故障转移期间,多个salve向客户端提供服务时仍然使用旧数据。我们这边只想让一个slave来做此时的响应以取得较好的客户端体验。

  6. sentinel down-after-milliseconds master1 1000 – 如果master在多少秒内无反应哨兵会开始进行master-slave间的切换,使用“选举”机制

  7. sentinel failover-timeout master1 5000 – 如果在多少秒内没有把宕掉的那台master恢复,那哨兵认为这是一次真正的宕机,而排除该宕掉的master作为节点选取时可用的node然后等待一定的设定值的毫秒数后再来探测该节点是否恢复,如果恢复就把它作为一台slave加入哨兵监测节点群并在下一次切换时为他分配一个“选取号”。

  8. sentinel can-failover master1 yes #remove from 2.8 and aboved version – 该功能已经从2.6版以后去除,因此注释掉,网上的教程不适合于redis-stable版

在配置Redis Sentinel做Redis的HA场景时,一定要注意下面几个点:

  1. 除非有多机房HA场景的存在,坚持使用单向链接式的master->slave的配置如:node3->node2->node1,把node1设为master

  2. 如果sentinel(哨兵)或者是HA群重启,一定要使用如此顺序:先启master,再启slave,再启哨兵

  3. 第一次配置完成“哨兵”HA群时每次启动不需要手动再去每个redis node中去更改master slave这些参数了,哨兵会在第一次启动后记录和动态修改每个节点间的关系,第一次配置好启动“哨兵”后由哨兵以后自行维护一般情况下不需要人为干涉,如果切换过一次master/slave后也因该记得永远先起master再起slave再起哨兵这个顺序,具体当前哪个是master可以直接看哨兵的sentinel.conf文件中最末尾哨兵自行的记录

Redis Master和Redis Slave的配置

这部分配置除了端口号,所在目录,pid文件与log文件不同其它配置相同,因此下面只给出一份配置:

daemonize yes  pidfile "/var/run/redis/redis1.pid"  port 7001  tcp-backlog 511  timeout 0  tcp-keepalive 0  loglevel notice  logfile "/var/log/redis/redis1.log"  databases 16  save 900 1  save 300 10  save 60 10000  stop-writes-on-bgsave-error no  rdbcompression yes  rdbchecksum yes  dbfilename "dump.rdb"  dir "/usr/local/redis1/data"  slave-serve-stale-data yes  slave-read-only yes #slave只读,当你的应用程序试图向一个slave写数据时你会得到一个错误  repl-diskless-sync no  repl-disable-tcp-nodelay no  slave-priority 100  maxmemory 0  appendonly no  # The name of the append only file (default: "appendonly.aof")  appendfilename "appendonly.aof"  # appendfsync always  #appendfsync everysec  appendfsync no #关闭AOF  no-appendfsync-on-rewrite yes  auto-aof-rewrite-percentage 100  auto-aof-rewrite-min-size 64mb  aof-load-truncated yes  lua-time-limit 5000  slowlog-log-slower-than 10000  slowlog-max-len 128  latency-monitor-threshold 0  notify-keyspace-events "gxE"  hash-max-ziplist-entries 512  hash-max-ziplist-value 64  list-max-ziplist-entries 512  list-max-ziplist-value 64  set-max-intset-entries 512  zset-max-ziplist-entries 128  zset-max-ziplist-value 64  hll-sparse-max-bytes 3000  client-output-buffer-limit normal 0 0 0  client-output-buffer-limit slave 256mb 64mb 60  client-output-buffer-limit pubsub 32mb 8mb 60  hz 10  

其中:

slave-read-only yes 我们把slave设成只读,当你的应用程序试图向一个slave写数据时你会得到一个错误
appendfsync no 我们关闭了AOF功能

这是192.168.41.128:7001 master上的配置,你要把192.168.41.128:7002作为slave,那很简单,你只需要在redis2的配置文件的最未尾加入一句:

slaveof 192.168.41.1128 7001  

配完了master, slave和sentinel后,我们按照这个顺序来启动redis HA:

master->slave->sentinel

启动后我们通过windows客户端使用命令:

redis-cli -p 26379 -h 192.168.41.128  

进入我们配置好的sentinel后并使用: info命令来查看我们的redis sentinel HA配置。可以看到目前它的master为7001,它有一个slave。
这里写图片描述

为了确认,我们另外开一个command窗口,通过:

redis-cli -p 7001 -h 192.168.41.128

进入到7001后再使用redis内部命令info replication来查看相关信息
这里写图片描述

我们还可以通过命令:

redis-cli -h 192.168.41.128 -p 7002  

进入到7002中并通过info replication来查看7002内的情况:
这里写图片描述

原创粉丝点击