Mac m1 搭建 Redis Sentinel 集群

869 阅读2分钟

虽然疫情很严重,但是也不要忘记自己充能哦,今日,又是元气满满的一天!

多的不说,少的不唠,开整

咱们这里搭建的是哨兵的标准模式 -> 1 主 + 2 从 + 3 哨兵

Mac m1 部署 Redis Sentinel 微集群

一、安装 Redis

1、安装

这里很简单,只要一行命令即可

brew install redis

2、启动

brew services restart redis

3、验证

ps -ef|grep redis

4、说明

Mac m1 芯片,使用 brew 命令安装软件的默认配置文件位置如下

image.png

二、创建目录并启动主从节点

首先规划下目录结构

cd /Users/xiaolige/app
## 创建 redis master 节点配置文件目录
mkdir -p redis/redisSentinel/master
## 创建 redis slave 节点配置文件目录
mkdir -p redis/redisSentinel/slave
## 创建 redis sentinel 节点配置文件目录
mkdir -p redis/redisSentinel/sentinel
## 创建 redis 启动相关脚本目录
mkdir -p redis/redisSentinel/script
## 创建 redis 日志目录
mkdir -p redis/redisSentinel/logs

1、主节点

执行如下命令

cp /opt/homebrew/etc/redis.conf /Users/xiaolige/app/redis/redisSentinel/master/redis.conf

此时,主节点配置文件就创建好了,然后,修改主节点配置文件

port 8000
daemonize yes

就简单修改这两个配置吧

创建主节点启停脚本(为后续方便,咱们自己写个启动脚本),如下

cd /Users/xiaolige/app/redis/redisSentinel/script
## 启动脚本
touch start_master_8000.sh
## 停止脚本
touch stop_master_8000.sh

vi start_master_8000.sh ,然后再文件中输入启动命令

#!/bin/sh
redis-server /Users/xiaolige/app/redis/redisSentinel/master/redis.conf &

vi stop_master_8000.sh ,然后再文件中输入停止命令

#!/bin/sh
ps -ef | grep 8000 | grep -v grep | awk '{print$2}' | xargs kill

启动主节点:

## cd /Users/xiaolige/app/redis/redisSentinel/script
sh ./start_master_8000.sh

检查主节点启动情况,输入如下命令

redis-cli -p 8000 ping

出现 PONG,则证明主节点启动成功

主节点就好了,接下来创建从节点

2、从节点

执行如下命令

cp /Users/xiaolige/app/redis/redisSentinel/master/redis.conf /Users/xiaolige/app/redis/redisSentinel/slave/redis-slave-8001.conf
cp /Users/xiaolige/app/redis/redisSentinel/master/redis.conf /Users/xiaolige/app/redis/redisSentinel/slave/redis-slave-8002.conf

这里我们将两个从节点的端口定为 8001 和 8002,然后修改配置

redis-slave-8001.conf

port 8001
damonnize yes
slaveof 127.0.0.1 8000

redis-slave-8002.conf

port 8002
damonnize yes
slaveof 127.0.0.1 8000

加入了一个 slaveof 配置,表明该节点的主节点是 127.0.0.1:8000

创建从节点启停脚本,如下

cd /Users/xiaolige/app/redis/redisSentinel/script
## 启动脚本
touch start_slave_8001.sh
touch start_slave_8002.sh
## 停止脚本
touch stop_slave_8001.sh
touch stop_slave_8002.sh

vi start_slave_8001.sh ,然后再文件中输入启动命令

#!/bin/sh
redis-server /Users/xiaolige/app/redis/redisSentinel/slave/redis-slave-8001.conf &

vi stop_slave_8001.sh ,然后再文件中输入停止命令

#!/bin/sh
ps -ef | grep 8001 | grep -v grep | awk '{print$2}' | xargs kill

vi start_slave_8002.sh ,然后再文件中输入启动命令

#!/bin/sh
redis-server /Users/xiaolige/app/redis/redisSentinel/slave/redis-slave-8002.conf &

vi stop_slave_8002.sh ,然后再文件中输入停止命令

#!/bin/sh
ps -ef | grep 8002 | grep -v grep | awk '{print$2}' | xargs kill

启动 8001 从节点:

## cd /Users/xiaolige/app/redis/redisSentinel/script
sh ./start_slave_8001.sh

检查 8001 从节点启动情况,输入如下命令

redis-cli -p 8001 ping

启动 8002 从节点:

## cd /Users/xiaolige/app/redis/redisSentinel/script
sh ./start_slave_8002.sh

检查 8002 从节点启动情况,输入如下命令

redis-cli -p 8002 ping

现在主从节点已经关联好了,现在通过 info 命令看看是否成功

redis-cli -p 8000 info replication

出现如下界面

image.png 进入了 8000 主节点中查看,看见 role 是 master,并且有 2 个从节点,8001 和 8002 成功!

接着开始部署哨兵节点

三、部署哨兵节点

执行如下命令

cp /opt/homebrew/etc/redis.conf /Users/xiaolige/app/redis/redisSentinel/sentinel/redis-sentinel-26379.conf
cp /opt/homebrew/etc/redis.conf /Users/xiaolige/app/redis/redisSentinel/sentinel/redis-sentinel-26380.conf
cp /opt/homebrew/etc/redis.conf /Users/xiaolige/app/redis/redisSentinel/sentinel/redis-sentinel-26381.conf

然后修改配置文件:

redis-sentinel-26379.conf

port 26379
daemonize yes
sentinel monitor mymaster 127.0.0.1 8000 2
sentinel down-after-milliseconds mymaster 10000
sentinel failover-timeout mymaster 60000

redis-sentinel-26380.conf

port 26380
daemonize yes
sentinel monitor mymaster 127.0.0.1 8000 2
sentinel down-after-milliseconds mymaster 10000
sentinel failover-timeout mymaster 60000

redis-sentinel-26381.conf

port 26381
daemonize yes
sentinel monitor mymaster 127.0.0.1 8000 2
sentinel down-after-milliseconds mymaster 10000
sentinel failover-timeout mymaster 60000

这里比较关键的是: 1、sentinel monitor mymaster 127.0.0.1 8000 2,这个配置表示该哨兵节点需要监控 8000 这个主节点, 2 代表着判断主节点失败至少需要 2 个 Sentinel 节点同意。

2、sentinel down-after-milliseconds mymaster 10000,down-after-milliseconds 选项指定了 Sentinel 判断实例进入主观下线所需的时间长度:如果一个实例在 down-after-milliseconds毫秒内,连续向 Sentinel 返回无效回复,那么 Sentinel 会修改这个实例所对应的实例结构,在结构的flags 属性中打开 SRI_S_DOWN 标识,以此来表示这个实例已经进入主观下线状态。

3、sentinel failover-timeout mymaster 60000,failover 过期时间,当 failover 开始后,在此时间内仍然没有触发任何 failover 操作,当前 Sentinel 将会认为此次 failoer 失败。

创建 Sentinel 节点启停脚本,如下

cd /Users/xiaolige/app/redis/redisSentinel/script
## 启动脚本
touch start_sentinel_26379_26380_26381.sh
## 停止脚本
touch stop_sentinel_26379_26380_26381.sh

vi start_sentinel_26379_26380_26381.sh ,然后再文件中输入启动命令

#!/bin/sh
redis-sentinel /Users/xiaolige/app/redis/redisSentinel/sentinel/redis-sentinel-26379.conf &
redis-sentinel /Users/xiaolige/app/redis/redisSentinel/sentinel/redis-sentinel-26380.conf &
redis-sentinel /Users/xiaolige/app/redis/redisSentinel/sentinel/redis-sentinel-26381.conf &

vi stop_sentinel_26379_26380_26381.sh ,然后再文件中输入停止命令

#!/bin/sh
echo "将要停止的redis sentinel 进程 Id 如下..."
ps -ef | grep sentinel | grep -v grep | grep -v stop_sentinel_26379_26380_26381 | awk '{print$2}' 
echo "将要停止redis sentinel......"
#date;sleep 60;date
ps -ef | grep sentinel | grep -v grep | awk '{print "kill "$2}' | sh

启动 Sentinel 节点:

## cd /Users/xiaolige/app/redis/redisSentinel/script
sh ./start_sentinel_26379_26380_26381.sh

启动后,看看哨兵的相关信息:

redis-cli -p 26379 info sentinel

image.png

通过进入 26379 节点,使用 info Sentinel 命令,看到有个 master 节点,名称是 mymaster,地址是我们刚刚配置的 8000, 从节点有 2 个,哨兵有 3 个。

此时一个高可用的 Redis 集群就搭建好了。

成品目录结构如下:

image.png

当然如果是生产环境,所有实例建议部署在不同的机器上。

拓扑图如下:

image.png 欢迎大家关注,点赞,收藏

知乎搜索:搬砖小李哥

image.png

微信公众号关注:peki

image.png

image.png