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 {
       [email protected]
   }
   notification_email_from   [email protected]
   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 {
       [email protected]
   }
   notification_email_from   [email protected]
   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 17:41
下一篇 2015-03-06 10:40

相关推荐

  • 三步走进行IP大揭秘

    跟随博主三步走进行IP大揭秘! 一、IP简介 1.ip地址:可以分为合法ip地址(公网ip地址)和私有ip地址, 合法ip地址主要应用于internet上的主机访问,而私有ip地址应用于局域网中计算机的相互通信。 2.ip地址的表示形式:分为二进制表示和点分十进制表示。 一般使用点分十进制表示,现在通常使用的ip地址长度均为32位,由四个八位域组成,可称为八…

    2017-09-02
  • Linux基础知识(四)-正则表达式grep,egrep

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。 2、编辑/etc/group文件,添加组hadoop。 3、手动编辑/etc/passwd文件新增一行,添加用户hadoop,其基本组ID为hadoop组的id号;其家目录为/home/hadoop。 4、复制/etc/sk…

    Linux干货 2016-10-17
  • python 10第二周博客作业

    1.取磁盘利用率:cut -d命令 df|tr –s  ‘ ’   ‘%’ |cut –d “%” –f5正则表达式:df -h |grep “^/dev/sd” |grep -o “[[:digit:]]\+%”|grep -o “[[:digit:]]\+”2. paste 合并两个…

    Linux干货 2018-03-17
  • 马哥教育网络班22期第二周课程练习1-未闻花名

    1、Linux管理文件和目录的命令 命令 功能 命令 功能 pwd 显示当前目录 ls 查看目录下的内容 cd 改变所在目录 cat 显示文件的内容 grep 在文件中查找某字符 cp 复制文件 touch 创建文件 mv 移动文件 rm 删除文件 rmdir 删除目录 1.1 pwd命令 该命令的英文解释为print working directory(打…

    Linux干货 2016-08-29
  • web 服务进阶 httpd配置成https

    web服务进阶 自建CA/https详解 一、SSL与https 1、引言 我们网上购物、网上订票,以及使用支付宝支付过程中都会在网上直接输入账号和密码。这些信息都是非常重要的,如何才能在输入的过程中,不被别人看见和窃取,就需要对你输入的信息进行加密处理。 早期的两主机通信之间是没有加解密程序,后来就在传输层与应用层之间加了一个SSL库,完成加密解密功能。 …

    Linux干货 2016-12-11
  • N26-第五周博客作业

    一、显示当前系统上root、fedora或user1用户的默认shell; [root@promote home]# grep -E ‘^(root|fedora|user1)’ /etc/passwd |cut -d : -f7 /bin/bash /bin/bash /bin/bash [root@promote home]# 注…

    Linux干货 2017-05-15