一、阿里云服务器安全组开放端口
控制台 -> 云服务器ECS -> 实例
因为阿里云服务器自带一层防火墙,所以需要开放7001-7006、17001-17006端口(这个端口是自定义的,只要不跟其他端口冲突)
二、拉取最新版本的redis
[root@lx ~]# docker pull redis
Using default tag: latest
latest: Pulling from library/redis
Digest: sha256:a0494b60a0bc6de161d26dc2d2f9d2f1c5435e86a9e5d48862a161131affa6bd
Status: Image is up to date for redis:latest
docker.io/library/redis:latest
三、配置redis.conf
-
创建 redis 集群专属文件夹并进入该文件夹,后续所有命令均在这个文件夹下进行
[root@lx ~]# cd [root@lx ~]# mkdir redis-cluster [root@lx ~]# cd redis-cluster/ [root@lx redis-cluster]#
-
创建 redis-cluster.conf 文件,作为生成 redis.conf 的模板文件
[root@lx redis-cluster]# touch redis-cluster.conf [root@lx redis-cluster]# ll total 0 -rw-r--r-- 1 root root 0 Nov 9 10:32 redis-cluster.conf
-
vim 打开 redis-cluster.conf 文件,编写模板内容
# 服务器上的所有地址都能够访问 redis 服务 bind 0.0.0.0 # 该节点的 redis 服务端口 port ${PORT} # 开启 redis 集群模式 cluster-enabled yes # 关闭 protected-mode 模式,让外网可以直接访问 protected-mode no # 集群配置名 cluster-config-file nodes.conf # 超时时间 cluster-node-timeout 5000 # 实际给各节点网卡分配的IP(一定要是阿里云服务器的公网IP) cluster-announce-ip 47.xx.xx.xx # 节点映射端口 cluster-announce-port ${PORT} # 节点总线端口 cluster-announce-bus-port 1${PORT}
注意:
cluster-announce-ip
后面一定要是阿里云服务器的公网IP,把 47.xx.xx.xx 换成你的公网IP
[root@lx redis-cluster]#
[root@lx redis-cluster]# cat redis-cluster.conf
# 服务器上的所有地址都能够访问 redis 服务
bind 0.0.0.0
# 该节点的 redis 服务端口
port ${PORT}
# 开启 redis 集群模式
cluster-enabled yes
# 关闭 protected-mode 模式,让外网可以直接访问
protected-mode no
# 集群配置名
cluster-config-file nodes.conf
# 超时时间
cluster-node-timeout 5000
# 实际给各节点网卡分配的IP(一定要是阿里云服务器的公网IP)
cluster-announce-ip 47.xx.xx.xx
# 节点映射端口
cluster-announce-port ${PORT}
# 节点总线端口
cluster-announce-bus-port 1${PORT}
# 开启持久化
appendonly yes
-
通过 redis-cluster.conf 模板文件生成6个 redis 对应的 redis.conf 配置文件
for port in `seq 7001 7006`; do mkdir -p ./${port}/conf && PORT=${port} envsubst < ./redis-cluster.conf > ./${port}/conf/redis.conf && mkdir -p ./${port}/data; done;
[root@lx redis-cluster]# for port in `seq 7001 7006`; do mkdir -p ./${port}/conf && PORT=${port} envsubst < ./redis-cluster.conf > ./${port}/conf/redis.conf && mkdir -p ./${port}/data; done; [root@lx redis-cluster]# ll total 28 drwxr-xr-x 4 root root 4096 Nov 9 10:56 7001 drwxr-xr-x 4 root root 4096 Nov 9 10:56 7002 drwxr-xr-x 4 root root 4096 Nov 9 10:56 7003 drwxr-xr-x 4 root root 4096 Nov 9 10:56 7004 drwxr-xr-x 4 root root 4096 Nov 9 10:56 7005 drwxr-xr-x 4 root root 4096 Nov 9 10:56 7006 -rw-r--r-- 1 root root 592 Nov 9 10:51 redis-cluster.conf [root@lx redis-cluster]# tree . ├── 7001 │ ├── conf │ │ └── redis.conf │ └── data ├── 7002 │ ├── conf │ │ └── redis.conf │ └── data ├── 7003 │ ├── conf │ │ └── redis.conf │ └── data ├── 7004 │ ├── conf │ │ └── redis.conf │ └── data ├── 7005 │ ├── conf │ │ └── redis.conf │ └── data ├── 7006 │ ├── conf │ │ └── redis.conf │ └── data └── redis-cluster.conf 18 directories, 7 files
四、创建redis网络
[root@lx redis-cluster]# docker network create redis-cluster
f29d1e4d18f2d1faddf44338435a5bfa80c6de2a54aafcd09d3290a675b43101
[root@lx redis-cluster]# docker network ls
NETWORK ID NAME DRIVER SCOPE
9107ad261f12 bridge bridge local
956fbaea1607 host host local
adc2616df29c none null local
f29d1e4d18f2 redis-cluster bridge local
五、启动redis
-
查看 redis 镜像,获取 redis 镜像 id
[root@lx redis-cluster]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE redis latest 62f1d3402b78 12 days ago 104MB
-
启动所有 redis
for port in `seq 7001 7006`; do docker run -d -p ${port}:${port} -p 1${port}:1${port} --restart=always --name=redis-${port} --network=redis-cluster -v $PWD/${port}/conf/redis.conf:/etc/redis/redis.conf -v $PWD/${port}/data:/data [redis镜像ID] redis-server /etc/redis/redis.conf; done;
[redis镜像ID]
换成对应的 redis 镜像id,如上面的62f1d3402b78
启动所有 redis 这段代码,详细说明一下
-d
: 后台启动-p ${port}:${port}
:映射 redis 端口-p 1${port}:1${port}
:映射 redis 总线端口--restart=always
:重启--name=redis-${port}
:指定容器名称--network=redis-cluster
:使用自定义的 docker 网络-v $PWD/${port}/conf/redis.conf:/etc/redis/redis.conf
:将 redis.conf 挂载到 容器的 redis.conf-v $PWD/${port}/data:/data
:将 data 挂载到 容器的 data62f1d3402b78
:redis 镜像idredis-server /etc/redis/redis.conf
:启动 redis 服务
六、进入任意一个redis容器
[root@lx redis-cluster]# docker exec -it redis-7001 /bin/sh
七、开启集群
redis-cli --cluster create 47.xx.xx.xx:7001 47.xx.xx.xx:7002 47.xx.xx.xx:7003 47.xx.xx.xx:7004 47.xx.xx.xx:7005 47.xx.xx.xx:7006 --cluster-replicas 1