保姆级docker-compose部署Redis,Sentinel哨兵模式

介绍Sentinel哨兵

Sentinel(哨岗、哨兵)是Redis的高可用性(high availability)解决方案:由一个或多个Sentinel实例(instance)组成的Sentinel系统(system)可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器,然后由新的主服务器代替已下线的主服务器继续处理命令请求。
Redis Sentinel 是官方推荐的高可用性解决方案。它不会因为节点宕机而导致服务不可用,同时,它可以作为监控管理工具,可以提供节点监控、通知、自动故障恢复和客户端配置发现服务等,即使出现了故障,也能很快知道,并进行修复。

搭建开始

首先我是在我的服务器上搭建的,大家可以用自己的服务器或者虚拟机我的搭建目录结构
在这里插入图片描述
首先我们要在自己服务器或者虚拟机上安装好docker-compose,这是我们的关键,如下是安装docker-compose的命令以及启动容器的命令

# 下载1.25.0 docker compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.25.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 添加可执行权限
sudo chmod +x /usr/local/bin/docker-compose
# 测试安装
sudo docker-compose --version
#启动一个容器
docker-compose up -d
#停止容器
docker-compose down

接下来我们正式开始搭建哨兵

创建文件夹

mkdir /home/redis/data   #创建目录

cd /home/redis/data   #进入目录   

#新建文件docker-compose.yml
touch docker-compose.yml

version: '3'
services:
  master:
    image: redis
    container_name: redis-master
    restart: always
    ports:
      - 6379:6379
    command: redis-server --port 6379

  slave1:
    image: redis
    container_name: redis-slave-1
    restart: always
    ports:
      - 6380:6380
    command: redis-server --slaveof 192.168.8.150 6379 --port 6380

  slave2:
    image: redis
    container_name: redis-slave-2
    restart: always
    ports:
      - 6381:6381
    command: redis-server --slaveof 192.168.8.150 6379 --port 6381

再次创建sentinel文件夹,并且进入其中,再创建一个docker-compose.yml文件,并且将下面的内容写入

version: '3'
services:
  sentinel1:
    image: redis
    container_name: redis-sentinel-1
    ports:
      - 26379:26379
    command: redis-sentinel /home/redis/data/sentinel/sentinel.conf
    restart: always
    #network_mode: "host"
    volumes:
      - ./sentinel1.conf:/home/redis/data/sentinel/sentinel.conf

  sentinel2:
    image: redis
    container_name: redis-sentinel-2
    ports:
      - 26380:26379
    command: redis-sentinel /home/redis/data/sentinel/sentinel.conf
    restart: always
    #network_mode: "host"
    volumes:
      - ./sentinel2.conf:/home/redis/data/sentinel/sentinel.conf

  sentinel3:
    image: redis
    container_name: redis-sentinel-3
    ports:
      - 26381:26379
    command: redis-sentinel /home/redis/data/sentinel/sentinel.conf
    restart: always
    #network_mode: "host"
    volumes:
      - ./sentinel3.conf:/home/redis/data/sentinel/sentinel.conf

在sentinel目录下创建哨兵文件,并将如下内容复制进去,保存并退出

#创建sentinel.conf文件
touch  sentinel.conf 
port 26379
dir /tmp
# 自定义集群名,其中 127.0.0.1 为 redis-master 的 ip,6379 为 redis-master 的端口,2 为最小投票数(因为有 3 台 Sentinel 所以可以设置成 2)
sentinel monitor mymaster 192.168.8.150 6379 2
# 指定多少毫秒之后 主节点没有应答哨兵sentinel 此时 哨兵主观上认为主节点下线 默认30秒
sentinel down-after-milliseconds mymaster 30000
# 这个配置项指定了在发生failover主备切换时最多可以有多少个slave同时对新的master进行 同步,
这个数字越小,完成failover所需的时间就越长,
但是如果这个数字越大,就意味着越 多的slave因为replication而不可用。
可以通过将这个值设为 1 来保证每次只有一个slave 处于不能处理命令请求的状态。
sentinel parallel-syncs mymaster 1
# 故障转移的超时时间 failover-timeout 可以用在以下这些方面: 
#1. 同一个sentinel对同一个master两次failover之间的间隔时间。
#2. 当一个slave从一个错误的master那里同步数据开始计算时间。直到slave被纠正为向正确的master那里同步数据时。
#3.当想要取消一个正在进行的failover所需要的时间。  
#4.当进行failover时,配置所有slaves指向新的master所需的最大时间。不过,即使过了这个超时,slaves依然会被正确配置为指向master,但是就不按parallel-syncs所配置的规则来了
# 默认三分钟
sentinel failover-timeout mymaster 180000
sentinel deny-scripts-reconfig yes

注意:
① 第三行中 mymaster 是可以自定义集群的名字,如果使用其他语言连接集群,需要写上该名字。
② 192.168.8.150是我虚拟机的ip,请换成自己的ip,不要127.0.0.1 否则会链接到你的应用程序去,写IP就可以。
③ 那个2呢,是因为我有3台哨兵,2个投票超过50%了,所以设置2即可,如果是更多,设置超过50%概率就好,自己喜欢。

将刚刚创建的sentinel.conf在创建3份,一模一样就可以了

cp sentinel.conf sentinel1.conf
cp sentinel.conf sentinel2.conf
cp sentinel.conf sentinel3.conf

在这里插入图片描述

接下来就是启动搭建好的redis哨兵

# 这里一定要进入创建的docker-compose.yml目录下
cd /home/redis/data
# 启动第一个dockers-compose.yml
docker-compose.yml up -d

在这里插入图片描述

# 这里进入的是sentinel目录
cd /home/redis/data/sentinel
# 启动第二个dockers-compose.yml
docker-compose.yml up -d

在这里插入图片描述
只要我们在启动这两个文件时没有出现error,然后输入docker ps命令看到出现下面样子就代表成功了
在这里插入图片描述

  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值