拉取镜像

1
docker  pull  redis:5.0.5

image-20210902175726397

创建redis容器

创建三个 redis 容器:

  • redis-node1:6380
  • redis-node2:6381
  • redis-node3:6382
1
2
3
4
5
docker create --name redis-node1 --net host -v /data/redis-data/node1:/data redis:5.0.5 --cluster-enabled yes --cluster-config-file nodes-node-1.conf --port 6380

docker create --name redis-node2 --net host -v /data/redis-data/node2:/data redis:5.0.5 --cluster-enabled yes --cluster-config-file nodes-node-2.conf --port 6381

docker create --name redis-node3 --net host -v /data/redis-data/node3:/data redis:5.0.5 --cluster-enabled yes --cluster-config-file nodes-node-3.conf --port 6382

启动容器

1
docker start redis-node1 redis-node2 redis-node3

image-20210902175954106

执行完运行命令后检查一下容器的启动情况:

img

如上提示的是权限问题,我们尝试修改一下权限:

1
chmod -R  777 /data

启动成功后如下图所示:

img

组建群组

--net 网络类型为 host

Docker在使用host模式下创建的容器是没有自己独立的网络命名空间的,是跟物理机共享一个网络空间,进而可以共享物理机的所有端口与IP,这样就可以让公共网络直接访问容器了

1
2
3
# 组建集群,10.211.55.4为当前物理机的ip地址

redis-cli --cluster create 10.211.55.4:6379 10.211.55.4:6380 10.211.55.4:6381 --cluster-replicas 0
img

出现问题

Waiting for the cluster to join

到这一步后一直在等待,无法进行到下一步

解决

我在搭建的时候用的阿里云,启动有端口限制,redis集群在通讯的时候还需要开始一个通讯端口,通讯端口地址:reids端口号+10000

例如:redis端口号为6380,那么不仅要开启6380端口,还有开启16380端口

所以在阿里云控制台安全组中开启16380/16381后,没有在一直等待

查看集群信息

1
2
3
4
5
6
7
root@CentOS7:/data# redis-cli
127.0.0.1:6379> cluster nodes
72c291c32815194b64d1f6d0fdf771f5cc04e14a 10.211.55.4:6380@16380 master - 0 1590905997358 2 connected 5461-10922
6a595b67bbff15c94e5874c2d2cd556d6a6a6c17 10.211.55.4:6381@16381 master - 0 1590905998362 3 connected 10923-16383
4e3dbdc8f835dcbc38291c88f08165ee51d53d3d 10.211.55.4:6379@16379 myself,master - 0 1590905997000 1 connected 0-5460
127.0.0.1:6379>

打印不了集群信息

在查看cluster的时候显示没有权限

使用下面的命令

1
redis-cli -h 10.211.55.4 -p 6381 
1
2
3
4
5
6
root@CentOS7:/data# redis-cli -h 10.211.55.4 -p 6381 
127.0.0.1:6379> cluster nodes
72c291c32815194b64d1f6d0fdf771f5cc04e14a 10.211.55.4:6380@16380 master - 0 1590905997358 2 connected 5461-10922
6a595b67bbff15c94e5874c2d2cd556d6a6a6c17 10.211.55.4:6381@16381 master - 0 1590905998362 3 connected 10923-16383
4e3dbdc8f835dcbc38291c88f08165ee51d53d3d 10.211.55.4:6379@16379 myself,master - 0 1590905997000 1 connected 0-5460
127.0.0.1:6379>

image-20210902221725956

外部连接访问不到或者连接上一会就报错断开

发现原因

因为我发现,操作的时候总有一个redsi的主节点,显示的是非外网的ip地址,而是本地的物理ip地址

查看ip地址

1
ifconfig

docker0 开头的 docker ip 地址
eth0 开头的宿主机ip

我发现总有一个是用的宿主机的ip,但是阿里云服务器提供的ip地址又不是这个

解决

1
vim  /data/redis-data/node1/nodes-node-1.conf 

image-20210903090624390

然后把ip地址全部改成外网的ip地址

成功

参考文章:

https://www.cnblogs.com/niceyoo/p/13011626.html