设为首页 收藏本站
查看: 2008|回复: 1

[经验分享] Tengine+keepalived 安装配置

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-2-10 07:21:04 | 显示全部楼层 |阅读模式
测试环境
系统:Centos-6.5-x86_64
主IP:192.168.1.220
备IP:192.168.219
VIP:192.168.1.226


一、安装Tengine

1.1创建目录并下载安装包
mkdir -p /data/ops/{app,packages,scripts}
cd /data/ops/packages/
1.2 安装tengine
tar zxf tengine-2.0.3.tar.gz && cd tengine-2.0.3/ && ./configure --prefix=/data/ops/app/tengine-2.0.3/ --with-http_stub_status_module --with-pcre --with-http_upstream_check_module && make && make install
/data/ops/app/tengine-2.0.3/sbin/nginx -t
部分模块说明:
--with-http_upstream_check_module
该模块可以为Tengine提供主动式后端服务器健康检查的功能。
该模块在Tengine-1.4.0版本以前没有默认开启,它可以在配置编译选项的时候开启:./configure --with-http_upstream_check_module
--with-pcre
设置PCRE库的源码路径
1.3 将tengine加入rc.local以便开机自启动
echo "/data/ops/app/tengine-2.0.3/sbin/nginx" >> /etc/rc.local


二、keepalived安装

2.1 创建目录并下载安装包
mkdir -p /data/ops/{packages,app} && cd /data/ops/packages
2.2 解压并安装keepalived
tar zxf keepalived-1.2.12.tar.gz && cd keepalived-1.2.12 && ./configure --prefix=/data/ops/app/keepalived && make && make install
2.3 配置keepalived配置文件路径,启动路径
拷贝启动文件到/etc/init.d目录下
cp -p /data/ops/app/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/

cp -p /data/ops/app/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
创建配置文件存放目录
mkdir /etc/keepalived
cp -p /data/ops/app/keepalived/sbin/keepalived /usr/sbin/
配置开启自启动级别
chkconfig --level 2345 keepalived on

三、keepalived配置

说明:备keepalived的配置文件只需去掉nopreempt,修改优先级(priority)的值改为:100(没有设置nopreempt的keepalived优先级必须低于设置nopreempt的keepalived,不然设置非抢占不生效),修改router_id Nginx_Id_1为router_id Nginx_Id_2


3.1 添加主配置文件
cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
# written by :ops
global_defs {#全局配置
router_id Nginx_Id_1#运行 keepalive 机器的标示,注意每个机器需要唯一的标示
}
vrrp_script chk_nginx {
script "/data/ops/scripts/check_http/check_http.sh"#定义检测脚本
interval 5#检测间隔
weight 2
}
vrrp_instance Nginx1 {
state BACKUP#定义为backup
Nopreempt#启用非抢占模式
interface em1#实例绑定的网卡
virtual_router_id 51# 0-255 在同一个 instance 中一致 在整个 vrrp 中唯一
priority 150#优先级,优先级最大的会成为 master
authentication {#认证
auth_type PASS#认证的方式,支持PASS和AH
auth_pass hiveview#认证的密码
}
track_script {
chk_nginx
}
virtual_ipaddress {#指定漂移地址
192.168.0.226
}
}

注意:nopreempt就是在优先级高的主机回复后不抢占VIP,这样做为了减小keepalived主从切换带来的意外风险

3.2 Tengine健康检测脚本
cat /data/ops/scripts/check_http/check_http.sh
#!/bin/bash

DATE=`date +"%Y-%m-%d %H:%M:%S"`
NginxNum=`ss -lnt|grep -w :80|wc -l`
printf "+++$DATE\t`ss -lnt|grep -w :80`+++\n" >> /data/ops/scripts/check_http/check.log

if [ $NginxNum -eq 0 ]
then
        printf "+++THE START\t$DATE\t`ss -lnt|grep -w :80`+++\n" >> /data/ops/scripts/check_http/check.log
        /data/ops/app/tengine-2.1.0/sbin/nginx
        printf "+++THE END\t$DATE\t`ss -lnt|grep -w :80`+++\n" >> /data/ops/scripts/check_http/check.log
        sleep 2

        if [ `ss -lnt|grep -w :80|wc -l` -eq 0 ]
        then
                printf "+++WANT TO KILL KEEPALIVED\t$DATE\t`ss -lnt|grep -w :80`+++\n" >> /data/ops/scripts/check_http/check.log
                killall keepalived
        fi
Fi

四、故障切换与检测
4.1 故障转移
    从主(192.148.1.220)的角度来说,Keepalived会每5分钟运行一次check_http.sh脚本,当检测到nginx停掉后,尝试启动nginx,如果启动成功,VIP不发生变化,keepalived正常运行。如果启动失败,则停掉keepalived程序并将VIP切换到备的keealived服务器上。当主恢复正常后,因为配置了nopreempt非抢占模式,所以VIP还在备(192.148.1.219)上。

4.2 故障演示
主(192.148.1.220)上操作:
/etc/init.d/keepalived stop 停掉keepalived
4.1 在备上tailf /var/log/messages查看备机成了master,并获得了VIP(见红色字体部分)
May  3 03:17:41 OTT-AP-005 Keepalived_vrrp[17099]: VRRP_Instance(Nginx1) Transition to MASTER STATE
May  3 03:17:42 OTT-AP-005 Keepalived_vrrp[17099]: VRRP_Instance(Nginx1) Entering MASTER STATE
May  3 03:17:42 OTT-AP-005 Keepalived_vrrp[17099]: VRRP_Instance(Nginx1) setting protocol VIPs.
May  3 03:17:42 OTT-AP-005 Keepalived_vrrp[17099]: VRRP_Instance(Nginx1) Sending gratuitous ARPs on em1 for 192.148.1.226
May  3 03:17:42 OTT-AP-005 Keepalived_healthcheckers[17098]: Netlink reflector reports IP 192.148.1.226 added
May  3 03:17:47 OTT-AP-005 Keepalived_vrrp[17099]: VRRP_Instance(Nginx1) Sending gratuitous ARPs on em1 for 192.148.1.226

4.2 启动主的nginx在启动主的keepalived(见红色字体部分)
May  3 02:49:09 OTT-AP-004 Keepalived_vrrp[10200]: Opening file '/etc/keepalived/keepalived.conf'.
May  3 02:49:09 OTT-AP-004 Keepalived_vrrp[10200]: Configuration is using : 64313 Bytes
May  3 02:49:09 OTT-AP-004 Keepalived_vrrp[10200]: Using LinkWatch kernel netlink reflector...
May  3 02:49:09 OTT-AP-004 Keepalived_healthcheckers[10199]: Opening file '/etc/keepalived/keepalived.conf'.
May  3 02:49:09 OTT-AP-004 Keepalived_healthcheckers[10199]: Configuration is using : 6313 Bytes
May  3 02:49:09 OTT-AP-004 Keepalived_vrrp[10200]: VRRP_Instance(Nginx1) Entering BACKUP STATE
May  3 02:49:09 OTT-AP-004 Keepalived_vrrp[10200]: VRRP sockpool: [ifindex(2), proto(112), unicast(0), fd(10,11)]
May  3 02:49:09 OTT-AP-004 Keepalived_healthcheckers[10199]: Using LinkWatch kernel netlink reflector...
May  3 02:49:09 OTT-AP-004 Keepalived_vrrp[10200]: VRRP_Script(chk_nginx) succeeded

通过上述可以看到,VIP成功漂移到备机,主机keepalived重新启动后,是备状态也没有抢占成主,说明非抢占也成功生效

4.3检测VIP状态变化
check_vip.sh脚本检测VIP是否在当前主机上记录当前VIP状态,并与上一次状态进行比较,如果两次状态不一样,则报警通知
#主上的脚本
#!/bin/bash
###check VIP

MasterServer="92.168.1.220"
SlaveServer="192.168.1.219"
smtpemailfrom="monitor@gongsiyouxiang.com"
emailto="monitor-roger@gongsiyouxiang.com"
subject="API VIP changed"
smtpserver=smtp.qiye.163.com
smtplogin=monitor@gongsiyouxiang.com
smtppass=jiankong123

if [ "`cat /data/ops/scripts/check_vip/status`" = "yes" ]
then
        Current_Date=`date +"%Y-%m-%d %H:%M:%S"`
        body="The API VIP drift from the MASTER SERVER:$MasterServer to SLAVE SERVER:$SlaveServer at $Current_Date"
        bodytwo="The API VIP drift from the SLAVE SERVER:$SlaveServer to MASTER SERVER:$MasterServer at $Current_Date"
        vip=`/sbin/ip addr|grep -o "124.192.140.226/32"`
        if [ ! -z "$vip" ]
        then
                /usr/bin/sendEmail -f $smtpemailfrom -t $emailto -u $subject -m $body -s $smtpserver:25 -xu $smtplogin -xp $smtppass >> /data/ops/scripts/check_vip/check_vip.log 2>&1

                echo "no" > /data/ops/scripts/check_vip/status

        fi
else

        Current_Date=`date +"%Y-%m-%d %H:%M:%S"`
        body="The API VIP drift from the MASTER SERVER:$MasterServer to SLAVE SERVER:$SlaveServer at $Current_Date"
        bodytwo="The API VIP drift from the SLAVE SERVER:$SlaveServer to MASTER SERVER:$MasterServer at $Current_Date"
        vip=`/sbin/ip addr|grep -o "124.192.140.226/32"`
        if [ -z "$vip" ]
        then
        /usr/bin/sendEmail -f $smtpemailfrom -t $emailto -u $subject -m $bodytwo -s $smtpserver:25 -xu $smtplogin -xp $smtppass >> /data/ops/scripts/check_vip/check_vip.log 2>&1
        echo "yes" > /data/ops/scripts/check_vip/status

        fi

fi

4.4 查看VIP 是否在当前主机上,使用ip add命令
#ip add
2: em1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
    link/ether f0:1f:af:e5:ba:c5 brd ff:ff:ff:ff:ff:ff
    inet 124.192.140.220/26 brd 124.192.140.255 scope global em1
    inet 124.192.140.226/32 scope global em1
    inet6 fe80::f21f:afff:fee5:bac5/64 scope link
       valid_lft forever preferred_lft forever

五、无健康检测实例
说明:我们现在是一个VIP多种业务,既是nginx高可用也是redis高可用,但是我们不想因为一个业务有问题所有的都切换

5.1 主配置文件
# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
# written by :ops
global_defs {
router_id Redis_Id_3
}

vrrp_instance Tengine1 {
state BACKUP
nopreempt
interface em1
virtual_router_id 54
priority 150

authentication {
auth_type PASS
auth_pass hiveview
}

virtual_ipaddress {
192.168.1..252
}
}




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-42288-1-1.html 上篇帖子: Nginx的CentOS开机自启脚本 下篇帖子: nginx+tomcat+memcache+session绑定
累计签到:32 天
连续签到:1 天
发表于 2016-12-10 23:21:29 | 显示全部楼层
五、无健康检测实例
...
请问第五部分是不是没写完呀. 怎么戛然而止了?

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表