linux运维、架构之路-LVS负载均衡
一、LVS介绍
1、介绍
LVS是Linux Virtual Server的简写,是linux虚拟的服务器集群系统,可以在unix/linux平台下实现负载均衡集群功能,由章文嵩博士组织成立,是国内出现最早的自由软件之一。
LVS项目介绍
http://www.linuxvirtualserver.org/zh/lvs1.html
LVS集群的体系结构
http://www.linuxvirtualserver.org/zh/lvs2.html
LVS集群中的IP负载均衡技术
http://www.linuxvirtualserver.org/zh/lvs3.html
LVS集群的负载调度
http://www.linuxvirtualserver.org/zh/lvs4.html
2、LVS特性
①真正实现负载调度的工具是IPVS,工作在linux内核层面。
②LVS自带的IPVS管理工具是ipvsadm。
③keepalived实现管理IPVS及对负载均衡器的高可用。
3、LVS——DR模式工作原理
4、LVS集群其它模式
①DR直接路由模式(重点掌握)
②NAT
③TUN隧道模式
④FULLNAT
5、LVS应用场景
日PV1000-2000W或者并发请求1W以下的都可以使用Nginx,超过的话使用LVS,大型门户网站,电商网站需要用到
二、手工配置LVS
1、环境
[root@lb01 ~]# cat /etc/redhat-release
CentOS Linux release 7.2. (Core)
[root@lb01 ~]# uname -r
3.10.-.el7.x86_64
[root@lb01 ~]# getenforce
Disabled
[root@lb01 ~]# systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
[root@lb01 ~]# hostname -I
10.0.0.5 172.16.1.5
2、安装ipvsadm管理工具
①检测是否安装
[root@lb01 ~]# lsmod |grep ip_vs
②安装ipvsadm
yum -y install ipvsadm
③检查并激活lvs
[root@lb01 ~]# ipvsadm
IP Virtual Server version 1.2. (size=)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
[root@lb01 ~]# lsmod |grep ip_vs
ip_vs
nf_conntrack ip_vs
libcrc32c xfs,ip_vs
3、配置LVS负载均衡(lb01操作)
ip addr add 10.0.0.3/24 dev eth0 #在eth0网卡绑定VIP地址
ipvsadm -C #清除当前所有LVS规则
ipvsadm --set 30 5 60 #设置tcp、tcpfin、udp链接超时时间
ipvsadm -A -t 10.0.0.3:80 -s wrr -p 20 #添加虚拟服务(-A)
ipvsadm -a -t 10.0.0.3:80 -r 10.0.0.7:80 -g -w 1 #将虚拟服务关联到真实服务上(-a)
ipvsadm -a -t 10.0.0.3:80 -r 10.0.0.8:80 -g -w 1 #将虚拟服务关联到真实服务上(-a)
ipvsadm -ln #查看配置结果
-C 清空整个表
-A 添加一个虚拟服务
-t 指定一个地址,一定是ip+端口
-s 调度算法
-a 添加一个real server
-m NAT模式
-g DR模式,默认
-d 删除一个real server
-p 会话保持功能
-w 权重
-i tunnel模式
4、web服务器操作(web01、web02)
①在lo网卡绑定VIP地址
ip addr add 10.0.0.3/ dev lo
②修改内核参数抑制ARP响应
cat >>/etc/sysctl.conf<<EOF
net.ipv4.conf.all.arp_ignore =
net.ipv4.conf.all.arp_announce =
net.ipv4.conf.lo.arp_ignore =
net.ipv4.conf.lo.arp_announce =
EOF
sysctl -p
5、在lb02上面测试
[root@lb02 ~]# curl 10.0.0.3
web02
[root@lb02 ~]# curl 10.0.0.3
web02
[root@lb02 ~]# curl 10.0.0.3
web02
[root@lb02 ~]# curl 10.0.0.3
web02
[root@lb02 ~]# curl 10.0.0.3
web02
[root@lb02 ~]# curl 10.0.0.3
web01
[root@lb02 ~]# curl 10.0.0.3
web01
三、Keepalived配合LVS实现高可用负载均衡
1、安装Keepalived
yum -y install keepalived
2、配置keepalived管理LVS
global_defs { router_id LVS_01 } vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 150 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.0.0.3/24 } } virtual_server 10.0.0.3 80 { delay_loop 6 lb_algo wrr lb_kind DR nat_mask 255.255.255.0 persistence_timeout 50 protocol TCP real_server 10.0.0.7 80 { weight 1 TCP_CHECK { connect_timeout 8 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } real_server 10.0.0.8 80 { weight 1 TCP_CHECK { connect_timeout 8 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } } |
global_defs { router_id LVS_02 } vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.0.0.3/24 } } virtual_server 10.0.0.3 80 { delay_loop 6 lb_algo wrr lb_kind DR nat_mask 255.255.255.0 persistence_timeout 50 protocol TCP real_server 10.0.0.7 80 { weight 1 TCP_CHECK { connect_timeout 8 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } real_server 10.0.0.8 80 { weight 1 TCP_CHECK { connect_timeout 8 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } } |
3、测试keepalived高可用,故障转移
①停掉lb01的keepalvied
[root@lb01 ~]# systemctl stop keepalived.service
[root@lb01 ~]# curl 10.0.0.3
web01
②停掉lb02的keepalvied
[root@lb02 ~]# systemctl stop keepalived.service
[root@lb02 ~]# curl 10.0.0.3
web01
4、测试Keepalived对后端节点的健康检查功能
①web后端正常时状态
[root@lb01 ~]# ipvsadm -ln
IP Virtual Server version 1.2. (size=)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.0.0.3: wrr persistent
-> 10.0.0.7: Route
-> 10.0.0.8: Route
②web后端节点宕机或者服务关闭时(此处关闭了web01)
[root@lb01 ~]# ipvsadm -ln
IP Virtual Server version 1.2. (size=)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.0.0.3: wrr persistent
-> 10.0.0.7: Route
5、Keepalived+LVS多实例配置
①lb01
global_defs {
router_id LVS_01
} 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.3/
}
} vrrp_instance VI_2 {
state BACKUP
interface eth0
virtual_router_id
priority
advert_int
authentication {
auth_type PASS
auth_pass
}
virtual_ipaddress {
10.0.0.4/
}
} virtual_server 10.0.0.3 {
delay_loop
lb_algo wrr
lb_kind DR
nat_mask 255.255.255.0
persistence_timeout
protocol TCP real_server 10.0.0.7 {
weight
TCP_CHECK {
connect_timeout
nb_get_retry
delay_before_retry
connect_port
}
} real_server 10.0.0.8 {
weight
TCP_CHECK {
connect_timeout
nb_get_retry
delay_before_retry
connect_port
}
}
} virtual_server 10.0.0.4 {
delay_loop
lb_algo wrr
lb_kind DR
nat_mask 255.255.255.0
persistence_timeout
protocol TCP real_server 10.0.0.7 {
weight
TCP_CHECK {
connect_timeout
nb_get_retry
delay_before_retry
connect_port
}
} real_server 10.0.0.8 {
weight
TCP_CHECK {
connect_timeout
nb_get_retry
delay_before_retry
connect_port
}
}
}
②lb02
global_defs {
router_id LVS_02
} vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id
priority
advert_int
authentication {
auth_type PASS
auth_pass
}
virtual_ipaddress {
10.0.0.3/
}
} vrrp_instance VI_2 {
state MASTER
interface eth0
virtual_router_id
priority
advert_int
authentication {
auth_type PASS
auth_pass
}
virtual_ipaddress {
10.0.0.4/
}
} virtual_server 10.0.0.3 {
delay_loop
lb_algo wrr
lb_kind DR
nat_mask 255.255.255.0
persistence_timeout
protocol TCP real_server 10.0.0.7 {
weight
TCP_CHECK {
connect_timeout
nb_get_retry
delay_before_retry
connect_port
}
} real_server 10.0.0.8 {
weight
TCP_CHECK {
connect_timeout
nb_get_retry
delay_before_retry
connect_port
}
}
} virtual_server 10.0.0.4 {
delay_loop
lb_algo wrr
lb_kind DR
nat_mask 255.255.255.0
persistence_timeout
protocol TCP real_server 10.0.0.7 {
weight
TCP_CHECK {
connect_timeout
nb_get_retry
delay_before_retry
connect_port
}
} real_server 10.0.0.8 {
weight
TCP_CHECK {
connect_timeout
nb_get_retry
delay_before_retry
connect_port
}
}
}
最新文章
- java 使用正则表达式过滤HTML中标签
- C# lambda
- Java 日期加减计算.
- :app:transformResourcesWithMergeJavaResForDebug FAILED
- const修饰的双重指针赋值解惑
- jquery 移除数组重复的元素----$.unique()
- FastDFS 简介
- Python3NumPy——数组(2)之数学空间与NumPy空间
- easyui datagrid使用按钮
- Tomcat在Window控制台下启动时乱码的两种解决办法
- Windows下安装Spark环境
- 开机进入boot menu和application menu,无法开机
- 如何使用Ubuntu中的avdManager命令行为“System-Image;Androd-27;GoogleAPI;x86”创建一个AVD?
- 双语:Interprocess Communication 进程通信
- 2017 年 机器学习之数据挖据、数据分析,可视化,ML,DL,NLP等知识记录和总结
- Linux安装初始化
- C++ 调用C++写的函数库的2种方法之一(显式调用)
- SpringBoot1.5.2安装配置--1.5.2版本问题
- Linux三种网络
- 转:Java NIO(3)