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

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


目录
相关文章
|
3月前
|
应用服务中间件 网络安全 nginx
手把手教你使用 Docker 部署 Nginx 教程
本文详解Nginx核心功能与Docker部署优势,涵盖镜像拉取、容器化部署(快速、挂载、Compose)、HTTPS配置及常见问题处理,助力高效搭建稳定Web服务。
1580 4
|
3月前
|
应用服务中间件 Linux nginx
在虚拟机Docker环境下部署Nginx的步骤。
以上就是在Docker环境下部署Nginx的步骤。需要注意,Docker和Nginix都有很多高级用法和细节需要掌握,以上只是一个基础入门级别的教程。如果你想要更深入地学习和使用它们,请参考官方文档或者其他专业书籍。
193 5
|
3月前
|
存储 NoSQL Redis
手把手教你用 Docker 部署 Redis
Redis是高性能内存数据库,支持多种数据结构,适用于缓存、消息队列等场景。本文介绍如何通过Docker快速拉取轩辕镜像并部署Redis,涵盖快速启动、持久化存储及docker-compose配置,助力开发者高效搭建稳定服务。
1188 7
|
3月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
590 5
|
3月前
|
存储 搜索推荐 数据库
🚀 RAGFlow Docker 部署全流程教程
RAGFlow是开源的下一代RAG系统,融合向量数据库与大模型,支持全文检索、插件化引擎切换,适用于企业知识库、智能客服等场景。支持Docker一键部署,提供轻量与完整版本,助力高效搭建私有化AI问答平台。
2784 8
|
3月前
|
存储 关系型数据库 MySQL
MySQL Docker 容器化部署全指南
MySQL是一款开源关系型数据库,广泛用于Web及企业应用。Docker容器化部署可解决环境不一致、依赖冲突问题,实现高效、隔离、轻量的MySQL服务运行,支持数据持久化与快速迁移,适用于开发、测试及生产环境。
701 4
|
10月前
|
算法 测试技术 C语言
深入理解HTTP/2:nghttp2库源码解析及客户端实现示例
通过解析nghttp2库的源码和实现一个简单的HTTP/2客户端示例,本文详细介绍了HTTP/2的关键特性和nghttp2的核心实现。了解这些内容可以帮助开发者更好地理解HTTP/2协议,提高Web应用的性能和用户体验。对于实际开发中的应用,可以根据需要进一步优化和扩展代码,以满足具体需求。
1037 29
|
10月前
|
前端开发 数据安全/隐私保护 CDN
二次元聚合短视频解析去水印系统源码
二次元聚合短视频解析去水印系统源码
446 4
|
10月前
|
JavaScript 算法 前端开发
JS数组操作方法全景图,全网最全构建完整知识网络!js数组操作方法全集(实现筛选转换、随机排序洗牌算法、复杂数据处理统计等情景详解,附大量源码和易错点解析)
这些方法提供了对数组的全面操作,包括搜索、遍历、转换和聚合等。通过分为原地操作方法、非原地操作方法和其他方法便于您理解和记忆,并熟悉他们各自的使用方法与使用范围。详细的案例与进阶使用,方便您理解数组操作的底层原理。链式调用的几个案例,让您玩转数组操作。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~