五、Redis集群三种方式

五、集群三种方式

    1、主从复制

        主从模式是三种模式中最简单的,在主从复制中,数据库分为两类:主数据库(master)和从数据库(slave)。

        (1)、特点

            ①、主数据库可以进行读写操作,当读写操作导致数据变化时会自动将数据同步给从数据库。

            ②、从数据库一般都是只读的,可以改为可写,但写入的数据很容易被主同步没,所以还是只读就可以,并且接收主数据库同步过来的数据。

            ③、一个master可以拥有多个slave,但是一个slave只能对应一个master。

            ④、slave挂了不影响其他slave的读和master的读和写,重新启动后会将数据从master同步过来。

            ⑤、master挂了以后,不影响slave的读,但redis不再提供写服务,master重启后redis将重新对外提供写服务。

            ⑥、master挂了以后,不会在slave节点中重新选一个master。

        (2)、工作机制

            ①、当slave启动后,主动向master发送SYNC命令。master接收到SYNC命令后在后台保存快照(RDB持久化)和把保存快照期间收到的命令缓存起来。

            ②、当快照完成时,将保存的快照文件和缓存的命令一起发送给slave。

            ③、然后slave接收到快照文件和命令后加载快照文件和缓存的执行命令,复制初始化结束。

            ④、复制初始化后,master每次接收到的写命令都会同步发送给slave,保证主从数据一致性。

            主从复制是乐观复制,当客户端发送写执行给master,master执行完立即将结果返回客户端,并异步的把命令发送给slave,从而不影响性能。无硬盘复制:如果硬盘效率低将会影响复制性能,2.8之后可以设置无硬盘复制

        (3)、缺点

            不具备高可用性,master节点在主从模式中唯一,若master挂掉,则Redis无法对外提供写服务。

        (4)、环境配置

            ①、使用命令行配置主从模式

#查看主机maser 6379配置
127.0.0.1:6379> info replication # 查看当前库信息
role:master # 角色 master
connected_slaves:0 # 没有从机

#将6380作为从机连接到master 6379上
127.0.0.1:6380> slaveof 127.0.0.1 6379 # 将自己作为从机,指向主机
OK
127.0.0.1:6379> info replication # 查看当前库信息
role:slave # 角色 从机
master_host:127.0.0.1 # 主机地址
master_port:6379 # 主机端口

#查看主机maser 6379配置
127.0.0.1:6379> info replication # 查看当前库信息
role:master # 角色 master
connected_slaves:1 # 没有从机
slave0:ip=127.0.0.1,port=6380,state=online,offset42,lag=1 # 从机配置

            ②、在config.info中配置主从模式,真正应用需要在配置文件中进行配置

#配置文件中配置master地址、端口、密码的格式
relicaof <masterip> <masterport>
masterauth <master-password>

            ③、可手动执行命令slaveof no one可以将自己变为主机

127.0.0.1:6380> slaveof no one # 将自己由从机变为主机
OK
127.0.0.1:6379> info replication # 查看当前库信息
role:master # 角色 主机

    2、哨兵模式(Sentinel模式)

        当master遇到异常中断服务后,开发者可以通过手动的方式选择一个从数据库来升级为主数据库,以使得系统能够继续提供服务。然而整个过程相对麻烦且需要人工介入,难以实现自动化。 为此,Redis 2.8中提供了哨兵工具来实现自动化的系统监控和故障恢复功能。哨兵的作用就是监控Redis的master、slave是否正常运行,master出现故障,根据优先级,如果优先级一样选择ID小的slave,自动将slave转换为master。

        (1)、特点

            sentinel模式是建立在主从模式的基础上,如果只有一个Redis节点,sentinel就没有任何意义。

            ①、当master挂了以后,sentinel会在slave中选择一个做为master,并修改它们的配置文件,其他slave的配置文件也会被修改,比如slaveof属性会指向新的master。

            ②、当master重新启动后,它将不再是master而是做为slave接收新的master的同步数据。

            ③、sentinel因为也是一个进程有挂掉的可能,所以sentinel也会启动多个形成一个sentinel集群。

            ④、多sentinel配置的时候,sentinel之间也会自动监控。

            ⑤、当主从模式配置密码时,sentinel也会同步将配置信息修改到配置文件中,不需要担心。

            ⑥、一个sentinel或sentinel集群可以管理多个主从Redis,多个sentinel也可以监控同一个redis。

            ⑦、sentinel最好不要和Redis部署在同一台机器,不然Redis的服务器挂了以后,sentinel也挂了。

            ⑧、配置哨兵监控一个系统时,只需要配置其监控主数据库即可,哨兵会自动发现所有复制该主数据库的从数据库

            ⑨、当Redis集群容量达到一定上限时候,在线扩容比较麻烦,实现哨兵模式配置本身就比较复杂。

        (2)、工作机制

            ①、主观下线

                a、每个sentinel以每秒钟一次的频率向它所知的master,slave以及其他sentinel实例发送一个PING命令。

                b、如果一个实例距离最后一次有效回复PING命令的时间超过down-after-milliseconds(默认30秒)选项所指定的值,则这个实例会被sentinel标记为主观下线。

                c、若master重新向sentinel的PING命令返回有效回复,master的主观下线状态就会被移除。

            ②、客观下线

                a、如果一个master被标记为主观下线,则正在监视这个master的sentinel集群会以每秒一次的频率确认master的确进入了主观下线状态。

                b、当Sentinel集群中有大于等于quorum(配置文件指定的值)数量的sentinel在指定的时间范围内确认master的确进入了主观下线状态,则master会被标记为客观下线。

                c、若没有足够数量的sentinel同意master已经下线,master的客观下线状态就会被移除。

                d、如果客观下线的Redis节点是slave节点或者是sentinel节点,则操作到此为止;如果客观下线的Redis节点为master节点,则开始故障转移,在从节点中选举一个节点升级为主节点。

            ③、sentinel集群选举leader

                a、选择新的master前提是需要先从sentinel集群中选举一个sentinel节点作为leader。每一个sentinel节点都可以成为leader,当一个sentinel节点确认Redis集群的主节点主观下线后,会请求其他sentinel节点要求将自己选举为leader。

                b、被请求的sentinel节点如果没有同意过其他sentinel节点的选举请求,则同意该请求(选举票数+1),否则不同意。

                c、当sentinel节点获得的选举票数达到Leader最低票数(quorum和sentinel节点数/2+1的最大值,这也是Sentinel数量最少为3的原因),则该sentinel节点选举为leader,否则重新进行选举。

            ④、sentinel leader选择新的master

                a、当Sentinel集群选举出sentinel leader后,由sentinel leader从Redis从节点中选择一个作为主节点。

                b、过滤故障的节点。

                c、选择优先级slave-priority最大的从节点作为主节点,如不存在则继续。

                d、选择复制偏移量(数据写入量的字节,记录写了多少数据。主服务器会把偏移量同步给从服务器,当主从的偏移量一致,则数据是完全同步)最大的从节点作为主节点,如不存在则继续。

                e、选择runid(Redis每次启动的时候生成随机的runid作为Redis的标识)最小的从节点作为主节点。

            ⑤、当使用sentinel模式的时候,客户端就不要直接连接Redis,而是连接sentinel的ip和port,由sentinel来提供具体的可提供服务的Redis实现,这样当master挂掉以后,sentinel就会感知并将新的master提供给使用者。为了高可用哨兵也需要部署多个,除了监控各个Redis服务之外,哨兵之间也需要互相监控。

        (3)、环境配置

            ①、命令配置哨兵监控,后面数字1代表如果主机挂了,决定让哪个salve成为主机。

#哨兵监控        Redis名称 被监控host port 1
sentinel monitor myredis 127.0.0.1 6379 1

            ②、修改配置文件redis-sentinel

            ③、sentinel.conf模板

    3、集群模式(Cluster模式)

        sentinel模式基本可以满足一般生产的需求,具备高可用性。但是当数据量过大到一台服务器存放不下的情况时,主从模式或sentinel模式就不能满足需求了,这个时候需要对存储的数据进行分片,将数据存储到多个Redis实例中。cluster模式的出现就是为了解决单机Redis容量有限的问题,将Redis的数据根据一定的规则分配到多台机器,也就是分布式存储。

        cluster可以说是sentinel和主从模式的结合体,通过cluster可以实现主从和master重选功能,所以如果配置两个副本三个分片的话,就需要六个Redis实例。因为Redis的数据是根据一定规则分配到cluster的不同机器的,当数据量过大时,可以新增机器进行扩容。使用集群,只需要将redis配置文件中的cluster-enable配置打开即可。每个集群中至少需要三个主数据库才能正常运行,新增节点非常方便。

        (1)、特点

            ①、多个redis节点网络互联,数据共享。

            ②、所有的节点都是一主一从(也可以是一主多从),其中从不提供服务,仅作为备用。主从不用配置,集群会自己选。

            ③、不支持同时处理多个key(如MSET/MGET),因为redis需要把key均匀分布在各个节点上,并发量很高的情况下同时创建key-value会降低性能并导致不可预测的行为。

            ④、支持在线增加、删除节点。

            ⑤、客户端可以连接任何一个主节点进行读写。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值