mirror of
https://github.com/fluencelabs/redis
synced 2025-03-30 22:31:03 +00:00
Sentinel: Redis-side support for slave priority.
A Redis slave can now be configured with a priority, that is an integer number that is shown in INFO output and can be get and set using the redis.conf file or the CONFIG GET/SET command. This field is used by Sentinel during slave election. A slave with lower priority is preferred. A slave with priority zero is never elected (and is considered to be impossible to elect even if it is the only slave available). A next commit will add support in the Sentinel side as well.
This commit is contained in:
parent
c14e0ecafd
commit
169a44cbd6
@ -354,6 +354,8 @@ void loadServerConfigFromString(char *config) {
|
|||||||
if ((server.stop_writes_on_bgsave_err = yesnotoi(argv[1])) == -1) {
|
if ((server.stop_writes_on_bgsave_err = yesnotoi(argv[1])) == -1) {
|
||||||
err = "argument must be 'yes' or 'no'"; goto loaderr;
|
err = "argument must be 'yes' or 'no'"; goto loaderr;
|
||||||
}
|
}
|
||||||
|
} else if (!strcasecmp(argv[0],"slave-priority") && argc == 2) {
|
||||||
|
server.slave_priority = atoi(argv[1]);
|
||||||
} else if (!strcasecmp(argv[0],"sentinel")) {
|
} else if (!strcasecmp(argv[0],"sentinel")) {
|
||||||
/* argc == 1 is handled by main() as we need to enter the sentinel
|
/* argc == 1 is handled by main() as we need to enter the sentinel
|
||||||
* mode ASAP. */
|
* mode ASAP. */
|
||||||
@ -666,6 +668,10 @@ void configSetCommand(redisClient *c) {
|
|||||||
|
|
||||||
if (yn == -1) goto badfmt;
|
if (yn == -1) goto badfmt;
|
||||||
server.rdb_checksum = yn;
|
server.rdb_checksum = yn;
|
||||||
|
} else if (!strcasecmp(c->argv[2]->ptr,"slave-priority")) {
|
||||||
|
if (getLongLongFromObject(o,&ll) == REDIS_ERR ||
|
||||||
|
ll <= 0) goto badfmt;
|
||||||
|
server.slave_priority = ll;
|
||||||
} else {
|
} else {
|
||||||
addReplyErrorFormat(c,"Unsupported CONFIG parameter: %s",
|
addReplyErrorFormat(c,"Unsupported CONFIG parameter: %s",
|
||||||
(char*)c->argv[2]->ptr);
|
(char*)c->argv[2]->ptr);
|
||||||
@ -755,6 +761,7 @@ void configGetCommand(redisClient *c) {
|
|||||||
config_get_numerical_field("repl-timeout",server.repl_timeout);
|
config_get_numerical_field("repl-timeout",server.repl_timeout);
|
||||||
config_get_numerical_field("maxclients",server.maxclients);
|
config_get_numerical_field("maxclients",server.maxclients);
|
||||||
config_get_numerical_field("watchdog-period",server.watchdog_period);
|
config_get_numerical_field("watchdog-period",server.watchdog_period);
|
||||||
|
config_get_numerical_field("slave-priority",server.slave_priority);
|
||||||
|
|
||||||
/* Bool (yes/no) values */
|
/* Bool (yes/no) values */
|
||||||
config_get_bool_field("no-appendfsync-on-rewrite",
|
config_get_bool_field("no-appendfsync-on-rewrite",
|
||||||
|
@ -1160,6 +1160,7 @@ void initServerConfig() {
|
|||||||
server.repl_serve_stale_data = 1;
|
server.repl_serve_stale_data = 1;
|
||||||
server.repl_slave_ro = 1;
|
server.repl_slave_ro = 1;
|
||||||
server.repl_down_since = time(NULL);
|
server.repl_down_since = time(NULL);
|
||||||
|
server.slave_priority = REDIS_DEFAULT_SLAVE_PRIORITY;
|
||||||
|
|
||||||
/* Client output buffer limits */
|
/* Client output buffer limits */
|
||||||
server.client_obuf_limits[REDIS_CLIENT_LIMIT_CLASS_NORMAL].hard_limit_bytes = 0;
|
server.client_obuf_limits[REDIS_CLIENT_LIMIT_CLASS_NORMAL].hard_limit_bytes = 0;
|
||||||
@ -2092,6 +2093,8 @@ sds genRedisInfoString(char *section) {
|
|||||||
"master_link_down_since_seconds:%ld\r\n",
|
"master_link_down_since_seconds:%ld\r\n",
|
||||||
(long)server.unixtime-server.repl_down_since);
|
(long)server.unixtime-server.repl_down_since);
|
||||||
}
|
}
|
||||||
|
info = sdscatprintf(info,
|
||||||
|
"slave_priority:%d\r\n", server.slave_priority);
|
||||||
}
|
}
|
||||||
info = sdscatprintf(info,
|
info = sdscatprintf(info,
|
||||||
"connected_slaves:%lu\r\n",
|
"connected_slaves:%lu\r\n",
|
||||||
|
@ -57,10 +57,9 @@
|
|||||||
#define REDIS_SLOWLOG_MAX_LEN 128
|
#define REDIS_SLOWLOG_MAX_LEN 128
|
||||||
#define REDIS_MAX_CLIENTS 10000
|
#define REDIS_MAX_CLIENTS 10000
|
||||||
#define REDIS_AUTHPASS_MAX_LEN 512
|
#define REDIS_AUTHPASS_MAX_LEN 512
|
||||||
|
#define REDIS_DEFAULT_SLAVE_PRIORITY 100
|
||||||
#define REDIS_REPL_TIMEOUT 60
|
#define REDIS_REPL_TIMEOUT 60
|
||||||
#define REDIS_REPL_PING_SLAVE_PERIOD 10
|
#define REDIS_REPL_PING_SLAVE_PERIOD 10
|
||||||
|
|
||||||
#define REDIS_RUN_ID_SIZE 40
|
#define REDIS_RUN_ID_SIZE 40
|
||||||
#define REDIS_OPS_SEC_SAMPLES 16
|
#define REDIS_OPS_SEC_SAMPLES 16
|
||||||
|
|
||||||
@ -694,6 +693,7 @@ struct redisServer {
|
|||||||
int repl_serve_stale_data; /* Serve stale data when link is down? */
|
int repl_serve_stale_data; /* Serve stale data when link is down? */
|
||||||
int repl_slave_ro; /* Slave is read only? */
|
int repl_slave_ro; /* Slave is read only? */
|
||||||
time_t repl_down_since; /* Unix time at which link with master went down */
|
time_t repl_down_since; /* Unix time at which link with master went down */
|
||||||
|
int slave_priority; /* Reported in INFO and used by Sentinel. */
|
||||||
/* Limits */
|
/* Limits */
|
||||||
unsigned int maxclients; /* Max number of simultaneous clients */
|
unsigned int maxclients; /* Max number of simultaneous clients */
|
||||||
unsigned long long maxmemory; /* Max number of memory bytes to use */
|
unsigned long long maxmemory; /* Max number of memory bytes to use */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user