一、哨兵模式原理及作用
1.原理
哨兵(sentinel): 是一个分布式系统,用于对主从结构中的每台服务器进行监控,当出现 故障时,通过投票机制选择新的master并将所有slave连接到新的master。所以整个运行哨兵的集群的数量不得少于三个节点。(哨兵必须是奇数)
2.作用
(1)监控: 哨兵会不断地检测主节点和从节点是否运行正常。
(2)自动故障转移: 当主节点不能正常工作时,哨兵会开始自动故障转移操作,她会将失效主节点的其中一个从节点升级为新的主节点,并让其他从节点改为新的主节点。
(3)通知(提醒): 哨兵可以将故障转移的结果发送给客户端。
二、如何开启Redis数据库主从复制
1.实验环境
虚拟机版本 | VMware® Workstation 16 Pro 16.2.4 build-20089737 |
镜像版本 | CentOS-7-x86_64-DVD-1708.iso |
Redis版本 | Redis-5.0.7 |
主服务器地址 | 192.168.254.106/24 |
从服务器1地址 | 192.168.254.107/24 |
从服务器2地址 | 192.168.254.108/24 |
2.实验要求
在主从复制的基础上通过修改配置文件完成redis哨兵和集群的配置
3.实验具体配置
systemctl stop firewalld
setenforce 0
vim /opt/redis-5.0.7/sentinel.conf
protected-mode no #17行,关闭保护模式
port 26379 #21行,Redis哨兵默认的监听端口
daemonize yes #26行,指定sentinel为后台启动
logfile "/var/log/sentinel.log" #36行,指定日志存放路径
dir "/var/lib/redis/6379" #65行,指定数据库存放路径
sentinel monitor mymaster 192.168.254.106 6379 2 #84行,修改指定该哨兵节点监控192.168.254.106:6379这个主节点,该主节点的名称是mymaster,最后的2的含义与主节点的故障判定有关:至少需要2个哨兵节点同意,才能判定主节点故障并进行故障转移
sentinel down-after-milliseconds mymaster 30000 #113行,判定服务器down掉的时间周期,默认30000毫秒(30秒)
sentinel failover-timeout mymaster 180000 #146行,故障节点的最大超时时间为180000(180秒)
4.启动哨兵模式
先启master,再启slave
cd /opt/redis-5.0.7/
redis-sentinel sentinel.conf &
注意!先启动主服务器,再启动从服务器
5.故障模拟
查看redis-server进程号
杀死Master节点上redis-server的进程号
6.验证结果
tail -f /var/log/sentinel.log
redis-cli -p 26379 INFO Sentinel
2.Redis集群模式
1.集群的作用和数据分片
1.作用
(1)数据分区:数据分区(或称数据分片) 是集群最核心的功能。
集群将数据分散到多个节点,一方面突破了 Redis 单机内存大小的限制,存储容量大大增加;另一方面每个主节点都可以对外提供读服务和写服务,大大提高了集群的响应能力。
Redis 单机内存大小受限问题,在介绍持久化和主从复制时都有提及;例如,如果单机内存太大,bgsave 和 bgrewriteaof的 fork 操作可能导致主进程阻塞,主从环境下主机切换时可能导致从节点长时间无法提供服务,全量复制阶段主节点的复制缓冲区可能溢出。
(2)高可用:集群支持主从复制和主节点的自动故障转移(与哨兵类似) ;当任一节点发生故障时,集群仍然可以对外提供服务。
数据分片
(1)Redis集群引入了哈希槽的概念
(2)Redis集群有 16384 个哈希槽( 编号0-16383)
(3)集群的每个节点负责一部分哈希槽
(4)每个Key 通过 CRC16 校验后对16384取余来决定放置哪个哈希槽,通过这个值,去找到对应的插槽所对应的节点,然后直接自动跳转到这个对应的节点上进行存取操作。
<- - -以3个节点组成的集群为例- - ->
节点A 包含0到5460号哈希槽
节点B 包含5461到10922号哈希槽
节点C 包含10923到16383号哈希槽
环境准备
1.redis的集群一般需要**6个节点,3主3从**。 方便起见, 这里所有节点在3台服务器上模拟,每台主机上设置一主一备,以IP地址和端口进行区分:
(1)三个主节点端口号:6001,6002,6003
(2)对应的从节点端口号:7001,7002,7003
服务器类型 | 系统和IP地址 | 需要安装的组件 | 节点端口 |
Master1 | CentOS7.4(64位) 192.168.254.106 | redis-5.0.7.tar.gz | 6001 |
Slave 1 | CentOS7.4(64位) 192.168.254.106 | redis-5.0.7.tar.gz | 7001 |
Master2 | CentOS7.4(64位) 192.168.254.107 | redis-5.0.7.tar.gz | 6002 |
Slave 2 | CentOS7.4(64位) 192.168.254.107 | redis-5.0.7.tar.gz | 7002 |
Master3 | CentOS7.4(64位) 192.168.254.108 | redis-5.0.7.tar.gz | 6003 |
Slave 3 | CentOS7.4(64位) 192.168.254.108 | redis-5.0.7.tar.gz | 7003 |
3.创建目录复制配置文件到对应的节点上
(1)第一台主机:192.168.254.106
cd /etc/redis/
mkdir -p redis-cluster/redis6001
mkdir -p redis-cluster/redis7001
cp /opt/redis-5.0.7/redis.conf /etc/redis/redis-cluster/redis6001/
cp /opt/redis-5.0.7/src/redis-cli /opt/redis-5.0.7/src/redis-server /etc/redis/redis-cluster/redis6001/
cp /opt/redis-5.0.7/src/redis-cli /opt/redis-5.0.7/src/redis-server /etc/redis/redis-cluster/redis7001/
(2)第二台主机:192.168.254.107
cd /etc/redis/
mkdir -p redis-cluster/redis6002
mkdir -p redis-cluster/redis7002
cp /opt/redis-5.0.7/src/redis-cli /opt/redis-5.0.7/src/redis-server /etc/redis/redis-cluster/redis6002/
cp /opt/redis-5.0.7/src/redis-cli /opt/redis-5.0.7/src/redis-server /etc/redis/redis-cluster/redis7002/
(3)第三台主机:192.168.254.108
cd /etc/redis/
mkdir -p redis-cluster/redis6003
mkdir -p redis-cluster/redis7003
cp /opt/redis-5.0.7/src/redis-cli /opt/redis-5.0.7/src/redis-server /etc/redis/redis-cluster/redis6003/
cp /opt/redis-5.0.7/src/redis-cli /opt/redis-5.0.7/src/redis-server /etc/redis/redis-cluster/redis7003/
4. 修改主配置文件,设置开启集群功能
先在Master1上配置,然后将配置文件复制到其他节点服务器
#Master1配置如下,其他5个服务器的配置文件类似,注意6个端口都要不一样。
cd /etc/redis/redis-cluster/redis6001
vim redis.conf
#bind 127.0.0.1 #69行,注释掉bind 项,默认监听所有网卡
protected-mode no #88行,修改,关闭保护模式
port 6001 #92行,修改,redis监听端口
daemonize yes #136行,以独立进程启动
cluster-enabled yes #832行,取消注释,开启群集功能
cluster-config-file nodes-6379.conf #840行,取消注释,取消注释,群集名称文件设置
cluster-node-timeout 15000 #846行,取消注释群集超时时间设置
appendonly yes #699行,修改,开启AOF持久化
启动所有redis节点
启动群集
#前三台为Master,后三台为Slave,下面交互的时候需要输入yes 才可以创建。
redis-cli --cluster create 192.168.254.106:6001 192.168.254.107:6002 192.168.254.108:6003 192.168.254.106:7001 192.168.254.107:7002 192.168.254.108:7003 --cluster-replicas 1
#-replicas 1 表示每个主节点有1个从节点。
测试集群
#加-c参数,节点之间就可以互相跳转
redis-cli -h 192.168.156.10 -p 6001 -c
#查看节点的哈希槽编号范围
192.168.156.10:6001> cluster slots
192.168.156.10:6001> set hobby dance
#查看键的槽编号
192.168.156.110:6002> cluster keyslot hobby
总结
以上就是Redis高可用的两种方法,这两种方法均以Redis主从复制为基石。它们可以很好的应对web2.0纯动态网站类型的三高问题.