【转】keepalived多个虚IP的双机集群

本文转自 http://blog.sina.com.cn/s/blog_5670025101015lnc.html

这两天接了一个项目,项目要求多专线接入一个服务器集群,同时,还需要每个专线无法互访,还需要在专线上不能出现多余的路由跳数,也就是说,NAT是不允许的,项目在小范围环境下测试通过了,放上来,有需要的能帮上忙的随便拖走吧。

拓扑如下:
keepalived多个虚IP的双机集群



通过专线链路接入到运营商后,由于不允许使用NAT,因此,采用了多端口绑定多个基于子网的VLAN的接入方式,可以保证隔离每个VLAN的同时,不会产生多余的杂波。并且也满足了客户不允许出现在服务器端的子网问题。

软件为keepalived
服务器数量,这里只写两个,多个同理。

监控的服务,web,mysql
交换机是华为的,端口模式为hybrid
设置了20个端口并入多个VLAN,VLANID 为6和7,分别对应192.168.0.0/24子网和192.168.6.0/24子网。

测试环境:

ip地址:服务器A:192.168.0.223/24

192.168.6.223/24

服务器B:192.168.0.224/24

192.168.6.224/24

虚拟IP:192.168.0.225/24

192.168.6.225/24

交换机为esxi4的虚拟交换机直接透明连接到华为S5700vlan分别为67。根据子网进行划分。


测试服务:tomcat,mysql


监测mysql脚本:


这里的脚本有两种监控方式,请自行取舍


脚本1


#i /bin/bash


MYSQL_ALIVE=`ps -C mysqld |grep -v PID|wc -l`

if [ $MYSQL_ALIVE -eq 0 ];then

service mysql restart

sleep 3

if [ `ps -C mysqld |grep -v PID |wc -l` -eq 0 ];then

killall keepalived

fi

fi



脚本2

这个需要提前建立一个至少权限是reload的用户,一般来说,权限不用很高,因为使用这个脚本需要链接数据库


#! /bin/bash

STATUS=`mysqladmin ping -u设置的用户名 -p设置的密码`


if [ “$STATUS” != “mysqld is alive” ];then

service mysql restart

RE=$?

sleep 3

if [ $RE != 0 ];then

killall keepalived

fi

fi



监控web服务器脚本:


#! /bin/bash

#注意,这里需要tomcat开启了所有IP地址的web请求,

URL=这里填写首页的index地址

URL_STATUS=`curl -o /dev/null -s -w %{http_code} $URL`


if [ $URL_STATUS != 200 ];then

killall tomcat #这里直接查到PID杀掉也可以,方法自由

/opt/tomcat/bin/start.sh #这里是启动tomcat,当然,有其他方法也可以

sleep 3

if [ `curl -o /dev/null -s -w %{http_code} $URL` != 200 ];then

killall keepalived

fi

fi



安装及配置keepalived


安装文件2个,分别是依赖库libnet-1.1.4.tar.gz和自身程序keepalived-1.1.19.tar.gz

首先安装依赖库

tar -zxvf libnet-1.1.4.tar.gz

进入libnet目录

cd libnet-1.1.4

编译

./configure

编译完成后

make && make install



安装keepalived

tar -zxvf keepalived-1.1.19.tar.gz

进入目录

cd keepalived-1.1.19

编译

./configure

完成后安装

make && make install


拷贝配置文件

mkdir /etc/keepalived

cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived

cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig

cp /usr/loc al/etc/rc.d/init.d/keepalived /etc/init.d #这里有个问题,如果是在suse的系统上,会出现

service的时候找不到一个系统内置脚本,这里暂

时不执行


修改主机配置文件

vim /etc/keepalived/keepalived.conf

vrrp_script chk_mysql_port { 
                script "/opt/mysql_chk.sh"         ###
监控脚本 
                interval 2                             ###
监控时间 
                weight 2                                ###
权重

vrrp_script chk_web_port { 
                script "/opt/
url_chk.sh"         ###
监控脚本 
                interval 2                             ###
监控时间 
                weight 2                                ###
权重

vrrp_instance VI_1 { 
        state MASTER                            ###
设置为 主 
        interface eth0                             ###
监控网卡,这里一般考虑为心跳网卡    
        virtual_router_id 51                    ###
路由ID,实验证明2个可以不一样,否则会出现多IP

无法拉起
        priority 101                                 ###
权重值 MASTRE 一定要高于 BAUCKUP 
        authentication { 
                     auth_type PASS             ###
加密 
                     auth_pass eric                ###
加密的密码,两台服务器一定要一样,不然会出错 
        
        track_script { 
                chk_http_port

chk_web_port                     ### 执行监控的服务 
        
        virtual_ipaddress { 
             192.168.0.225/24

             192.168.6.225/24                            ###    VIP 地址 可以启用多个,注意标注子网掩码
        

 

从机的配置基本一致,需要更改的有优先级和服务器类型:


vrrp_script chk_mysql_port { 
                script "/opt/mysql_chk.sh"         ###
监控脚本 
                interval 2                             ###
监控时间 
                weight 2                                ###
权重

vrrp_script chk_web_port { 
                script "/opt/
url_chk.sh"         ###
监控脚本 
                interval 2                             ###
监控时间 
                weight 2                                ###
权重

vrrp_instance VI_1 { 
        state BACKUP                            ###
设置为 从 
        interface eth0                             ###
监控网卡,这里一般考虑为心跳网卡    
        virtual_router_id 52                    ###
路由ID,实验证明2个可以不一样,否则会出现多IP无法拉起

        priority 100                                 ### 权重值 MASTRE 一定要高于 BAUCKUP 
        authentication { 
                     auth_type PASS             ###
加密 
                     auth_pass eric                ###
加密的密码,两台服务器一定要一样,不然会出错 
        
        track_script { 
                chk_http_port

                chk_web_port                     ### 执行监控的服务 

        
        virtual_ipaddress { 
             192.168.0.225/24

             192.168.6.225/24                            ###    VIP 地址 可以启用多个,注意标注子网掩码
        


配置完成后直接执行keepalived就可以,当然,注册成服务更好


输入ip addr进行检查


当发现启用了虚拟IP后,配置完成

服务器的网卡都不设置网关,只在本子网内广播,在两个掩码位位24的子网下测试通过,可以通过tcpdump -i 网卡 -vvn arp的方式发现到虚IP所获得的广播。

由于没有得到业务的双机关系,目前只测试了mysqlweb还有链路状态的虚IP的漂移,全部测试通过,包括业务宕机后的切换。

猜你喜欢

转载自blog.csdn.net/weixin_42558057/article/details/82752933
今日推荐