Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xindoo
redis
提交
db100c46
R
redis
项目概览
xindoo
/
redis
通知
2
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
redis
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
db100c46
编写于
9月 26, 2012
作者:
A
antirez
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Sentinel: Support for AUTH.
上级
0ee3f055
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
45 addition
and
0 deletion
+45
-0
sentinel.conf
sentinel.conf
+19
-0
src/sentinel.c
src/sentinel.c
+26
-0
未找到文件。
sentinel.conf
浏览文件 @
db100c46
...
...
@@ -13,6 +13,25 @@ port 26379
# The valid charset is A-z 0-9 and the three characters ".-_".
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>
#
# Number of milliseconds the master (or any attached slave or sentinel) should
...
...
src/sentinel.c
浏览文件 @
db100c46
...
...
@@ -162,6 +162,7 @@ typedef struct sentinelRedisInstance {
dict
*
slaves
;
/* Slaves for this master instance. */
int
quorum
;
/* Number of sentinels that need to agree on failure. */
int
parallel_syncs
;
/* How many slaves to reconfigure at same time. */
char
*
auth_pass
;
/* Password to use for AUTH against master & slaves. */
/* Slave specific. */
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
sentinelRedisInstance
*
sentinelSelectSlave
(
sentinelRedisInstance
*
master
);
void
sentinelScheduleScriptExecution
(
char
*
path
,
...);
void
sentinelStartFailover
(
sentinelRedisInstance
*
master
,
int
state
);
void
sentinelDiscardReplyCallback
(
redisAsyncContext
*
c
,
void
*
reply
,
void
*
privdata
);
/* ========================= Dictionary types =============================== */
...
...
@@ -874,6 +876,7 @@ sentinelRedisInstance *createSentinelRedisInstance(char *name, int flags, char *
ri
->
down_after_period
=
master
?
master
->
down_after_period
:
SENTINEL_DOWN_AFTER_PERIOD
;
ri
->
master_link_down_time
=
0
;
ri
->
auth_pass
=
NULL
;
ri
->
slave_priority
=
SENTINEL_DEFAULT_SLAVE_PRIORITY
;
ri
->
slave_reconf_sent_time
=
0
;
ri
->
slave_master_host
=
NULL
;
...
...
@@ -921,6 +924,7 @@ void releaseSentinelRedisInstance(sentinelRedisInstance *ri) {
sdsfree
(
ri
->
client_reconfig_script
);
sdsfree
(
ri
->
slave_master_host
);
sdsfree
(
ri
->
leader
);
sdsfree
(
ri
->
auth_pass
);
releaseSentinelAddr
(
ri
->
addr
);
/* Clear state into the master if needed. */
...
...
@@ -1205,6 +1209,11 @@ char *sentinelHandleConfiguration(char **argv, int argc) {
return
"Client reconfiguration script seems non existing or "
"non executable."
;
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
{
return
"Unrecognized sentinel configuration statement."
;
}
...
...
@@ -1263,6 +1272,21 @@ void sentinelDisconnectCallback(const redisAsyncContext *c, int status) {
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
* is disconnected. Note that the SRI_DISCONNECTED flag is set even if just
* one of the two links (commands and pub/sub) is missing. */
...
...
@@ -1284,6 +1308,7 @@ void sentinelReconnectInstance(sentinelRedisInstance *ri) {
sentinelLinkEstablishedCallback
);
redisAsyncSetDisconnectCallback
(
ri
->
cc
,
sentinelDisconnectCallback
);
sentinelSendAuthIfNeeded
(
ri
,
ri
->
cc
);
}
}
/* Pub / Sub */
...
...
@@ -1303,6 +1328,7 @@ void sentinelReconnectInstance(sentinelRedisInstance *ri) {
sentinelLinkEstablishedCallback
);
redisAsyncSetDisconnectCallback
(
ri
->
pc
,
sentinelDisconnectCallback
);
sentinelSendAuthIfNeeded
(
ri
,
ri
->
pc
);
/* Now we subscribe to the Sentinels "Hello" channel. */
retval
=
redisAsyncCommand
(
ri
->
pc
,
sentinelReceiveHelloMessages
,
NULL
,
"SUBSCRIBE %s"
,
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录