docker搭建redis集群

redis主从:

redis首先想到用官方的,没想到进去各个基本shell命令无法使用,所以先弃了。这次由于官方没有提供基本的配置文件,解压redis-5.0.5.tar.gz复制 主配置redis.conf、哨兵配置sentinel.conf 到当前目录,如:/root/tmp/dk/redis。

规划:
主:172.1.13.11
从:172.1.13.12

1、制作配置文件
搜索修改

Redis_Master服务器 redis.conf:

  • requirepass foobared

  • requirepass 123456
  • dir ./ # 持久化数据目录
  • dir /data
  • appendonly no # 开启aof
  • appendonly yes
  • bind 127.0.0.1 # 允许外网ip访问
  • bind 0.0.0.0

Redis_Slave从服务器:主+额外 redis.conf:
// remote_host:自己的内网、外网地址

  • replicaof

  • replicaof remote_host 6379
  • masterauth

  • masterauth 123456
    这里 remote_host 为 172.1.13.11

2、启动容器

创建容器运行

[]:~/tmp/dk/redis# docker run --name rm
-p 6379:6379 --restart=always -v
/root/tmp/dk/redis/data:/data -v
/root/tmp/dk/redis/redis.conf:/etc/redis/redis.conf
-d cffycls/redis5:1.6 redis-server /etc/redis/redis.conf
[]:~/tmp/dk/redis# docker run --name rs
-p 6381:6379 --restart=always -v
/root/tmp/dk/redis_slave/data:/data -v
/root/tmp/dk/redis_slave/redis.conf:/etc/redis/redis.conf
-d cffycls/redis5:1.6 redis-server /etc/redis/redis.conf
镜像是redis5.0.5编译的,直接启动后就是主从同步的,不需要向mysql一样进行配置(这里起始数据不一致时:修改到当前最终配置,重启即同步完好)。直接同步成功,在master、slave查看关系 info replication均有对方信息。

3、其他情况
a.replicaof 和 SLAVEOF
“master-slave 架构的描述改为 master-replica,SLAVEOF 提供别名 REPLICAOF,所以仍然可以使用 SLAVEOF”。

b.是否要守护进程
这里是经过多次测试,发现:容器重启,redis也会正常启动。daemonize no 注意保持是 no,否则会报错:
Error response from daemon: Container xx is restarting, wait until the container is running
可知容器内的守护进程与docker本身有冲突,保持默认的 daemonize no 正常,不要先入为主的修改参数,考虑与主机安装的不同。

c.bind地址是否要修改
已经设置过密码,所以protected-mode保持默认值。

protected-mode yes #关闭保护模式,使外网能访问
protected-mode no #开启protected-mode保护模式,需配置bind ip或者设置访问密码
这里是经过多次修改配置重启测试,得知master-slave:127.0.0.1-127.0.0.1可以访问,但单主从关系没有建立;0.0.0.0-127.0.0.1正常,反正是推荐0.0.0.0-0.0.0.0。

同mysql一样,需要重启加载配置的,使用 docker restart rm rs 重启方式。哨兵的配置于此类似,略过。
这里基于之前redis的Dockerfile修改完善,推送到 cffycls/redis5:1.6 官方公共云上了。

4、单一主从宕机
master_link_status:down
1先验证配置文件是否正确;2确认网络连通;3:

查看日志

docker logs rs
Error reply to PING from master: ‘-MISCONF Redis is configured to save RDB snapshots, but it is currently not able to persist on disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during writes if RDB snapshotting fails
错误回复PING从主人:’-MISCONF Redis被配置为保存RDB快照,但它目前不能持久在磁盘上。可以修改数据集的命令被禁用,因为如果RDB快照失败,这个实例被配置为在写期间报告错误

Redis_Master
stop-writes-on-bgsave-error no
Error trying to rename the temporary AOF file temp-rewriteaof-bg-336.aof into appendonly.aof
MISCONF Redis is configured to save RDB snapshots, but it is currently not able to persist on disk. Commands that may modify
the data set are disabled, because this instance is configured to report errors during writes if RDB snapshotting fails
(stop-writes-on-bgsave-error option). Please check the Redis logs for details about the RDB error.

redis哨兵:

一、拉取镜像
docker pull redis
二、起启动三个redis
配置文件

#端口
port 6379
#密码
requirepass 123456
##持久化模式
appendonly yes
创建目录
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

docker run --privileged=true -d
-p 6391:6379
–name redis-1
-v /home/redis-s/redis1/redis.conf:/etc/redis/redis.conf
-v /home/redis-s/redis1/data/:/data redis
redis-server /etc/redis/redis.conf --appendonly yes

docker run --privileged=true -d
-p 6392:6379
–name redis-2
-v /home/redis-s/redis2/redis.conf:/etc/redis/redis.conf
-v /home/redis-s/redis2/data/:/data redis
redis-server /etc/redis/redis.conf --appendonly yes

docker run --privileged=true -d
-p 6393:6379
–name redis-3
-v /home/redis-s/redis3/redis.conf:/etc/redis/redis.conf
-v /home/redis-s/redis3/data/:/data redis
redis-server /etc/redis/redis.conf --appendonly yes
三、设置主服务器(主不用设置,只设置从)
1主 2、3从
1、容器内部加载主节点

//进入容器
docker exec -it 容器id/容器名称 /bin/bash
//进入redis
redis-cli
//查看节点信息
info
//绑定主节点
#从机需要设置该参数 (redis2.conf和redis3.conf需要将masterip设置为#主机的公网或者局域网ip,port为上面设置的6390), 注意该参数在早期版本为#slaveof
#replicaof
SLAVEOF ip port
2、配置文件记载主节点
配置文件增加

##主节点认证密码
masterauth 123456
#主节点
slaveof 192.168.2.134 6391
#保护模式
protected-mode no
#slave向master通告自己的固定ip
slave-announce-ip 192.168.2.134
#slave向master通告自己的固定端口
slave-announce-port 6392
四、配置哨兵文件sentinel.conf
wget http://download.redis.io/redis-stable/sentinel.conf
cp sentinel.conf redis1/sentinel.conf
cp sentinel.conf redis2/sentinel.conf
cp sentinel.conf redis3/sentinel.conf
#redis1
#端口
port 26391
daemonize no
dir “/data”
#主节点
sentinel monitor mymaster 192.168.2.134 6391 2
sentinel auth-pass mymaster 123456

sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 5000

sentinel config-epoch mymaster 0
sentinel leader-epoch mymaster 2
#docker无权限手动配置 报告自己的ip
sentinel announce-ip 192.168.2.134
sentinel announce-port 26391


#redis2
#端口
port 26392
daemonize no
dir “/data”
#主节点
sentinel monitor mymaster 192.168.2.134 6391 2
sentinel auth-pass mymaster 123456

sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 5000

sentinel config-epoch mymaster 0
sentinel leader-epoch mymaster 2
#docker无权限手动配置 报告自己的ip
sentinel announce-ip 192.168.2.134
sentinel announce-port 26392


#redis3
port 26393
daemonize no
dir “/data”
#主节点
sentinel monitor mymaster 192.168.2.134 6391 2
sentinel auth-pass mymaster 123456

sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 5000

sentinel config-epoch mymaster 0
sentinel leader-epoch mymaster 2
#docker无权限手动配置 报告自己的ip
sentinel announce-ip 192.168.2.134
sentinel announce-port 26393
启动三个哨兵

docker run --privileged=true -d
–name sentinel1
-v /home/redis-s/redis1/sentinel.conf:/usr/local/etc/redis/sentinel.conf
–net=host redis redis-sentinel /usr/local/etc/redis/sentinel.conf

docker run --privileged=true -d
–name sentinel2
-v /home/redis-s/redis2/sentinel.conf:/usr/local/etc/redis/sentinel.conf
–net=host redis redis-sentinel /usr/local/etc/redis/sentinel.conf

docker run --privileged=true -d
–name sentinel3
-v /home/redis-s/redis3/sentinel.conf:/usr/local/etc/redis/sentinel.conf
–net=host redis redis-sentinel /usr/local/etc/redis/sentinel.conf
在这里插入图片描述

docker 启动无法切换报错无权限
image.png

#哨兵增加配置
sentinel announce-ip 192.168.1.220
sentinel announce-port 26393

#slave向master通告自己的固定ip
slave-announce-ip 192.168.2.134
#slave向master通告自己的固定端口
slave-announce-port 6392
#redis.conf增加配置

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用 Docker 搭建 Redis 集群,你可以按照以下步骤进行操作: 1. 确保已经安装并配置好了 Docker。 2. 创建一个用于 Redis 集群的自定义网络: ```bash docker network create redis-net ``` 3. 创建 Redis 主节点的容器。假设我们需要创建3个主节点,分别使用端口 7001、7002 和 7003: ```bash docker run -d --name redis1 --network redis-net -p 7001:6379 redis redis-server --port 6379 --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes docker run -d --name redis2 --network redis-net -p 7002:6379 redis redis-server --port 6379 --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes docker run -d --name redis3 --network redis-net -p 7003:6379 redis redis-server --port 6379 --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes ``` 这将创建三个 Redis 主节点容器,并将端口映射到主机的 7001、7002 和 7003 端口。 4. 创建 Redis 集群: ```bash docker run -it --rm --network redis-net redis redis-cli --cluster create <node-ip>:<node-port> <node-ip>:<node-port> <node-ip>:<node-port> ``` 将 `<node-ip>` 替换为你主机的 IP 地址, `<node-port>` 替换为容器中 Redis 主节点的端口(6379)。 例如: ```bash docker run -it --rm --network redis-net redis redis-cli --cluster create 172.18.0.2:6379 172.18.0.3:6379 172.18.0.4:6379 ``` 这将创建一个 Redis 集群,并将三个主节点添加到集群中。 5. 检查集群状态: ```bash docker run -it --rm --network redis-net redis redis-cli --cluster check <node-ip>:<node-port> ``` 例如: ```bash docker run -it --rm --network redis-net redis redis-cli --cluster check 172.18.0.2:6379 ``` 这将检查集群的状态,并输出每个节点的信息。 这样,你就成功使用 Docker 搭建了一个 Redis 集群。请根据你的实际需求进行相应的配置和调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值