redis主从复制
一,redis主从复制的概念
redis的主从复制和读写分离是密不可分的,主从服务层,读写分离基于代码层面,redis的主从不能提升查询读写的效率的.主要用于分担服务器压力,以及备份.主从的架构有很多,一主一从,一主多从,多主多从…,这里只记录一主一从.redis认为每一台服务都是主服务,只有声明自己为从服务后,对主服务器进行连接,首次进行全量复制,后面进行部分复制.
二,构建redis镜像
FROM alpine:3.11
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/*
COPY ./redis-5.0.7.tar.gz redis-5.0.7.tar.gz
#通过选择更小的镜像,删除不必要文件清理不必要的安装缓存,从而瘦身镜像
#创建相关目录能够看到日志信息跟数据跟配置文件 sh
RUN mkdir -p /usr/src/redis \
&& mkdir -p /redis/data \
&& mkdir -p /redis/conf \
&& mkdir -p /redis/log \
&& mkdir -p /var/log/redis \
&& tar -zxvf redis-5.0.7.tar.gz -C /usr/src/redis \
&& rm -rf redis-5.0.7.tar.gz \
&& cd /usr/src/redis/redis-5.0.7 && make \
&& cd /usr/src/redis/redis-5.0.7 && make install;
EXPOSE 6379
# CMD ["redis-server","/usr/src/redis/redis-5.0.7/redis.conf"]
#ENTRYPOINT ["redis-server", "/usr/src/redis/redis-5.0.7/redis.conf"]
三,创建docker自定义网关
docker在生成容器的时候,会默认分配给容器网关的,docker的网络配置分为host模式(使用本机网络),网桥模式(自动分配一个网关,用于容器与宿主机网络通信),指定网关的模式(自己分配一个网关),建议使用第三种自定义网关,因为其他两种模式是不稳定的,也许某一次关机后会重新分配.
自定义网关:
docker network create --subnet=192.160.1.0/24(这个地址是你自己的ip地址,一般可以分配1-255位) mynetwork
四,根据镜像文件生成容器
一,生成主服务器
docker run -itd -v /www/ocean_study/masterandslave/master:/redis -p 6350:6379 --network=zhucongnet --ip=10.0.4.100 --name redis5master redis5ms
二,生成从服务器
docker run -itd -v /www/ocean_study/masterandslave/master:/redis -p 6350:6379 --network=zhucongnet --ip=10.0.4.100 --name redis5master redis5ms
三,指定文件开启redis服务
//进入主服务器
docker exec -it redis5master sh
//进入从服务器
docker exec -it redis5slave sh
//分别在两个容器中执行 指定文件启动redis服务
redis-server /redis/redis.conf
//从服务器执行主从命令
slaveof 10.0.4.3 6379
四,查看主从配置信息
info replication
四,远程连接服务器
远程连接时老是报错: Error: Connection reset by peer
配置文件redis.conf中的:
#bind 127.0.0.1
需要注释掉。
因为这个是设置redis服务器只在本地监听,从而会拒绝来自外网的监听.
同时:
protected-mode no
去掉注释,设置为 no,表明不已保护模式运行。