配置三个节点redis.conf
1.master节点配置文件。
#任何ip可以访问 bind 0.0.0.0 #端口号 port 6379 #守护进程 daemonize no #密码 requirepass daencode@top #日志文件,这里注意是docker容器中的日志目录 logfile /usr/local/etc/redis/log/redis_6379.log #持久化文件名称 dbfilename redis_6379.rdb #持久化文件存储路径,这里注意是docker容器中的数据目录 dir /usr/local/etc/redis/data #持久化策略, 10秒内有个1个key改动,执⾏快照 save 10 1 #访问主节点的密码 masterauth daencode@top
2.slave1节点配置文件。
#任何ip可以访问 bind 0.0.0.0 #端口号 port 6380 #守护进程 daemonize no #密码 requirepass daencode@top #日志文件这里注意是docker容器中的日志目录 logfile /usr/local/etc/redis/log/redis_6380.log #持久化文件名称 dbfilename "redis_6380.rdb" #持久化文件存储路径这里注意是docker容器中的数据目录 dir /usr/local/etc/redis/data #持久化策略, 10秒内有个1个key改动,执⾏快照 save 10 1 #访问主节点的密码 masterauth daencode@top #指定从哪个主节点复制 replicaof 49.233.48.98 6379
3.slave2节点配置文件。
#任何ip可以访问 bind 0.0.0.0 #端口号 port 6381 #守护进程 daemonize no #密码 requirepass "daencode@top" #日志文件 logfile "/usr/local/etc/redis/log/redis_6381.log" #持久化文件名称 dbfilename "redis_6381.rdb" #持久化文件存储路径 dir "/usr/local/etc/redis/data" #持久化策略, 10秒内有个1个key改动,执⾏快照 save 10 1 #访问主节点的密码 masterauth "daencode@top" #指定从哪个主节点复制 replicaof 49.233.48.98 6379
启动三个节点容器并查看节点信息
1.为日志文件目录以及持久化目录赋权。这里很重要!!!否则docker容器启动报错'logfile /usr/local/etc/redis/log/redis_6379.log' Can't open the log file: Permission denied
chmod 777 /data/redis/master/log/redis_6379.log && chmod 777 /data/redis/master/data chmod 777 /data/redis/slave1/log/redis_6380.log && chmod 777 /data/redis/slave1/data chmod 777 /data/redis/slave1/log/redis_6380.log && chmod 777 /data/redis/slave1/data
2.指定配置文件的方式启动redis节点容器。这里注意挂载文件时配置文件中的路径映射到宿主机时,宿主机要存在相关路径。
#master节点 docker run -itd --privileged=true --name redis-master -v /data/redis/master/redis.conf:/usr/local/etc/redis/redis.conf -v /data/redis/master/log/redis_6379.log:/usr/local/etc/redis/log/redis_6379.log -v /data/redis/master/data:/usr/local/etc/redis/data -p 6379:6379 redis redis-server /usr/local/etc/redis/redis.conf #slave1节点 docker run -itd --privileged=true --name redis-slave1 -v /data/redis/slave1/redis.conf:/usr/local/etc/redis/redis.conf -v /data/redis/slave1/log/redis_6380.log:/usr/local/etc/redis/log/redis_6380.log -v /data/redis/slave1/data:/usr/local/etc/redis/data -p 6380:6380 redis redis-server /usr/local/etc/redis/redis.conf #slave2节点 docker run -itd --privileged=true --name redis-slave2 -v /data/redis/slave2/redis.conf:/usr/local/etc/redis/redis.conf -v /data/redis/slave2/log/redis_6381.log:/usr/local/etc/redis/log/redis_6381.log -v /data/redis/slave2/data:/usr/local/etc/redis/data -p 6381:6381 redis redis-server /usr/local/etc/redis/redis.conf 参数详解: --privileged=true 容器操作授权root run:启动容器固定写法 --name:自定义启动容器名称 -v 主机redis.conf 和redis容器做映射。:号左边为宿主机路径地址,右边为容器内的挂载路径地址。 -d 后台启动 -i 交互模式运行容器 -t 为容器分配一个伪终端 -p 端口映射 6379是redis端口 redis 镜像名称 redis-server /usr/local/etc/redis/redis.conf 指定容器内的配置文件启动redis,对应会映射到宿主机地址。
3.查看容器启动情况,若没有启动成功,使用docker logs redis-master查看日志。
docker ps
4.进入到redis-master容器,查看节点信息。
[root@VM-16-11-centos slave1]# docker exec -it redis-master /bin/bash root@0adc35ea26c4:/data# redis-cli -h 49.233.48.98 -p 6379 -a daencode@top Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. 49.233.48.98:6379> info replication # Replication role:master connected_slaves:2 slave0:ip=49.233.48.98,port=6380,state=online,offset=1568,lag=1 slave1:ip=49.233.48.98,port=6381,state=online,offset=1568,lag=1 master_failover_state:no-failover master_replid:58d7ab187b3d6ee990ff6f416d6123caca7adc11 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:1568 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:1568 49.233.48.98:6379>
🌟Docker-Compose创建
Docker-Compose安装
1.前往官网下载压缩包,并上传到服务器的/usr/local/bin路径下。
2.重命名文件为docker-compose。
mv docker-compose-Linux-x86_64 docker-compose
3.进行可执行授权。
chmod +x /usr/local/bin/docker-compose
4.检验是否安装成功。
[root@VM-16-11-centos bin]# docker-compose --version docker-compose version 1.29.2, build 5becea4c
docker-compose.yml文件编写
1.创建redis主从复制存放目录。
mkdir -p /docker/redis
2.进入到目录,编写docker-compose.yml文件。
cd /docker/redis
3.vim编写docker-compose.yml文件编写如下
docker-compose规范与docker对应版本
Compose 文件格式 | Docker 引擎发布版本 |
3.8 | 19.03.0+ |
3.7 | 18.06.0+ |
3.6 | 18.02.0+ |
3.5 | 17.12.0+ |
3.4 | 17.09.0+ |
3.3 | 17.06.0+ |
3.2 | 17.04.0+ |
3.1 | 1.13.1+ |
3.0 | 1.13.0+ |
2.4 | 17.12.0+ |
2.3 | 17.06.0+ |
2.2 | 1.13.0+ |
2.1 | 1.12.0+ |
2.0 | 1.10.0+ |
# 指定了Docker Compose 配置文件的版本 version: '3' # services:服务定义 services: # 主节点配置 master: # redis镜像 image: redis #设置容器的名称为 redis-master container_name: redis-master #restart 设置容器的重启策略为始终重启。 restart: always # 指定容器启动时要执行的命令,这里我们通过 redis-server 启动 Redis 服务器,并设置端口为 6379,设置访问密码为 daencode@top,以及启用 AOF 持久化。 command: redis-server --port 6379 --requirepass daencode@top --appendonly yes # 将容器内的 6379 端口映射到主机的 6379 端口 ports: - 6379:6379 # volumes 将容器内的 /data 目录挂载到主机当前目录下的 ./data/master 目录。 volumes: - ./data/master:/data #从节点配置 slave1: image: redis #从节点容器名称 container_name: redis-slave-1 restart: always #指定主节点 command: redis-server --slaveof master 6379 --port 6380 --requirepass daencode@top --masterauth daencode@top --appendonly yes ports: - 6380:6380 volumes: - ./data/slave1:/data # 从节点配置 slave2: image: redis #从节点容器名称 container_name: redis-slave-2 restart: always # 指定主节点 command: redis-server --slaveof master 6379 --port 6381 --requirepass daencode@top --masterauth daencode@top --appendonly yes ports: - 6381:6381 volumes: - ./data/slave2:/data
启动容器
1.启动容器
[root@VM-16-11-centos redis]# docker-compose up -d Creating redis-slave-1 ... done Creating redis-slave-2 ... done Creating redis-master ... done
2.进入到主节点容器,查看节点信息。
[root@VM-16-11-centos redis]# docker exec -it redis-master /bin/bash root@3f5fef440d59:/data# redis-cli -a daencode@top Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. 127.0.0.1:6379> info replication # Replication role:master connected_slaves:2 slave0:ip=172.18.0.3,port=6381,state=online,offset=280,lag=1 slave1:ip=172.18.0.2,port=6380,state=online,offset=280,lag=1 master_failover_state:no-failover master_replid:76142f6c4c262771e034421a1f9be364819637ed master_replid2:0000000000000000000000000000000000000000 master_repl_offset:280 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:280
🌟写在最后
有关于Redis搭建主从复制+读写分离的三种方式(普通搭建、Docker搭建、Docker-Compose搭建)到此就结束了。感谢大家的阅读,安装中出现问题,可以在评论区留言。