4.6.3启动哨兵模式
==先启master,再启slave ==
cd /opt/redis-5.0.7/ redis-sentinel sentinel.conf & 注意!先启动主服务器,再启动从服务器
4.6.4查看哨兵信息
redis-cli -p 26379 info Sentinel # Sentinel sentinel_masters:1 sentinel_tilt:0 sentinel_running_scripts:0 sentinel_scripts_queue_length:0 sentinel_simulate_failure_flags:0 master0:name=mymaster,status=ok,address=192.168.137.20:6379,slaves=2,sentinels=3 [1]+ 完成 redis-sentinel sentinel.conf
4.6.5模拟故障
#在Master 上查看redis-server进程号:
ps -ef | grep redis
#杀死 Master 节点上redis-server的进程号
kill -9 6491 #Master节点上redis-server的进程号
#验证master是转换至从服务器
tail -f /var/log/sentinel.log
#在Slave上查看是否转换成功
redis-cli -p 26379 INFO Sentinel
在Master 上查看redis-server进程号
杀死 Master 节点上redis-server的进程号
验证master是转换至从服务器
Slave上查看是否转换成功
五、Redis群集模式
集群,即 Redis Cluster, 是Redis 3. 0开始引入的分布式存储方案。
集群由多个节点(Node) 组成,Redis 的数据分布在这些节点中。
集群中的节点分为主节点和从节点;只有主节点负责读写请求和集群信息的维护;从节点只进行主节点数据和状态信息的复制。
5.1集群的作用
数据分区:数据分区(或称数据分片) 是集群最核心的功能。
集群将数据分散到多个节点,一方面突破了 Redis 单机内存大小的限制,存储容量大大增加;另一方面每个主节点都可以对外提供读服务和写服务,大大提高了集群的响应能力。
Redis 单机内存大小受限问题,在介绍持久化和主从复制时都有提及;例如,如果单机内存太大,bgsave 和 bgrewriteaof的 fork 操作可能导致主进程阻塞,主从环境下主机切换时可能导致从节点长时间无法提供服务,全量复制阶段主节点的复制缓冲区可能溢出。
高可用:集群支持主从复制和主节点的自动故障转移(与哨兵类似) ;当任一节点发生故障时,集群仍然可以对外提供服务。
5.2集群模式的数据分片
Redis集群引入了哈希槽的概念
Redis集群有 16384 个哈希槽( 编号0-16383)
集群的每个节点负责一部分哈希槽
每个Key 通过 CRC16 校验后对16384取余来决定放置哪个哈希槽,通过这个值,去找到对应的插槽所对应的节点,然后直接自动跳转到这个对应的节点上进行存取操作
<- - -以3个节点组成的集群为例- - -> 节点A 包含0到5460号哈希槽 节点B 包含5461到10922号哈希槽 节点C 包含10923到16383号哈希槽
5.3集群模式的主从复制模型
集群中具有A、B、C三个节点,如果节点B失败了,整个集群就会因缺少5461-10922这个范围的槽而不可以用。
为每个节点添加一个从节点A1、B1、C1整个集群便有三个Master节点和三个slave节点组成,在节点B失败后,集群选举B1位为主节点继续服务。当B和B1都失败后,集群将不可用。
5.4redis集群的搭建
5.4.1环境准备
redis的集群一般需要6个节点,3主3从。 方便起见, 这里所有节点在3台服务器上模拟,每台主机上设置一主一备,以IP地址和端口进行区分:
三个主节点端口号:5001,5002,5003
对应的从节点端口号:7001,7002,7003
服务器类型 | 系统和IP地址 | 需要安装的组件 | 节点端口 |
Master 1 | CentOS7.4(64位) 192.168.137.20 | redis-5.0.7.tar.gz | 5001 |
Slave1 | CentOS7.4(64位) 192.168.137.20 | redis-5.0.7.tar.gz | 7001 |
Master 2 | CentOS7.4(64位) 192.168.137.15 | redis-5.0.7.tar.gz | 5002 |
Slave 2 | CentOS7.4(64位) 192.168.137.15 | redis-5.0.7.tar.gz | 7002 |
Master 3 | CentOS7.4(64位) 192.168.137.10 | redis-5.0.7.tar.gz | 5003 |
Slave 3 | CentOS7.4(64位) 192.168.137.10 | redis-5.0.7.tar.gz | 7003 |
hostnamectl set-hostname master1_slave1 hostnamectl set-hostname master2_slave2 hostnamectl set-hostname master3_slave3
5.4.2创建目录复制配置文件到对应的节点上
#第一台主机:192.168.137.20 cd /etc/redis/ mkdir -p redis-cluster/redis5001 mkdir -p redis-cluster/redis7001 cp /opt/redis-5.0.7/redis.conf /etc/redis/redis-cluster/redis5001/ cp /opt/redis-5.0.7/src/redis-cli /opt/redis-5.0.7/src/redis-server /etc/redis/redis-cluster/redis5001/ cp /opt/redis-5.0.7/src/redis-cli /opt/redis-5.0.7/src/redis-server /etc/redis/redis-cluster/redis7001/
#第二台主机:192.168.137.15 cd /etc/redis/ mkdir -p redis-cluster/redis5002 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/redis5002/ cp /opt/redis-5.0.7/src/redis-cli /opt/redis-5.0.7/src/redis-server /etc/redis/redis-cluster/redis7002/
#第三台主机:192.168.137.10 cd /etc/redis/ mkdir -p redis-cluster/redis5003 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/redis5003/ cp /opt/redis-5.0.7/src/redis-cli /opt/redis-5.0.7/src/redis-server /etc/redis/redis-cluster/redis7003/
5.4.3修改主配置文件,设置开启群集功能
(1)先在Master1上配置,然后将配置文件复制到其他节点服务器
#Master1配置如下,其他5个服务器的配置文件类似,注意6个端口都要不一样。 cd /etc/redis/redis-cluster/redis5001 vim redis.conf bind 192.168.145.11 #69行,修改bind项,监听自己的IP protected-mode no #88行,修改,关闭保护模式 port 5001 #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持久化
(2)在Master1节点上将配置文件到其他两台Master节点中
scp /etc/redis/redis-cluster/redis5001/redis.conf root@192.168.145.18:/etc/redis/redis-cluster/redis5002/redis.conf scp /etc/redis/redis-cluster/redis5001/redis.conf root@192.168.145.26:/etc/redis/redis-cluster/redis5003/redis.conf
(3)将Master节点上的配置文件再复制到各自的从服务器中
#将Master1的主配置文件复制到Slave1 cp -p /etc/redis/redis-cluster/redis5001/redis.conf /etc/redis/redis-cluster/redis7001/redis.conf #将Master2的主配置文件复制到Slave2 cp -p /etc/redis/redis-cluster/redis5002/redis.conf /etc/redis/redis-cluster/redis7002/redis.conf #将Master3的主配置文件复制到Slave3 cp -p /etc/redis/redis-cluster/redis5003/redis.conf /etc/redis/redis-cluster/redis7003/redis.conf
(4)修改除Master1节点之外的所有服务器的监听地址及端口
#Slave1 vim /etc/redis/redis-cluster/redis7001/redis.conf bind 192.168.145.11 #69行,修改bind项,监听自己的IP port 7001 #92行,修改,redis监听端口
#Master2 vim /etc/redis/redis-cluster/redis5002/redis.conf bind 192.168.145.18 #69行,修改bind项,监听自己的IP port 5002 #92行,修改,redis监听端口
#Slave2 vim /etc/redis/redis-cluster/redis7002/redis.conf bind 192.168.145.18 #69行,修改bind项,监听自己的IP port 7002 #92行,修改,redis监听端口
#Master3 vim /etc/redis/redis-cluster/redis5003/redis.conf bind 192.168.145.26 #69行,修改bind项,监听自己的IP port 5003 #92行,修改,redis监听端口
#Slave3 vim /etc/redis/redis-cluster/redis7003/redis.conf bind 192.168.145.26 #69行,修改bind项,监听自己的IP port 7003 #92行,修改,redis监听端口
5.4.4启动所有redis节点
cd /etc/redis/redis-cluster/redis5001/ redis-server redis.conf cd /etc/redis/redis-cluster/redis7001/ redis-server redis.conf cd /etc/redis/redis-cluster/redis5002/ redis-server redis.conf cd /etc/redis/redis-cluster/redis7002/ redis-server redis.conf cd /etc/redis/redis-cluster/redis5003/ redis-server redis.conf cd /etc/redis/redis-cluster/redis7003/ redis-server redis.conf
5.4.5启动群集
#前三台为Master,后三台为Slave,下面交互的时候需要输入yes 才可以创建。 redis-cli --cluster create 192.168.145.11:5001 192.168.145.18:5002 192.168.145.26:5003 192.168.145.11:7001 192.168.145.18:7002 192.168.145.26:7003 --cluster-replicas 1 #-replicas 1 表示每个主节点有1个从节点。
5.4.6测试集群
#加-c参数,节点之间就可以互相跳转 redis-cli -h 192.168.145.11 -p 5001 -c #查看节点的哈希槽编号范围 cluster slots set hobby dance #查看键的槽编号 cluster keyslot hobby
六、总结
本文学习了redis的主从复制、哨兵模式以及集群模式;我们需要了解并掌握其原理,以及知道是如何进行配置的。