Redis基于keepalived的高可用实践

接着上一章节来:

Redis基于keepalived的高可用实现

方案拓扑图

Redis基于keepalived的高可用实践

测试方案

1.       手动关闭AppM keepalived进程确认keepalived主从变化,AppS1是否变更为主

2.       开启keepalived,手动关闭 AppM redis进程确认ipvsadm ip池是否剔除AppM

3.       开启AppM redis进程,确认AppM是否变更为主

环境准备

服务器信息

Redis基于keepalived的高可用实践

配置服务器host

Manager机器上配置好hosts后通过ansible下发到所有应用服务器

Redis基于keepalived的高可用实践

# ansible app -m copy -a "src=/etc/hosts dest=/etc/hosts owner=root group=root mode=0644 backup=yes"

//抽查对应服务器确认host无误后继续

安装配置keepalived

//安装keepalived ipvsadm

# ansible app -m command -a 'yum install keepalived ipvsadm -y'

//分发配置文件

# ansible AppM -m copy -a 'src=/data/ansible/config/keepalived/keepalived.conf-redis-Mrds dest=/etc/keepalived/keepalived.conf backup=yes'
# ansible apps -m copy -a 'src=/data/ansible/config/keepalived/keepalived.conf-redis-Srds dest=/etc/keepalived/keepalived.conf backup=yes'

//登录AppS2
AppS3
修改priority

//运行keepalived

# ansible app -m command -a 'service keepalived restart'
# ansible app -m command -a 'pidof keepalived'

Redis基于keepalived的高可用实践

//ip

Redis基于keepalived的高可用实践

测试

1.       手动关闭AppM keepalived进程确认keepalived主从变化,AppS1是否变更为主

Redis基于keepalived的高可用实践

Redis基于keepalived的高可用实践

a>     Vip资源已切换至AppS1,但同时我们也发现redis主从并没有切换

2.       开启keepalived,手动关闭 AppM redis进程确认ipvsadm ip池是否剔除AppM

Redis基于keepalived的高可用实践

3.       开启AppM redis进程,确认AppM是否变更为主

Redis基于keepalived的高可用实践

Redis会立刻同步服务到ip

小总

a>     Keepalived相对heartbeat要轻量简单,ipvsadm也由keepalived协助完成

b>     Keepalivedredis应用场景需多mastermater互为同步,

c>      Keepalived的响应速度极快,异常进程或实例恢复后都能迅速发现并实施既定措施

d>     想通过redis自带的sentinelkeepalived结果会有些难度,也不建议

附件

keepalived.conf-redis-Srds

global_defs {
   notification_email {
       lisongtao@ihuilian.com
   }
   notification_email_from   sa@ihuilian.com
   smtp_server smtp.exmail.qq.com
   smtp_connect_timeout 30
   router_id LVS_DEVEL  ##自定义的字符串
}

###在哪里找到自定义配置规范
#vrrp_script chk_nginx_down {   #定义可以手动控制状态的脚本
#    script "killall -0 nginx"
#    interval 1                    #检查时间间隔
#    weight - 13                   #如果检测失败,优先级-13
#}


vrrp_script chk_redis_down {   #定义可以手动控制状态的脚本
    script "killall -0 redis-server"
    interval 1                    #检查时间间隔
    weight -2                   #如果检测失败,优先级-13
}

vrrp_instance VI_1 {
    state BACKUP ###MASTER/BACKUP必须大写,且当MASTER恢复时,会自动恢复为MASTER状态
    interface eth0
    virtual_router_id 51  ###同一个vrrp使用相同的vrrp,整个vrrp内唯一
    priority 99   ###数字越大优先级越高,且要MASTER要高于SLAVE,和sentinel恰好相反...>O<
    advert_int 1   ###Timeout时长秒为单位
    authentication {   ###MASTER和SLAVE密码相同方可正常通信
        auth_type pass
        auth_pass huilian
    }
    virtual_ipaddress { ###每个地址占一行,不能指定子网掩码,与lvs客户端设定的VIP一致
        192.168.1.200
        #192.168.200.17
        #192.168.200.18
    }

    ###跟global_defs中定义的vrrp_script chk_nginx_down对应
   #track_script {     #引用定义的脚本
   #   chk_nginx_down
   #}

    track_script {     #引用定义的脚本
       chk_redis_down
    }


    #notify_master "/etc/keepalived/notify.sh master"
    #notify_backup "/etc/keepalived/notify.sh backup"
    #notify_fault  "/etc/keepalived/notify.sh fault"

}

virtual_server 192.168.1.200  6379{  ###IP和vrrp_instance中定义的vip需一致,IP  PORT
    delay_loop 6    ###健康检查时间/秒
    #lb_algo wlc    ###负载均衡调度算法,常用rr/wlc
    lb_algo rr      ###负载均衡调度算法,常用rr/wlc
    lb_kind DR      ###负载均衡转发规则,  DR,NAT,TUN3
    nat_mask 255.255.255.0
    #persistence_timeout 50   ###会话保持时长
    protocol TCP   ###协议类型转发

    real_server 192.168.1.36 6379{   ###real server IP PORT
        weight 1   ###数值越大,权重越大
        TCP_CHECK {
            connect_timeout 1       #表示3秒无响应,则超时
            nb_get_retry 3          #表示重试次数
            delay_before_retry 3    #表示重试间隔
            connect_port 6379         #表示重试间隔
        }

    }
    real_server  192.168.1.37 6379{
        weight 1   ###数值越大,权重越大
        TCP_CHECK {
            connect_timeout 1       #表示3秒无响应,则超时
            nb_get_retry 3          #表示重试次数
            delay_before_retry 3    #表示重试间隔
            connect_port 6379         #表示重试间隔
        }
    }
    real_server  192.168.1.38 6379{
        weight 1   ###数值越大,权重越大
        TCP_CHECK {
            connect_timeout 1       #表示3秒无响应,则超时
            nb_get_retry 3          #表示重试次数
            delay_before_retry 3    #表示重试间隔
            connect_port 6379         #表示重试间隔
        }

    }

    real_server  192.168.1.39 6379{
        weight 1   ###数值越大,权重越大
        TCP_CHECK {
            connect_timeout 1       #表示3秒无响应,则超时
            nb_get_retry 3          #表示重试次数
            delay_before_retry 3    #表示重试间隔
            connect_port 6379         #表示重试间隔
        }

    }


}

keepalived.conf-redis-Mrds

global_defs {
   notification_email {
       lisongtao@ihuilian.com
   }
   notification_email_from   sa@ihuilian.com
   smtp_server smtp.exmail.qq.com
   smtp_connect_timeout 30
   router_id LVS_DEVEL  ##自定义的字符串
}

###在哪里找到自定义配置规范
#vrrp_script chk_nginx_down {   #定义可以手动控制状态的脚本
#    script "killall -0 nginx"
#    interval 1                    #检查时间间隔
#    weight - 13                   #如果检测失败,优先级-13
#}


vrrp_script chk_redis_down {   #定义可以手动控制状态的脚本
    script "killall -0 redis-server"
    interval 1                    #检查时间间隔
    weight -2                   #如果检测失败,优先级-13
}

vrrp_instance VI_1 {
    state MASTER    ###MASTER/BACKUP必须大写,且当MASTER恢复时,会自动恢复为MASTER状态
    interface eth0
    virtual_router_id 51  ###同一个vrrp使用相同的vrrp,整个vrrp内唯一
    priority 100   ###数字越大优先级越高,且要MASTER要高于SLAVE,和sentinel恰好相反...>O<
    advert_int 1   ###Timeout时长秒为单位
    authentication {   ###MASTER和SLAVE密码相同方可正常通信
        auth_type pass
        auth_pass huilian
    }
    virtual_ipaddress { ###每个地址占一行,不能指定子网掩码,与lvs客户端设定的VIP一致
        192.168.1.200
        #192.168.200.17
        #192.168.200.18
    }

    ###跟global_defs中定义的vrrp_script chk_nginx_down对应
   #track_script {     #引用定义的脚本
   #   chk_nginx_down
   #}

    track_script {     #引用定义的脚本
       chk_redis_down
    }


    #notify_master "/etc/keepalived/notify.sh master"
    #notify_backup "/etc/keepalived/notify.sh backup"
    #notify_fault  "/etc/keepalived/notify.sh fault"

}

virtual_server 192.168.1.200  6379{  ###IP和vrrp_instance中定义的vip需一致,IP  PORT
    delay_loop 6    ###健康检查时间/秒
    #lb_algo wlc    ###负载均衡调度算法,常用rr/wlc
    lb_algo rr      ###负载均衡调度算法,常用rr/wlc
    lb_kind DR      ###负载均衡转发规则,  DR,NAT,TUN3
    nat_mask 255.255.255.0
    #persistence_timeout 50   ###会话保持时长
    protocol TCP   ###协议类型转发

    real_server 192.168.1.36 6379{   ###real server IP PORT
        weight 1   ###数值越大,权重越大
        TCP_CHECK {
            connect_timeout 1       #表示3秒无响应,则超时
            nb_get_retry 3          #表示重试次数
            delay_before_retry 3    #表示重试间隔
            connect_port 6379         #表示重试间隔
        }

    }
    real_server  192.168.1.37 6379{
        weight 1   ###数值越大,权重越大
        TCP_CHECK {
            connect_timeout 1       #表示3秒无响应,则超时
            nb_get_retry 3          #表示重试次数
            delay_before_retry 3    #表示重试间隔
            connect_port 6379         #表示重试间隔
        }
    }
    real_server  192.168.1.38 6379{
        weight 1   ###数值越大,权重越大
        TCP_CHECK {
            connect_timeout 1       #表示3秒无响应,则超时
            nb_get_retry 3          #表示重试次数
            delay_before_retry 3    #表示重试间隔
            connect_port 6379         #表示重试间隔
        }

    }

    real_server  192.168.1.39 6379{
        weight 1   ###数值越大,权重越大
        TCP_CHECK {
            connect_timeout 1       #表示3秒无响应,则超时
            nb_get_retry 3          #表示重试次数
            delay_before_retry 3    #表示重试间隔
            connect_port 6379         #表示重试间隔
        }

    }


}

下章节预告:

twemproxy + keepalived 实现redis的分布式高可用

原创文章,作者:stanley,如若转载,请注明出处:http://www.178linux.com/703

(0)
stanleystanley
上一篇 2015-03-04
下一篇 2015-03-06

相关推荐

  • 马哥linux 0726作业

    1,课堂练习 显示当前日期,格式:2016-08-08 显示前天是星期几 设置当前日期为2008-08-08 08:00 使用字符端登陆时,显示当前登录终端号,主机名和当前时间 1,首先我们知道当前登录信息的配置文件在/etc/issue中 2,然后我们查询帮助看看issue的具体描述查到了相关的mingetty的命令当中关于当中的一些选项就是我们需要的三个…

    Linux干货 2016-08-04
  • 如何解决生产机上php代码连接mysql报错的故障

    大家好: 今天分享一则当生产机上的网站php代码不能连接Mysql服务器时怎么办? 当LNMP的网站建立好后,我们需要测试网站中的php代码。但发现如下报错怎么办? 解决方法如下:  mysql> show databases; +——————–+ | Dat…

    Linux干货 2016-12-18
  • N25-第四周博客作业

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。 [root@localhost tuser1]# cp -r /etc/skel/ /home/tuser1 [root@localhost tuser1]#&nb…

    Linux干货 2016-12-25
  • 笔记–8.4 文本处理工具,正则表达式

    cat 查看文本文件 命令功能: cat主要有三大功能: 1.一次显示整个文件:cat filename 2.从键盘创建一个文件:cat > filename 只能创建新文件,不能编辑已有文件. 3.将几个文件合并为一个文件:cat file1 file2 > fil…

    Linux干货 2016-08-07
  • grep的使用和正则表达式

           grep作为Linux中的文本编辑的三剑客之一,它的功能很强大,并不是虚传,学会了grep在文本中找我们要找的的字符串总是能很轻易地找到,grep不仅仅就这一点功能,它在我们工作上也会对我们有很大的帮助。下面我来介绍一下grep的简单的功能。 grep :文本过滤( 模式:patter…

    Linux干货 2016-08-10
  • N22-第六周博客作业

    请详细总结vim编辑器的使用并完成以下练习题 1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#; # cp /etc/rc.d/rc.sysinit /tmp # vim /tmp/rc.sysinit …

    Linux干货 2016-09-26