一、哨兵模式原理及作用

 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行,关闭保护模式

redis集群模式和哨兵模式 redis集群哨兵模式原理_redis集群模式和哨兵模式

port 26379                                                             #21行,Redis哨兵默认的监听端口

redis集群模式和哨兵模式 redis集群哨兵模式原理_linux_02

daemonize yes                                                      #26行,指定sentinel为后台启动

redis集群模式和哨兵模式 redis集群哨兵模式原理_Redis_03

logfile "/var/log/sentinel.log"                                 #36行,指定日志存放路径

redis集群模式和哨兵模式 redis集群哨兵模式原理_Redis_04

dir "/var/lib/redis/6379"                                         #65行,指定数据库存放路径

redis集群模式和哨兵模式 redis集群哨兵模式原理_数据库_05

sentinel monitor mymaster 192.168.254.106 6379 2      #84行,修改指定该哨兵节点监控192.168.254.106:6379这个主节点,该主节点的名称是mymaster,最后的2的含义与主节点的故障判定有关:至少需要2个哨兵节点同意,才能判定主节点故障并进行故障转移

redis集群模式和哨兵模式 redis集群哨兵模式原理_数据库_06

sentinel down-after-milliseconds mymaster 30000 #113行,判定服务器down掉的时间周期,默认30000毫秒(30秒)

redis集群模式和哨兵模式 redis集群哨兵模式原理_数据库_07

sentinel failover-timeout mymaster 180000            #146行,故障节点的最大超时时间为180000(180秒)

redis集群模式和哨兵模式 redis集群哨兵模式原理_redis_08

4.启动哨兵模式

先启master,再启slave

cd /opt/redis-5.0.7/
redis-sentinel sentinel.conf &

注意!先启动主服务器,再启动从服务器

redis集群模式和哨兵模式 redis集群哨兵模式原理_redis集群模式和哨兵模式_09

redis集群模式和哨兵模式 redis集群哨兵模式原理_Redis_10

redis集群模式和哨兵模式 redis集群哨兵模式原理_数据库_11

5.故障模拟

查看redis-server进程号

redis集群模式和哨兵模式 redis集群哨兵模式原理_linux_12

杀死Master节点上redis-server的进程号

redis集群模式和哨兵模式 redis集群哨兵模式原理_redis_13

6.验证结果

tail -f /var/log/sentinel.log

redis集群模式和哨兵模式 redis集群哨兵模式原理_Redis_14

redis-cli -p 26379 INFO Sentinel

redis集群模式和哨兵模式 redis集群哨兵模式原理_数据库_15

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/

redis集群模式和哨兵模式 redis集群哨兵模式原理_redis集群模式和哨兵模式_16

(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/

redis集群模式和哨兵模式 redis集群哨兵模式原理_Redis_17

(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/

redis集群模式和哨兵模式 redis集群哨兵模式原理_redis_18

4. 修改主配置文件,设置开启集群功能

先在Master1上配置,然后将配置文件复制到其他节点服务器

#Master1配置如下,其他5个服务器的配置文件类似,注意6个端口都要不一样。

cd /etc/redis/redis-cluster/redis6001
vim redis.conf

#bind 127.0.0.1                                               #69行,注释掉bind 项,默认监听所有网卡

redis集群模式和哨兵模式 redis集群哨兵模式原理_redis_19

protected-mode no                                        #88行,修改,关闭保护模式

redis集群模式和哨兵模式 redis集群哨兵模式原理_linux_20

port 6001                                                       #92行,修改,redis监听端口

redis集群模式和哨兵模式 redis集群哨兵模式原理_redis集群模式和哨兵模式_21

daemonize yes                                               #136行,以独立进程启动

redis集群模式和哨兵模式 redis集群哨兵模式原理_Redis_22

cluster-enabled yes                                        #832行,取消注释,开启群集功能

redis集群模式和哨兵模式 redis集群哨兵模式原理_数据库_23

cluster-config-file nodes-6379.conf         #840行,取消注释,取消注释,群集名称文件设置

redis集群模式和哨兵模式 redis集群哨兵模式原理_redis_24

cluster-node-timeout 15000                           #846行,取消注释群集超时时间设置

redis集群模式和哨兵模式 redis集群哨兵模式原理_redis集群模式和哨兵模式_25

appendonly yes                                              #699行,修改,开启AOF持久化

redis集群模式和哨兵模式 redis集群哨兵模式原理_redis_26

启动所有redis节点

redis集群模式和哨兵模式 redis集群哨兵模式原理_redis_27

 启动群集

#前三台为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

redis集群模式和哨兵模式 redis集群哨兵模式原理_redis集群模式和哨兵模式_28

 #-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纯动态网站类型的三高问题.