redis哨兵和集群部署手册

一、哨兵模式原理及作用

 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 &

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

redis哨兵和集群部署手册_第1张图片

5.故障模拟

查看redis-server进程号

redis哨兵和集群部署手册_第2张图片

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

redis哨兵和集群部署手册_第3张图片

6.验证结果

tail -f /var/log/sentinel.log

redis哨兵和集群部署手册_第4张图片

redis-cli -p 26379 INFO Sentinel

redis哨兵和集群部署手册_第5张图片

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哨兵和集群部署手册_第6张图片

(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哨兵和集群部署手册_第7张图片

(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哨兵和集群部署手册_第8张图片

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节点

redis哨兵和集群部署手册_第9张图片

 启动群集

#前三台为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哨兵和集群部署手册_第10张图片

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

你可能感兴趣的:(redis,数据库,linux)