Redis Slave Master连接失败Slave日志显示:无法连接到MASTER:权限被拒绝

时间:2016-01-20 17:04:30

标签: redis centos7

我已按照有关如何设置redis主服务器群集的说明进行操作,但在完成之后,我无法理解为什么服务器无法看到彼此。 这是我放在一起的第二个版本,我被困在同一个地方。我真的可以使用一些我从未在REDIS上工作的帮助,我可以使用一些指导。

使用CENTOS7 Redis版本

当我检查redis slave日志时,我得到以下

  

[20671] 12月15日15:48:02.369 *连接到MASTER 10.10.10.10:6379

     

[20671] 1月12日15:48:02.369#无法连接到MASTER:权限被拒绝

配置文件对主服务器和从服务器使用相同的确切密码。 并且只是为了测试我给redis工作目录文件和文件夹的默认目录完全控制 经过测试的端口,它们工作正常,

当我连接到REDIS Slave

时运行INFO时,我也会得到以下信息
<div class="black"></div>
<div class="sidebar">
  <div class="red"></div>
  <div class="green"></div>
</div>

来自MASTER NODE的信息:

Replication

role:slave
master_host:10.10.10.11.
master_port:6379
master_link_status:down
master_last_io_seconds_ago:-1
master_sync_in_progress:0
slave_repl_offset:1
master_link_down_since_seconds:1452631759
slave_priority:100
slave_read_only:1
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0

两台服务器都在CENTOS 7上运行

3 个答案:

答案 0 :(得分:2)

在AWS上在CentOS 7上设置Redis群集时遇到了同样的问题,实际上是由于启用了SELinux。您可以通过查看/var/log/audit.log

的内容来验证这是您的问题

要允许使用SELinux进行Redis复制,请以root身份运行以下命令以更新安全策略。由于您可能正在使用Sentinel来管理群集,因此还包括Sentinel主服务器和从服务器的必要策略。

政策文件的文件夹

  

保存新政策文件的位置   

mkdir -p ~/.selinux

Redis复制政策

  

允许数据复制到从属服务器,包括在主服务器上,以及它可能在某些时候成为从服务器

cat <<SELINUX > ~/.selinux/redis_repl.te
# create new
module redis_repl 1.0;

require {
        type redis_port_t;
        type redis_t;
        class tcp_socket name_connect;
}

#============= redis_t ==============
allow redis_t redis_port_t:tcp_socket name_connect;
SELINUX

checkmodule -m -M -o ~/.selinux/redis_repl.mod ~/.selinux/redis_repl.te
semodule_package --outfile ~/.selinux/redis_repl.pp --module ~/.selinux/redis_repl.mod
semodule -i ~/.selinux/redis_repl.pp

Redis Sentinel主/从策略,所有Redis节点

  

在Redis主/从节点上允许Sentinel HA流量

cat <<SELINUX > ~/.selinux/redis_ha.te
# create new
module redis_ha 1.0;

require {
        type etc_t;
        type redis_t;
        class file write;
}

#============= redis_t ==============
allow redis_t etc_t:file write;
SELINUX

checkmodule -m -M -o ~/.selinux/redis_ha.mod ~/.selinux/redis_ha.te
semodule_package --outfile ~/.selinux/redis_ha.pp --module ~/.selinux/redis_ha.mod
semodule -i ~/.selinux/redis_ha.pp

Redis Sentinel服务器策略,所有Sentinel节点

  

从Sentinel节点允许Sentinel HA流量。

     

请注意,如果您未使用26379默认设置,则可能需要更改Sentinel端口。

# Allow Sentinel Port
semanage port -a -t redis_port_t -p tcp 26379

# Allow Sentinel Server
cat <<SELINUX > ~/.selinux/redis_sentinel.te
# create new
module redis_sentinel 1.0;

require {
        type redis_port_t;
        type etc_t;
        type redis_t;
        class tcp_socket name_connect;
        class file write;
}

#============= redis_t ==============
allow redis_t redis_port_t:tcp_socket name_connect;
allow redis_t etc_t:file write;
SELINUX

checkmodule -m -M -o ~/.selinux/redis_sentinel.mod ~/.selinux/redis_sentinel.te
semodule_package --outfile ~/.selinux/redis_sentinel.pp --module ~/.selinux/redis_sentinel.mod
semodule -i ~/.selinux/redis_sentinel.pp

重新启动Redis和Sentinel

service restart redis
service restart redis-sentinel

答案 1 :(得分:0)

要@otaviofcs指出,您可能会遇到SELinux问题。如果你查看/var/log/audit/audit.log,我怀疑你会看到很多这样的日志记录:

type=AVC msg=audit(1465349491.812:28458): avc:  denied  { name_connect } for  pid=30676 comm="redis-server" dest=6379 scontext=system_u:system_r:redis_t:s0 tcontext=system_u:object_r:redis_port_t:s0 tclass=tcp_socket

如果是这样,您可以深入了解SELinux政策管理的内容,或采取简单的方法:将SELinux目标政策设置为允许:

setenforce permissive

请注意,您需要在/etc/selinux/config中设置相同内容,方法是将SELINUX=更改为SELINUX=permissive

答案 2 :(得分:0)

两个“新体验点” 配置位于concection的两端,

要添加“个性化”端口,您可以使用管理 sudo semanage端口-a -t redis_port_t -p tcp 8014