【Redis从头学-12】Redis主从复制和读写分离的多种部署方式解析(普通方式、Docker搭建方式、Docker-Compose搭建方式)下

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: 【Redis从头学-12】Redis主从复制和读写分离的多种部署方式解析(普通方式、Docker搭建方式、Docker-Compose搭建方式)

配置三个节点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

ac141342d84f65fc8546e0c1f4bfae3e_95e3368b488f4cb0b1151cf708072761.png


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路径下。

f5a56212688dc2e7f517aaef6fb12079_126a80d58f32459e8373512ee9f5f96c.png

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搭建)到此就结束了。感谢大家的阅读,安装中出现问题,可以在评论区留言。


相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
1天前
|
Cloud Native Linux 开发者
【Docker】Docker:解析容器化技术的利器与在Linux中的关键作用
【Docker】Docker:解析容器化技术的利器与在Linux中的关键作用
|
1天前
|
数据库 Nacos Docker
基于docker-compose部署微服务基本环境
基于docker-compose部署微服务基本环境
5 0
|
3天前
|
运维 Linux 虚拟化
Docker详解(三)——Docker安装与部署
Docker详解(三)——Docker安装与部署
38 4
|
4天前
|
测试技术 Linux Docker
【好玩的经典游戏】Docker部署FC-web游戏模拟器
【好玩的经典游戏】Docker部署FC-web游戏模拟器
29 1
|
5天前
|
Ubuntu Linux 测试技术
Linux(32)Rockchip RK3568 Ubuntu22.04上部署 Docker: 详细配置与功能测试(下)
Linux(32)Rockchip RK3568 Ubuntu22.04上部署 Docker: 详细配置与功能测试
35 1
|
8天前
|
存储 测试技术 文件存储
【Docker项目实战】使用Docker部署Sun-Panel导航面板
【4月更文挑战第19天】使用Docker部署Sun-Panel导航面板
62 7
|
11天前
|
测试技术 Linux 网络安全
【好玩的开源项目】使用Docker部署SyncTV视频同步和共享平台
【4月更文挑战第16天】使用Docker部署SyncTV视频同步和共享平台
49 1
|
6月前
|
NoSQL Redis 数据库
Redis 主从复制的核心原理
Redis 主从复制的核心原理
32 0
|
1月前
|
负载均衡 NoSQL 容灾
|
4月前
|
NoSQL Linux Redis
Linux中部署Redis主从复制,主从复制原理
Linux中部署Redis主从复制,主从复制原理
57 1