利用sentinel和cluster创建Redis集群的区别
1个回答
展开全部
sentinel是解决HA问题的,cluster是解决sharding问题的,经常一起用
再说一下两者的原理:
1. 功能
Sentinel实现如下功能:
(1)monitoring——Redis实例是否正常运行。
(2)notification——通知application错误信息。
(3)failover——某个master死掉,选择一个slave升级为master,修改其他slave的slaveof关系,更新client连接。
(4)configurationprovider——client通过sentinel获取redis地址,并在failover时更新地址。
Redis 2.8及以上版本可用。
2. sentinels and slaves autodiscovery
配置文件中只配置master地址,slave地址和sentinel地址可以自动发现。
(1)sentinels——sentinel之间通过redis pub/sub交换信息获得。
(2)slaves——询问master获得。
3. sdown、odown、failover
故障检测一般都是通过ping-pong机制,sentinel引入sdown(主观下线)和odown(客观下线)机制,目的应该是在集群规模较大时,检测更客观。
(1)sdwon——is-master-down-after-milliseconds(可配置)时间内ping-pong失败。sdown的slave不能升级为master。
(2)odown——超过一定数目(可配置)的sentinel认为sdown,odown只针对master。
(3)failover——多数sentinel认为odown。
4. sentinel集群
sentinel至少需要部署三台以上,形成一个sentinel集群。
(1)作用
failure detection更客观
可用性强,防止sentinel挂掉后不工作
(2)实现
Sentinels之间的数据同步,包括redis状态(odown,sdown),通过redis pub/sub实现。
执行failover需要选举一个sentinel作为leader去执行。
添加sentinel:自动发现
移除sentinel:stopsentinel process/reset all sentinel/check sentinel num
5. slaves选举leader
在slaves中选举一台作为新的master,选举的参考以下数据:
(1)disconnection timefrom the master
(2)slave priority。每个redis instance有一个配置项slave-prority,可以通过info命令读取。slave to master时选择优先级高的,为0的never。
(3)replication offsetprocessed。
(4)run id。
6. 执行failver
(1) slave leader升级为master
(2) 其他slave修改为新master的slave
(3) 客户端修改连接
(4) 老的master如果重启成功,变为新master的slave
7. 配置
必须使用配置文件sentinel.conf,以备重启时恢复信息,sentinel.conf实时更新。
关键内容:
port——默认26379
sentinel monitor mymaster ip quorum——quorum odown
sentinel down-after-millisecondes mymaster
failover-timeout mymaster
parallel-syncs mymaster(修改配置时,同时修改slaveof的个数,越大failover时间越短)
master-name非必要,data-infrastructure实现是可以不使用。采用ip-port列表,针对单个master-name的参数都改为全局参数。
8. 其他
(1)sentinel添加了几个新的api,下面是几个关键的:
masters
slaves master-name
sentinel集群相关的
master-name相关的
(2)reconfiguringsentinel at runtime
sentinel monitor name ip prot quorum
sentinel remove name
sentinel set name option value
(3)removeing the oldmaster or unreachable slaves
(4)sentinel and redisauthentication
(5)sentinelreconfiguration of instances outside the failover procedure
1.2 sentinel clients
Sentinel需要client端的支持。Finigle-redis目前不支持,jedis支持。
1. service discovery
是指在client端输入sentinel地址列表、service name后,自动发现redis实例地址。支持sentinel之前,硬编码redis-instance地址。
步骤:
(1)按顺序尝试连接sentinel集群
(2)get-master-addr-by-namemaster-name询问ip:port,查询失败,请求下一个sentinel
(3)使用role命令检查redis实例是否为master,如果不是(正在failover?),等一会,在从a开始。
2. handling reconnections
以下情况下,client需要重新通过sentinel获取地址建立连接
(1)reconnects after atimeout or socket error
(2)explicitly closed orreconnected by user.
(3)other case where theclient lost connection with redis
3. sentinel failover disconnection
sentinel修改redis配置时,发送client kill命令断开此redis与所有client的连接,使client重新通过sentinel获取配置。
4. connectiong to slaves
sentinel slaves master-name返回slave list
role命令验证
5. connection pools
clients端连接池,修改配置时需要断开所有client连接
6.subscribe to sentinel events to improve responsiveness
client使用pub/sub订阅sentinel reconfigure redis,非必要功能。
再说一下两者的原理:
1. 功能
Sentinel实现如下功能:
(1)monitoring——Redis实例是否正常运行。
(2)notification——通知application错误信息。
(3)failover——某个master死掉,选择一个slave升级为master,修改其他slave的slaveof关系,更新client连接。
(4)configurationprovider——client通过sentinel获取redis地址,并在failover时更新地址。
Redis 2.8及以上版本可用。
2. sentinels and slaves autodiscovery
配置文件中只配置master地址,slave地址和sentinel地址可以自动发现。
(1)sentinels——sentinel之间通过redis pub/sub交换信息获得。
(2)slaves——询问master获得。
3. sdown、odown、failover
故障检测一般都是通过ping-pong机制,sentinel引入sdown(主观下线)和odown(客观下线)机制,目的应该是在集群规模较大时,检测更客观。
(1)sdwon——is-master-down-after-milliseconds(可配置)时间内ping-pong失败。sdown的slave不能升级为master。
(2)odown——超过一定数目(可配置)的sentinel认为sdown,odown只针对master。
(3)failover——多数sentinel认为odown。
4. sentinel集群
sentinel至少需要部署三台以上,形成一个sentinel集群。
(1)作用
failure detection更客观
可用性强,防止sentinel挂掉后不工作
(2)实现
Sentinels之间的数据同步,包括redis状态(odown,sdown),通过redis pub/sub实现。
执行failover需要选举一个sentinel作为leader去执行。
添加sentinel:自动发现
移除sentinel:stopsentinel process/reset all sentinel/check sentinel num
5. slaves选举leader
在slaves中选举一台作为新的master,选举的参考以下数据:
(1)disconnection timefrom the master
(2)slave priority。每个redis instance有一个配置项slave-prority,可以通过info命令读取。slave to master时选择优先级高的,为0的never。
(3)replication offsetprocessed。
(4)run id。
6. 执行failver
(1) slave leader升级为master
(2) 其他slave修改为新master的slave
(3) 客户端修改连接
(4) 老的master如果重启成功,变为新master的slave
7. 配置
必须使用配置文件sentinel.conf,以备重启时恢复信息,sentinel.conf实时更新。
关键内容:
port——默认26379
sentinel monitor mymaster ip quorum——quorum odown
sentinel down-after-millisecondes mymaster
failover-timeout mymaster
parallel-syncs mymaster(修改配置时,同时修改slaveof的个数,越大failover时间越短)
master-name非必要,data-infrastructure实现是可以不使用。采用ip-port列表,针对单个master-name的参数都改为全局参数。
8. 其他
(1)sentinel添加了几个新的api,下面是几个关键的:
masters
slaves master-name
sentinel集群相关的
master-name相关的
(2)reconfiguringsentinel at runtime
sentinel monitor name ip prot quorum
sentinel remove name
sentinel set name option value
(3)removeing the oldmaster or unreachable slaves
(4)sentinel and redisauthentication
(5)sentinelreconfiguration of instances outside the failover procedure
1.2 sentinel clients
Sentinel需要client端的支持。Finigle-redis目前不支持,jedis支持。
1. service discovery
是指在client端输入sentinel地址列表、service name后,自动发现redis实例地址。支持sentinel之前,硬编码redis-instance地址。
步骤:
(1)按顺序尝试连接sentinel集群
(2)get-master-addr-by-namemaster-name询问ip:port,查询失败,请求下一个sentinel
(3)使用role命令检查redis实例是否为master,如果不是(正在failover?),等一会,在从a开始。
2. handling reconnections
以下情况下,client需要重新通过sentinel获取地址建立连接
(1)reconnects after atimeout or socket error
(2)explicitly closed orreconnected by user.
(3)other case where theclient lost connection with redis
3. sentinel failover disconnection
sentinel修改redis配置时,发送client kill命令断开此redis与所有client的连接,使client重新通过sentinel获取配置。
4. connectiong to slaves
sentinel slaves master-name返回slave list
role命令验证
5. connection pools
clients端连接池,修改配置时需要断开所有client连接
6.subscribe to sentinel events to improve responsiveness
client使用pub/sub订阅sentinel reconfigure redis,非必要功能。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询