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

相关推荐

  • 第五周作业

    1、显示/boot/grub/grub.conf中以至少一个空白字符开头的行;grep “^[[:space:]]+”  /boot/grub/grub.conf 2、显示/etc/rc.d/rc.sysinit文件中以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行;[root@localhost ~…

    Linux干货 2017-03-10
  • rpm和yum常用命令选项总结

    =======rpm命令的使用总结====== 安装:  rpm {-i|–install} [install-options] PACKAGE_FILE …     -v: verbose     -vv: more verbose &nbsp…

    Linux干货 2015-12-15
  • 用PHP编写Hadoop的MapReduce程序

    Hadoop流 虽然Hadoop是用java写的,但是Hadoop提供了Hadoop流,Hadoop流提供一个API, 允许用户使用任何语言编写map函数和reduce函数.Hadoop流动关键是,它使用UNIX标准流作为程序与Hadoop之间的接口。因此,任何程序只要可以从标准输入流中读取数据,并且可以把数据写入标准输出流中,那么就可以通过Hadoop流使…

    Linux干货 2015-04-13
  • 马哥教育21期网络班—第12周课程+练习—-LAMP练习中

    为第4题中的第2个虚拟主机提供https服务,使得用户可以通过https安全的访问此web站点; (1)要求使用证书认证,证书中要求使用的国家(CN)、州(HA)、城市(ZZ)和组织(MageEdu); (2)设置部门为Ops,主机名为www2.stuX.com,邮件为admin@stuX.com; [ root@centos CA]# …

    Linux干货 2016-09-26
  • N25第六周作业

    vim编辑器 基本模式: 编辑模式,命令模式 输入模式 末行模式: 内置的命令行接口;   打开文件: # vim [options] [file ..] +#:打开文件后,直接让光标处于第#行的行首; +/PATTERN:打开文件后,直接让光标处于第一个被PATTERN匹配到的行的行首;   模式转换: 编辑模式:默认模式 编辑模式 &…

    Linux干货 2017-02-15
  • HAProxy

    LB Cluster: 四层:lvs, nginx(stream),haproxy(mode tcp) 七层:http: nginx(http, ngx_http_upstream_module), haproxy(mode http), httpd, ats, perlbal, pound… HAProxy 程序环境: 主程序:/usr/sbi…

    Linux干货 2017-07-03