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

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
日志服务 SLS,月写入数据量 50GB 1个月
简介: 【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
目录
相关文章
|
19小时前
|
存储 NoSQL 大数据
大数据-51 Redis 高可用方案CAP-AP 主从复制 一主一从 全量和增量同步 哨兵模式 docker-compose测试
大数据-51 Redis 高可用方案CAP-AP 主从复制 一主一从 全量和增量同步 哨兵模式 docker-compose测试
12 3
|
1天前
|
消息中间件 NoSQL Kafka
Flink-10 Flink Java 3分钟上手 Docker容器化部署 JobManager TaskManager Kafka Redis Dockerfile docker-compose
Flink-10 Flink Java 3分钟上手 Docker容器化部署 JobManager TaskManager Kafka Redis Dockerfile docker-compose
15 4
|
1月前
|
NoSQL 关系型数据库 Redis
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
mall在linux环境下的部署(基于Docker容器),docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongodb、minio详细教程,拉取镜像、运行容器
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
|
1月前
|
网络协议 网络安全
基于bind软件部署DNS服务器
关于如何使用bind软件部署DNS服务器的教程,包括DNS服务器的类型、基于bind软件的部署步骤、验证DNS服务器可用性的指导,以及如何进行DNS正向解析的实现。
39 2
基于bind软件部署DNS服务器
|
2天前
|
缓存 Kubernetes 应用服务中间件
1分钟了解什么是docker和docker-compose?前后端必知必会技能GET啦
1分钟了解什么是docker和docker-compose?前后端必知必会技能GET啦
|
3天前
|
缓存 NoSQL Redis
docker运行redis镜像
这篇文章介绍了如何使用Docker运行Redis镜像,并提供了启动和配置Redis容器的具体命令和步骤。
18 0
|
14天前
|
存储 缓存 NoSQL
Redis 过期删除策略与内存淘汰策略的区别及常用命令解析
Redis 过期删除策略与内存淘汰策略的区别及常用命令解析
30 0
|
2月前
|
开发者 图形学 iOS开发
掌握Unity的跨平台部署与发布秘籍,让你的游戏作品在多个平台上大放异彩——从基础设置到高级优化,深入解析一站式游戏开发解决方案的每一个细节,带你领略高效发布流程的魅力所在
【8月更文挑战第31天】跨平台游戏开发是当今游戏产业的热点,尤其在移动设备普及的背景下更为重要。作为领先的游戏开发引擎,Unity以其卓越的跨平台支持能力脱颖而出,能够将游戏轻松部署至iOS、Android、PC、Mac、Web及游戏主机等多个平台。本文通过杂文形式探讨Unity在各平台的部署与发布策略,并提供具体实例,涵盖项目设置、性能优化、打包流程及发布前准备等关键环节,助力开发者充分利用Unity的强大功能,实现多平台游戏开发。
60 0
|
2月前
|
Java 数据库 API
JSF与JPA的史诗级联盟:如何编织数据持久化的华丽织锦,重塑Web应用的荣耀
【8月更文挑战第31天】JavaServer Faces (JSF) 和 Java Persistence API (JPA) 分别是构建Java Web应用的用户界面组件框架和持久化标准。结合使用JSF与JPA,能够打造强大的数据驱动Web应用。首先,通过定义实体类(如`User`)和配置`persistence.xml`来设置JPA环境。然后,在JSF中利用Managed Bean(如`UserBean`)管理业务逻辑,通过`EntityManager`执行数据持久化操作。
43 0
|
2月前
|
开发者 算法 虚拟化
惊爆!Uno Platform 调试与性能分析终极攻略,从工具运用到代码优化,带你攻克开发难题成就完美应用
【8月更文挑战第31天】在 Uno Platform 中,调试可通过 Visual Studio 设置断点和逐步执行代码实现,同时浏览器开发者工具有助于 Web 版本调试。性能分析则利用 Visual Studio 的性能分析器检查 CPU 和内存使用情况,还可通过记录时间戳进行简单分析。优化性能涉及代码逻辑优化、资源管理和用户界面简化,综合利用平台提供的工具和技术,确保应用高效稳定运行。
49 0

热门文章

最新文章