1 lvs
LVS(Linux Virtual Server)即Linux虚拟服务器,是一个基于Linux操作系统的虚拟服务器技术,用于实现负载均衡和高可用性。章文嵩,是中国国内最早出现的自由软件项目之一。
2 lvs发展史
在 Linux 2.2 内核时期,LVS 最初是以内核补丁的形式存在的,这意味着它不是直接集成到 Linux 内核中的,而是作为附加的补丁集来实现功能。
集成到 Linux 内核2.4.23 版本:
从 Linux 2.4.23 版本开始,LVS 的核心组件 IPVS (IP Virtual Server) 被正式合并到 Linux 内核中,成为官方内核的一部分。这意味着用户不再需要单独下载和安装补丁集来使用 LVS 功能
3 lvs组由ipvs和ipvsadm组成
LVS 是一个负载均衡框架,它定义了如何使用负载均衡器来分发网络请求的基本规则和架构
ipvs 是 LVS 中实现负载均衡的核心模块,它负责具体的负载均衡任务(虚拟出IP)
ipvsadm:是一个Linux内核中的IP负载均衡工具
4 LVS三种主要的工作模式
NAT TUN(隧道) DR
NAT:上行下行都走lvs,lvs压力爆大 ,但是安全,
TUN:上行走lvs,下行直接去客户端,lvs压力不大,但是内服务器ip直接暴漏给外网,非常不安全
DR:上行走lvs,下行走路由,路由会虚拟一个IP,lvs压力不大,还安全
5 keepalivde +lvs 高可用
准备:俩台干净的虚拟机(至少没用过nginx,keepalivde)
lvs-1 61 lvs-2 62
两台机子
yum -y install keepalived 用到keepalivde
yum install psmisc -y 用killall keepalivde di
lvs-1 vim /etc/keepalived/keepalived.conf
[root@Lvs-1 ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_27
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
#虚拟的IP,网段要和lvs的网段一样
virtual_ipaddress {
192.168.58.66
}
}
#lvs配置
virtual_server 192.168.58.66 49151 {
#每个6秒检查realserver是否存活
delay_loop 6
#lb=loadbalance负载均衡算法,rr轮询
lb_algo rr
#lvs三种模式NAT|TUN隧道|DR
lb_kind DR
#一个请求固定到一个服务器上的时间 单位秒
persistence_timeout 5
#请求方式TPC|UPD
protocol TCP
#真实服务器配置,这两是装有tomcat的真实ip
real_server 192.168.58.41 49151 {
#权重
weight 1
#超时时长
connect_timeout 3
#重试次数
nb_get_retry 3
#重试时间间隔
delay_before_retry 3
}
real_server 192.168.58.42 49151 {
weight 1
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
lvs-2 vim /etc/keepalived/keepalived.conf
[root@Lvs-2 ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_28
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.58.66
}
}
virtual_server 192.168.58.66 49151 {
#每个6秒检查realserver是否存活
delay_loop 6
#lb=loadbalance负载均衡算法,rr轮询
lb_algo rr
#lvs三种模式NAT|TUN隧道|DR
lb_kind DR
#一个请求固定到一个服务器上的时间 单位秒
persistence_timeout 5
#请求方式TPC|UPD
protocol TCP
#真实服务器配置
real_server 192.168.58.41 80 {
#权重
weight 1
#超时时长
connect_timeout 3
#重试次数
nb_get_retry 3
#重试时间间隔
delay_before_retry 3
}
real_server 192.168.58.42 80 {
weight 1
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
两台机子 都有的操作
cat cat /var/log/messages (可能会报这种错),无伤大雅,继续干
Aug 22 09:02:03 Lvs-1 Keepalived_healthcheckers[3454]: Unknown keyword 'connect_timeout'
Aug 22 09:02:03 Lvs-1 Keepalived_healthcheckers[3454]: Unknown keyword 'nb_get_retry'
Aug 22 09:02:03 Lvs-1 Keepalived_healthcheckers[3454]: Unknown keyword 'delay_before_retry'
Aug 22 09:02:03 Lvs-1 Keepalived_healthcheckers[3454]: Unknown keyword 'connect_timeout'
Aug 22 09:02:03 Lvs-1 Keepalived_healthcheckers[3454]: Unknown keyword 'nb_get_retry'
Aug 22 09:02:03 Lvs-1 Keepalived_healthcheckers[3454]: Unknown keyword 'delay_before_retry'
ipvsadm -C
ipvsadm -Ln
service keepalived start
ipvsadm -Ln
在浏览器输入虚拟IP+装有tomcat机子配的端口号(如果配的是80,只用输虚拟IP就行)
192.168.58.66:49151
5.5 给tomcat配置虚拟ip 前后呼应
两台tomcat机子一样的操作 192.168.58.66虚拟ip
cp /etc/sysconfig/network-scripts/ifcfg-lo /etc/sysconfig/network-scripts/ifcfg-lo:1
vim /etc/sysconfig/network-scripts/ifcfg-lo:1
刷新lo网卡:
ifup lo 或者service network restart
查看:
ip a
6测试
在浏览器输入虚拟IP+装有tomcat机子配的端口号后出现项目页面
win+r cmd
黑窗口敲 arp -a 192.168.58.66
这是lvs-1的mac地址
在lvs-1:
killall keppalived
ipvsadm -C 清除所有当前的LVS配置
ipvsadm -Ln 列出当前的LVS配置
再次在黑窗口敲 arp -a 192.168.58.66 发现mac地址变了
变成vs-2的mac地址
这样就成功了