docker compose redis集群搭建_mysql高可用集群部署

docker compose redis集群搭建_mysql高可用集群部署根据官方文档 Redis Sentinel Documentation 中的 Example 2: basic setup with three boxes 示例创建的实例,但因为是单机部署,所以不满足 Redis 实例 与 Sentinel 实例分别处于 3 台机器的要求,因…

说明

项目地址:github.com/TomCzHen/re…

根据官方文档 Redis Sentinel Documentation 中的 Example 2: basic setup with three boxes 示例创建的实例,但因为是单机部署,所以不满足 Redis 实例 与 Sentinel 实例分别处于 3 台机器的要求,因此仅用于开发环境测试与学习。

使用方法

  • 使用 docker-compose up -d 部署运行。

  • 使用 docker-compose pause master 可以模拟对应的 Redis 实例不可用。

  • 使用 docker-compose pause sentinel-1 可以模拟对应的 Sentinel 实例不可用。

  • 使用 docker-compose unpause service_name 将暂停的容器恢复运行。

  • 使用支持 Sentinel 的客户端连接 localhost:62379 进行应用测试。

注:Windows 和 Mac 可能需要修改 Volumes 挂载参数。

注意事项

Sentinel, Docker, NAT, and possible issues

将容器端口 EXPOSE 时,Sentinel 所发现的 master/slave 连接信息(IP 和 端口)对客户端来说不一定可用。

例如:将 Reids 实例端口 6379 EXPOSE16379, Sentinel 容器使用 LINK 的方式访问 Redis 容器,那么对于 Sentinel 容器 6379 端口是可用的,但对于外部客户端是不可用的。

解决方法是 EXPOSE 端口时保持内外端口一致,或者使用 host 网络运行容器。如果你想使用本项目中的编排文件部署的集群对外部可用,那么只能将 Redis 容器运行在 host 网络之上。

注:实际上 bridge 模式下 Redis 性能也会受到影响。

文件结构

.
├── docker-compose.yaml
├── nginx
│   └── nginx.conf
├── README.md
├── .env
└── sentinel
    ├── docker-entrypoint.sh
    ├── Dockerfile-sentinel
    └── sentinel.conf.sample

Sentinel

镜像使用 Dockerfile-sentinel 构建,运行时根据环境变量生成 sentinel.conf 文件,详细配置说明请查看 sentinel.conf.sample 内容。

docker-entrypoint.sh

使用 Reids 官方镜像中的 docker-entrypoint.sh 脚本修改而来,添加了生成 sentienl.conf 语句。

...
# create sentinel.conf
if [ ! -e ${SENTINEL_CONF_PATH} ]; then
    envsubst < /etc/redis/sentinel.conf.sample > ${SENTINEL_CONF_PATH}
    chown redis:redis /etc/redis/sentinel.conf
fi
...

修改配置 Sentinel 的环境变量后需要重新创建容器才能生效。

可用环境变量

SENTINEL_CONF_PATH=/etc/redis/sentinel.conf
SENTINEL_PORT=26379
SENTINEL_MASTER_NAME=redis-master
SENTINEL_REDIS_IP=127.0.0.1
SENTINEL_REDIS_PORT=6379
SENTINEL_REDIS_PWD=
SENTINEL_QUORUM=2
SENTINEL_DOWN_AFTER=30000
SENTINEL_PARALLEL_SYNCS=1
SENTINEL_FAILOVER_TIMEOUT=180000

docker-compose.yaml

可以使用 docker-compose config 可查看完整的编排内容。

Redis 实例运行参数

详细可用参数请查看官方示例文件 Redis Configuration File Example,需要注意 port 参数需要与编排中的 PORTS 保持一致,或修改编排文件让容器网络使用 host 模式。

由于 master 会被 Sentinel 切换为 slave ,因此最好保持每个 Redis 实例的口令一致。

master:
    image: redis:4.0.8-alpine
    ports:
      - 6379:6379
    volumes:
      - type: volume
        source: master-data
        target: /data
    command: [
      '--requirepass "${REDIS_PWD}"',
      '--masterauth "${REDIS_PWD}"',
      '--maxmemory 512mb',
      '--maxmemory-policy volatile-ttl',
      '--save ""',
    ]

Sentinel 实例运行参数

详细可用参数请查看 sentinel 目录下的 sentinel.conf.sample 文件。由于容器使用的配置文件是运行时根据环境变量生成的,因此使用 environment 进行配置,可用环境变量请查看文档 Sentinel 部分。

最后使用了 Nginx 作为 Sentinel 实例的代理,因此 Sentinel 容器不需要对外访问。

sentinel-1: &sentinel
    build:
      context: ./sentinel
      dockerfile: Dockerfile-sentinel
    image: redis-sentinel:dev
    environment:
      - SENTINEL_REDIS_PWD=${REDIS_PWD}
      - SENTINEL_REDIS_IP=${SENTINEL_MASTER_NAME}
      - SENTINEL_QUORUM=2
      - SENTINEL_DOWN_AFTER=3000
    command: [
      '${SENTINEL_CONF_PATH}',
      '--sentinel'
    ]
    depends_on:
      - master
      - node-1
      - node-2
    links:
      - master:${SENTINEL_MASTER_NAME}
      - node-1
      - node-2
  sentinel-2:
    <<: *sentinel
  sentinel-3:
    <<: *sentinel

Nginx

使用 Nginx 作为 Sentinel 负载均衡以及高可用代理。

  nginx:
    image: nginx:1.13.9-alpine
    ports:
      - 26379:26379
    volumes:
      - type: bind
        source: ./nginx/nginx.conf
        target: /etc/nginx/nginx.conf
        read_only: true
    depends_on:
      - sentinel-1
      - sentinel-2
      - sentinel-3

修改 nginx 目录下的 nginx.conf 进行配置。

...
stream {
    server {
        listen 26379;
        proxy_pass redis_sentinel;
    }

    upstream redis_sentinel {
        server sentinel-1:26379;
        server sentinel-2:26379;
        server sentinel-3:26379;
    }
}
...

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/13382.html

(0)

相关推荐

  • 使用Python编程写入CSV文件

    使用Python编程写入CSV文件CSV(Comma Separated Values)文件是一种以文本形式存储表格数据的文件格式,数据之间使用逗号分隔。在日常工作中,我们常常需要将表格数据以CSV格式进行保存和导出,因此,学习如何使用Python编程将数据写入CSV文件是一项必备技能。

    2024-08-24
    25
  • RMAN中MAXSETSIZE和MAXPIECESIZE的用法「建议收藏」

    RMAN中MAXSETSIZE和MAXPIECESIZE的用法「建议收藏」MAXSETSIZE跟MAXPIECESIZE用法 区别:maxpiecesize设置的是备份完成后的备份片大小,对备份整体的大小没有影响,比如一个G的备份完成文件,maxpiecesize设置为10

    2022-12-30
    158
  • 如何彻底卸载Python

    如何彻底卸载PythonPython是一种流行的编程语言,但有时您可能需要卸载它。本文将指导您如何彻底卸载Python以及其他软件,让您可以从计算机中将其完全清除。

    2024-07-06
    37
  • sql中union all的用法_sql中union用法示例

    sql中union all的用法_sql中union用法示例本文介绍如何利用 SQL UNION 操作符将多条 SELECT 语句组合成一个结果集。使用 UNION 可极大地简化复杂的 WHERE 子句,简化从多个表中检索数据的工作。 一、组合查询 多数 SQ

    2023-05-17
    144
  • Python求余运算的使用

    Python求余运算的使用求余运算,在数学中也被称为取模运算,用来求一个整数除以另一个整数后的余数。在Python编程中,求余运算使用符号“%”表示。例如10 % 3得到的结果就是1,因为10除以3,商为3余1。

    2024-09-13
    25
  • WSL + VS Code Remote真香「建议收藏」

    WSL + VS Code Remote真香「建议收藏」众所周知,windows下命令行很难用,Linux下桌面应用体验很糟糕,MacBook成为最大赢家。使用了一年的MacBook后,受不了它的低配和封闭,决定重新开启windows。考虑到本身工作常用命令并不多,在windows下又可以找到替代的工具,所以毅然决然的投向了wind…

    2023-07-31
    141
  • 如何卸载Anaconda3

    如何卸载Anaconda3在进行Python开发的过程中,有许多人会选择安装Anaconda来管理Python环境。然而,在使用Anaconda的过程中,也难免会出现需要卸载Anaconda的情况,比如要升级到新版本或者出现异常情况时需要重新安装。本篇文章将详细介绍如何卸载Anaconda3。

    2024-07-09
    46
  • sqlilab less11-less18「建议收藏」

    sqlilab less11-less18「建议收藏」 less-11 uname和passwd直接带入查询,万能密码 sqlmap自动搜索表单,或者抓包后用-r参数 less-12 post数据用小括号进行包裹,构造万能密码”) or 1=1 …

    2023-03-29
    148

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注