Dockerfile:
FROM alpine
RUN sed-i's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories \
&& apk add gcc g++ libc-dev wget vim openssl-dev make linux-headers \
&& rm-rf/var/cache/apk/*
#通过选择更小的镜像,删除不必要文件清理不必要的安装缓存,从而瘦身镜像
#创建相关目录能够看到日志信息跟数据跟配置文件
RUN mkdir-p/usr/src/redis \
&& mkdir-p/usr/src/redis/data \
&& mkdir-p/usr/src/redis/conf \
&& mkdir-p/usr/src/redis/log \
&& mkdir-p/var/log/redis
RUN wget-O/usr/src/redis/redis-4.0.11.tar.gz"http://download.redis.io/releases/redis-4.0.11.tar.gz" \
&& tar-xzf/usr/src/redis/redis-4.0.11.tar.gz-C/usr/src/redis \
&& rm-rf/usr/src/redis/redis-4.0.11.tar.tgz
RUN cd/usr/src/redis/redis-4.0.11 && make&& make PREFIX=/usr/local/redis install \
&& ln-s/usr/local/redis/bin/* /usr/local/bin/ && rm-rf/usr/src/redis/redis-4.0.11
#COPY ./conf/redis.conf /usr/src/redis/conf
CMD ["/usr/local/bin/redis-server","/usr/src/redis/conf/redis.conf"]
构建镜像
docker build -t redis-ms-test .
设置指定网络
docker network create --subnet=192.168.1.0/24 redis-network
运行主从容器
docker run -itd -v /usr/docker/test/03/redis/master:/usr/src/redis -p 6380:6379 --network=redis-network --ip=192.168.1.2 --name redis-master redis-ms-test
docker run -itd -v /usr/docker/test/03/redis/slave:/usr/src/redis -p 6380:6379 --network=redis-network --ip=192.168.1.2 --name redis-slave redis-ms-test
进入容器
docker exec -it redis-master sh || docker exec -it redis-slave sh
测试redis服务是否可用
redis-cli -a 123456
开启主从复制
127.0.0.1:6379 > slaveof 主机ip 端口号
查看信息
127.0.0.1:6379 > info replication
若想查看主从设置是否生效,可在主机添加数据,再从从机查询,若查询得到,则证明设置成功。
tips:
(1)如若未生效,请查看防火墙是否开放相对应端口。若为云服务器,则查看是否添加相对应网络安全组信息
(2)默认配置中,从节点不可写入,只可读取。若需要从节点可进行写入可修改 slave-read-only 为 no
(3)开启主从复制的3种方式,

如若主机有设置密码需修改配置文件下的masterauth :
# masterauth <master-password> //设置主机密码
查看日志文件
查看配置信息下的日志存放路径(logfile)
例:logfile "/usr/src/redis/log/redis.log"
cat /usr/src/redis/log/redis.log
在日志记录中,可以大概看到主从复制的过程。
关于redis的全量复制与部分复制,可参考文章:https://www.jianshu.com/p/0e1ff8ea22bc
关于redis主从复制的原理以及过程,可参考文章:https://segmentfault.com/a/1190000018268350
网友评论