docker搭建redis集群、哨兵

集群搭建

本机IP 192.168.1.149
分别采用映射 192.168.1.149 的6379 6380 6381 三个端口模拟三台服务器。搭建三主无从的集群。由于单机的内存限制,请部署于三台服务器。

我这里在单机 启动三个容器模拟三台节点,首先可以在本机上创建三份redis.conf配置文件,我这里放在/opt/redis/conf/中分别命名为redis1.conf, redis2.conf, redis3.conf

mkdir /opt/redis/conf/
vim /opt/redis/conf/redis1.conf
vim /opt/redis/conf/redis2.conf
vim /opt/redis/conf/redis3.conf

记得修改cluster-announce-ip ,cluster-announce-port ,cluster-announce-bus-port 为宿主机信息
redis1.conf 内容

# redis进程的端口号
port 6379
# 绑定的主机地址
bind 0.0.0.0
#开启集群
cluster-enabled yes
#由于集群通信端口默认为服务端口号6379+10000,即16379 可以无需修改。
cluster-port 16379

#!!!对外暴露的ip,在docker默认桥接网络模式,容器中IP无法被外部直接访问,则需要对外暴露的宿主机IP
cluster-announce-ip 192.168.1.149
#!!!对外暴露的服务端口号 用于docker映射后外部访问  ,这里分别 改为 6379 6380 6381
cluster-announce-port 6379
#对外暴露的端口号,用在docker映射端口时或客户端访问,实际映射到16379商品。 
#!!!单机部署时,这里尤其重要,由于同一台机子用个映射三个端口用以代表三个节点,这里需要分别改为 16379  16380 16381 
cluster-announce-bus-port 16379 

# 当为集群模式 将无法配置多数据库,默认为0,这里可以不配置
# databases 0
#是否开启保护模式,默认开启。要是配置里没有指定bind和密码。开启该参数后,redis只会本地进行访问,拒绝外部访问。要是开启了密码和bind,可以开启。否则最好关闭设置为no。
protected-mode no
# redis进程是否以守护进程的方式运行,yes为是,no为否(不以守护进程的方式运行会占用一个终端)。
daemonize no

redis2.conf 内容

# redis进程的端口号
port 6379
# 绑定的主机地址
bind 0.0.0.0
#开启集群
cluster-enabled yes
#由于集群通信端口默认为服务端口号6379+10000,即16379 可以无需修改。
cluster-port 16379

#!!!对外暴露的ip,在docker默认桥接网络模式,容器中IP无法被外部直接访问,则需要对外暴露的宿主机IP
cluster-announce-ip 192.168.1.149
#!!!对外暴露的服务端口号 用于docker映射后外部访问  ,这里分别 改为 6379 6380 6381
cluster-announce-port 6380
#对外暴露的端口号,用在docker映射端口时或客户端访问,实际映射到16379商品。 
#!!!单机部署时,这里尤其重要,由于同一台机子用个映射三个端口用以代表三个节点,这里需要分别改为 16379  16380 16381 
cluster-announce-bus-port 16380 

# 当为集群模式 将无法配置多数据库,默认为0,这里可以不配置
# databases 0
#是否开启保护模式,默认开启。要是配置里没有指定bind和密码。开启该参数后,redis只会本地进行访问,拒绝外部访问。要是开启了密码和bind,可以开启。否则最好关闭设置为no。
protected-mode no
# redis进程是否以守护进程的方式运行,yes为是,no为否(不以守护进程的方式运行会占用一个终端)。
daemonize no

redis3.conf 内容

# redis进程的端口号
port 6379
# 绑定的主机地址
bind 0.0.0.0
#开启集群
cluster-enabled yes
#由于集群通信端口默认为服务端口号6379+10000,即16379 可以无需修改。
cluster-port 16379

#!!!对外暴露的ip,在docker默认桥接网络模式,容器中IP无法被外部直接访问,则需要对外暴露的宿主机IP
cluster-announce-ip 192.168.1.149
#!!!对外暴露的服务端口号 用于docker映射后外部访问  ,这里分别 改为 6379 6380 6381
cluster-announce-port 6381
#对外暴露的端口号,用在docker映射端口时或客户端访问,实际映射到16379商品。 
#!!!单机部署时,这里尤其重要,由于同一台机子用个映射三个端口用以代表三个节点,这里需要分别改为 16379  16380 16381 
cluster-announce-bus-port 16381 

# 当为集群模式 将无法配置多数据库,默认为0,这里可以不配置
# databases 0
#是否开启保护模式,默认开启。要是配置里没有指定bind和密码。开启该参数后,redis只会本地进行访问,拒绝外部访问。要是开启了密码和bind,可以开启。否则最好关闭设置为no。
protected-mode no
# redis进程是否以守护进程的方式运行,yes为是,no为否(不以守护进程的方式运行会占用一个终端)。
daemonize no

启动容器

#第一台
 docker run --name redis1 -p 6379:6379 -p 16379:16379 --volume=/opt/redis/conf/redis1.conf:/etc/redis.conf  -d redis:7 redis-server /etc/redis.conf
#第二台
 docker run --name redis2 -p 6380:6379 -p 16380:16379--volume=/opt/redis/conf/redis2.conf:/etc/redis.conf  -d redis:7 redis-server /etc/redis.conf
#第三台
 docker run --name redis3 -p 6381:6379 -p 16381:16379--volume=/opt/redis/conf/redis3.conf:/etc/redis.conf  -d redis:7 redis-server /etc/redis.conf

进入其中一个容器,下面命令创建一个集群,正常情况等待其它节点建立连接。。
并确认采用是否默认分配槽配置,输入 yes 回车,部署完成

docker exec -it redis1 bash
#执行下列命令,分配HASH槽
#--cluster-replicas 0 表示没有从节点,如果有每主配一台从节点,则需要6台节点。
redis-cli --cluster create 192.168.1.149:6379 192.168.1.149:6380 192.168.1.149:6381 --cluster-replicas 0

在这里插入图片描述
当各节点都分配完成,测试一下集群效果,进入任何一个容器节点

docker exec -it redis2 bash

#进入客户端操作 ,设置多个值 ,OK,成功
redis-cli
#查看节点信息
CLUSTER NODES

在这里插入图片描述

完成。

其它失败可能如下

  1. 集群至少3个节点,如果配置3主3从 即每个主有一个副本则 --cluster-replicas 1,节点不够则会报错
    *** ERROR: Invalid configuration for cluster creation.
    *** Redis Cluster requires at least 3 master nodes.
    *** This is not possible with 3 nodes and 1 replicas per node.
    *** At least 6 nodes are required.
    在这里插入图片描述
    2.未自动完成建立连接,通常是未开放集群通信端口号16379或未正确映射,检查一下redis.conf配置文件,如果都正常,可能需要手动进行其它两台节点容器,采用CLUSTER MEET 命令与刚才的节点建立连接
#进入容器2
docker exec -it redis2 bash
#进入客户端
redis-cli
#连接到之前的节点
CLUSTER MEET 192.168.1.149 6379

exit

#同样进入容器3
docker exec -it redis3 bash
#进入客户端
redis-cli
#连接到之前的节点
CLUSTER MEET 192.168.1.149 6379

exit

个别异常

提示 Warning: 1 node(s) may be unreachable
The port 16379 of node 192.168.1.149 may be unreachable from:
192.168.1.149:6381
Cluster bus ports must be reachable by every node.
Remember that cluster bus ports are different from standard instance ports.
容器需要开放集群通信16379端口号,即6379+10000,在redis.conf配置中修改为其它如 cluster-port 16380

某些情况下,还需重新分配hash槽,在节点中重新分配一下,执行下列命令,会提示节点未覆盖所有槽位,是否修复,输入yes
[ERR] Not all 16384 slots are covered by nodes.

./redis-cli --cluster fix 192.168.1.149:6379

./redis-cli --cluster fix 192.168.1.149:6380  #类似
./redis-cli --cluster fix 192.168.1.149:6381  #类似

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值