zoukankan      html  css  js  c++  java
  • redis集群

    1.测试环境

    master:   127.0.0.1 6379

    slave1:    127.0.0.1 6479

    slave2:    127.0.0.1 6579

    master-sentinel: 127.0.0.1 26379

    slave1-sentinel: 127.0.0.1 26479

    slave2-sentinel: 127.0.0.1 26579

    2.下载安装redis 2.8.3

    cd

    wget http://download.redis.io/releases/redis-2.8.3.tar.gz

    tar –zxvf redis-2.8.3.tar.gz

    cd redis-2.8.3

    make;make install(此处可用PREFIX参数将redis安装到其他目录)

    3.配置测试环境

    ----创建目录:

    cd /usr/local

    mkdir redis_cluster

    mkdir redis_cluster/master_6379

    mkdir redis_cluster/slave_6479

    mkdir redis_cluster/slave_6579

    ----配置redis:

    master:

    cp –a –R –p ~/redis-2.8.3/redis.conf ./redis_cluster/master_6379/

    cp –a –R –p ~/redis-2.8.3/sentinel.conf ./redis_cluster/master_6379/6379-sentinel.conf

    vi ./redis_cluster/master_6379/redis.conf(将对应配置修改成如下)

    -------------------------------------------------------------------------------------------

    ####master  redis.conf

    ####端口

    port 6379

    ####授权密码,在安全的环境中可以不设置

    requirepass luyx30        

    masterauth luyx30

    ####注释指令重命名,若已配置则不需要修改

    #rename-command

    ####开启AOF

    appendonly yes

    save “”

    slave-read-only yes

    -------------------------------------------------------------------------------------------

    vi ./redis_cluster/master_6379/6379-sentinel.conf

    -------------------------------------------------------------------------------------------

    ####master  sentinel.conf

    ##sentinel实例之间的通讯端口

    port 26379

    ####sentinel需要监控的master信息:<mastername> <masterIP> <masterPort> <quorum>.

    ####<quorum>应该小于集群中slave的个数,只有当至少<quorum>个sentinel实例提交"master失效" 才会认为master为ODWON("客观"失效) .

    sentinel monitor mymaster 127.0.0.1 6379 2

    ####授权密码,在安全的环境中可以不设置

    sentinel auth-pass mymaster luyx30

    ####master被当前sentinel实例认定为“失效”(SDOWN)的间隔时间

    sentinel down-after-milliseconds mymaster 30000

    ####当新master产生时,同时进行“slaveof”到新master并进行同步复制的slave个数。

    ##在salve执行salveof与同步时,将会终止客户端请求。

    ##此值较大,意味着“集群”终止客户端请求的时间总和和较大。

    ##此值较小,意味着“集群”在故障转移期间,多个salve向客户端提供服务时仍然使用旧数据。

    sentinel parallel-syncs mymaster 1

    ####failover过期时间,当failover开始后,在此时间内仍然没有触发任何failover操作,当前sentinel将会认为此次failoer失败。

    sentinel failover-timeout mymaster 900000

    -------------------------------------------------------------------------------------------

    slave1:

    cp –a –R –p ~/redis-2.8.3/redis.conf ./redis_cluster/slave_6479/

    cp –a –R –p ~/redis-2.8.3/sentinel.conf ./redis_cluster/slave_6479/6479-sentinel.conf

    vi ./redis_cluster/slave_6479/redis.conf(将对应配置修改成如下)

    -------------------------------------------------------------------------------------------

    ####slave1 redis.conf

    port 6479

    slaveof 127.0.0.1 6379

    ##-----------其他配置和master  redis.conf保持一致-----------##

    -------------------------------------------------------------------------------------------

    vi ./redis_cluster/slave_6479/6479-sentinel.conf

    -------------------------------------------------------------------------------------------

    ####slave1 sentinel.conf

    port 26479

    ##--------其他配置和master  sentinel.conf保持一致-------##

    -------------------------------------------------------------------------------------------

    slave2:

    cp –a –R –p ~/redis-2.8.3/redis.conf ./redis_cluster/slave_6579/

    cp –a –R –p ~/redis-2.8.3/sentinel.conf ./redis_cluster/slave_6579/6579-sentinel.conf

    vi ./redis_cluster/slave_6579/redis.conf(将对应配置修改成如下)

    -------------------------------------------------------------------------------------------

    ####slave1 redis.conf

    port 6579

    slaveof 127.0.0.1 6379

    ##-----------其他配置和master redis.conf保持一致-----------##

    -------------------------------------------------------------------------------------------

    vi ./redis_cluster/slave_6579/6579-sentinel.conf

    -------------------------------------------------------------------------------------------

    ####slave1 sentinel.conf

    port 26579

    ##--------其他配置和master sentinel.conf保持一致-------##

    -------------------------------------------------------------------------------------------

    ----启动查看:

    注意:首次构建sentinel环境时,必须首先启动master。

    启动master和master-sentinel:

    redis-server --include /usr/local/redis_cluster/master-6379/redis.conf

    redis-sentinel /usr/local/redis_cluster/master-6379/6379-sentinel.conf

    克隆会话,启动slave1和slave1-sentinel:

    redis-server --include /usr/local/redis_cluster/slave-6479/redis.conf

    redis-sentinel /usr/local/redis_cluster/slave-6479/6479-sentinel.conf

    克隆会话,启动slave2和slave2-sentinel:

    redis-server --include /usr/local/redis_cluster/slave-6579/redis.conf

    redis-sentinel /usr/local/redis_cluster/slave-6579/6579-sentinel.conf

    查看master的状态:

    redis-cli -h 127.0.0.1 -p 6379

    查看slave的状态:

    redis-cli –h 127.0.0.1 –p 6479

    4.测试:

    ----场景1:slave宕机

    关闭slave1:

    查看sentinel状态:

    查看master的Replication信息:

    此时只存在一个slave。

    ----场景2:slave恢复

    重新开启slave1:

    redis-server /usr/local/redis_cluster/slave-6479/redis.conf

    查看sentinel状态:

    sentinel能快速的发现slave加入到集群中:

    查看master的Replication信息:

    ----场景3:master宕机

    master-sentinel作为master 1的leader,会选取一个master 1的slave作为新的master。slave的选取是根据一个判断DNS情况的优先级来得到,优先级相同通过runid的排序得到,但目前优先级设定还没实现,所以直接获取runid排序得到slave 1。

    然后发送命令slaveof no one来取消slave 1的slave状态来转换为master。当其他sentinel观察到该slave成为master后,就知道错误处理例程启动了。sentinel A然后发送给其他slave slaveof new-slave-ip-port 命令,当所有slave都配置完后,sentinel A从监测的masters列表中删除故障master,然后通知其他sentinels。

    关闭master:

    查看sentinel状态:

    6379-sentinel:

    自动将slave2即6579切换成master,原来的master变成slave。

    6579-sentinel:

    显示了failover的过程:

    ----场景4:master恢复

    重新启动原来的master:

    redis-server /usr/local/redis_cluster/master-6379/redis.conf

    查看sentinel状态:

    原来的master自动切换成slave,不会自动恢复成master:

    测试完成。

    注意:若在sentinel已选出新主但尚未完成其它实例的reconfigure之前,重启old master,则整个系统会出现无法选出new master的异常。

  • 相关阅读:
    cogs 1682. [HAOI2014]贴海报 WW
    cogs 2039. 树的统计
    cogs luogu [NOIP2011] 选择客栈
    cogs luogu 1804. [NOIP2014]联合权值 WD
    cogs luogu [NOIP2014]生活大爆炸版石头剪刀布
    leetcode[119]Pascal's Triangle II
    leetcode[120]Triangle
    leetcode[121]Best Time to Buy and Sell Stock
    leetcode[122]Best Time to Buy and Sell Stock II
    leetcode[123]Best Time to Buy and Sell Stock III
  • 原文地址:https://www.cnblogs.com/bethal/p/5329232.html
Copyright © 2011-2022 走看看