Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ruanhaishen
redis
Commits
db100c46
Commit
db100c46
authored
Sep 26, 2012
by
antirez
Browse files
Sentinel: Support for AUTH.
parent
0ee3f055
Changes
2
Show whitespace changes
Inline
Side-by-side
sentinel.conf
View file @
db100c46
...
@@ -13,6 +13,25 @@ port 26379
...
@@ -13,6 +13,25 @@ port 26379
# The valid charset is A-z 0-9 and the three characters ".-_".
# The valid charset is A-z 0-9 and the three characters ".-_".
sentinel
monitor
mymaster
127
.
0
.
0
.
1
6379
2
sentinel
monitor
mymaster
127
.
0
.
0
.
1
6379
2
# sentinel auth-pass <master-name> <password>
#
# Set the password to use to authenticate with the master and slaves.
# Useful if there is a password set in the Redis instances to monitor.
#
# Note that the master password is also used for slaves, so it is not
# possible to set a different password in masters and slaves instances
# if you want to be able to monitor these instances with Sentinel.
#
# However you can have Redis instances without the authentication enabled
# mixed with Redis instances requiring the authentication (as long as the
# password set is the same for all the instances requiring the password) as
# the AUTH command will have no effect in Redis instances with authentication
# switched off.
#
# Example:
#
# sentinel auth-pass mymaster MySUPER--secret-0123passw0rd
# sentinel down-after-milliseconds <master-name> <milliseconds>
# sentinel down-after-milliseconds <master-name> <milliseconds>
#
#
# Number of milliseconds the master (or any attached slave or sentinel) should
# Number of milliseconds the master (or any attached slave or sentinel) should
...
...
src/sentinel.c
View file @
db100c46
...
@@ -162,6 +162,7 @@ typedef struct sentinelRedisInstance {
...
@@ -162,6 +162,7 @@ typedef struct sentinelRedisInstance {
dict
*
slaves
;
/* Slaves for this master instance. */
dict
*
slaves
;
/* Slaves for this master instance. */
int
quorum
;
/* Number of sentinels that need to agree on failure. */
int
quorum
;
/* Number of sentinels that need to agree on failure. */
int
parallel_syncs
;
/* How many slaves to reconfigure at same time. */
int
parallel_syncs
;
/* How many slaves to reconfigure at same time. */
char
*
auth_pass
;
/* Password to use for AUTH against master & slaves. */
/* Slave specific. */
/* Slave specific. */
mstime_t
master_link_down_time
;
/* Slave replication link down time. */
mstime_t
master_link_down_time
;
/* Slave replication link down time. */
...
@@ -326,6 +327,7 @@ void sentinelEvent(int level, char *type, sentinelRedisInstance *ri, const char
...
@@ -326,6 +327,7 @@ void sentinelEvent(int level, char *type, sentinelRedisInstance *ri, const char
sentinelRedisInstance
*
sentinelSelectSlave
(
sentinelRedisInstance
*
master
);
sentinelRedisInstance
*
sentinelSelectSlave
(
sentinelRedisInstance
*
master
);
void
sentinelScheduleScriptExecution
(
char
*
path
,
...);
void
sentinelScheduleScriptExecution
(
char
*
path
,
...);
void
sentinelStartFailover
(
sentinelRedisInstance
*
master
,
int
state
);
void
sentinelStartFailover
(
sentinelRedisInstance
*
master
,
int
state
);
void
sentinelDiscardReplyCallback
(
redisAsyncContext
*
c
,
void
*
reply
,
void
*
privdata
);
/* ========================= Dictionary types =============================== */
/* ========================= Dictionary types =============================== */
...
@@ -874,6 +876,7 @@ sentinelRedisInstance *createSentinelRedisInstance(char *name, int flags, char *
...
@@ -874,6 +876,7 @@ sentinelRedisInstance *createSentinelRedisInstance(char *name, int flags, char *
ri
->
down_after_period
=
master
?
master
->
down_after_period
:
ri
->
down_after_period
=
master
?
master
->
down_after_period
:
SENTINEL_DOWN_AFTER_PERIOD
;
SENTINEL_DOWN_AFTER_PERIOD
;
ri
->
master_link_down_time
=
0
;
ri
->
master_link_down_time
=
0
;
ri
->
auth_pass
=
NULL
;
ri
->
slave_priority
=
SENTINEL_DEFAULT_SLAVE_PRIORITY
;
ri
->
slave_priority
=
SENTINEL_DEFAULT_SLAVE_PRIORITY
;
ri
->
slave_reconf_sent_time
=
0
;
ri
->
slave_reconf_sent_time
=
0
;
ri
->
slave_master_host
=
NULL
;
ri
->
slave_master_host
=
NULL
;
...
@@ -921,6 +924,7 @@ void releaseSentinelRedisInstance(sentinelRedisInstance *ri) {
...
@@ -921,6 +924,7 @@ void releaseSentinelRedisInstance(sentinelRedisInstance *ri) {
sdsfree
(
ri
->
client_reconfig_script
);
sdsfree
(
ri
->
client_reconfig_script
);
sdsfree
(
ri
->
slave_master_host
);
sdsfree
(
ri
->
slave_master_host
);
sdsfree
(
ri
->
leader
);
sdsfree
(
ri
->
leader
);
sdsfree
(
ri
->
auth_pass
);
releaseSentinelAddr
(
ri
->
addr
);
releaseSentinelAddr
(
ri
->
addr
);
/* Clear state into the master if needed. */
/* Clear state into the master if needed. */
...
@@ -1205,6 +1209,11 @@ char *sentinelHandleConfiguration(char **argv, int argc) {
...
@@ -1205,6 +1209,11 @@ char *sentinelHandleConfiguration(char **argv, int argc) {
return
"Client reconfiguration script seems non existing or "
return
"Client reconfiguration script seems non existing or "
"non executable."
;
"non executable."
;
ri
->
client_reconfig_script
=
sdsnew
(
argv
[
2
]);
ri
->
client_reconfig_script
=
sdsnew
(
argv
[
2
]);
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"auth-pass"
)
&&
argc
==
3
)
{
/* auth-pass <name> <password> */
ri
=
sentinelGetMasterByName
(
argv
[
1
]);
if
(
!
ri
)
return
"No such master with specified name."
;
ri
->
auth_pass
=
sdsnew
(
argv
[
2
]);
}
else
{
}
else
{
return
"Unrecognized sentinel configuration statement."
;
return
"Unrecognized sentinel configuration statement."
;
}
}
...
@@ -1263,6 +1272,21 @@ void sentinelDisconnectCallback(const redisAsyncContext *c, int status) {
...
@@ -1263,6 +1272,21 @@ void sentinelDisconnectCallback(const redisAsyncContext *c, int status) {
sentinelDisconnectInstanceFromContext
(
c
);
sentinelDisconnectInstanceFromContext
(
c
);
}
}
/* Send the AUTH command with the specified master password if needed.
* Note that for slaves the password set for the master is used.
*
* We don't check at all if the command was successfully transmitted
* to the instance as if it fails Sentinel will detect the instance down,
* will disconnect and reconnect the link and so forth. */
void
sentinelSendAuthIfNeeded
(
sentinelRedisInstance
*
ri
,
redisAsyncContext
*
c
)
{
char
*
auth_pass
=
(
ri
->
flags
&
SRI_MASTER
)
?
ri
->
auth_pass
:
ri
->
master
->
auth_pass
;
if
(
auth_pass
)
redisAsyncCommand
(
c
,
sentinelDiscardReplyCallback
,
NULL
,
"AUTH %s"
,
auth_pass
);
}
/* Create the async connections for the specified instance if the instance
/* Create the async connections for the specified instance if the instance
* is disconnected. Note that the SRI_DISCONNECTED flag is set even if just
* is disconnected. Note that the SRI_DISCONNECTED flag is set even if just
* one of the two links (commands and pub/sub) is missing. */
* one of the two links (commands and pub/sub) is missing. */
...
@@ -1284,6 +1308,7 @@ void sentinelReconnectInstance(sentinelRedisInstance *ri) {
...
@@ -1284,6 +1308,7 @@ void sentinelReconnectInstance(sentinelRedisInstance *ri) {
sentinelLinkEstablishedCallback
);
sentinelLinkEstablishedCallback
);
redisAsyncSetDisconnectCallback
(
ri
->
cc
,
redisAsyncSetDisconnectCallback
(
ri
->
cc
,
sentinelDisconnectCallback
);
sentinelDisconnectCallback
);
sentinelSendAuthIfNeeded
(
ri
,
ri
->
cc
);
}
}
}
}
/* Pub / Sub */
/* Pub / Sub */
...
@@ -1303,6 +1328,7 @@ void sentinelReconnectInstance(sentinelRedisInstance *ri) {
...
@@ -1303,6 +1328,7 @@ void sentinelReconnectInstance(sentinelRedisInstance *ri) {
sentinelLinkEstablishedCallback
);
sentinelLinkEstablishedCallback
);
redisAsyncSetDisconnectCallback
(
ri
->
pc
,
redisAsyncSetDisconnectCallback
(
ri
->
pc
,
sentinelDisconnectCallback
);
sentinelDisconnectCallback
);
sentinelSendAuthIfNeeded
(
ri
,
ri
->
pc
);
/* Now we subscribe to the Sentinels "Hello" channel. */
/* Now we subscribe to the Sentinels "Hello" channel. */
retval
=
redisAsyncCommand
(
ri
->
pc
,
retval
=
redisAsyncCommand
(
ri
->
pc
,
sentinelReceiveHelloMessages
,
NULL
,
"SUBSCRIBE %s"
,
sentinelReceiveHelloMessages
,
NULL
,
"SUBSCRIBE %s"
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment