说明:docker版本:18.03.0-ce
redis版本: redis-4.0.9
4、redis主从配置
- 1、redis的复制功能是支持多个数据库之间的数据同步。一类是主数据库(master)一类是从数据库(slave),主数据库可以进行读写操作,当发生写操作的时候自动将数据同步到从数据库,而从数据库一般是只读的,并接收主数据库同步过来的数据,一个主数据库可以有多个从数据库,而一个从数据库只能有一个主数据库。
- 2、通过redis的复制功能可以很好的实现数据库的读写分离,提高服务器的负载能力。主数据库主要进行写操作,而从数据库负责读操作。
4.1、redis主从同步过程:
1:当一个从数据库启动时,会向主数据库发送sync命令,
2:主数据库接收到sync命令后会开始在后台保存快照(执行rdb操作),并将保存期间接收到的命令缓存起来
3:当快照完成后,redis会将快照文件和所有缓存的命令发送给从数据库。
4:从数据库收到后,会载入快照文件并执行收到的缓存的命令。
Dockerfile文件
[[email protected] redis]# cat Dockerfile
FROM centos
# 解压redis到这个目录下
ADD redis-4.0.9.tar.gz /usr/local
# 安装必须要的gcc make工具包,并创建一个软链接用于识别,并安装
RUN yum -y install gcc gcc-c++ make && ln -sv /usr/local/redis-4.0.9 /usr/local/redis && cd /usr/local/redis-4.0.9 && make && make install PREFIX=/usr/local/redis && groupadd -g 3000 redis && useradd -g 3000 -u 3001 redis && rm -rf /var/lib/yum/* && chown redis:redis /usr/local/redis* -R
ENV PATH /usr/local/redis/bin:$PATH
VOLUME /data
EXPOSE 6379
# 运行脚本,如果不指定那么密码就是123456
CMD ["redis-server","/data/redis.conf"]
启动:
Host# docker run -dit -v /redisdata:/data -p 12345:6379 --name r3 --restart=always redis:v2
4.2、主从配置
启动的时候redis的时候会报这个问题,容器与主机使用的是同一个内核,所以直接改本地的文件
echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf
主机:都是127.0.0.1本机上配置
端口: 主:22220
从1:22221
从2:22222
1、从节点开始需要文件指定master地址及端口
dir /data # 设置同步文件的路径
slaveof 127.0.0.1 22220 # 设置主redis的地址及端口
masterauth 123456 # 主服务器的认证密码,如果主redis有,一定需要配置
docker 启动如下
[[email protected] redis]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
01aeedbc3e3b redis:v2 "redis-server /data/…" About a minute ago Up About a minute 0.0.0.0:22222->6379/tcp slave2
0d0ea2e0c54b redis:v2 "redis-server /data/…" 2 minutes ago Up 2 minutes 0.0.0.0:22221->6379/tcp slave1
09df0dac0ac2 redis:v2 "redis-server /data/…" 4 minutes ago Up 4 minutes 0.0.0.0:22220->6379/tcp master
2、测试
1、查看主
2、查看从
报错如下,是因为不在同一个机器上,需要使用宿主机的IP地址
3、效果图
原文地址:http://blog.51cto.com/xiong51/2106136
时间: 2024-11-10 16:53:08