Docker部署系列:Redis集群版(两台机器三主三从)

本文详细描述了如何在两台机器上通过`docker`拉取Redis 6.2.7镜像,配置多个Redis节点,并通过`docker run`启动集群,包括设置端口、启用集群模式、配置文件和创建容器。最后展示了集群的组建与验证过程。
# 拉取镜像(两台机器均执行)
docker pull redis:6.2.7

#(192.168.5.11)机器上创建并配置三个文件 
for port in $(seq 6389 6391); \
do \
mkdir -p /opt/redis-cluster/redis-node-${port}/{conf,data}
touch /opt/redis-cluster/redis-node-${port}/conf/redis.conf
cat << EOF >/opt/redis-cluster/redis-node-${port}/conf/redis.conf

# 端口
port ${port}
bind 0.0.0.0

# 启用集群模式
cluster-enabled yes 
cluster-config-file nodes.conf

# 超时时间
cluster-node-timeout 5000

# 指定日志记录级别
loglevel warning
logfile ""

# 设置数据库的数量,默认为0
databases 16

# 集群连接地址及端口
cluster-announce-ip 192.168.5.11
cluster-announce-port ${port}
cluster-announce-bus-port 1${port}

# Append Only File是另一种持久化方式,可提供更好的持久化特性。
# Redis会把每次写入的数据在接收后都写入appendonly.aof 文件
appendonly yes

# 集群加密
masterauth 123456
requirepass 123456
EOF
done


#(192.168.5.12)机器上创建并配置三个文件
for port in $(seq 6389 6391); \
do \
mkdir -p /opt/redis-cluster/redis-node-${port}/{conf,data}
touch /opt/redis-cluster/redis-node-${port}/conf/redis.conf
cat << EOF >/opt/redis-cluster/redis-node-${port}/conf/redis.conf

# 端口
port ${port}
bind 0.0.0.0

# 启用集群模式
cluster-enabled yes 
cluster-config-file nodes.conf

# 超时时间
cluster-node-timeout 5000

# 指定日志记录级别
loglevel warning
logfile ""

# 设置数据库的数量,默认为0
databases 16

# 集群连接地址及端口
cluster-announce-ip 192.168.5.12
cluster-announce-port ${port}
cluster-announce-bus-port 1${port}

# Append Only File是另一种持久化方式,可提供更好的持久化特性。
# Redis会把每次写入的数据在接收后都写入appendonly.aof 文件
appendonly yes

# 集群加密
masterauth 123456
requirepass 123456
EOF
done


# 创建容器并启动(两台机器均执行)
for port in `seq 6389 6391`; do \
  docker run -d --restart=always \
  --name redis-node-${port} \
  --privileged=true \
  -v /opt/redis-cluster/redis-node-${port}/conf/redis.conf:/etc/redis/redis.conf \
  -v /opt/redis-cluster/redis-node-${port}/data:/data \
  --log-opt max-size=10m \
  --log-opt max-file=1 \
  --net=host \
  redis:6.2.7 \
  redis-server /etc/redis/redis.conf
done

# 随便进入一台redis
docker exec -it redis-node-6389 /bin/bash
# 组建机器  选择YES
redis-cli -p 6389 -a 123456 --cluster \
create 192.168.5.11:6389 192.168.5.11:6390 192.168.5.11:6391 \
192.168.5.12:6389 192.168.5.12:6390 192.168.5.12:6391 \
--cluster-replicas 1

# 验证集群
docker exec -it redis-node-6389 /bin/bash
redis-cli -p 6389 -a 123456
# 查看集群节点信息
cluster nodes

### 在两台宿主机上使用 Docker 部署 Redis 集群 要在两台宿主机上使用 Docker 部署 Redis 集群,可以按照以下方法实现完整的分布式架构。以下是详细的说明: #### 1. 准备工作 确保每台宿主机都已安装并运行 DockerDocker Compose。此外,在两台宿主机之间建立网络连通性是非常重要的。 - 使用 `ping` 测试两台宿主机之间的通信能力[^1]。 - 确保防火墙允许 Redis 默认端口(默认为 6379 或自定义的其他端口)以及集群间用于节点发现的高范围端口(通常为指定端口号加 10,000 的偏移量)[^2]。 #### 2. 创建 Docker 网络 为了使不宿主机上的容器能够相互通信,建议创建一个覆盖型 Docker 网络 (overlay network),这可以通过 Docker Swarm 实现。 ```bash docker swarm init docker network create --driver overlay redis-cluster-net ``` 此命令将在整个 Swarm 中创建名为 `redis-cluster-net` 的覆盖网络,以便跨多个宿主机共享一网络环境[^3]。 #### 3. 构建 Redis 节点镜像 基于官方 Redis 镜像构建适合集群模式的定制化本。编写一份简单的 `Dockerfile` 文件如下所示: ```Dockerfile FROM redis:6.0.8 COPY redis.conf /usr/local/etc/redis/redis.conf CMD ["redis-server", "/usr/local/etc/redis/redis.conf"] ``` 其中 `redis.conf` 是经过调整后的配置文件,启用集群支持功能,并设置持久化选项等参数[^2]。 #### 4. 启动 Redis 容器实例 在每一台宿主机上启动若干个 Redis 容器作为独立节点加入到即将形成的集群当中去。这里假设我们希望最终形成六个节点组成的三主三从结构,则可以在第一台机器上执行下面这些指令来初始化前三个节点;而在第二台服务器重复类似操作以完成剩余部分。 对于第一个宿主机: ```bash for i in {1..3}; do \ docker run -d --net redis-cluster-net \ --name redis-node$i \ -e REDIS_PORT=$((6379+i)) \ -p $((6379+i)):$(($REDIS_PORT)) \ -v $(pwd)/node-$i/data:/data \ custom_redis_image; done; ``` 第二个宿主机样适用以上脚本逻辑只是改变起始编号即可。 #### 5. 组建实际的 Redis Cluster 当所有的单体服务都已经正常上线之后就可以着手把它们组合成真正的分布式的键值存储系统了——即所谓的“Redis Cluster”。 利用 `redis-cli --cluster` 工具来进行手动干预是最常见也是最可靠的方式之一。具体做法是从任意一台已经成功部署好的成员那里获其内部地址列表信息,再据此调用相应的 API 接口发起请求从而正式宣告新组建成功的组员身份关系确立完毕。 例如如果知道所有参与者的 IP 地址及其监听的服务端口的话那么可以直接这样写入命令行界面之中尝试提交给程序处理: ```bash yes | redis-cli --cluster create \ <host1-ip>:<port1> <host1-ip>:<port2> ... <hostN-ip>:<portM> --cluster-replicas 1 ``` 这条语句里的 `<hostX-ip>` 应替换成为真实的物理机或者虚拟机公网可达之处的实际数值表示形式而 `<portY>` 则对应于各自所绑定使用的 TCP 连接通道号码[^1]。 --- ### 注意事项 - **数据一致性**:由于存在多副本机制因此需要特别关注步策略的选择问题以免造成不必要的麻烦甚至灾难性的后果发生。 - **性能优化**:针对生产环境中可能遇到的各种瓶颈现象提前做好预案措施比如合理规划硬件资源配置比例等等都是很有必要的举措[^2]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值