我已按照有关如何设置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上运行
答案 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