网站建设大纲,济南网站建设 小程序,阅读网站模板,seo项目分析目录
一、redis群集有三种模式
1.1主从复制、哨兵、集群的区别
1.1.1主从复制
1.1.2哨兵
1.1.3集群
二、主从复制
2.1主从复制概述
2.2主从复制的作用
①数据冗余
②故障恢复
③负载均衡
④高可用基石
2.3主从复制流程
2.4搭建redis主从复制
2.4.1环境准备
2.4…
目录
一、redis群集有三种模式
1.1主从复制、哨兵、集群的区别
1.1.1主从复制
1.1.2哨兵
1.1.3集群
二、主从复制
2.1主从复制概述
2.2主从复制的作用
①数据冗余
②故障恢复
③负载均衡
④高可用基石
2.3主从复制流程
2.4搭建redis主从复制
2.4.1环境准备
2.4.2三台机器都安装redis
2.4.3修改 Redis 配置文件Master节点操作
2.4.4修改Redis配置文件slave节点操作
2.4.5验证主从效果
2.4.5.1在Master节点上看日志
2.4.5.2在Master节点上验证从节点
2.4.5.3在master节点上添加数据 从节点查看
三、Redis哨兵模式
3.1Redis哨兵模式概述
3.2哨兵模式原理
3.3哨兵模式的作用
3.3.1监控
3.3.2自动故障转移
3.3.3通知提醒
3.4哨兵结构由两部分组成哨兵节点和数据节点
3.5故障转移机制 (哨兵的原理)
1) 主观下线
2) 客观下线
3) 投票选举
3.5.1主节点的选举
3.6搭建redis哨兵模式
3.6.1修改 Redis 哨兵模式的配置文件所有节点都要操作
3.6.2启动哨兵模式
3.6.3查看哨兵信息
3.6.4故障模拟
3.6.4.1去master查看进程号
3.6.4.2杀死 Master 节点上redis-server的进程号
3.6.5验证结果 一、redis群集有三种模式
redis群集有三种模式分别是主从同步/复制、哨兵模式、Cluster
1.1主从复制、哨兵、集群的区别
1.1.1主从复制
主从复制是高可用Redis的基础哨兵和集群都是在主从复制基础上实现高可用的。
主从复制主要实现了数据的多机备份以及对于读操作的负载均衡和简单的故障恢复。
缺陷
故障恢复无法自动化写操作无法负载均衡存储能力受到单机的限制。
1.1.2哨兵
哨兵在主从复制的基础上哨兵实现了自动化的故障恢复。
缺陷
写操作无法负载均衡存储能力受到单机的限制哨兵无法对从节点进行自动故障转移在读写分离场景下从节点故障会导致读服务不可用需要对从节点做额外的监控、切换操作。
1.1.3集群
集群通过集群Redis解决了写操作无法负载均衡以及存储能力受到单机限制的问题实现了较为完善的高可用方案
但是成本比较高通常至少三主三从六台起步成本比较高
二、主从复制
2.1主从复制概述
主从复制是指将一台Redis服务器的数据复制到其他的Redis服务器前者称为主节点(Master)后者称为从节点(Slave)数据的复制是单向的只能由主节点到从节点。
默认情况下每台Redis服务器都是主节点且一个主节点可以有多个从节点(或没有从节点)但一个从节点只能有一个主节点。
2.2主从复制的作用
①数据冗余
主从复制实现了数据的热备份是持久化之外的一种数据冗余方式。
②故障恢复
当主节点出现问题时可以由从节点提供服务实现快速的故障恢复实际上是一种服务的冗余
③负载均衡
在主从复制的基础上配合读写分离可以由主节点提供写服务由从节点提供读服务即写Redis数据时应用连接主节点读Redis数据时应用连接从节点分担服务器负载
尤其是在写少读多的场景下通过多个从节点分担读负载可以大大提高Redis服务器的并发量。
④高可用基石
除了上述作用以外主从复制还是哨兵和集群能够实施的基础因此说主从复制是Redis高可用的基础。
2.3主从复制原理
1若启动一个Slave机器进程则它会向Master机器发送一个“sync command”命令请求同步连接。
2无论是第一次连接还是重新连接Master机器都会启动一个后台进程将数据快照保存到数据文件中执行rdb操作同时Master还会记录修改数据的所有命令并缓存在数据文件中。
3后台进程完成缓存操作之后Master机器就会向Slave机器发送数据文件Slave端机器将数据文件保存到硬盘上然后将其加载到内存中接着Master机器就会将修改数据的所有操作一并发送给Slave端机器。若Slave出现故障导致宕机则恢复正常后会自动重新连接。
4Master机器收到Slave端机器的连接后将其完整的数据文件发送给Slave端机器如果Mater同时收到多个Slave发来的同步请求则Master会在后台启动一个进程以保存数据文件然后将其发送给所有的Slave端机器确保所有的Slave端机器都正常。 1、从节点给主节点发送sync命令主节点则通过bgsave命令生成RDB快照文件然后将其文件传给从节点之后的写操作都记录在缓冲区
2、从节点收到快照文件后执行保存到数据集中然后再次给主发送psync命令获取缓冲区的数据
3、主节点发送缓冲区的写操作从节点执行同步到数据集中此时完成主从数据一致
4、后续从节点会持续监测主主节点也会定时给从节点发送写操作从节点同步执行实现主从数据一致注意从节点首次同步以及宕机恢复都需要执行一次全量数据加载即全量备份 sync同步 RDB完全备份文件给从服务器 AOF增量备份给从服务器 主从复制过程/原理 ①从----主发送sync同步数据请求 ②主redis 会fork一个子进程然后会产生RDB文件(完全备份的文件)的过程 2.1 客户端还在持续的写入redis ③rdb文件 持久化完成后主redis会将RDB文件和缓存起来的命令推送给我们的从服务器 ④复制、推送完后主reids 会持续的同步操作命-----利用AOF(增备)主持久化功能 ⑤在下一台redis 接入主从复制之前会持续利用AOF的方式 同步数据给从服务器 2.4搭建redis主从复制 下载安装包的链接 https://download.redis.io/releases/ 2.4.1环境准备
主机操作系统 IP地址 软件 / 安装包 / 工具MasterCentOS7192.168.246.8 redis-5.0.7.tar.gzSlave1 CentOS7192.168.246.9 redis-5.0.7.tar.gzSlave2CentOS7192.168.246.10 redis-5.0.7.tar.gz 关闭防火墙、防护
systemctl stop firewalld
setenforce 0
2.4.2三台机器都安装redis
[rootlocalhost ~]#systemctl stop firewalld
[rootlocalhost ~]#setenforce 0
[rootlocalhost ~]#yum install gcc gcc-c make -y
[rootlocalhost ~]#cd /opt
[rootlocalhost opt]#ls
rh
[rootlocalhost opt]#rz -E
rz waiting to receive.
[rootlocalhost opt]#ls
redis-5.0.7.tar.gz rh
[rootlocalhost opt]#tar xf redis-5.0.7.tar.gz
[rootlocalhost opt]#ls
redis-5.0.7 redis-5.0.7.tar.gz rh
[rootlocalhost opt]#cd /opt/redis-5.0.7/
[rootlocalhost redis-5.0.7]#make -j 4
[rootlocalhost redis-5.0.7]#make prefix/usr/local/redis install
[rootlocalhost redis-5.0.7]#cd /opt/redis-5.0.7/utils/
[rootlocalhost utils]#./install_server.shPlease select the redis executable path [/usr/local/bin/redis-server] /usr/local/redis/bin/redis-server
[rootlocalhost utils]#ln -s /usr/local/redis/bin/* /usr/local/bin/
[rootlocalhost utils]#/etc/init.d/redis_6379 start
/var/run/redis_6379.pid exists, process is already running or crashed
[rootlocalhost utils]#netstat -natp|grep redis
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 6447/redis-server 1
[rootlocalhost utils]#netstat -natp|grep 6379
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 6447/redis-server 1
[rootlocalhost utils]#
[rootlocalhost ~]#yum install gcc gcc-c make -y 修改下主机名好区分 2.4.3修改 Redis 配置文件Master节点操作
vim /etc/redis/6379.confbind 0.0.0.0 #70行修改监听地址为0.0.0.0
daemontze yes #137行开启守护进程
logfile/var/log/redis_6379.1og #172行指定日志文件目录
dir/var/lib/redis/6379 #264行指定工作目录
appendonly yes #700行开启AOF持久化功能
----------------------------------------
/etc/init.d/redis_6379 restart 2.4.4修改Redis配置文件slave节点操作
vim /etc/redis/6379.confbind 0.0.0.0 #70行修改监听地址为0.0.0.0
daemonize yes #137行开启守护进程
logfile /var/log/redis_6379.log #172行指定日志文件目录
dir /var/lib/redis/6379 #264行指定工作目录
replicaof 192.168.246.8 6379 #288行指定要同步的Master节点IP和端口
appendonly yes #700行开启AOF持久化功能
------------------------------------/etc/init.d/redis_6379 restart slave2配置
由于配置一样我们先备份下slave2配置文件从slave1直接远程拷贝过去到slave2再去查看下是否正确 2.4.5验证主从效果
2.4.5.1在Master节点上看日志
[rootmaster_redis ~]#tail -f /var/log/redis_6379.log 两个从同步成功
2.4.5.2在Master节点上验证从节点
redis-cli info replication 2.4.5.3在master节点上添加数据 从节点查看 三、Redis哨兵模式
3.1Redis哨兵模式概述
主从切换技术的方法是当服务器宕机后需要手动一台从机切换为主机这需要人工干预不仅费时费力而且还会造成一段时间内服务不可用。为了解决主从复制的缺点就有了哨兵机制。 哨兵的核心功能在主从复制的基础上哨兵引入了主节点的自动故障转移 3.2哨兵模式原理
哨兵(sentinel):是一个分布式系统用于对主从结构中的每台服务器进行监控当出现故障时通过投票机制选择新的 Master并将所有slave连接到新的 Master
所以整个运行哨兵的集群的数量不得少于3个节点。
3.3哨兵模式的作用
3.3.1监控
哨兵会不断地检查主节点和从节点是否运作正常、还有哨兵节点是否运作正常。
3.3.2自动故障转移
当主节点不能正常工作时哨兵会开始自动故障转移操作它会将失效主节点的其中一个从节点升级为新的主节点并让其它从节点改为复制新的主节点。
3.3.3通知提醒
哨兵可以将故障转移的结果发送给客户端。
3.4哨兵结构由两部分组成哨兵节点和数据节点
哨兵节点哨兵系统由一个或多个哨兵节点组成哨兵节点是特殊的redis节点不存储数据。数据节点主节点和从节点都是数据节点。
3.5故障转移机制 (哨兵的原理)
1.由哨兵节点定期监控发现主节点是否出现了故障
每个哨兵节点每隔1秒会向主节点、从节点及其它哨兵节点发送一次ping命令做一次心跳检测。
如果主节点在一定时间范围内不回复或者是回复一个错误消息那么这个哨兵就会认为这个主节点主观下线了单方面的。当超过半数哨兵节点认为该主节点主观下线了这样就客观下线了。
2.当主节点出现故障此时哨兵节点会通过Raft算法选举算法实现选举机制共同选举出一个哨兵节点为leader来负责处理主节点的故障转移和通知。
所以整个运行哨兵的集群的数量不得少于3个节点。
3.由leader哨兵节点执行故障转移过程如下
将某一个从节点升级为新的主节点让其它从节点指向新的主节点若原主节点恢复也变成从节点并指向新的主节点通知客户端主节点已经更换。
需要特别注意的是客观下线是主节点才有的概念
如果从节点和哨兵节点发生故障被哨兵主观下线后不会再有后续的客观下线和故障转移操作。 上图所示多个哨兵之间也存在互相监控这就形成了多哨兵模式现在对该模式的工作过程进行讲解介绍如下 1) 主观下线 主观下线适用于主服务器和从服务器。如果在规定的时间内(配置参数down-after-milliseconds)Sentinel 节点没有收到目标服务器的有效回复则判定该服务器为“主观下线”。比如 Sentinel1 向主服务发送了 PING命令在规定时间内没收到主服务器 PONG回复则 Sentinel1 判定主服务器为“主观下线”。 2) 客观下线 客观下线只适用于主服务器。 Sentinel1 发现主服务器出现了故障它会通过相应的命令询问其它 Sentinel 节点对主服务器的状态判断。如果超过半数以上的 Sentinel 节点认为主服务器 down 掉则 Sentinel1 节点判定主服务为“客观下线”。 3) 投票选举 投票选举所有 Sentinel 节点会通过投票机制按照谁发现谁去处理的原则选举 Sentinel1 为领头节点去做 Failover故障转移操作。Sentinel1 节点则按照一定的规则在所有从节点中选择一个最优的作为主服务器然后通过发布订功能通知其余的从节点slave更改配置文件跟随新上任的主服务器master。至此就完成了主从切换的操作。 对上对述过程做简单总结 Sentinel 负责监控主从节点的“健康”状态。当主节点挂掉时自动选择一个最优的从节点切换为主节点。客户端来连接 Redis 集群时会首先连接 Sentinel通过 Sentinel 来查询主节点的地址然后再去连接主节点进行数据交互。当主节点发生故障时客户端会重新向 Sentinel 要地址Sentinel 会将最新的主节点地址告诉客户端。因此应用程序无需重启即可自动完成主从节点切换 ①哨兵对主从复制集群进行监控 监控对象所有redis数据节点 ②哨兵与哨兵之间进行相互监控 监控的对象: 哨兵彼此 ③监控目的 3.1 哨兵与哨兵之间的监控目的检测彼此的存活状态 3.2 哨兵监控所有的redis数据库的目的:为了实现故障自动故障切换故障切换原理 ① 当master 挂掉哨兵会及时发现发现之后 进行投票机制选举出一个新的master服务器一定是基数) ② 完成salve-----master的 从向主 进行切换 ③ 完成其他的从服务器对新的master配置 3.5.1主节点的选举
过滤掉不健康的已下线的没有回复哨兵 ping 响应的从节点。选择配置文件中从节点优先级配置最高的replica-priority默认值为100选择复制偏移量最大也就是复制最完整的从节点。 哨兵的启动依赖于主从模式所以须把主从模式安装好的情况下再去做哨兵模式 3.6搭建redis哨兵模式
环境准备
主机操作系统 IP地址 软件 / 安装包 / 工具Master、sentinel1CentOS7192.168.246.8 redis-5.0.7.tar.gzSlave1、sentinel2CentOS7192.168.246.9 redis-5.0.7.tar.gzSlave2、sentinel3CentOS7192.168.246.10 redis-5.0.7.tar.gz 哨兵的启动依赖于主从模式所以须把主从模式安装好的情况下再去做哨兵模式 哨兵模式要在基于主从复制已搭建完成的前提下才可以做哦 3.6.1修改 Redis 哨兵模式的配置文件所有节点都要操作
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.246.8 6379 2 #84行修改 指定该哨兵节点监控192.168.10.23:6379这个主节点该主节点的名称是mymaster最后的2的含义与主节点的故障判定有关至少需要2个哨兵节点同意才能判定主节点故障并进行故障转移
sentinel down-after-milliseconds mymaster 30000 #113行判定服务器down掉的时间周期默认30000毫秒30秒
sentinel failover-timeout mymaster 180000 #146行故障节点的最大超时时间为180000180秒 可以再所有主机添加ip地址加域名这样远程拷贝可以快一点 其他两台主机配置/opt/redis-5.0.7/sentinel.conf
scp /opt/redis-5.0.7/sentinel.conf 192.168.246.9:/opt/redis-5.0.7/sentinel.conf
scp /opt/redis-5.0.7/sentinel.conf 192.168.246.10:/opt/redis-5.0.7/sentinel.conf 3.6.2启动哨兵模式 先启master再启slave 先启master再启slavecd /opt/redis-5.0.7/
redis-sentinel sentinel.conf 3.6.3查看哨兵信息
redis-cli -p 26379 info sentinel 3.6.4故障模拟
3.6.4.1去master查看进程号
ps -ef|grep redisps aux|grep redis #查看进程3.6.4.2杀死 Master 节点上redis-server的进程号 3.6.5验证结果
①在哨兵节点上验证master是否转换至从服务器
tail -f /var/log/sentinel.log 再次查看哨兵信息
②在哨兵节点上再次查看哨兵信息查看是否转换成功
redis-cli -p 26379 info sentinel 总结
1、主从复制
redis主从复制 是为了数据冗余和读写分离
在这两种模式中有两种角色主节点master和从节点slave主节点负责处理写的操作
并将数据更改复制到一个或多个从节点。
这样我们的主节点负载减轻从节点可以提供数据读取服务实现读写分离如果主节点停止服务从节点之一可以立即接管主节点的角色再继续提供服务
具体流程如下
1、从节点启动成功连接主节点后发送一个sync命令
2、主节点接受到sync的命令后开始在后台保存快照同时,它也开始记录接收到rsnc后所有执行写的命令快照完成后会将这个快照文件发送给从节点。
3、从节点收到快照文件之后开始载入并持续接受主节点发送过来的新的写命令执行
总的来说 通过主从复制redis 能够实现数据的备份master 产生的数据能slave备份负责均衡读操作可以分摊到slave上去和高可用master宕机后可以由slave进行故障切换
2、redis 哨兵机制
哨兵是一个高可用的行解决方案 官方认可 默认模式
1、监控redis 哨兵 会持续监控master和slave实例是否正常运行
2、通知如某个redis实例有问题哨兵可以通过API向管理员或者其他应用发信通知
3、自动故障转移如果master节点不工作哨兵会开始故障转移的过程选择一个slave节点晋升为新的master其他剩余slave的节点会被重新配置为新的master节点的slave
4、配置提供服务:客户端可以使用哨兵来查询被认证的master节点该master节点的目录所有的slave节点 redis 哨兵是一个用于管理多个reids服务的系统它提供监控、通知、自动故障转移、配置提供服务的功能以实现redis高可用性