docker-compose公网部署redis哨兵模式

docker-compose公网部署redis哨兵模式

这里使用云服务搭建redis哨兵集群,并且暴露给公网,这里仅供测试使用,生产不要暴露到公网

网上关于redis哨兵及集群的docker有很多部署教程,参考如下

https://segmentfault.com/a/1190000040755506

https://cloud.tencent.com/developer/news/688466

这些部署教程在内网是可以使用的,但是公网下会连接不上,对主要的差异做一点记录

1 启动redis主从节点

编写reids主从docker-compose.yml

version: '3.8'
services:
  master:
    image: redis:6.0.8
    container_name: redis-master
    privileged: true
    restart: always
    # 注意这里 --cluster-announce-ip 指定暴露的地址,这里填写公网地址
    # 这里很多部署都没有指定--masterauth,master节点重启后会无法加入到集群中
    command: redis-server --port 6380 --requirepass redispwd --masterauth redispwd --appendonly yes --cluster-announce-ip xxx.xxx.xxx.xxx --cluster-announce-port 6380 --cluster-announce-bus-port 16380
    ports: # 与上面指定的--port一致
    - 6380:6380
    volumes:
    - ./data1:/data
  slave1:
    image: redis:6.0.8
    container_name: redis-slave-1
    privileged: true
    restart: always
    # 这里有个坑,--slaveof不要直接写redis-master,否则会被识别为内网IP
    command: redis-server --port 6381 --slaveof xxx.xxx.xxx.xxx 6380  --requirepass redispwd --masterauth redispwd  --appendonly yes --cluster-announce-ip xxx.xxx.xxx.xxx --cluster-announce-port 6381 --cluster-announce-bus-port 16381
    ports: # 与上面指定的--port一致
    - 6381:6381
    volumes:
    - ./data2:/data
  slave2:
    image: redis:6.0.8
    container_name: redis-slave-2
    privileged: true
    restart: always
    command: redis-server --port 6382 --slaveof xxx.xxx.xxx.xxx 6380  --requirepass redispwd --masterauth redispwd  --appendonly yes --cluster-announce-ip xxx.xxx.xxx.xxx --cluster-announce-port 6382 --cluster-announce-bus-port 16382
    ports: # 与上面指定的--port一致
    - 6382:6382
    volumes:
    - ./data3:/data
networks:
  default:
    external:
      name: redis_default

进入redis对应的docker-compose.yml的目录,执行命令:

# 创建网络,有的话就不需要创建了
docker network create redis_default
# -d表示后台运行
docker-compose up -d

2 哨兵文件准备

编写docker-compose.yml

version: '3.8'
services:
  sentinel1:
    image: redis:6.0.8
    container_name: redis-sentinel-1
    privileged: true
    restart: always
    ports:
    - 26380:26380
    volumes:
    - ./sentinel1.conf:/usr/local/etc/redis/sentinel.conf
    command: bash -c "redis-sentinel /usr/local/etc/redis/sentinel.conf && chmod 777 /usr/local/etc/redis/sentinel.conf"
  sentinel2:
    image: redis:6.0.8
    container_name: redis-sentinel-2
    privileged: true
    restart: always
    ports:
    - 26381:26380
    volumes:
    - ./sentinel2.conf:/usr/local/etc/redis/sentinel.conf
    command: bash -c "redis-sentinel /usr/local/etc/redis/sentinel.conf && chmod 777 /usr/local/etc/redis/sentinel.conf"
  sentinel3:
    image: redis:6.0.8
    container_name: redis-sentinel-3
    privileged: true
    ports:
    - 26382:26380
    volumes:
    - ./sentinel3.conf:/usr/local/etc/redis/sentinel.conf
    command: bash -c "redis-sentinel /usr/local/etc/redis/sentinel.conf && chmod 777 /usr/local/etc/redis/sentinel.conf"
networks:
  default:
    external:
      name: redis_default

编写 sentinel.conf 配置文件

# mymaster是自定义集群名
# xxx.xxx.xxx.xxx 主节点IP的公网地址
# 6380 为 redis-master 的端口,2 为最小投票数(因为有 3 台 Sentinel 所以可以设置成 2)
port 26380
dir /tmp
# protected-mode no
# bind 0.0.0.0
sentinel monitor mymaster xxx.xxx.xxx.xxx 6380 2
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
# 密码与上面保持一致
sentinel auth-pass mymaster redispwd
sentinel failover-timeout mymaster 180000
sentinel deny-scripts-reconfig yes

将上述文件分别拷贝3份分别命名为sentinel1.confsentinel2.confsentinel3.confdocker-compose.yml中的配置文件对应,然后放置和哨兵的docker-compose.yml在同一目录

3 启动哨兵

# 进入docker-compose.yml所在文件夹执行
docker-compose up -d

4 测试连接

以ARDM为例,填写对应信息

docker-compose公网部署redis哨兵模式_第1张图片

可以正常连接

docker-compose公网部署redis哨兵模式_第2张图片

你可能感兴趣的:(Docker,Redis,docker,redis)