(全栈学习实践)四、docker搭建redis主从实践
前面mysql容器重建后需要重新运行 change master to 命令绑定关联,8.0需要命令行下生效。
redis首先想到用官方的,没想到进去各个基本shell命令无法使用,所以先弃了。这次由于官方没有提供基本的配置文件,解压redis-5.0.5.tar.gz复制 主配置redis.conf、哨兵配置sentinel.conf 到当前目录,如:/root/tmp/dk/redis。
1、制作配置文件
搜索修改
# 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.conf: // remote_host:自己的内网、外网地址 - # replicaof <masterip> <masterport> + replicaof remote_host 6379 - # masterauth <master-password> + masterauth 123456
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
"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 官方公共云上了。