This article will give you an in-depth understanding of the principles of the Redis sentinel mode, talk about what sentinel can do, start the sentinel method and the Sentinel workflow. I hope it will be helpful to everyone!
The above introduces the principle ofRedis master-slave replication. It solves the problem of Redis data backup. The master node cannot be automatically elected after a failure. The new master node requires manual setting of the slave node as the master node, which is inefficient and cannot achieve automatic failover. Redis officially provides a high-availability solution Sentinel.
Redis Sentinel is the official high availability solution for Redis. Redis Sentinel provides high availability for Redis. In practice, this means that using Sentinel you can create a Redis cluster that is resistant to certain types of failures and automatically implements failover without human intervention. [Related recommendations:Redis Video Tutorial]
1. Monitor the health status of the redis cluster node (master replica) and sentinel node
2. Automatic failover: If the master fails, sentinel can implement failover and notify the customer Connect to the new master.
3. Notification: Through the API, notifications can be sent to administrators and developers. The monitored redis instance has failed
4. Configuration center: The client is connected to sentinel, and sentinel can access it. The master returns the node information to the client
1. redis-sentinel /path/to/sentinel.conf
2. redis-server /path/to/sentinel.conf --sentinel
sentinel.conf configuration instructions are as follows
# 配置需要监控的master节点信息 2代表法定人数 作用是表示需要最少需要多少个sentinel节点同意 #master节点不可达才标记为客观下线 #举例 5个sentinel实例 quorum设置成2 那么有2个sentinel节点认为master不可达, #则其中一个会启动故障转移#如果至少有三个哨兵可到达,故障转移将被授权并实际启动。 sentinel monitor mymaster 127.0.0.1 6379 2 #只需要配置master sentinel会自动检测slave信息 sentinel down-after-milliseconds mymaster 60000 #如果master在指定时间内没有响应ping命令/或报错,则认为主观下线了。 sentinel failover-timeout mymaster 180000 sentinel parallel-syncs mymaster 1 #指定故障转移的时候,同时支持多少个replica并行的与master同步数据,越小故障转移越久 #以上配置可以通过SENTINEL SET command.来实时修改。 sentinel monitor resque 192.168.1.3 6380 4 sentinel down-after-milliseconds resque 10000 sentinel failover-timeout resque 180000 sentinel parallel-syncs resque 5
Note:
Redis-sentinel must use configuration File startup, restart needs to be restored according to the configuration file, port 26379 is opened by default, and port access must be open between sentinels to facilitate mutual access.
1. First, dynamic perception is achieved between sentinels through the pub/subscribe mechanism of redis.
#2. How does sentinel sense that the master has died?
There are two situations here, one is when the master goes offline subjectively, and the other is when the master goes offline objectively.
Subjective offline: Each sentinel sends a ping command to the master every 1s. If the master does not respond within down-after-milliseconds, the sentinel node considers the master to be offline subjectively.
Objective offline:
When the node that is subjectively offline is the master node, the sentinel node will pass the commandsentinel is- masterdown-by-addr
seeks the judgment of other sentinel nodes on the master node. When the number of quorum (the quorum configured in the sentinel configuration) is exceeded, the sentinel node will think that there is indeed a problem with the master node, which is objective. It is offline. Most of the sentinel nodes agree to the offline operation, which means it is objectively offline.
Note that objective offline only takes effect for the master node, it will trigger failover
3, the master is offline, and failover is required
This is divided into two steps , first you need to select the sentinel master node, and perform redis failover through the sentinel master node.
First, sentinel elects the leader. Use the raft algorithm (state consensus algorithm).
Each Sentinel node can become a Leader. When a Sentinel node confirms that the master node of the redis cluster is subjectively offline, it will request other Sentinel nodes to elect itself as the Leader. If the requested Sentinel node has not agreed to the election request of other Sentinel nodes, it agrees to the request (the number of election votes is 1), otherwise it does not agree.
If the number of election votes obtained by a Sentinel node reaches the minimum number of votes for the Leader (the maximum value of quorum and the number of Sentinel nodes/2 1), the Sentinel node is elected as the Leader; otherwise, the election is repeated.
Core idea of Raft: First come, first served, the minority obeys the majority.
After sentinel elects the master node, the sentinel master node needs to elect the redis cluster master node to build a new cluster relationship.
The basis for electing a new redis master node is:
1. The time to disconnect from sentinel. Filter the replica slaves
2 and replica priority found to be disconnected from the main sentinel server for more than the configured host timeout time down-after-milliseconds. Give priority to those with low replica-priority.
3. If the priorities are the same, the copy offset has been processed. The larger the value, the higher the priority, which is more in line with the business scenario function.
4. If the copy offsets are the same, look at the running ID. Prefer small ones.
After selecting the master node, start maintaining the cluster relationship.
1. Sentinel node, send slave no one command to the new master node to make it an independent node
2. Sentinel node, send slaveof ip port to other nodes, follow it to the master node
Through the above analysis, sentinel can achieve automatic failover through regular monitoring methods. However, sentinel still has some problems, such as the situation of a single master node. Under this situation, there is a possibility of data loss, and if the performance of a single machine is limited, there is no ability to expand horizontally.
For more programming-related knowledge, please visit:Introduction to Programming! !
The above is the detailed content of A brief analysis of the principle of sentry mode in Redis. For more information, please follow other related articles on the PHP Chinese website!