宏观上Sentinel功能的完整列表
- 监控。Sentinel会不断检查您的主实例和副本实例是否按预期工作。
- 通知。Sentinel可以通过API通知系统管理员或其他计算机程序,其中一个受监视的Redis实例出了问题。
- 自动故障转移。如果主服务器未按预期工作,则Sentinel可以启动故障转移过程,在该过程中将副本升级为主服务器,将其他附加副本重新配置为使用新的主服务器,并通知使用Redis服务器的应用程序要使用的新地址。连接时。
- 配置提供程序。Sentinel充当客户端服务发现的授权来源:客户端连接到Sentinels,以询问负责给定服务的当前Redis主服务器的地址。如果发生故障转移,Sentinels将报告新地址。
Sentinel的分布式性质
Redis Sentinel是一个分布式系统:
Sentinel本身设计为在有多个Sentinel进程协同合作的配置中运行。具有多个Sentinel进程进行协作的优点如下:
- 当多个哨兵就给定的主机不再可用这一事实达成共识时,将执行故障检测。这降低了误报的可能性。
- 即使不是所有的Sentinel进程都在工作,Sentinel仍能正常工作,从而使系统能够应对故障。毕竟,拥有故障转移系统本身就是一个单点故障
部署前有关Sentinel的基本知识
- 一个健壮的部署至少需要三个Sentinel实例。
- 应将三个Sentinel实例放置到被认为以独立方式发生故障的计算机或虚拟机中。因此,例如在不同的可用区域上执行的不同物理服务器或虚拟机。
- Sentinel + Redis分布式系统不保证在故障期间保留已确认的写入,因为Redis使用异步复制。但是,有一些部署Sentinel的方法使窗口丢失写入仅限于某些时刻,而还有其他一些不太安全的方法来部署它。
- 您的客户需要Sentinel支持。流行的客户端库具有Sentinel支持,但不是全部。
- 如果您不在开发环境中不时进行测试,则没有安全的HA设置,如果可以,则在生产环境中甚至可以更好地进行测试。您可能有一个错误的配置,只有在为时已晚时(主服务器停止工作的凌晨3点),该错误才会变得明显。
- Sentinel,Docker或其他形式的网络地址转换或端口映射应格外小心:Docker执行端口重新映射,破坏Sentinel对其他Sentinel进程的自动发现以及主副本的列表。有关更多信息,请参阅本文档后面有关Sentinel和Docker的部分。
1、安装redis(3台同步)
官网文档:https://redis.io/topics/sentinel
Github:https://github.com/antirez/redis/releases
1 | 1、安装gcc依赖 |
make test
报错解决方案:
1 | You need tcl 8.5 or newer in order to run the Redis test. |
2、配置redis.conf
vi /usr/local/redis/bin/redis.conf
scp root@dn1:/usr/local/redis/bin/redis.conf /usr/local/redis/bin/redis.conf
1 | 使用 yes 启用守护进程 |
1 | rdb: 指定在多长时间内,有多少次更新操作,就将数据同步到rdb数据文件,可以多个条件配合 |
1 | 指定是否启用虚拟内存机制,默认值为 no,简单的介绍一下,VM 机制将数据分页存放,由 Redis 将访问量较少的页即冷数据 swap 到磁盘上,访问多的页面由磁盘自动换出到内存中(在后面的文章我会仔细分析 Redis 的 VM 机制) |
1 | 设置当本机为 slav 服务时,设置 master 服务的 IP 地址及端口,在 Redis 启动时,它会自动从 master 进行数据同步 |
3、配置redis-sentinel集群
配置3个哨兵 和 2个redis集群
服务类型 | 是否是主服务器 | IP地址 | 端口 |
---|---|---|---|
Redis | 是 | dn1 | 6379 |
Redis | 否(dn1的slave) | dn2 | 6379 |
Redis | 是 | dn3 | 6379 |
Sentinel | - | dn1 | 26379 |
Sentinel | - | dn2 | 26379 |
Sentinel | - | dn3 | 26379 |
3.1、修改 redis.conf
vi /usr/local/redis/bin/redis.conf
scp root@dn1:/usr/local/redis/bin/redis.conf /usr/local/redis/bin/redis.conf
dn1 和 dn3 配置
1 | 使得Redis服务器可以跨网络访问 |
dn2 配置
1 | 使得Redis服务器可以跨网络访问 |
3.2、修改sentinel.conf
1 | \cp /data/soft/new/redis-3.2.13/sentinel.conf /usr/local/redis/bin/ |
1 | port 26379 |
1 | scp -r root@dn1:/usr/local/redis/bin/sentinel.conf /usr/local/redis/bin/sentinel.conf |
开机启动
1 | echo '/usr/local/redis/bin/redis-sentinel /usr/local/redis/bin/sentinel.conf --sentinel' >> /etc/rc.local |
开机启动
1 | cat >> /etc/systemd/system/redis-sentinel.service << EOF |
配置环境变量
1 | echo 'export PATH=$PATH:/usr/local/redis/bin' >> /etc/profile |
3.3、启动 redis 和 sentinel
1 | systemctl start redis.service #启动redis服务 |
1 | /usr/local/redis/bin/redis-sentinel /usr/local/redis/bin/sentinel.conf --sentinel |