Docker搭建Redis集群
# 拉取镜像
docker pull redis
# 创建容器
# -v 数据挂载
# -p 端口映射, 主机的端口:容器对外端口
# --cluster-enabled 启用集群
# --cluster-config-file 集群文件配置
docker create --name redis-node01 -v /data/redis-data/node01:/data -p 6379:6379 redis --cluster-enabled yes --cluster-config-file nodes-node-01.conf
docker create --name redis-node02 -v /data/redis-data/node02:/data -p 6380:6379 redis --cluster-enabled yes --cluster-config-file nodes-node-02.conf
docker create --name redis-node03 -v /data/redis-data/node03:/data -p 6381:6379 redis --cluster-enabled yes --cluster-config-file nodes-node-03.conf
# 查看容器创建
docker ps -a
# 启动容器
docker start redis-node01 redis-node02 redis-node03
# 进入可交互终端对redis-node01进行操作
docker exec -it redies-node01 /bin/bash
# 组建集群
# 在redis 3(包括3)之前是使用Ruby进行集群操作
# 在redis 4之后使用redis-cli
# --cluster-replicas 副本, 0表示没有
redis-cli --cluster create 172.17.0.1:6379 172.17.0.1:6380 172.17.0.1:6381 --cluster-replicas 0
# 访问redis服务
redis-cli -h 172.17.0.1 -p 6381
出现问题Waiting for the cluster to join….
# 删除容器
docker stop redis-node01 redis-node02 redis-node03
docker rm redis-node01 redis-node02 redis-node03
rm -rf /data/redis-data
# 重新创建并启动
# 查看容器ip地址
docker inspect redis-node01 -> 172.17.0.4
docker inspect redis-node02 -> 172.17.0.5
docker inspect redis-node03 -> 172.17.0.6
# 进入redis-node01进行操作
docker exec -it redis-node01 /bin/bash
# 组建集群
redis-cli --cluster create 172.17.0.4:6379 172.17.0.5:6379 172.17.0.6:6379 --cluster-replicas 0
# 测试 -c 连接集群结点时使用, 此选项可防止moved和ask异常
redis-cli -c
set abc 123
get abc
# 查看集群
cluster nodes
# 查看key
keys *
Docker网络类型
- None:不为容器配置任何网络功能, 没有网络 –net=none
- Container:与另外一个运行中的容器共享Network Namespace, –net=container:containerID
- Host:与主机共享Network Namespace, –net=host
- Bridge:Docker设计的NAT网络类型, 默认类型
使用host网络类型搭建集群
# 创建容器
docker create --name redis-node01 --net host -v /data/redis-data/node01:/data redis --cluster-enabled yes --cluster-config-file nodes-node-01.conf --port 6379
docker create --name redis-node02 --net host -v /data/redis-data/node02:/data redis --cluster-enabled yes --cluster-config-file nodes-node-02.conf --port 6380
docker create --name redis-node03 --net host -v /data/redis-data/node03:/data redis --cluster-enabled yes --cluster-config-file nodes-node-03.conf --port 6381
# 启动容器
docker start redis-node01 redis-node02 redis-node03
# 进入redis-node01进行操作
docker exec -it redis-node01 /bin/bash
# 192.168.123.121 是主机的ip
redis-cli --cluster create 192.168.123.121:6379 192.168.123.121:6380 192.168.123.121:6381 --cluster-replicas 0
# 测试
redis-cli -c
cluster nodes