docker中安装redis集群和哨兵模式

本文档详细介绍了如何在centos 7.5环境下,利用docker 20.10.8版本搭建redis集群和哨兵模式。首先拉取redis镜像,创建文件夹,接着编写docker-compose.yml和redis.conf配置文件。集群搭建过程中强调了yml文件的格式要求和redis.conf的来源。完成集群启动后,检查数据同步以确保成功。然后配置sentinel哨兵模式,包括配置文件的编辑和启动。最后,你可以进行主从复制、leader选举等试验来验证设置是否正确。
摘要由CSDN通过智能技术生成

引言: centos 7.5 版本 ; docker 20.10.8

1.拉取redis镜像

#根据docker hub 官网上进行版本选择  
docker pull redis 
#查看镜像
docker images

2.服务器中创建文件夹
在这里插入图片描述
这里我的路径是 /usr/local/docker/redis-sentinel
redis 文件夹用于搭建 redis集群 3台
sentinel 文件夹用于搭建 redis的哨兵服务 3台

3.搭建redis集群

3.1搭建redis集群-编写docker-compose.yml

#这里我们使用docker-compose 进行批量搭建
#将文件复制到相应目录  下面内容根据自身情况自定义
##这里一定一定要注意,yml文件对于格式要求非常严格!一个空格都不能错!!
#强烈建议用idea进行编写。。。  别问我怎么知道的,都是眼泪!!!!

yml文件对于格式要求非常严格!!
上传服务器之前,一定要把带#的注释删除,切记切记!!

version: '3.1'  #版本号必须要输入(自定义 例如:1.1 2.2.) 不然无法运行  
services:
  master:
    image: redis  #镜像名称
    container_name: redis-master  #自定义docker容器
    #command和volumes下面细说
    command: redis-server /usr/local/etc/redis/redis.conf --replica-announce-ip 192.168.10.7 --replica-announce-port 6379
    ports:
      - 6379:6379    #docker容器对外映射端口:容器内部端口
    environment:
      # 设置时区为上海,否则时间会有问题
      - TZ=Asia/Shanghai
    volumes:
      - ./data/master_datadir:/data
      - ./conf/master_conf/redis.conf:/usr/local/etc/redis/redis.conf
      - ./logs/master_logs:/logs
  slave1:
    image: redis
    container_name: redis-slave-1
    command: redis-server /usr/local/etc/redis/redis.conf   --slaveof redis-master 6379 --replica-announce-ip 192.168.10.7 --replica-announce-port 6380
    ports:
      - 6380:6379
    environment:
      # 设置时区为上海,否则时间会有问题
      - TZ=Asia/Shanghai
    volumes:
      - ./data/slave1_datadir:/data
      - ./conf/slave1_conf/redis.conf:/usr/local/etc/redis/redis.conf
      - ./logs/slave1_logs:/logs
  slave2:
    image: redis
    container_name: redis-slave-2
    command: redis-server /usr/local/etc/redis/redis.conf  --slaveof redis-master 6379 --replica-announce-ip 192.168.10.7 --replica-announce-port 6381
    ports:
      - 6381:6379
    environment:
      # 设置时区为上海,否则时间会有问题
      - TZ=Asia/Shanghai
    volumes:
      - ./data/slave2_datadir:/data
      - ./conf/slave2_conf/redis.conf:/usr/local/etc/redis/redis.conf
      - ./logs/slave2_logs:/logs
#command 容器启动指令
 command: 
 #将redis.conf 作为启动项
   redis-server /usr/local/etc/redis/redis.conf   
 #从机确定主机端口 主机名  主机端口
 --slaveof redis-master 6379 
 #设置当前服务的ip  这里必须用实际ip地址 不要用127.0.0.1
 --replica-announce-ip 192.168.10.7 
 #设置当前服务的端口号
 --replica-announce-port 6380
#挂载卷  不会的同学,请自学docker
 volumes:
     #服务器路径 : docker内部路径 (默认,无需修改)
      - ./data/master_datadir:/data
      - ./conf/master_conf/redis.conf:/usr/local/etc/redis/redis.conf
      - ./logs/master_logs:/logs

3.2搭建redis集群-编写redis.conf

##一定从官网下载reids安装包,获取该文件。并且和docker中镜像的版本尽量保持一致,不然会有坑!!

#这里只展示需要注意和需要改动的地方,基本上没有太多改动

port 6379  #无需修改 docker容器有很好的隔离性

protected-mode no  #如果redis中设置了yes 则这里也必须相同

#如果需要设置reids密码  必须开启 从机密码一定与主机相同
  requirepass 密码
  
#从机必须再加上
  masterauth 密码(最好与上相同)
  
#打开aof,默认是关闭的
  appendonly yes
  
#默认64m 修改为 5g 
  auto-aof-rewrite-min-size 5g
  
#注意 和cluster有关的配置最好不要开放 容易出各种奇怪的bug 

3.3搭建redis集群-启动

#一定要在当前的docker-compose.yml文件夹中
  docker-compose up -d 
#查看运行状态 一定要看日志,有的时候docker容器启动了,但是内部服务是失败的
  docker-compose logs -f 
#查看docker容器
  docker ps 
#进入redis-master 
  docker exec -it 容器名|容器ID /bin/bash 
#进入redis 
  #默认进入指令 
    redis-cli
  #如果端口改了或者增加密码了 需要这样写
    redis-cli -p 端口号 -a 密码  
#添加 并查看
  set key value  #添加数据 只有主机有这个功能 从机只能读
  keys *     #查看所有数据

主机添加数据后,用同样的方法登录从机,如果看到了相应的数据,说明集群搭建完毕。如果数据不同意,请查看相关日志。其中一定会有问题!!

docker logs  容器名|容器ID

4.sentinel哨兵模式搭建

4.1配置文件

version: '3.1'
services:
  sentinel1:
    image: redis
    container_name: redis-sentinel-1
    ports:
      - 26379:26379
    command: redis-sentinel /usr/local/etc/redis/sentinel.conf
    volumes:
      - ./sentinel1.conf:/usr/local/etc/redis/sentinel.conf
    environment:
      # 设置时区为上海,否则时间会有问题
      - TZ=Asia/Shanghai

  sentinel2:
    image: redis
    container_name: redis-sentinel-2
    ports:
      - 26380:26379
    command: redis-sentinel /usr/local/etc/redis/sentinel.conf
    volumes:
      - ./sentinel2.conf:/usr/local/etc/redis/sentinel.conf
    environment:
      # 设置时区为上海,否则时间会有问题
      - TZ=Asia/Shanghai

  sentinel3:
    image: redis
    container_name: redis-sentinel-3
    ports:
      - 26381:26379
    command: redis-sentinel /usr/local/etc/redis/sentinel.conf
    volumes:
      - ./sentinel3.conf:/usr/local/etc/redis/sentinel.conf
    environment:
      # 设置时区为上海,否则时间会有问题
      - TZ=Asia/Shanghai
     #这里是个坑,之前没有设置,会导致docker时间不同步,哨兵模式无限失败的问题

conf文件

#第一台
port 26379
sentinel announce-ip 192.168.10.7
sentinel announce-port 26379  #需要修改
#所有xxx的地方均为  自定义名称 例如:myredis 
sentinel monitor xxx 192.168.10.7 6379 2
sentinel down-after-milliseconds xxx 30000
sentinel parallel-syncs xxx 1
sentinel failover-timeout xxx 180000
sentinel deny-scripts-reconfig yes
sentinel auth-pass xxx 密码
#第二台
port 26379
sentinel announce-ip 192.168.10.7
sentinel announce-port 26380

sentinel monitor xxx 192.168.10.7 2
sentinel down-after-milliseconds xxx 30000
sentinel parallel-syncs xxx 1
sentinel failover-timeout xxx 180000
sentinel deny-scripts-reconfig yes
sentinel auth-pass xxx 密码

其余不做具体展示,同上,需要修改相应信息即可

4.2启动

#创建容器
docker-compose up -d 
#进入 容器 
docker exec -it 容器名|容器ID /bin/bash 
#进入redis 因为端口不是默认的,所以要设置
redis-cli -p 26379
#测试 查看哨兵信息
> info   
#sentinel 容器内的常用api
1、sentinel masters
展示所有被监控的主节点状态以及相关的统计信息
2、sentinel master master-name
展示指定master-name的主节点状态以及相关的统计信息
3、sentinel slaves master-name
展示指定master-name的从节点状态以及相关统计信息
4、sentinel sentinels master-name
展示指定master-name的sentinel节点集合,不包含当前sentinel节点。
5、sentinel get-master-addr-by-name master-name
返回指定master-name的主节点的ip和端口

以上都完成,即可进行试验。比如 主从复制 leader选举 监控等等

docker相关

#如果docker-compose 成功 但是服务开启失败 需要删除容器 重新进行
 docker ps  #查看所有运行的容器
  docker restart 容器名称|容器id  #重启容器
  docker stop 容器名称|容器id     #停止容器
  docker ps -a 查看所有容器(运行中和关闭中的都有)
  docker rm -f 容器名称|容器id   #删除容器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值