使用Docker Compose搭建Redis主从集群

2023-11-19

一、本次环境使用到了docker、docker-compose、redis

二、我们搭建的主从集群结构如图:

共包含三个节点,一个主节点,两个从节点。

这里我们会在同一台虚拟机中开启3个redis实例,模拟主从集群,信息如下:

IP PORT 角色
192.168.60.129 6379 master
192.168.60.129 6380 slave
192.168.60.129 6381 slave

 三、准备实例和配置

要在同一台虚拟机开启3个实例,必须准备三份不同的配置文件和目录,配置文件所在目录也就是工作目录。

1)创建目录

我们创建三个文件夹,名字分别叫master、slave1、slave2:

# 创建三个目录
mkdir -p /redis/redis-node/master
mkdir -p /redis/redis-node/slave1
mkdir -p /redis/redis-node/slave2

如图:

2)因为docker启动redis是默认没有配置文件的。我们可以去github下载对应版本的redis.conf配置文件,配置文件内容:这是花费20分钟清除所有注释后的配置文件,建议去直接下载。

bind 0.0.0.0
protected-mode no
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize no
pidfile /var/run/redis_6379.pid
loglevel notice
logfile ""
databases 16
always-show-logo no
set-proc-title yes
proc-title-template "{title} {listen-addr} {server-mode}"
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
rdb-del-sync-files no
dir ./
replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-diskless-load disabled
repl-disable-tcp-nodelay no
replica-priority 100
acllog-max-len 128
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
lazyfree-lazy-user-del no
lazyfree-lazy-user-flush no
oom-score-adj no
oom-score-adj-values 0 200 800
disable-thp yes
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble yes
lua-time-limit 5000
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
stream-node-max-bytes 4096
stream-node-max-entries 100
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
dynamic-hz yes
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes
jemalloc-bg-thread yes

3)将我们下载好的redis.conf配置文件分别复制到 master slave1 slave2 这三个文件

cp redis.conf /redis/redis-node/master
cp redis.conf /redis/redis-node/slave1
cp redis.conf /redis/redis-node/slave2

4)修改redis.conf一下配置文件

# 修改复制好的这三个配置文件,只需要修改一下配置即可
# 三个配置文件要修改的除了端口(port),其他部分一样
bind 0.0.0.0  
protected-mode no
# 三个结点端口分别改成6379(主) 6380(从) 6381(从) 
port 6379   
logfile "6379.log"
 
# 注意三个节点的redis.conf配置文件都需要修改,

5)在redis-node文件下创docker-compose.yml文件

6编写docker-compose.yml 文件

version: "3.0"      # docker-compose的版本号
 
networks:     #网络配置    
  redis-sentinel-1:
    driver: bridge
 
services:           #所有服务的入口  固定写法
  redis-master:     #自定义服务名
    image: redis:6.2.7           #我们所需要运行的镜像,没有的话,会自定为我们下载
    container_name: redis-master  #镜像运行后的容器名,自定义
    ports:
      - 6379:6379           #宿主机的6379映射容器内部的6379端口
    volumes:                #目录挂载分号 : 右边代表容器内部的目录,分号左边表示宿主机的目录,
      - /redis/redis-node/master/redis.conf:/etc/redis/redis.conf
      - /redis/redis-node/master/data:/data
    command: bash -c "redis-server /etc/redis/redis.conf"  #容器启动后,运行的命令
    networks:
      - redis-sentinel-1
   redis-slave-1:
    image: redis:6.2.7
    container_name: redis-slave-1
    ports:
      - 6380:6380
    volumes:
      - /redis/redis-node/slave1/redis.conf:/etc/redis/redis.conf
      - /redis/redis-node/slave1/data:/data
    # 从主节点同步数据到从节点   
    command: bash -c "redis-server /etc/redis/redis.conf  --slaveof 47.94.85.176 6379"
    depends_on:
      - redis-master
    networks:
      - redis-sentinel-1
 
  redis-slave-2:
    image: redis:6.2.7
    container_name: redis-slave-2
    ports:
      - 6381:6381
    volumes:
      - /redis/redis-node/slave2/redis.conf:/etc/redis/redis.conf
      - /redis/redis-node/slave2/data:/data
    command: bash -c "redis-server /etc/redis/redis.conf --slaveof 47.94.85.176 6379"
    depends_on:
      - redis-master
    networks:
      - redis-sentinel-1

7)使用docker-compose up -d启动文件

 

四、测试

 1,查看节点信息(执行info replication查看节点信息)

1)6379主节点信息

2)6380、6381从节点信息 

 

 2.进行读写操作

1)主节点

2)从节点

 我们可以发现从节点同步了上面主节点添加的数据,同时发现主节点可以进行查询和添加的操作,从节点只能进行查询的操作,进行添加的操作会给出“你没有写入权限”的提示。

五、总结

通过以上的步骤,我们就使用docker-compose搭建了一主两从的redis主从复制的结构,主机用来写,从机用来读。想详细了解其中原理的同学可以去研究研究,主从之间是如何进行建立连接的,全量复制和增量复制又是怎么回事,这种结构有什么优缺点,后面的哨兵模式又是怎么回事?集群如何搭建等等。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用Docker Compose搭建Redis主从集群 的相关文章

随机推荐

  • ODBC连接ORACLE数据库的设置

    一 建立服务名1 选择 Net8 Configuration Assistant 选择 本地网络服务名配置 2 选择 添加 3 选择 Oracle 8i数据库或服务 4 输入服务名 此为远程数据库已经定制好的数据库服务名字 比如 ORCL
  • python map和lambda

    map和lambda 前言 一 map 二 lambda 三 map和lambda的使用 前言 一 map map是python的内置函数 根据提供的函数对指定序列做映射 map function literation function 函
  • ngrok服务端搭建并使用docker解放80端口

    start 前言 为什么要搭建ngrok服务端 为什么使用docker 1 开发环境下调试微信公众号使用 要求80端口 2 ngrok配置中要指定 http的端口 如果指定80端口的话 会和nginx抢端口 nginx肯定比ngrok重要
  • Ajax核心技术之XMLHttpRequest对象

    XMLHttpRequest对象到底是什么 跟Ajax到底有什么联系 在了解它之前还是要先了解一下Ajax的功能 与以往的技术不同 Ajax是为了实现异步操作 那么关于异步 好像一个管理者安排好一个项目计划后 将这个项目交给下属去做 而自己
  • 揭秘win10系统CPU占用100%的真正原因/找出那些罪魁祸首

    经常会有 Win10 用户反应 电脑没有运行太多程序 但是在任务管理器中 经常可以看到电脑CPU占用率却一直居高不下 那么 CPU占用100 的正真原因是什么呢 下面小编收集了一些针对CPU占用过高的原因及解决办法 这些可能就是导致你CPU
  • Spring Boot 快速入门、开发环境热部署

    SpringBoot快速上手 准备工作 我们将学习如何快速的创建一个Spring Boot应用 并且实现一个简单的Http请求处理 通过这个例子对Spring Boot有一个初步的了解 并体验其结构简单 开发快速的特性 我的环境准备 jav
  • Sping之自动注入-1

    最近终于能静下心来 一步步的学习Java Web开发 在学习的过程中 遇到太多的问题 一开始好些问题真是不知道怎么解决 在这里要非常感谢 Sping In Action 一书的作者 感谢他能写出此书 让我受益匪浅 您辛苦了 本着 相互学习
  • linux查看已安装的软件

    这本阿里P8撰写的算法笔记 再次推荐给大家 身边不少朋友学完这本书最后加入大厂 Github 疯传 史上最强悍 阿里大佬 LeetCode刷题手册 开放下载了 因为linux安装软件的方式比较多 所以没有一个通用的办法能查到某些软件是否安装
  • docker run之后 docker ps 不显示运行中的容器

    docker run 启动mysql以后 生成的对应容器直接exited 1 问题 今天在部署项目过程中 用docker run指令启动容器返回了容器id 但是用docker ps指令却不显示刚才启动的容器 问题查找 由于docker ps
  • L298N 小车应用(附代码)

    L298N L298N是目前智能小车应用很广泛的价格也比较便宜的电机驱动 用来驱动直流电机 L298N 输出A 输出B 分别接两个直流电机 电机两根线随便接 如果发现两电机方向是反着的 就调换下接线就ok了 12V供电 这个是外部电源为驱动
  • kubernetes集群实战——暴露service供外部访问的4种方法(NodePort、LoadBalancer、ExternalName和分配公有IP)

    1 service介绍 Service可以看作是一组提供相同服务的Pod对外的访问接口 借助Service 应用可以方便地实现服务发现和负载均衡 service默认只支持4层负载均衡能力 没有7层功能 可以通过Ingress实现 servi
  • android studio3.1调试

    快捷键 ctrl alt left或者ctrl alt right 回退 前进 双击快捷键 shift 全局搜索 快捷键 shift F9 开始调试 快捷键 F6 单步执行程序 快捷键 F5 单步执行程序 遇到方法时进入 快捷键 F8 调到
  • 机器学习算法——Kmeans

    1 k mean算法的原理 1 选取K个点做为初始聚集的簇心 2 分别计算每个样本点到K个簇核心的距离 这里的距离一般取欧氏距离或余弦距离 找到离该点最近的簇核心 将它归属到对应的簇 3 所有点都归属到簇之后 M个点就分为了K个簇 之后重新
  • element 时间日期选择器限制选择范围为7天

    template 部分
  • 编写递归算法,计算二叉树叶子结点的数目。

    编写递归算法 计算二叉树叶子结点的数目 编写递归算法 计算二叉树叶子结点的数目 include stdio h 包含 getchar scanf printf include malloc h malloc 动态申请空间 函数 二叉树 结点
  • 服务器的地址信息,服务器地址信息

    服务器地址信息 内容精选 换一换 可以一次添加一台服务器 也可以一次添加同一网段连续IP的多台服务器 进入任务中心可以查看状态信息 如果状态为成功 说明服务器已添加成功 如果要自定义裸金属服务器的DNS服务器信息 需要将裸金属服务器网络设置
  • 《算法导论》笔记(15) 最小生成树 部分习题

    习题23 1 11 给定图G和一棵最小生成树T 假设减少了位于T之外的某条边的权重 因为T内的边 是连接所有结点的权重最小的 那么首先将T外的减少权重的边 u v 加入T 然后在u v中寻找所有的路径 去掉路径中权重最大的边 习题23 2
  • 5、H3C交换机ACL配置

    创建 IPv4 高级 ACL 并进入 IPv4 高级 ACL 视图 switch acl number acl number name acl name 注 IPv4 高级 ACL 的编号范围为3000 3999 创建规则 switch a
  • 无法打开计算机开始菜单,开始菜单,教您开始菜单无法打开

    win10系统开始菜单不能使用该如何是好呢 最近有位用户反映在使用win10系统的过程当中 发现开始菜单没莫名其妙的就出现了打不开的情况 这该怎么办呢 不要着急 小编这就来将处理开始菜单打不开这个问题的办法来分享给你们 我们在使用电脑的过程
  • 使用Docker Compose搭建Redis主从集群

    一 本次环境使用到了docker docker compose redis 二 我们搭建的主从集群结构如图 共包含三个节点 一个主节点 两个从节点 这里我们会在同一台虚拟机中开启3个redis实例 模拟主从集群 信息如下 IP PORT 角