tomcat 的高可用的思路,是在 tomcat 集群前面加一层负载服务 nginx。如下图
这种做法,解决了 tomcat 的高可用问题。但是引入了前面的负载机器的高可用问题(Nginx
如果挂了,玩完)
如果 nginx 沿用此思路,总会有一个最前端是单机的,存在宕机玩完的风险(鸡生蛋蛋生鸡
无穷尽)
lvs 思想解决高可用问题
如上图,由服务器集群虚拟出来一台 虚拟网关 vip(不真实存在,自
然不存在宕机问题),
此 vip 由两台机器共同协商生成。当有一台机器宕机时,另一台机器
一样能维持 vip。这保证了,只要两台机器不同时宕机,vip 就存在
keepalived 配置 LVS 过程
前提
1.关闭 selinux,打开/etc/sysconfig/selinux 设置其中值 SELINUX=disabled
vim /etc/sysconfig/selinux
SELINUX=disabled
 
2.安装必须的依赖包
yum -y install libnl libnl-devel libnfnetlink-devel
keepalived 安装
下载源码包--不能使用 yum 方式安装(有 bug)
--wget
https://www.keepalived.org/software/keepalived-1.3.4.tar.gz
配置(指定安装目录和配置目录,否则文件太散乱) --./configure --prefix=/usr/local/keepalived
--sysconf=/etc
make && make install
./configure --prefix=/usr/local/test可以把所有资源文件放在/usr/local/test的路径中,不会杂乱。
上面分开3句进行执行

wget https://www.keepalived.org/software/keepalived-1.3.4.tar.gz 

tar zvxf keepalived-1.3.4.tar.gz 

cd keepalived-1.3.4

./configure --prefix=/usr/local/keepalived --sysconf=/etc

make && make install



/etc/目录下自动生成keepalived目录

 

/usr/local/目录下自动生成keepalived目录

 

keepalived 主机配置
打开/etc/keepalived/keepalived.conf,只需要配置如下一段。(其它是多余配置,删除)


! Configuration File for keepalived

global_defs {
   router_id LVS_1	##唯一标识
}
vrrp_script chk_http_port {
    script "/etc/nginx/chk_nginx.sh" #心跳执行的脚本,目录不在就创建
    interval 2                       #(检测脚本执行的间隔,单位是秒)
    weight 2
}

vrrp_instance VI_1 {
    state one 
    interface ens33   #系统网卡
    virtual_router_id 51 #主备两机器一致
    priority 100   #值大的机器,胜出 ##唯一标识
    advert_int 1	##每1s检测一次心跳
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    track_script {
        chk_http_port            #(调用检测脚本)
    }
    virtual_ipaddress { #可虚拟多个ip
        192.168.244.200
    }
}

chk_nginx.sh

chmod +x chk_nginx.sh  给上执行权限,才能被.conf程序调用

chmod -R 777 chk_nginx.sh  注意要有执行权限
 

#!/bin/bash
A=`ps -C nginx --no-header |wc -l`      ##统计nginx进程数,若为0,表明nginx被杀
if [ $A -eq 0 ];then
        /usr/local/openresty/nginx/sbin/nginx                #重启nginx
        #nginx重启失败,则停掉keepalived服务,进行VIP转移
        if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
              killall keepalived    #杀掉,vip就漫游到另一台机器
        fi
fi
 

效果如下:成为不死鸟了



启动 keepalived,查看机器 ip 地址,可发现多出一个 42.200 的 ip
/usr/local/keepalived/sbin/keepalived 
ip addr
./keepalived  & 启动或者退出

 

 

此时,使用原 ip 地址 42.101 能打开的页面,使用 42.200 也能打开
keepalived 从机配置 对比如下:
 priority 100 主机要大于从机

! Configuration File for keepalived
global_defs {
   router_id LVS_1              ####keepalived的唯一标识
}
vrrp_script chk_http_port {
    script "/etc/nginx/chk_nginx.sh" #心跳执行的脚本
    interval 2                          #(检测脚本执行的间隔,单位是秒)
    weight 2
}

vrrp_instance VI_1 {
    state one
    interface ens33 ##系统网上名,可以使用ip addr命令查看
    virtual_router_id 51        ##组名,参与此虚拟ip的机器配置一样的值
    priority 100        ##优先级,数值大的优先级高,组内最高的胜出
    advert_int 1        ##心跳检测1s一次
    authentication {    ##心跳检测1s一次
        auth_type PASS
        auth_pass 1111
    }
    track_script {
        chk_http_port   #(调用检测脚本)
    }
    virtual_ipaddress {
        192.168.42.200  ##虚拟的ip
    }
}
 


keepalived 校验 LVS 效果
1、此时,杀掉主机上的 keepalived,42.200 的 ip 将从主机上消失。而出现的从机的 ip 中
2、再次启动主机的 keepalived,42.200 的 ip 将被主机重新夺回
3、此效果是单主单备方式。备机资源有一定的浪费。可以重复前面的动作,虚拟出第二个
ip,将主从机优先级颠倒,从而利用起备机服务
关掉主节点的 101的keepalived时,漫游到102的keepalived
2、再次启动主机的 keepalived,42.200 的 ip 将被主机重新夺回,又回到101


keepalived 校验 LVS 效果
1、此时,杀掉主机上的 keepalived,42.200 的 ip 将从主机上消失。而出现的从机的 ip 中
2、再次启动主机的 keepalived,42.200 的 ip 将被主机重新夺回
3、此效果是单主单备方式。备机资源有一定的浪费。可以重复前面的动作,虚拟出第二个
ip,将主从机优先级颠倒,从而利用起备机服务
虚拟出第二个 ip 实现互为主从方式:
配置一:

! Configuration File for keepalived
global_defs {
   router_id LVS_1              ####keepalived的唯一标识
}
vrrp_script chk_http_port {
    script "/etc/nginx/chk_nginx.sh" #心跳执行的脚本
    interval 2                          #(检测脚本执行的间隔,单位是秒)
    weight 2
}

vrrp_instance VI_1 {
    state one
    interface ens33 ##系统网上名,可以使用ip addr命令查看
    virtual_router_id 51        ##组名,参与此虚拟ip的机器配置一样的值
    priority 100        ##优先级,数值大的优先级高,组内最高的胜出
    advert_int 1        ##心跳检测1s一次
    authentication {    ##心跳检测1s一次
        auth_type PASS
        auth_pass 1111
    }
    track_script {
        chk_http_port   #(调用检测脚本)
    }
    virtual_ipaddress {
        192.168.42.200  ##虚拟的ip
    } 
}         
vrrp_instance VI_2 {
    state MASTER
    interface ens33 ##系统网上名,可以使用ip addr命令查看
    virtual_router_id 52        ##组名,参与此虚拟ip的机器配置一样的值
    priority 200        ##优先级,数值大的优先级高,组内最高的胜出
    advert_int 1        ##心跳检测1s一次
    authentication {    ##心跳检测1s一次
        auth_type PASS
        auth_pass 1111
    }
    track_script {
        chk_http_port   #(调用检测脚本)
    }
    virtual_ipaddress {
        192.168.42.203  ##虚拟的ip
    }
}
 


配置二

! Configuration File for keepalived

global_defs {
  router_id LVS_DEVEL
}
vrrp_script chk_http_port {
    script "/etc/nginx/chk_nginx.sh" #心跳执行的脚本
    interval 2                          #(检测脚本执行的间隔,单位是秒)
    weight 2
}

vrrp_instance VI_1 {
    state MASTER
    interface ens33 ##系统网上名,可以使用ip addr命令查看
    virtual_router_id 51        ##组名,参与此虚拟ip的机器配置一样的值
    priority 200        ##优先级,数值大的优先级高,组内最高的胜出
    advert_int 1        ##心跳检测1s一次
    authentication {    ##心跳检测1s一次
        auth_type PASS
        auth_pass 1111
    }
    track_script {
        chk_http_port   #(调用检测脚本)
    }
    virtual_ipaddress {
        192.168.42.200  ##虚拟的ip
    } 
}         
         
vrrp_instance VI_2 {
    state slave
    interface ens33 ##系统网上名,可以使用ip addr命令查看
    virtual_router_id 52        ##组名,参与此虚拟ip的机器配置一样的值
    priority 200        ##优先级,数值大的优先级高,组内最高的胜出
    advert_int 1        ##心跳检测1s一次
    authentication {    ##心跳检测1s一次
        auth_type PASS
        auth_pass 1111
    }
    track_script {
        chk_http_port   #(调用检测脚本)
    }
    virtual_ipaddress {
        192.168.42.203  ##虚拟的ip
    }
}    
 


效果如下:
kill掉一台时的,漫游过去另一台了
结果如下,就不会浪费资源了

更多推荐