docker搭建三主三从redis集群,可外网访问

前置说明

  1. 操作系统centos7
  2. 本次集群所使用镜像为官方redis5.05镜像,redis版本不同搭建方式不同
  3. 搭建前务必确认所用端口均已开通防火墙,这里以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+端口即可
在这里插入图片描述

发布了3 篇原创文章 · 获赞 0 · 访问量 182

猜你喜欢

转载自blog.csdn.net/he3more/article/details/104844183