前面mysql容器重建后需要重新运行 change master to 命令绑定关联,8.0需要命令行下生效。
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 <masterip> <masterport>  
+ replicaof remote_host 6379
- # masterauth <master-password>
+ 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.
等

我这里是使用的远程磁盘后出现问题,改用本地磁盘


沧浪水
97 声望12 粉丝