千家信息网

keepalive+LVS

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,面试必考keepalived的功能,脚本也能实现keepalive,主要是有VRRP基于IP(第3层网络层),port(第4层传输层),应用层(第7层),保证服务正常运行master会定时给bakcu
千家信息网最后更新 2026年11月03日keepalive+LVS

面试必考

keepalived的功能,脚本也能实现

keepalive,主要是有VRRP

基于IP(第3层网络层),port(第4层传输层),应用层(第7层),保证服务正常运行

master会定时给bakcup发广播包,不发了backup就认为master挂了,重新选举,这个只能检查本机,重启本机,要配合LVS才能均衡,

直接yum install -y keepalived ipvsadm

或者源码安装

yum install kernel kernel-devel popt-devel openssl-devel gcc gcc-c++ -y &&

wget http://www.keepalived.org/software/keepalived-1.2.1.tar.gz &&

tar -zxf keepalived-1.2.1.tar.gz && cd keepalived-1.2.1;


./configure --with-kernel-dir=/usr/src/kernels/2.6.32-696.1.1.el6.x86_64/

mkdir /etc/keepalived

\cp /usr/local/sbin/keepalived /usr/sbin/keepalived
\cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/keepalived
\cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/keepalived
\cp -r /usr/local/etc/keepalived /etc/keepalived


cd /etc/keepalived

改conf文件如下,配置文件分三部分

第一部分全局配置,主要是改邮箱和路由ID,两个机器要一样

第二部分是配置虚拟IP,

第三部分写检查本机哪些服务

! Configuration File for keepalived #配置全局变量,全局主要是改邮件,发给谁、从哪里发

global_defs {

notification_email {

wgkgood@139.com #配置接收报警邮件

}

notification_email_from wgkgood@139.com #配置谁发邮件

smtp_server 127.0.0.1

smtp_connect_timeout 30

router_id LVS_DEVEL #路由id

}

# VIP1 VRRP协议 Config这一段的配置就是生成虚拟路由器

vrrp_instance VI_1 {

state BACKUP #master和backup,比优先级更优先

interface eth0 #发广播包是用哪个网卡发

lvs_sync_daemon_inteface eth0

virtual_router_id 151 #两台的路由id是一样的

priority 100 #优先级

advert_int 5

nopreempt #不抢占,就选优先级高也不抢占,这条加或不加

authentication {

auth_type PASS

auth_pass 2222

}

virtual_ipaddress { ##虚拟ip地址,特别重要,可以回车配多个

192.168.1.204

}

notify_master #当是matser执行这个脚本

notify_backup

}

##这里写检查本机什么服务,只能检查本机

virtual_server 192.168.1.204 3306 {

delay_loop 6

lb_algo wrr

lb_kind DR

persistence_timeout 60

protocol TCP

real_server 192.168.1.104 3306 {

weight 100

notify_down /data/sh/mysql.sh #当down了就执行这个脚本

notify_up也可以


TCP_CHECK {

connect_timeout 10 #连接超时时间

nb_get_retry 3 #重连次数

delay_before_retry 3 #重连间隔时间

connect_port 80 #健康检查的端口的端口

}

}

}


然后重启/etc.init.d/keepalived restart

tail -fn 100 /var/log/message

如果没有IPVS这个模块,modprobe ip_vs加载这个模块

通过ip addr list 可以看到虚拟IP配在了eth0上

TCP_CHECK {

connect_timeout 10 #连接超时时间

nb_get_retry 3 #重连次数

delay_before_retry 3 #重连间隔时间

connect_port 80 #健康检查的端口的端口

}

1、上面是基于端口。基于2、应用:

注意:使用了脚本监控Nginx或者MYSQL,不需要虚拟服务器设置块,也就是端口检查块。

vrrp_script chk_nginx {

script "/data/script/nginx.sh" #监控服务脚本;

interval 2 #检测时间间隔(执行脚步间隔)

weight 2

}


#实例1

vrrp_instance VI_1 {

state MASTER #master和backup,比优先级更优先

interface eth0 #发广播包是用哪个网卡发

lvs_sync_daemon_inteface eth0

virtual_router_id 151 #两台的路由id是一样的

priority 100 #优先级

advert_int 5

nopreempt #不抢占,就选优先级高也不抢占,这条加或不加

authentication {

auth_type PASS

auth_pass 2222

}

#实例2

vrrp_instance VI_2 {

state BACKUP #master和backup,比优先级更优先

interface eth0 #发广播包是用哪个网卡发

lvs_sync_daemon_inteface eth0

virtual_router_id 152 #两台的路由id是一样的

priority 100 #优先级

advert_int 5

nopreempt #不抢占,就选优先级高也不抢占,这条加或不加

authentication {

auth_type PASS

auth_pass 2222

}

track_script { #以脚本为监控chk_nginx;

chk_nginx

}

virtual_ipaddress { #设置vip

192.168.111.188

}

}



#其中/data/script/nginx.sh里的内容:

#!/bin/bash

NUM=`ps -C nginx --no-header |wc -l`

if [ $NUM -eq 0 ];then

/etc/init.d/keepalived stop

sleep 30

/usr/local/nginx/sbin/nginx

/etc/init.d/keepalived start

fi

###

3、基于URL

把TCP_CHECK那部分改成

HTTP_GET{

url{ #检查url,可以指定多个

path /

digest ATM #检查后的摘要信息

status_code 200 #检查的返回状态码,

}


从上

把state改成backup,priority改成90,检查的服务器改成本机


然后就可以用LAP连虚拟服务器的mysql了


keepalived的核心:

当端口停了,执行脚本,down.sh

然后VIP才会切到从上

脚本内容:

/etc/init,d/keepalived stop

sleep 5

/etc/init,d/keepalived start

监控的服务 restart

从上也要有这个脚本

这个脚本要给o+x权限

互为主主

两个实例两个虚拟服务器,各一个VIP,互为主备,路由id不能一样

Heartbeat

两台机器必须要用网线连起来

LVS

基于IP实现负载均衡是目前负载调度器中效率最高的

有NAT,TUN,DR模式

有算法:RR(round-robin)、LC(least_connection)、W(weight)RR、WLC模式等(RR为轮询模式,LC为最少连接模式)

NAT方式:VIP所在主机可以为公网IP,进出都要做个地址转换,效率比较低。用户请求LVS到达director(主管),director将请求的报文的目标地址和端口改成后端的realserver地址和端口,请求到达realserver,realserver将数据返给director,director再把数据返给用户(两次请求都要经过director),访问量大的话director会成为瓶颈。后端不能超过20台。

DR原理(将VIP配在后端realserver上):IP为内网,用户请求LVS到达director,director将请求目标的MAC地址改成realserver的MAC地址,目标IP还是VIP,源IP还是用户IP,然后director将报文发送给realserver,realserver发现目标IP和MAC都是自己。如果用户跟realserver不在一个网段,则通过网关返回给用户,如果在同一网段,将请求直接返给用户。 效率最高,互联网企业。这个要求LVS和后端服务器在一个网络里,不然没法实现VIP配在后端realserver上。

TUN原理:跟DR类似,也是改变封装MAC地址,多了一层隧道加密,比DR效率略低,比NAT高。


DR模式,后端带几百台nginx

cd /usr/src/

wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz

版本不同需要的这个软件版本可能也不同

yum install kernel kernel-devel gcc gcc-c++ -y

ln -s /usr/src/kernels/2.6* /usr/src/linux

tar xzvf ipvsadm-1.24.tar.gz &&cd ipvsadm-1.24 && make && make install

ipvsadm看安装成功没

参数说明:

-A 增加一台虚拟服务器地址。-D删除

-t 虚拟服务器提供的是tcp服务。

-s 使用的调度算法。

-a 在虚拟服务器中增加一台后端真实服务器。

-r 指定真实服务器地址。

-m 设置当前转发方式为NAT模式;-g为直接路由模式;-i 模式为隧道模式。

-w 后端真实服务器的权重。

LVS安装完毕之后,需要进行配置,配置的步骤有两步,第一步为定义端口服务,第二步为添加realserver后端服务。

ipvsadm -A -t 192.168.1.200:80 -s rr #添加VIP

ipvsadm -a -t 192.168.1.200:80 -r 192.168.1.103 -g -w 2


在后端realserver上,在回环地址上配上VIP

VIP=192.168.1.201

ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP

/sbin/route add -host $VIP dev lo:0

这样绑重启了就失效了

ipvsadm-save >/tmp/lvs.txt保存LVS配置

ipvsadm-restore

route -n

看网关

然后抑制ARP,不抑制的话所有赔了VIP的都可以响应了

客户端抑制ARP脚本,企业里客户端可能不止一个VIP,就把lo:0换成1 2 3 4

vim auto_realserver.sh

#!/bin/sh

#LVS Client Server

VIP=192.168.2.200

case $1 in

start)

ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP

/sbin/route add -host $VIP dev lo:0

echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore

echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce

echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore

echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce

sysctl -p >/dev/null 2>&1

echo "RealServer Start OK"

exit 0

;;

stop)

ifconfig lo:0 down

route del $VIP >/dev/null 2>&1

echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore

echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce

echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore

echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce

echo "RealServer Stoped OK"

exit 1

;;

*)

echo "Usage: $0 {start|stop}"

;;

esac

###

压测工具http-tools

ab -c 5000 -n 10000 http://192.168.1.200/

watch ipvsadm -L -n 可以实时看压测

keepalived+LVS或者脚本检查+LVS

服务端配置keepalived即可,两个LVS服务器。realserver客户端执行脚本
安装keepalived

写入配置文件

! Configuration File for keepalived

global_defs {

notification_email {

wgkgood@163.com

}

notification_email_from wgkgood@163.com

smtp_server 127.0.0.1

smtp_connect_timeout 30

router_id LVS_DEVEL

}

# VIP1

vrrp_instance VI_1 {

state MASTER

interface eth0

lvs_sync_daemon_inteface eth0

virtual_router_id 51

priority 100

advert_int 5

nopreempt

authentication {

auth_type PASS

auth_pass 1111

}

virtual_ipaddress {

192.168.1.200

}

}

virtual_server 192.168.1.200 80 {

delay_loop 6

lb_algo wrr

lb_kind DR #这里配转发方式

# persistence_timeout 60 #这里配置会话保持时间

protocol TCP

real_server 192.168.1.102 80 {

weight 100

TCP_CHECK {

connect_timeout 10

nb_get_retry 3

delay_before_retry 3

connect_port 80

}

}

real_server 192.168.1.103 80 {

weight 100

TCP_CHECK {

connect_timeout 10

nb_get_retry 3

delay_before_retry 3

connect_port 80

}

}

}

################

realserver端

tcpdump -nn port 80 nn是显示网络地址

tcpdump -nn port 22 and host 192.168.0.116看本机有哪些连22端口的

LVS排错

ping网站域名,看能否解析到IP

登录LVS服务器,ipvsadm -Ln查看信息,tail -fn /var/log/messages看报错

看zabbix监控服务器有没有报警

看keepalived.conf配置文件有没有错误

看客户端的auto--realserver.sh脚本是否启动

看realserver有没有挂(nginx)


如果后端nginx能接收到LVS的请求,但是不返回,说明nginx端VIP没有起来

LVS、haproxy与nginx均衡区别

LVS是4层网络层,haproxy是又有7层又有4层,nginx是7层应用层

LVS优点

  1. LVS抗负载能力强、是工作在网络4层之上仅作分发之用,没有流量的产生,这个特点也决定了它在负载均衡软件里的性能最强的,也保证了均衡器I/O的性能不会受到大流量的影响

  2. LVS是专门的负载均衡软件,对任何应用都可以做负载均衡

  3. 工作稳定,因为其本身抗负载能力很强,自身有完整的双机热备方案,目前用的比较多的是lvs+keepalived,比较大型的用的多的是lvs+heartbeat

nginx的优点:

1:Nginx的高并发,同时能承载上万个并发连接;

2:nginx有充足的第三方功能模块的支持,主要通过upstream模块进行负载均衡;

3:nginx对网络的依赖较小,理论上只要Ping得通,网页访问正常,nginx就能连得通;

4:工作在网络的7层之上,可以针对http应用做一些分流的策略,它的正则规则比haproxy更为强大和灵活,这也是它目前广泛流行的主要原因之一,nginx单凭这点可利用的场合就远多于lvs了。

nginx的缺点:

1:将Nginx当做反向代理时,负载均衡功能不是很好,对后端服务器的健康检查功能较弱;

2:nginx仅能支持http、https和email协议,这样就在适用范围上面小些,这个是它的缺点;

3:nginx只支持通过端口来检测,不支持通过url来检测。



keepalived+mysql

msyql主down机了,可以手动换成从的IP,也可以自动切换,用keepalived,heartbeat


服务 服务器 配置 脚本 检查 端口 地址 均衡 优先级 模式 路由 用户 网络 本机 时间 应用 监控 两个 功能 客户 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网络科技 广州淘业互联网络科技 金融科技创新监管互联网金融 广州互联网科技公司 科技与互联网发展 互联网金融 金融科技 西安互联网科技 互联网科技排名 奇酷互联网络科技公司 互联网前沿科技 新华互联网科技校企合作 滨湖区互联网智能科技产品供应 安控科技rtu产品工业互联网 央行互联网金融科技公司 未来五年的互联网科技 深圳市罗太互联网科技有限公司 朱啸虎曾投资哪些互联网科技企业 广州千川互联网科技有限公司 艺电能源互联网科技有限公司招聘 同城互联网络科技 互联网科技工作委员会 北京路客互联网科技有限公司 紫鲸互联网科技 互联网公司会议桌创意科技软装饰 重庆互联网医院沙龙医盟信息科技 佛山市拉法互联网科技有限公司 互联网公司高科技产品 中国互联网有什么科技 梅州GM互联网络科技有限公司 互联网科技品牌
0