zoukankan      html  css  js  c++  java
  • 11、redis使用ruby实现集群高可用

    哨兵搭建的注意事项

    1.1 配置文件还原

    1.1.1 哨兵的配置文件介绍

    说明:

    哨兵启动时需要依赖2个配置文件

    redis.conf

    sentinel.conf

    1.搭建redisredis必须实现主从结构 并且在配置文件中已经写入.

    2.如果主从搭建出现问题.需要重新拷贝新的配置文件 再次配置

     

    3.哨兵配置文件出错

    1.先配置单台的哨兵

    2.先拷贝单台哨兵的配置文件.

    3.根据自己的需要将配置文件修改哨兵的个数/序列号

    4.重启哨兵 6379 6380 6381

    Redis中的持久化

    2.1 RDB模式

    说明:RDB模式是redis中默认的持久化方式.redis中默认每15分钟持久化一次.redis中内存的信息写入到.rdb结尾的文件中.redis节点出现宕机/断电.redis再次启动时先读取rdb持久化文件,恢复内存数据.

    2.1.1 redis的单位

     

    2.1.2 redis中默认的持久化策略

     

    说明:save 规定的时间 更新的次数(set)

    save 900 1  如果redis15分钟内只执行一次set操作.则进行数据持久化.

    save 300 10  如果redis5分钟内执行了10set操作,则进行持久化

    save 60 10000 …

     总结:根据save的语法,可以根据自身的需要调整redis的默认的持久化策略.

    2.1.3 save  bgsave

    说明:如果想通过自己手动的持久化文件,需要执行savebgsave达到持久化的目的.

    用法:

    如果使用save命令持久化,则首先会重新开启一个线程,主动执行持久化操作.这时所有的redis操作都会阻塞.直到持久化操作完成.

     如果使用bgsave命令.则不会造成阻塞的现象.会新开启一个线程.该线程的工作有点类似于gc.不能保证持久化操作立即执行.

       

    2.1.4 持久化文件的名称和路径

    1.持久化文件的名称

     

    2.路径可以手动的指定

     

    3.问题:由于redis关机,当再次启动时发现全部的redis信息都相同?老师为什么??????

    说明:由于分片的操作.3redis的持久化文件名称和路径都是相同的.redis启动时会读取持久化文件恢复数据,.所有导致3redis的数据是系统的!!!

    总结:不同的redis.持久化文件名称必须不同

    2.1.5 RDB持久化的总结

    1. redis中默认的持久化策略
    2. redis中可以手动的进行持久化   sava bgsave
    3. 手动的修改redis的持久化策略   save 时间  set次数
    4. redis的持久化文件名称必须不同
    5. RDB文件在固定的时间间隔持久化数据,不能保证实时持久化

    2.2 AOF持久化

    2.2.1 AOF介绍

    说明:AOF策略能够满足实时持久化的要求,但是消耗的性能较高(rdb).AOF持久化策略模式是关闭的.如果需要开启只需要将appendonly yes.当开启了AOF持久化策略后,RBD模式将不起作用.并且生成持久化文件appendonly.aof

    AOF的执行的原理:

     redis出现宕机或者断电的现象,这时当redis重新启动时.这时会首先检查AOF文件.进行数据的恢复.

    2.2.2 AOF文件默认的持久化策略

     

    always: 实时备份.这时的性能会很低

    everysec: 每秒进行一次数据持久化.效率略低于rdb

    no: 将具体备份的时间交给操作系统决定.

     

    2.2.3 AOF的总结

    1. 能够实现实时备份
    2. 对于数据完整性要求较高时使用AOF备份
    3. AOF的效率略低于RDB
    4. 根据不用的公司需要选择不同的持久化方式

    2.3 Redis中的内存策略

    2.3.1 Redis是如何维护内存

    说明:redis中可以手动的设置最大的内存,可以用10mb/10gb这样的单位进行设定.如果将内存设定为10M.随着时间的推移,内存空间会面临存满的现象.redis会根据自身的内存策略进行维护

     

    2.3.2 内存策略

    # volatile-lru -> 从已经设置过期时间的数据中,选择最近最少使用的数据进行删除

    # allkeys-lru -> 从全部数据中挑选出最近最少使用的数据进行删除

    # volatile-random -> 从已经设定的过期时间的数据中,进行随机淘汰

    # allkeys-random -> 从全部数据中进行随机淘汰

    # volatile-ttl -> 从设置了过期时间的数据集中,选择马上就要过期的数据进行释放操作

    # noeviction -> redis的默认策略.不会删除数据,会直接返回错误信息.在做写操作时 

     

    说明:可以修改默认内存策略.建议使用lur算法和TTL算法

    如果采用lur算法则使用allkeys-lru

    说明:如果引用算法将内存的数据进行删除时,lru

    maxmemory-samples 1-10   10的删除的可靠性更好,但是性能是最低的

    3的速度是最快的,但是效果不是特别的理想.

    默认为5

    2.4 搭建redis集群

    2.4.1 哨兵的缺点

    1.哨兵宕机后将直接影响整个服务

    2.搭建redis服务器,一个服务对应三个哨兵,那么会导致哨兵的数量比服务器都多,维护不易.

    2.4.2 哨兵的优点

    说明:

    哨兵可以实现redis的高可用.分片技术可以将内存数据交给多台机器维护.性能上更好.

    矛盾点:

    哨兵缺少了分片的内存分散.

        分片缺少了哨兵的高可用

    2.5 Redis集群

    2.5.1 集群的优点

    说明:

    1. 集群可以实现内部的高可用
    2. 集群通过多台的主机共同为内存空间
    3. 集群部署时无需手动挂载主从.程序自动维护.
    4. 教学中配置32从一共9台机器

    2.6 Redis集群的搭建

    2.6.1 创建7000-7008文件夹

    说明:配置前将全部的redis服务关闭,之后重新拷贝新的配置文件重新配置

    mkdir cluster

    [root@localhost redis-3.2.8]# cp redis.conf cluster/

    redis-7000.conf

    创建多个文件夹保存redis信息.将配置文件移动到7000文件夹下

     

    2.6.2 编辑配置文件

    1. 将绑定IP注释

     

    1. 关闭保护模式

     

    1. 修改端口号

     

    1. 开启后台启动

     

    1. 修改PID路径

     

    1. 修改持久化文件的名称

     

    1. 修改持久化文件的目录

     

    1. 修改内存策略

     

    1. 开启集群

     

    1. 修改集群节点信息

     

    2.6.3 复制配置文件到指定文件夹下

     

    2.6.4 修改文件标号

    :%s/7000/7001/g    

    7000表示原有文件名

    7001新文件名称

    之后保存退出:wq

    分别修改7001-7008的配置文件

     

    2.6.5 批量启动

     

    关闭防火墙

    service iptables stop

     

    2.6.6 集群的部署

    说明:集群启动时需要依赖工具插件 ruby

    启动命令:

     

    ./src/redis-trib.rb create --replicas 2 192.168.220.132:7000 192.168.220.132:7001 192.168.220.132:7002 192.168.220.132:7003 192.168.220.132:7004 192.168.220.132:7005 192.168.220.132:7006 192.168.220.132:7007 192.168.220.132:7008

    输入yes

     

    说明:

    如果出现上述的信息恭喜你集群搭建成功!!!

    2.7 Redis集群Spring管理

    2.7.1  修改redis.properties文件

     

    2.7.2 编辑Spring配置文件

    <!-- jedis 配置-->  
        <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig" >  
            <!--最大空闲数-->  
            <property name="maxIdle" value="${redis.maxIdle}" />  
            <!--最大建立连接等待时间-->  
            <property name="maxWaitMillis" value="${redis.maxWait}" />  
            <!--是否在从池中取出连接前进行检验,如果检验失败,则从池中去除连接并尝试取出另一个-->  
            <property name="testOnBorrow" value="${redis.testOnBorrow}" />  
            <property name="maxTotal" value="${redis.maxTotal}" />  
            <property name="minIdle" value="${redis.minIdle}" />  
        </bean>
        
    
        <bean id="jedisCluster"  class="com.jt.common.util.RedisCluster" >  
            <property name="addressConfig">
                <value>classpath:/properties/redis.properties</value>  
            </property>  
            <property name="addressKeyPrefix" value="redis.cluster" />   <!--  属性文件里  key的前缀 -->  
            <property name="timeout" value="${redis.timeout}" />  
            <property name="maxRedirections" value="6" />  
            <property name="genericObjectPoolConfig" ref="poolConfig" />  
        </bean>  

    2.7.3 编辑工具类方法

    说明:工具类实现工厂接口和InitializingBean

     

    2.先创建对象

     

    1. 通过工厂创建对象

     

    2.7.4 业务层调用

     

    2.7.5 修改哨兵依赖配置

     

  • 相关阅读:
    MQTT Server搭建(apache-apollo)和MQtt Client搭建
    playbook 包含多个play
    ansible 批量重启服务
    无法执行 BACKUP LOG,因为当前没有数据库备份
    Microsoft.SqlServer.SmoExtended
    ACTIVEMQ主题、队列设置用户名密码
    Ansible的配置文件:
    MQTT协议之订阅及发布(使用paho-mqtt-client或mqttv3实现)
    采用基于MQTT的ActiveMQ实现消息推送
    ansible Introduction To Ad-Hoc Commands:
  • 原文地址:https://www.cnblogs.com/xiangyuqi/p/8652457.html
Copyright © 2011-2022 走看看