一、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
}
}
}

最新文章

  1. java 使用正则表达式过滤HTML中标签
  2. C# lambda
  3. Java 日期加减计算.
  4. :app:transformResourcesWithMergeJavaResForDebug FAILED
  5. const修饰的双重指针赋值解惑
  6. jquery 移除数组重复的元素----$.unique()
  7. FastDFS 简介
  8. Python3NumPy——数组(2)之数学空间与NumPy空间
  9. easyui datagrid使用按钮
  10. Tomcat在Window控制台下启动时乱码的两种解决办法
  11. Windows下安装Spark环境
  12. 开机进入boot menu和application menu,无法开机
  13. 如何使用Ubuntu中的avdManager命令行为“System-Image;Androd-27;GoogleAPI;x86”创建一个AVD?
  14. 双语:Interprocess Communication 进程通信
  15. 2017 年 机器学习之数据挖据、数据分析,可视化,ML,DL,NLP等知识记录和总结
  16. Linux安装初始化
  17. C++ 调用C++写的函数库的2种方法之一(显式调用)
  18. SpringBoot1.5.2安装配置--1.5.2版本问题
  19. Linux三种网络
  20. 转:Java NIO(3)

热门文章

  1. Ajax请求Json数据,报500错误,后台没有错误日志。
  2. struts2 2.5.16 通配符方式调用action中的方法报404
  3. JavaScript —— 常见用途
  4. Jmeter---后置处理器 BeanShell PostProcessor 获取JDBC结果(多行)并以列表传入另一个请求
  5. Jmeter JDBC请求---把数据库结果参数化传递到其他请求
  6. Canvas入门06-线段与像素边界
  7. Mailx安装与使用
  8. mybatis源码级别深度剖析
  9. SQL如何通过当前日期获取上周一日期【转】
  10. linux下的变量规则