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 修改哨兵依赖配置

 

 

posted @ 2018-03-26 17:41  项羽齐  阅读(395)  评论(0编辑  收藏  举报