安装docker
Docker 的 安装资源文件 存放在Amazon S3,会间歇性连接失败。所以安装Docker的时候,会比较慢。 你可以通过执行下面的命令,高速安装Docker。
curl -sSL https://get.daocloud.io/docker | sh
使用daocloud镜像安装,若还是安装失败可以使用代理
卸载docker
sudo yum remove docker \
docker-common \
container-selinux \
docker-selinux \
docker-engine
卸载Docker后,/var/lib/docker/目录下会保留原Docker的镜像,网络,存储卷等文件. 如果需要全新安装Docker,需要删除/var/lib/docker/目录
rm -fr /var/lib/docker/
安装docker-compose
curl -L https://get.daocloud.io/docker/compose/releases/download/1.27.4/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
前置知识(Redis Cluster and Docker)
Currently Redis Cluster does not support NATted environments and in general environments where IP addresses or TCP ports are remapped.
Docker uses a technique called port mapping: programs running inside Docker containers may be exposed with a different port compared to the one the program believes to be using. This is useful in order to run multiple containers using the same ports, at the same time, in the same server.
In order to make Docker compatible with Redis Cluster you need to use the host networking mode of Docker. Please check the --net=host option in the Docker documentation for more information.
按照 Redis 官网:redis.io/topics/clus… 的提示,为了使 Docker 与 Redis Cluster 兼容,您需要使用 Docker 的 host 网络模式。
环境
虚拟机环境
-
192.168.146.100 -
192.168.146.101
基础设施环境
- centos-release-7-8.2003
- Docker version 20.10.2
- docker-compose version 1.27.4
创建redis-cluster文件夹
分别在192.168.146.100和192.168.146.101执行以下操作
mkdir -p /docker/redis_cluster
cd /docker/redis_cluster
创建redis-cluster.tmpl文件夹
分别在192.168.146.100和192.168.146.101执行以下操作
vi redis-cluster.tmpl
port ${PORT}
requirepass password
masterauth password
protected-mode no
daemonize no
appendonly yes
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 192.168.146.100 # IP地址
cluster-announce-port ${PORT}
cluster-announce-bus-port 1${PORT}
:wq
创建配置文件
分别在192.168.146.100和192.168.146.101执行以下操作
for port in `seq 7000 7002`; do \
mkdir -p ${port}/conf \
&& PORT=${port} envsubst < redis-cluster.tmpl > ${port}/conf/redis.conf \
&& mkdir -p ${port}/data;\
done
编辑docker-compose.yml
分别在192.168.146.100和192.168.146.101执行以下操作
vi docker-compose.yml
追加以下内容
version: '3'
services:
# redis_7000
redis_7000:
image: 'redis:5.0.9'
container_name: 'redis_7000'
network_mode: "host" # host 网络模式
volumes:
- './7000/data:/data'
- './7000/conf/redis.conf:/usr/local/etc/redis/redis.conf'
command: redis-server /usr/local/etc/redis/redis.conf
# redis_7001
redis_7001:
image: 'redis:5.0.9'
container_name: 'redis_7001'
network_mode: "host" # host 网络模式
volumes:
- './7001/data:/data'
- './7001/conf/redis.conf:/usr/local/etc/redis/redis.conf'
command: redis-server /usr/local/etc/redis/redis.conf
# redis_7002
redis_7002:
image: 'redis:5.0.9'
container_name: 'redis_7002'
network_mode: "host" # host 网络模式
volumes:
- './7002/data:/data'
- './7002/conf/redis.conf:/usr/local/etc/redis/redis.conf'
command: redis-server /usr/local/etc/redis/redis.conf
创建并启动容器服务
分别在192.168.146.100和192.168.146.101执行以下操作
docker-compose up -d
创建redis集群
确保两台机子网络可以通讯,随便进入一台机子
docker-compose exec redis_7000 bash
执行一下命令
redis-cli -a password --cluster create \
192.168.146.100:7000 192.168.146.100:7001 192.168.146.100:7002 \
192.168.146.101:7000 192.168.146.101:7001 192.168.146.101:7002 \
--cluster-replicas 1
在提示选项中输入yes
root@localhost:/data# redis-cli -a password --cluster create \
> 192.168.146.100:7000 192.168.146.100:7001 192.168.146.100:7002 \
> 192.168.146.101:7000 192.168.146.101:7001 192.168.146.101:7002 \
> --cluster-replicas 1
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 192.168.146.101:7002 to 192.168.146.100:7000
Adding replica 192.168.146.100:7002 to 192.168.146.101:7000
Adding replica 192.168.146.101:7001 to 192.168.146.100:7001
M: cb5afc0707e66a3df98845cab6e31aac0daa9103 192.168.146.100:7000
slots:[0-5460] (5461 slots) master
M: c83a15746e4c3b68c7613ae31a9975ad2cb99106 192.168.146.100:7001
slots:[10923-16383] (5461 slots) master
S: cb2ab7545a8d92959b2aab32078baaad5393cad4 192.168.146.100:7002
replicates 66550723eea885f8aa9f40452754bc0ebd3d64a4
M: 66550723eea885f8aa9f40452754bc0ebd3d64a4 192.168.146.101:7000
slots:[5461-10922] (5462 slots) master
S: a58ef728f251675cba5b29bb21ff066f484e032e 192.168.146.101:7001
replicates c83a15746e4c3b68c7613ae31a9975ad2cb99106
S: 494cda5ad44f1318db745831bdacb44dc64e9d7e 192.168.146.101:7002
replicates cb5afc0707e66a3df98845cab6e31aac0daa9103
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join
...
>>> Performing Cluster Check (using node 192.168.146.100:7000)
M: cb5afc0707e66a3df98845cab6e31aac0daa9103 192.168.146.100:7000
slots:[0-5460] (5461 slots) master
1 additional replica(s)
S: a58ef728f251675cba5b29bb21ff066f484e032e 192.168.146.101:7001
slots: (0 slots) slave
replicates c83a15746e4c3b68c7613ae31a9975ad2cb99106
M: c83a15746e4c3b68c7613ae31a9975ad2cb99106 192.168.146.100:7001
slots:[10923-16383] (5461 slots) master
1 additional replica(s)
S: 494cda5ad44f1318db745831bdacb44dc64e9d7e 192.168.146.101:7002
slots: (0 slots) slave
replicates cb5afc0707e66a3df98845cab6e31aac0daa9103
S: cb2ab7545a8d92959b2aab32078baaad5393cad4 192.168.146.100:7002
slots: (0 slots) slave
replicates 66550723eea885f8aa9f40452754bc0ebd3d64a4
M: 66550723eea885f8aa9f40452754bc0ebd3d64a4 192.168.146.101:7000
slots:[5461-10922] (5462 slots) master
1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
集群搭建成功