解决nginx负载均衡高可用keepalived只针对物理机的问题
在高可用keepalived软件,在默认的情况下仅仅在对方机器宕机或keepalived停掉的时候才会接管业务。
但是在实际工作过程中,例如在nginx负载均衡工作实例中,nginx服务已停止,而keepalived服务还在
工作的情况,这会导致用户访问VIP,而找不到对应的服务。
例如:
主机IP:10.0.0.5/24
备机IP:10.0.0.6/24
VIP:10.0.0.100/24
方法一:直接在主机上写守护脚本,来对nginx服务进行监控
1、脚本内容如下:
[root@lb01 scripts]# cat check_nginx.sh
#!/bin/bash #-------------CopyRight-------------
# Name:check nginx server
# Version Number:1.00
# Type:sh
# Language:bash shell
# Date:--
# Author:sandy
# QQ:
# Email:eeexu123@.com
# Blog:https://www.cnblogs.com/eeexu123/ while true
do
if [ `netstat -tulnp|grep nginx|wc -l` -ne ];then
/etc/init.d/keepalived stop
fi
sleep
done
2、然后,直接运行此脚本,每五秒进行一次检测nginx服务是否在线。
[root@lb01 scripts]# sh check_nginx.sh &
[]
[root@lb01 scripts]# ps -ef |grep check_nginx
root : pts/ :: sh check_nginx.sh
root : pts/ :: grep check_nginx
3、测试
1)查看主机VIP是否在线
[root@lb01 ~]# ifconfig
eth0 Link encap:Ethernet HWaddr :0C::2C::BB
inet addr:10.0.0.5 Bcast:10.0.0.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe2c:bb/ Scope:Link
UP BROADCAST RUNNING MULTICAST MTU: Metric:
RX packets: errors: dropped: overruns: frame:
TX packets: errors: dropped: overruns: carrier:
collisions: txqueuelen:
RX bytes: (32.2 MiB) TX bytes: (4.9 MiB) eth0: Link encap:Ethernet HWaddr :0C::2C::BB
inet addr:10.0.0.100 Bcast:0.0.0.0 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU: Metric: eth1 Link encap:Ethernet HWaddr :0C::2C::C5
inet addr:172.16.1.5 Bcast:172.16.1.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe2c:c5/ Scope:Link
UP BROADCAST RUNNING MULTICAST MTU: Metric:
RX packets: errors: dropped: overruns: frame:
TX packets: errors: dropped: overruns: carrier:
collisions: txqueuelen:
RX bytes: (790.8 KiB) TX bytes: (37.9 KiB) lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::/ Scope:Host
UP LOOPBACK RUNNING MTU: Metric:
RX packets: errors: dropped: overruns: frame:
TX packets: errors: dropped: overruns: carrier:
collisions: txqueuelen:
RX bytes: (0.0 b) TX bytes: (0.0 b)
2)停止nginx服务
[root@lb01 ~]# /application/nginx/sbin/nginx -s stop
[root@lb01 ~]# netstat -tulnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0.0.0.0: 0.0.0.0:* LISTEN /sshd
tcp 127.0.0.1: 0.0.0.0:* LISTEN /master
tcp ::: :::* LISTEN /sshd
tcp ::: :::* LISTEN /master
3)查看VIP是否漂移
主机IP:
1 [root@lb01 ~]# ifconfig
2 eth0 Link encap:Ethernet HWaddr 00:0C:29:2C:00:BB
3 inet addr:10.0.0.5 Bcast:10.0.0.255 Mask:255.255.255.0
4 inet6 addr: fe80::20c:29ff:fe2c:bb/64 Scope:Link
5 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
6 RX packets:41555 errors:0 dropped:0 overruns:0 frame:0
7 TX packets:26526 errors:0 dropped:0 overruns:0 carrier:0
8 collisions:0 txqueuelen:1000
9 RX bytes:33803135 (32.2 MiB) TX bytes:5182305 (4.9 MiB)
10
11 eth1 Link encap:Ethernet HWaddr 00:0C:29:2C:00:C5
12 inet addr:172.16.1.5 Bcast:172.16.1.255 Mask:255.255.255.0
13 inet6 addr: fe80::20c:29ff:fe2c:c5/64 Scope:Link
14 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
15 RX packets:8854 errors:0 dropped:0 overruns:0 frame:0
16 TX packets:311 errors:0 dropped:0 overruns:0 carrier:0
17 collisions:0 txqueuelen:1000
18 RX bytes:811478 (792.4 KiB) TX bytes:38876 (37.9 KiB)
19
20 lo Link encap:Local Loopback
21 inet addr:127.0.0.1 Mask:255.0.0.0
22 inet6 addr: ::1/128 Scope:Host
23 UP LOOPBACK RUNNING MTU:65536 Metric:1
24 RX packets:0 errors:0 dropped:0 overruns:0 frame:0
25 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
26 collisions:0 txqueuelen:0
27 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
备机IP
1 [root@lb02 ~]# ifconfig
2 eth0 Link encap:Ethernet HWaddr 00:0C:29:93:72:8D
3 inet addr:10.0.0.6 Bcast:10.0.0.255 Mask:255.255.255.0
4 inet6 addr: fe80::20c:29ff:fe93:728d/64 Scope:Link
5 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
6 RX packets:40535 errors:0 dropped:0 overruns:0 frame:0
7 TX packets:23552 errors:0 dropped:0 overruns:0 carrier:0
8 collisions:0 txqueuelen:1000
9 RX bytes:33425626 (31.8 MiB) TX bytes:4173830 (3.9 MiB)
10
11 eth0:1 Link encap:Ethernet HWaddr 00:0C:29:93:72:8D
12 inet addr:10.0.0.100 Bcast:0.0.0.0 Mask:255.255.255.0
13 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
14
15 eth1 Link encap:Ethernet HWaddr 00:0C:29:93:72:97
16 inet addr:172.16.1.6 Bcast:172.16.1.255 Mask:255.255.255.0
17 inet6 addr: fe80::20c:29ff:fe93:7297/64 Scope:Link
18 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
19 RX packets:8608 errors:0 dropped:0 overruns:0 frame:0
20 TX packets:56 errors:0 dropped:0 overruns:0 carrier:0
21 collisions:0 txqueuelen:1000
22 RX bytes:781127 (762.8 KiB) TX bytes:6646 (6.4 KiB)
23
24 lo Link encap:Local Loopback
25 inet addr:127.0.0.1 Mask:255.0.0.0
26 inet6 addr: ::1/128 Scope:Host
27 UP LOOPBACK RUNNING MTU:65536 Metric:1
28 RX packets:0 errors:0 dropped:0 overruns:0 frame:0
29 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
30 collisions:0 txqueuelen:0
31 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
由上述可知,VIP发生漂移。keepalived触发脚本执行成功。
方法二:可以使用keepalived的配置文件来触发已写好的脚本
1、脚本内容如下:
[root@lb01 scripts]# cat keep_nginx.sh
#!/bin/bash #-------------CopyRight-------------
# Name:check nginx server
# Version Number:1.00
# Type:sh
# Language:bash shell
# Date:--
# Author:sandy
# QQ:
# Email:eeexu123@.com
# Blog:https://www.cnblogs.com/eeexu123/ if [ `netstat -tulnp|grep nginx|wc -l` -ne ];then
/etc/init.d/keepalived stop
fi
2、将脚本加上可执行权限
[root@lb01 scripts]# chmod +x keep_nginx.sh
[root@lb01 scripts]# ll
总用量
-rw-r--r--. root root 7月 : check_nginx.sh
-rwxr-xr-x. root root 7月 : keep_nginx.sh
3、在主机的keepalived的配置文件上,做如下修改
/etc/keepalived/keepalived.conf配置文件如下:
绿色部分内容是新添加触发脚本
! Configuration File for keepalived
global_defs {
notification_email {
eeexu123@.com
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 127.0.0.1
smtp_connect_timeout
router_id lb01
}
vrrp_script chk_nginx_proxy {
script "/server/scripts/keep_nginx.sh"
interval
weight
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id
priority
advert_int
authentication {
auth_type PASS
auth_pass
}
virtual_ipaddress {
10.0.0.100/ dev eth0 label eth0:
}
32 track_script {
chk_nginx_proxy
}
}
4、说明:
vrrp_script chk_nginx_proxy { #定义vrrp脚本
script "/server/scripts/keep_nginx.sh" #执行keep_nginx.sh脚本,当nginx服务有问题时,就停止keepalived服务
interval 2 #间隔两秒检查一次
weight
}
track_script { #触发检查
chk_nginx_proxy
}
5、测试
1)查看主机中的VIP是否在线
[root@lb01 ~]# ifconfig
eth0 Link encap:Ethernet HWaddr :0C::2C::BB
inet addr:10.0.0.5 Bcast:10.0.0.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe2c:bb/ Scope:Link
UP BROADCAST RUNNING MULTICAST MTU: Metric:
RX packets: errors: dropped: overruns: frame:
TX packets: errors: dropped: overruns: carrier:
collisions: txqueuelen:
RX bytes: (32.2 MiB) TX bytes: (4.9 MiB) eth0: Link encap:Ethernet HWaddr :0C::2C::BB
inet addr:10.0.0.100 Bcast:0.0.0.0 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU: Metric: eth1 Link encap:Ethernet HWaddr :0C::2C::C5
inet addr:172.16.1.5 Bcast:172.16.1.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe2c:c5/ Scope:Link
UP BROADCAST RUNNING MULTICAST MTU: Metric:
RX packets: errors: dropped: overruns: frame:
TX packets: errors: dropped: overruns: carrier:
collisions: txqueuelen:
RX bytes: (790.8 KiB) TX bytes: (37.9 KiB) lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::/ Scope:Host
UP LOOPBACK RUNNING MTU: Metric:
RX packets: errors: dropped: overruns: frame:
TX packets: errors: dropped: overruns: carrier:
collisions: txqueuelen:
RX bytes: (0.0 b) TX bytes: (0.0 b)
2)停止nginx服务
[root@lb01 ~]# /application/nginx/sbin/nginx -s stop
[root@lb01 ~]# netstat -tulnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0.0.0.0: 0.0.0.0:* LISTEN /sshd
tcp 127.0.0.1: 0.0.0.0:* LISTEN /master
tcp ::: :::* LISTEN /sshd
tcp ::: :::* LISTEN /master
3)查看VIP是否漂移
主机IP:
[root@lb01 ~]# ifconfig
eth0 Link encap:Ethernet HWaddr :0C::2C::BB
inet addr:10.0.0.5 Bcast:10.0.0.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe2c:bb/ Scope:Link
UP BROADCAST RUNNING MULTICAST MTU: Metric:
RX packets: errors: dropped: overruns: frame:
TX packets: errors: dropped: overruns: carrier:
collisions: txqueuelen:
RX bytes: (32.2 MiB) TX bytes: (4.9 MiB) eth1 Link encap:Ethernet HWaddr :0C::2C::C5
inet addr:172.16.1.5 Bcast:172.16.1.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe2c:c5/ Scope:Link
UP BROADCAST RUNNING MULTICAST MTU: Metric:
RX packets: errors: dropped: overruns: frame:
TX packets: errors: dropped: overruns: carrier:
collisions: txqueuelen:
RX bytes: (792.4 KiB) TX bytes: (37.9 KiB) lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::/ Scope:Host
UP LOOPBACK RUNNING MTU: Metric:
RX packets: errors: dropped: overruns: frame:
TX packets: errors: dropped: overruns: carrier:
collisions: txqueuelen:
RX bytes: (0.0 b) TX bytes: (0.0 b)
备机IP
[root@lb02 ~]# ifconfig
eth0 Link encap:Ethernet HWaddr :0C::::8D
inet addr:10.0.0.6 Bcast:10.0.0.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe93:728d/ Scope:Link
UP BROADCAST RUNNING MULTICAST MTU: Metric:
RX packets: errors: dropped: overruns: frame:
TX packets: errors: dropped: overruns: carrier:
collisions: txqueuelen:
RX bytes: (31.8 MiB) TX bytes: (3.9 MiB) eth0: Link encap:Ethernet HWaddr :0C::::8D
inet addr:10.0.0.100 Bcast:0.0.0.0 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU: Metric: eth1 Link encap:Ethernet HWaddr :0C::::
inet addr:172.16.1.6 Bcast:172.16.1.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe93:/ Scope:Link
UP BROADCAST RUNNING MULTICAST MTU: Metric:
RX packets: errors: dropped: overruns: frame:
TX packets: errors: dropped: overruns: carrier:
collisions: txqueuelen:
RX bytes: (762.8 KiB) TX bytes: (6.4 KiB) lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::/ Scope:Host
UP LOOPBACK RUNNING MTU: Metric:
RX packets: errors: dropped: overruns: frame:
TX packets: errors: dropped: overruns: carrier:
collisions: txqueuelen:
RX bytes: (0.0 b) TX bytes: (0.0 b)
由上述可知,VIP发生漂移。keepalived触发脚本执行成功。
解决nginx负载均衡高可用keepalived只针对物理机的问题的更多相关文章
- JAVAEE——宜立方商城03:Nginx负载均衡高可用、Keepalived+Nginx实现主备
1 nginx负载均衡高可用 1.1 什么是负载均衡高可用 nginx作为负载均衡器,所有请求都到了nginx,可见nginx处于非常重点的位置,如果nginx服务器宕机后端web服务将无法提供服务, ...
- Nginx负载均衡高可用
1. Nginx负载均衡高可用 首先介绍一下Keepalived,它是一个高性能的服务器高可用或热备解决方案,Keepalived主要来防止服务器单点故障的发生问题,可以通过其与Nginx的配合实 ...
- Nginx负载均衡高可用---架构
1. Nginx负载均衡高可用 首先介绍一下Keepalived,它是一个高性能的服务器高可用或热备解决方案,Keepalived主要来防止服务器单点故障的发生问题,可以通过其与Nginx的配合实现w ...
- nginx负载均衡高可用部署和代理配置
nginx负载均衡高可用配置 服务器A:172.16.100.2 服务器B:172.16.100.3 首先先在两台服务器上分别安装好nginx和keepalived后,再进行下面的操作 配置keepa ...
- Keepalived实现Nginx负载均衡高可用
第一章:keepalived介绍 VRRP协议 目的就是为了解决静态路由单点故障问题的 第二章: keepalived工作原理 2.1 作为系统网络服务的高可用功能(failover) keepali ...
- Nginx+Keepalived负载均衡高可用
Nginx+Keepalived负载均衡高可用方案: Nginx 使用平台:unix.linux.windows. 功能: A.www web服务 http 80 b.负载均衡(方向代理proxy) ...
- Nginx+keepalived实现负载均衡高可用配置
1. 什么是负载均衡高可用 nginx作为负载均衡器,所有请求都到了nginx,可见nginx处于非常重点的位置,如果nginx服务器宕机后端web服务将无法提供服务,影响严重. 为了屏蔽负载均衡服务 ...
- Keepalived+Nginx实现负载均衡高可用
一.负载均衡高可用 Nginx作为负载均衡器,所有请求都到了Nginx,可见Nginx处于非常重点的位置,如果Nginx服务器宕机后端web服务将无法提供服务,影响严重. 为了避免负载均衡服务器的宕机 ...
- 23.Nginx+keepalived负载均衡高可用
Nginx+keepalived负载均衡高可用 结构图 环境: 主 服务器:192.168.239.10 备 服务器:192.168.239.20 Web 服务器1:192.168.239.40 We ...
随机推荐
- Mongoose学习(2)
1.Schema的扩展 UserSchema.methods.findUserName = function(cb){ return this.model('user').find({username ...
- css定位的元素内层不自动扩高解决
给最外层的CSS加上一行: 1 position: relative; /* 给最外层加上这行 */
- java JDBM2 的几个简单实例
JDBM2 提供了 HashMap 和 TreeMap 的磁盘存储功能,简单易用,用于持久化数据.特别适合用于嵌入到其他应用程序中. 磁盘数据库 HelloWorld.java import java ...
- redis 使用 get 命令读取 bitmap 类型的数据
在签到统计场景中,可以使用 bitmap 数据类型高效的存储签到数据,但 getbit 命令只能获取某一位值,就无法最优的满足部分业务场景了. 比如我们按年去存储一个用户的签到情况,365 天,只需要 ...
- nginx启动不了
nginx简介 Nginx是一个高性能的HTTP和反向代理服务器. 支持的操作系统众多,windows.linux. MacOS X: 可实现负载均衡: Rewrite功能强大: 电商架构大部分都采用 ...
- hdu1198 Farm Irrigation —— dfs or 并查集
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1198 dfs: #include<cstdio>//hdu1198 dfs #includ ...
- Codeforces Round #374 (Div. 2) B. Passwords —— 基础题
题目链接:http://codeforces.com/contest/721/problem/B B. Passwords time limit per test 2 seconds memory l ...
- RobotFramework教程使用笔记——Selenium2Library库
selenium之前已经学习介绍过了,它是一个支持多语言.多平台.多浏览器的web自动化测试框架,在robotframework中也可以导入selenium库来进行web自动化测试.它使用seleni ...
- Emscripten实现把C/C++文件转成wasm,wast(wasm的可读形式),llvm字节码(bc格式),ll格式(llvm字节码的可读形式)并执行wasm
<一>˙转换 Emscripten实现把C/C++文件转成wasm,wast(wasm的可读形式),llvm字节码(bc格式),ll格式(llvm字节码的可读形式)的步骤: 最新版本的Em ...
- SDK Manager中勾选项
运行SDK Manager 勾选对应版本的SDK,从这里基本可以知道一个Android版本对应着一个版本的API. 其中每个包都有这么几个文件: Documentation for Android S ...