如下是部署拓扑结构:
1.第一步先配置一个一主两备的结构:分别在备库上用salveof ip port(该配置也可以放进配置文件中)
2.配置sentinel节点(这里配置三个节点,分别是26379/26380/26381),配置和redis配置差不多,其中一个节点的配置如下:
port 26379 daemonize yes logfile "26379.log" dir /data/26379/data sentinel monitor mymaster 127.0.0.1 6379 2 sentinel down-after-milliseconds mymaster 30000 sentinel parallel-syncs mymaster 1 sentinel failover-timeout mymaster 180000
1)sentinel端口号是26379
2)sentinel monitor mymaster 127.0.0.1 6379 2 配置代表sentinel-1节点需要监控127.0.0.1:6379这个主节点,2代表判断主节点失败至少需要2个sentinel节点同意,mymaster是主节点的别名。
3.确认sentinel是否配置上了,sentinel节点本质就是一个特殊的redis节点,所以可以通过info命令来查询它的相关信息
[root@redis 26379]# redis-cli -p 26379 info sentinel # Sentinel sentinel_masters:1 sentinel_tilt:0 sentinel_running_scripts:0 sentinel_scripts_queue_length:0 sentinel_simulate_failure_flags:0 master0:name=mymaster,status=ok,address=127.0.0.1:6379,slaves=2,sentinels=3
上面sentinels=3说明有三个哨兵在监控redis节点,但是从上面的配置来说还要注意一下2点:
1)生产环境中建议redis sentinel的所有节点应该分布在不同的物理机上。
2)redis sentinel中的数据节点和普通的redis数据节点在配置上没有任何不同,只不过添加了一些sentinel节点对它们的监控。
配置讲解:
这里如果使用的redis源码包安装的话,那么在安装目录下面会有一个默认的sentinel.con文件,该文件里面有一些配置参数,说明如下:
- sentinel monitor
格式如下:sentinel monitor <master-name> <ip> <port> <quorum>
sentinel节点会定期监控主节点,所以从配置上必然也会有所体现,本配置说明sentinel节点要监控的是一个名字叫做<master-name>,ip地址和端口号为<ip><port>的主节点。<quorum>代表要判定主节点最终不可达所需要的票数,但实际上sentinel节点会对所有节点进行监控。
某个sentinel初始节点配置如下:
port 26379 daemonize yes logfile "26379.log" dir /data/26379/data sentinel monitor mymaster 127.0.0.1 6379 2 sentinel down-after-milliseconds mymaster 30000 sentinel parallel-syncs mymaster 1 sentinel failover-timeout mymaster 180000
当所有节点启动后,配置文件的内容发生了变化,其中主要体现在三个方便:
1)sentinel 节点自动发现从节点和其余sentinel节点
2)去掉了默认配置,例如parallel-syncs、failover-timeout参数
3)添加了配置纪元相关参数
启动后的参数文件变化为:
[root@redis 26379]# cat redis-sentinel-26379.conf port 26379 daemonize yes logfile "26379.log" dir "/data/26379/data" sentinel monitor mymaster 127.0.0.1 6379 2 # Generated by CONFIG REWRITE protected-mode no pidfile "/var/run/redis.pid" user default on nopass ~* &* +@all sentinel myid ab0fbd6da2b0a72051dbe3bee8ef3f02b3cc9a2a sentinel config-epoch mymaster 0 sentinel leader-epoch mymaster 0 sentinel current-epoch 0 sentinel known-replica mymaster 127.0.0.1 6381 sentinel known-replica mymaster 127.0.0.1 6380 sentinel known-sentinel mymaster 127.0.0.1 26381 eadd4c9ebfa6c1fbcbfdc5d7e1eec13c80774ec5 sentinel known-sentinel mymaster 127.0.0.1 26380 18e34da0c4ee7c3c285d1d2735d8ab12a44cd72b
<quorum>参数用于故障发现和判定,例如将quorum配置为2,代表至少2个Sentinel节点认为主节点不可达,那么这个不可达的判定才是客观的。对于<quorum>设置的越小,那么达到下线的条件越宽松,反之越严格,一般建议将其设置为sentinel节点的一半加1。