Docker搭建redis集群
2023/11/15
# Docker创建Redis集群 方法一
# 创建Redis配置文件
# 配置文件存放路径
BASE_PATH=/opt/redis
# 创建个数
REDIS_COUNT=6
# ip前缀
REDIS_IP=192.168.104.128
for port in $(seq 1 $REDIS_COUNT);
do
mkdir -p $BASE_PATH/node-$port/conf
mkdir -p $BASE_PATH/node-$port/data
touch $BASE_PATH/node-$port/conf/redis.conf
cat <<EOF > $BASE_PATH/node-$port/conf/redis.conf
port 63$port
# 生产环境中为了安全性请绑定当前机器的ip
bind $REDIS_IP
# 启动集群模式
cluster-enabled yes
cluster-config-file nodes.conf
# redis节点宕机被发现的时间
cluster-node-timeout 5000
cluster-announce-ip $REDIS_IP$port
cluster-announce-port 6379
cluster-announce-bus-port 16379
appendonly yes
EOF
done
sudo chmod +x redis-node-config.sh
查看脚本是否成功生成文件
cd /opt/redis
ll
# 创建redis运行脚本
#!/bin/bash
# 配置文件存放路径
BASE_PATH=/opt/redis
# 创建个数
REDIS_COUNT=6
# ip前缀
REDIS_IP=192.168.104.128
//这里一定要配置docker网段
docker network create redis-net
for port in $(seq 1 $REDIS_COUNT);
do
docker run -d -p 637$port:6379 -p 1667$port:16379 \
--name redis-$port \
-v $BASE_PATH/node-$port/data:/data \
-v $BASE_PATH/node-$port/conf/redis.conf:/etc/redis/redis.conf \
--net redis-net \
--hostname redis-$port \
redis redis-server /etc/redis/redis.conf
done
sudo chmod +x redis-run.sh
# 开始搭建redis集群
# 进入其中一个容器
docker exec -it redis-1 /bin/bash
# 说明:--cluster :使用cluster的方式搭建集群 --cluster-replicas 1 :一个主机有一个从机
redis-cli --cluster create 172.16.0.11:6379 172.16.0.12:6379 172.16.0.13:6379 172.16.0.14:6379 172.16.0.15:6379 172.16.0.16:6379 --cluster-replicas 1
# 测试 redis 集群
# 进入redis-1容器
docker exec -it redis-1 /bin/bash
# -c:以集群方式启动
redis-cli -c
# 设置一个键值对
set name berbai01
这里显示是 172.16.0.12 上的 redis 处理了 set 操作。
# 查看集群节点
cluster nodes
到此已经成功搭建了 redis 的 3 主 3 从集群,上图中 master 为主 redis,slave 则是从 redis。
# 搭建过程的一些命令
清空vim中所有内容
1,$d
删除所有容器
docker rm -f $(docker ps -aq)
进入redis容器
docker exec -it redis-1 /bin/bash
启动集群
redis-cli --cluster create 192.168.104.128:6371 192.168.104.128:6372 192.168.104.128:6373 192.168.104.128:6374 192.168.104.128:6375 192.168.104.128:6376 --cluster-replicas 1
telnet 192.168.104.128 6371
bash: telnet: 未找到命令...
sudo yum install telnet -y
# Docker创建Redis集群 方法二
# 使用docker-compose
version: '3'
services:
redis-master:
image: redis
command: ["redis-server", "--appendonly", "yes"]
ports:
- "6371:6379"
networks:
- mynetwork
redis-slave:
image: redis
command: ["redis-server", "--slaveof", "redis-master", "6379", "--appendonly", "yes"]
ports:
- "6380:6379"
depends_on:
- redis-master
networks:
- mynetwork
redis-sentinel:
image: redis
command: ["redis-sentinel", "/path/to/sentinel.conf", "--sentinel", "monitor", "mymaster", "192.168.104.128", "6371", "1"]
volumes:
- /path/on/host/sentinel.conf:/path/to/sentinel.conf
ports:
- "26379:26379"
depends_on:
- redis-master
networks:
- mynetwork
networks:
mynetwork:
# 新增sentinel配置文件
redis-sentinel:
image: redis
command: ["redis-sentinel", "/usr/local/etc/redis/sentinel.conf", "--sentinel", "monitor", "mymaster", "192.168.104.128", "6371", "1"]
ports:
- "26379:26379"
depends_on:
- redis-master
networks:
- mynetwork
# 执行启动命令
docker-compose up -d
在你的三台服务器上已经启动了Redis主节点、从节点和哨兵节点后,你可以通过以下几个步骤来验证和判断哨兵集群是否搭建成功:
查看哨兵节点的日志:
进入任何一个哨兵节点的容器并查看日志,以确保哨兵节点正确连接到主节点并监视集群状态。使用以下命令:
bashCopy codedocker exec -it <redis-sentinel-container-id> redis-cli INFO sentinel
这将显示哨兵节点的信息,包括监视的主节点、连接状态等。
查看哨兵节点信息:
进入任何一个哨兵节点的容器并运行以下命令:
bashCopy codedocker exec -it <redis-sentinel-container-id> redis-cli SENTINEL masters
这将显示监视的主节点的信息,包括主节点的名称、IP地址、端口、运行状态等。
模拟主节点宕机:
在主节点容器中模拟宕机,观察哨兵节点是否能够正确地发现宕机并选择一个从节点升级为主节点。使用以下命令:
bashCopy code docker stop <redis-master-container-id>
然后查看其他哨兵节点的日志,观察是否发生了故障转移。
检查哨兵节点数量:
如果你有三台服务器,那么至少需要三个哨兵节点。检查每台服务器上是否都有一个运行的哨兵容器。
查看 Redis 集群信息:
使用以下命令在任何一个Redis容器上查看集群信息:
bashCopy codedocker exec -it <redis-container-id> redis-cli CLUSTER INFO
这将显示有关Redis集群的信息,包括主从关系、槽分配等。
通过执行这些步骤,你可以验证哨兵集群是否成功搭建,并确保故障转移等功能正常运作。如果所有步骤都顺利完成,那么你的Redis哨兵集群应该已经搭建成功。