docker搭建三主三从redis集群,可外网访问
作者:互联网
文章目录
前置说明
- 操作系统centos7
- 本次集群所使用镜像为官方redis5.05镜像,redis版本不同搭建方式不同
- 搭建前务必确认所用端口均已开通防火墙,这里以6111–6116作为集群六个节点端口,三主三从。注意一共需要开通12个端口防火墙,分别为6111–6116,16111–16116,一开始搭的时候卡了很久原因就是没开后面的大号端口防火墙…原因如下:
重要知识点
Redis群集TCP端口
每个Redis群集的节点都需要打开两个TCP连接,由于这两个连接就需要两个端口,分别是用于为客户端提供服务的常规Redis TCP命令端口(例如6379)以及通过将10000和命令端口相加(10000+6379)而获得的端口,就是集群端口(例如16379)。
第二个大号端口用于群集总线,即使用二进制协议的节点到节点通信通道。 节点使用群集总线进行故障检测,配置更新,故障转移授权等。 客户端不应尝试与群集总线端口通信,为了保证Redis命令端口的正常使用,请确保在防火墙中打开这两个端口,否则Redis群集节点将无法通信。命令端口和集群总线端口偏移量是固定的,始终为10000。
请注意,为了让Redis群集正常工作,您需要为每个节点:
1、用于与客户端进行通信的普通客户端通信端口(通常为6379)对所有需要到达群集的客户端以及所有其他群集节点(使用客户端端口进行密钥迁移)都是开放的。
2、集群总线端口(客户端端口+ 10000)必须可从所有其他集群节点访问。
如果您不打开这两个TCP端口,则您的群集将无法正常工作。(重要,集群端口是redis端口+10000),集群总线使用不同的二进制协议进行节点到节点的数据交换,这更适合于使用很少的带宽和处理时间在节点之间交换信息。
以上内容摘自:https://www.cnblogs.com/hzb462606/p/11121281.html
1. 创建redis配置文件
在/home/redis-cluster
目录下新建redis-cluster.conf
文件,内容如下:
port ${PORT}
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 112.65.xx.xxx //外网ip
cluster-announce-port ${PORT}
cluster-announce-bus-port 1${PORT}
appendonly yes
masterauth mypassword //主服务器验证密码(可选)
requirepass mypassword //连接密码(可选)
2. 生成配置文件
执行如下命令,在当前目录生成各节点的配置文件与容器数据卷映射目录,三主三从,共六个节点,端口分别为6111~6116
for port in `seq 6111 6116`; do \
mkdir -p ./${port}/conf \
&& PORT=${port} envsubst < ./redis-cluster.conf > ./${port}/conf/redis.conf \
&& mkdir -p ./${port}/data; \
done
生成文件目录结构如下,用tree
命令查看:
3. 创建容器
执行如下命令:
for port in `seq 6111 6116`; do \
docker run -d -it \
-v /home/redis-cluster/${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf \
-v /home/redis-cluster/${port}/data:/data \
--restart always --name redis-${port} --net host \
redis:latest redis-server /usr/local/etc/redis/redis.conf; \
done
--net host
:该网络模式可以让容器ip、端口共享宿主机的网络,故不再做端口映射
4. 搭建集群
方式一:通过容器的redis-cli创建集群
由于本次使用的是5.x版本的redis来创建集群,故不需要去挂载redis-trib.rb,单独启动一个5.x的redis实例,指定redis-cli创建集群的命令即可
docker run -i --rm -p 6379 --net host redis:latest \
redis-cli --cluster create \
$(for port in `seq 6111 6116`; do \
echo -n "$(docker inspect --format '112.65.xx.xx' "redis-${port}")":${port} ' ' ; \
done) $(echo "--cluster-replicas 1 -a mypassword")
--rm
:退出容器以后,该容器即被删除
-a mypassword
: 即redis集群密码
提示Can I set the above configuration? (type 'yes' to accept): yes
时,输入 yes
集群创建成功如下图:
若一直停留在Waiting for the cluster to join...
,请检查6111–6116,16111–16116端口防火墙是否均已开通,切勿忘记开通16111--16116
端口
方式二: 通过外部redis-cli搭建
若宿主机已经安装redis客户端,直接使用以下命令创建集群:
redis-cli --cluster create 112.65.xx.xxx:6111 \
112.65.xx.xxx:6112 112.65.xx.xxx:6113 \
112.65.xx.xxx:6114 112.65.xx.xxx:6115 \
112.65.xx.xxx:6116 --cluster-replicas 1 -a mypassword
若宿主机未安装过redis,则先安装
下载redis源码包:
wget http://download.redis.io/redis-stable.tar.gz
解压
tar xzf redis-stable.tar.gz
编译
cd redis-stable
make
创建软连接到bin目录
ln -s /home/redis-cluster/redis-stable/src/redis-cli /usr/local/bin/redis-cli
搭建集群
redis-cli --cluster create 112.65.xx.xxx:6111 \
112.65.xx.xxx:6112 112.65.xx.xxx:6113 \
112.65.xx.xxx:6114 112.65.xx.xxx:6115 \
112.65.xx.xxx:6116 --cluster-replicas 1 -a mypassword
5. 测试
宿主机访问集群
执行命令redis-cli -p 6111 -a mypassword
外网使用redis-destop manager访问集群
注:若要使用 redis-destop manager 连接集群,需在高级设置里打开集群选项,然后再在普通设置里填写其中一个节点的IP+端口即可
标签:端口,三主三,redis,cluster,xx,集群,可外,port 来源: https://blog.csdn.net/he3more/article/details/104844183