一、前言
redis在我们企业级开发中是很常见的,但是单个redis不能保证我们的稳定使用,所以我们要建立一个集群。
redis有两种高可用的方案:
- High availability with Redis Sentinel(哨兵)
- Scaling with Redis Cluster(分片集群)
第一个就是我们本次的要搭建的,就是高可用的哨兵,主redis挂掉,哨兵会进行投票进行故障转移
!
第二个就是分片集群,哨兵的一个缺点就是只能存在一个master节点,写的效率太低。分片集群就是解决哨兵的问题,可以水平扩展,提高redis的性能!
哨兵最低配是三哨兵,以奇数递增。
分片集群最低配是三主三从。
小编之前写过一篇在一台机器上搭建的文章,大家有兴趣可以先去体验一下,实际生产上不会让你一台机器上;也没有任何意义,服务器挂了,再多的集群也全部挂掉了!!
docker compose搭建redis7.0.4高可用一主二从三哨兵集群并整合SpringBoot
二、准备
首先我们要准备:
三台服务器(没有的条件的搭三个虚拟机),巧了小编就是虚拟机哈!
三台机器的ip和名称在表格里整理一下!
ip | redis节点名称 | sentinel节点名称 |
---|---|---|
192.168.239.131 | redis-master | redis-sentinel-1 |
192.168.239.130 | redis-slave-1 | redis-sentinel-2 |
192.168.239.128 | redis-slave-2 | redis-sentinel-3 |
三、Sentinel概念
Redis Sentinel 在不使用Redis Cluster时为 Redis 提供高可用性
。
Sentinel功能的完整列表:
监控
:Sentinel 不断检查您的主实例和副本实例是否按预期工作。通知
:Sentinel 可以通过 API 通知系统管理员或其他计算机程序,其中一个受监控的 Redis 实例出现问题。自动故障转移
:如果 master 没有按预期工作,Sentinel 可以启动一个故障转移过程,其中一个副本被提升为 master,其他额外的副本被重新配置为使用新的 master,并且使用 Redis 服务器的应用程序被告知要使用的新地址连接时。自动更新配置
:Sentinel 充当客户端服务发现的权威来源:客户端连接到 Sentinels 以询问负责给定服务的当前 Redis master 的地址。如果发生故障转移,Sentinels 将报告新地址。
官方哨兵搭建条件:
- 您至少需要
三个 Sentinel 实例
才能进行可靠的部署。 - 三个 Sentinel 实例应该放置在被认为以独立方式发生故障的计算机或虚拟机中。因此,例如
在不同可用区上执行的不同物理服务器或虚拟机
。
详细介绍和使用:请见官网 --->官网详细文档
四、一主二从搭建
话不多说,咱们直接开始搭建哈!
1. 创建挂载目录
三台机器上新建目录:
首先我们开启三个xshell窗口,然后同时操作三个窗口创建
然后再左下角选择发送到全部窗口!
cd /
mkdir mydata
cd /mydata
mkdir redis
cd redis
mkdir data
mkdir conf
cd conf
2. 在192.168.239.131
机器上编辑文件
vim redis.conf
输入以下内容:
# 任何都可以连接redis
bind 0.0.0.0
# 配置master密码
requirepass 123456
# 宕机后成为从要连接master的密码
masterauth 123456
# 开启持久化
appendonly yes
3. 在192.168.239.130
机器上编辑文件
vim redis.conf
输入以下内容:
# 配置master的ip和端口号
replicaof 192.168.239.131 6379
# 任何都可以连接redis
bind 0.0.0.0
# 成为master后的密码
requirepass 123456
# 连接master密码
masterauth 123456
# 开启持久化
appendonly yes
4. 在192.168.239.128
机器上编辑文件
vim redis.conf
输入以下内容:
# 配置master的ip和端口号
replicaof 192.168.239.131 6379
# 任何都可以连接redis
bind 0.0.0.0
# 成为master后的密码
requirepass 123456
# 连接master密码
masterauth 123456
# 开启持久化
appendonly yes
5. 192.168.239.131
启动redis
docker run -p 6379:6379 --name redis-master \
-v /mydata/redis/data:/usr/local/etc/redis/data \
-v /mydata/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf \
-d redis redis-server /usr/local/etc/redis/redis.conf
查看启动日志:
docker logs -f redis-master
6. 192.168.239.130
启动redis
docker run -p 6379:6379 --name redis-slave-1 \
-v /mydata/redis/data:/usr/local/etc/redis/data \
-v /mydata/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf \
-d redis redis-server /usr/local/etc/redis/redis.conf
可以看到已经连接到master节点了!
7. 192.168.239.128
启动redis
docker run -p 6379:6379 --name redis-slave-2 \
-v /mydata/redis/data:/usr/local/etc/redis/data \
-v /mydata/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf \
-d redis redis-server /usr/local/etc/redis/redis.conf
8. 进入192.168.239.130
容器查看
我们查看master日志,可以看到两个从节点已经加入进来了!
我们进入容器进行在次查看:
docker exec -it redis-master /bin/bash
连接redis:
redis-cli
登录redis
auth 123456
查看从节点:
info
也是可以看到有两个从节点!
五、搭建三哨兵sentinel
1. 创建挂载目录
还是三个虚拟机一起创建
mkdir sentinel
cd sentinel
vim sentinel.conf
输入下面内容:
port 26379
sentinel monitor redis-master 192.168.239.131 6379 2
sen