LVS
Linux Virtual Server: Linux虚拟服务器
基于四层的LB
================================
LVS+keepalived Web Server 80/tcp
LVS+keepalived Galera MySQL/MySQL Cluster 3306/tcp
一、LVS概述
LVS是Linux内核的一部分,因此性能较高
Linux虚拟服务器(即分发器或调度器)功能:
不真正提供服务,介接受客户的访问,为整个集群提供一个唯一的入口
虚拟服务器和真实服务器(Real Server)通信
真正提供服务,集群中每个(Real Server)可以是物理机,也可以是虚拟机
二、LVS三种基本模式
VS/NAT |
VS/TUN |
VS/DR |
|
Server |
any |
Tunneling |
Non-arp device |
Server network |
private |
LAN/WAN |
LAN |
Server number |
low(10-20) |
High(100) |
High(100) |
Server gateway |
load balancer |
own router |
Own router |
注:Server为Real Server
VS/NAT:
any |
IIS,Apache,Nginx |
private |
私有网络 |
low |
10~20 |
gateway |
所有Real Server网关必须指向调度器 |
VS/NAT:网络地址转换模式,进站/出站的数据流量经过分发器。
VS/DR:直接路由模式,只有进站的数据流量经过分发器
调试器和真实服务器必须在同一网段
VS/TUN:隧道模式,只有进站的数据流量经过分发器。
VS/NAT配置
实验说明:
1、 KVM网络使用NAT模式
2、 client、调试器、Real Server都使用虚拟机或使用真实服务器
3、 虚拟机上的网卡使用半虚拟化驱动,如果半虚拟化驱动异常,可以使用default/rtl8139
网络拓扑:
主机功能 |
IP地址 |
必备软件 |
client |
CIP:192.168.122.0/24 |
curl、elinks或firefox |
Director |
eth0:VIP:192.168.122.100 |
|
eth1:DIP:10.10.10.1 |
||
Real Server |
RIP:10.10.10.10 10.10.10.20 10.10.10.30 |
安装httpd服务 |
DNS Server |
www.ak.com=====>192.168.122.100 |
bind或bind-chroot |
建议:先在Real Server安装如httpd
- VS/NAT实施
1、 准备工作(集群中所有主机)[可选]
IP、hostname、hosts、iptables、SELinux、ssh trust、ntp
cat /etc/hosts
|
2、 RS配置
说明:RS是指Real Server,即后端的真实服务器。
在node1、node2、node3上部署
node1部署httpd服务 |
|
yum install -y httpd echo ServerName node1.sky.com:80 > /etc/httpd/conf.d/sv.conf echo node1 web > /var/www/html service httpd restart chkconfig httpd on |
|
cd /etc/sysconfig/network-scripts cp -v ifcfg-eth0{,.bak} cat > ifcfg-eth0 <<EOF DEVICE=eth0 TYPE=Ethernet ONBOOT=yes BOOTPROTO=static IPADDR=10.10.10.10 NETMASK=255.255.255.0 GATEWAY=10.10.10.1 DNS=192.168.122.100 EOF service network restart ip addr show curl 127.0.0.1 |
|
node2部署httpd服务 |
|
yum install -y httpd echo ServerName node2.sky.com:80 > /etc/httpd/conf.d/sv.conf echo node2 web > /var/www/html service httpd restart chkconfig httpd on curl 127.0.0.1 |
|
cd /etc/sysconfig/network-scripts cp -v ifcfg-eth0{,.bak} cat > ifcfg-eth0 <<EOF DEVICE=eth0 TYPE=Ethernet ONBOOT=yes BOOTPROTO=static IPADDR=10.10.10.20 NETMASK=255.255.255.0 GATEWAY=10.10.10.1 DNS=192.168.122.100 EOF service network restart ip addr show |
|
node3部署httpd服务 |
|
yum install -y httpd echo ServerName node3.sky.com:80 > /etc/httpd/conf.d/sv.conf echo node3 web > /var/www/html service httpd restart chkconfig httpd on curl 127.0.0.1 |
|
cd /etc/sysconfig/network-scripts cp -v ifcfg-eth0{,.bak} cat > ifcfg-eth0 <<EOF DEVICE=eth0 TYPE=Ethernet ONBOOT=yes BOOTPROTO=static IPADDR=10.10.10.30 NETMASK=255.255.255.0 GATEWAY=10.10.10.1 DNS=192.168.122.100 EOF service network restart ip addr show |
配置好网站服务器,测试所有RS //为了看到效果,建议提供不同的页面
默认网关均指向Directory的DIP
3、 Director分发器配置
配置VIP
ip addr add dev eth0 192.168.122.100/24 vim /etc/sysctl.conf 修改内容如下 net_ipv4.ip_forward=1 :wq保存退出 sysctl -p //确保打开路由转发 |
定义LVS的分发策略
yum install -y ipvsadm ipvsadm --help man ipvsadm 然后查找EXAMPLE实例 ipvsadm -A -t 192.168.122.100:80 -s rr ipvsadm -a -t 192.168.122.100:80 -r 10.10.10.10 -m ipvsadm -a -t 192.168.122.100:80 -r 10.10.10.20 -m ipvsadm -a -t 192.168.122.100:80 -r 10.10.10.30 -m |
确保RHEL仓库可用 -m是批massquerading(NAT) |
技巧: Director调度器调度多个网站服务时,只需要给调度器的WAN网卡设置多个外网IP,然后做第2个调度策略。 |
查看LVS状态信息
ipvsadm -L ipvsadm -Ln |
|
状态信息如下: |
查看其他信息
ipvsadm -L -n --stats ipvsadm -L -n --rate ipvsadm -Ln -c watch -n.5 ‘ipvsadm -Ln -c‘ |
看速率 看LVS的连接条目 |
4、 测试
curl http://192.168.122.100 elinks -dump http://192.168.122.100/ ab -c1000 -n 1000 http://192.168.122.100 |
5、 小结
VS/NAT模式的原理:当Director收到Client请求时,Director将数据包的目标IP由VIP转换为选中的Real Server的RIP来实现分发。
要求:RS将网关指向Director的DIP。
特点:配置简单,所有的入站、出站数据包都经过分发器。当数据量比较大时,分发器可能会出现网络瓶颈!因而支持的RS数量少。
重点注意:
Director必须开启Kernel ip_forward
所有Real Server默认网关指向DIP
Director使用DIP和Real Server的RIP通信
监测:
watch -n.5 ‘ipvsadm -Ln -c‘
新命令了解:
arping -I eth0 172.20.20.250
ip addr add dev br1 172.16.20.250/24
ip addr add dev lo 172.16.20.250/32
arp -n | grep 192.168.100.2
- VS/DR模式原理解析
RIP:设置在物理网卡
VIP:设置在lo环回网卡(127.0.0.1)上
Non-arp工作原理:
VS-DR部署实战
实验说明:
1、 KVM网络使用NAT模式
2、 DR模式要求Director的DIP和所有Real Server的RIP必须在同一个网段及广播域
3、 所有节点网关均指定真实网关
4、 用脚本部署LVS集群
注意:调度器和RealServer必须在同一个LAN,LAN可以使用公网IP,也可以使用private IP
公网IP:前端路由器工作模式为路由模式
私网IP:前端路由器工作为NAT,并将某个公网IP映射到VIP(private)
网络拓扑:
Client |
CIP:192.168.122.1 |
|||
Director |
VIP:192.168.122.100 DIP:192.168.122.2 |
|||
Real Server |
RIP:192.168.122.10 VIP:192.168.122.100 |
RIP:192.168.122.20 VIP:192.168.122.100 |
RIP:192.168.122.30 VIP:192.168.122.100 |
Nor-arp |
DNS Server |
www.sky.com ===>192.168.122.100 |
- LVS/DR实战
1、准备工作(集群中所有主机)
IP、hostname、hosts、iptables、SELinux、ssh trust、ntp
cat /etc/hosts
|
6、 RS配置
说明:RS是指Real Server,即后端的真实服务器。
在node1、node2、node3上部署好网站服务器,测试所有RS。为了测试效果,提供不同的网站页面。
在三台RS上的lo环回接口上添加VIP,并开启Non-arp功能 |
|
ip addr dee lo 192.168.122.100/32 #在lo接口上绑定VIP echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore #non-arp echo 2> /proc/sys/net/ipv4/conf/all/arp_announce #non-arp |
|
node1部署httpd服务 |
|
yum install -y httpd echo ServerName node1.sky.com:80 > /etc/httpd/conf.d/sv.conf echo node1 web > /var/www/html service httpd restart chkconfig httpd on |
|
cd /etc/sysconfig/network-scripts cp -v ifcfg-eth0{,.bak} cat > ifcfg-eth0 <<EOF DEVICE=eth0 TYPE=Ethernet ONBOOT=yes BOOTPROTO=static IPADDR=10.10.10.10 NETMASK=255.255.255.0 GATEWAY=10.10.10.1 DNS=192.168.122.100 EOF service network restart ip addr show curl 127.0.0.1 |
|
node2部署httpd服务 |
|
yum install -y httpd echo ServerName node2.sky.com:80 > /etc/httpd/conf.d/sv.conf echo node2 web > /var/www/html service httpd restart chkconfig httpd on curl 127.0.0.1 |
|
cd /etc/sysconfig/network-scripts cp -v ifcfg-eth0{,.bak} cat > ifcfg-eth0 <<EOF DEVICE=eth0 TYPE=Ethernet ONBOOT=yes BOOTPROTO=static IPADDR=10.10.10.20 NETMASK=255.255.255.0 GATEWAY=10.10.10.1 DNS=192.168.122.100 EOF service network restart ip addr show |
|
node3部署httpd服务 |
|
yum install -y httpd echo ServerName node3.sky.com:80 > /etc/httpd/conf.d/sv.conf echo node3 web > /var/www/html service httpd restart chkconfig httpd on curl 127.0.0.1 |
|
cd /etc/sysconfig/network-scripts cp -v ifcfg-eth0{,.bak} cat > ifcfg-eth0 <<EOF DEVICE=eth0 TYPE=Ethernet ONBOOT=yes BOOTPROTO=static IPADDR=10.10.10.30 NETMASK=255.255.255.0 GATEWAY=10.10.10.1 DNS=192.168.122.100 EOF service network restart ip addr show |
配置好网站服务器,测试所有RS //为了看到效果,建议提供不同的页面
默认网关均指向Director的DIP
7、 Director分发器配置
配置VIP
ip addr add dev eth0 192.168.122.100/32 ##配置VIP yum install -y ipvsadm ##确保yum仓库可用 |
定义LVS分发策略
ipvsadm -C ipvsadm -A -t 192.168.122.100:80 -s rr ipvsadm -a -t 192.168.122.100:80 -r 192.168.122.10 -g ipvsadm -a -t 192.168.122.100:80 -r 192.168.122.20 -g ipvsadm -a -t 192.168.122.100:80 -r 192.168.122.30 -g service ipvsadm save ipvsadm -Ln |
查看LVS状态信息
ipvsadm -L ipvsadm -Ln |
|
状态信息如下: |
查看其他信息
ipvsadm -L -n --stats ipvsadm -L -n --rate ipvsadm -Ln -c watch -n.5 ‘ipvsadm -Ln -c‘ |
看速率 看LVS的连接条目 |
8、 测试
curl http://192.168.122.100 elinks -dump http://192.168.122.100/ ab -c1000 -n 1000 http://192.168.122.100 |
9、 小结
VS/NAT模式的原理:当一个Client发送一个请求到VIP,Director根据VIP选择对应的RealServer的Pool,根据算法,在Pool中选择一台RealServer,然后将Client的请求包发给选择的RealServer,最后,选择的RealServer把应答包直接传给Client。
LVS集群部署的脚本
vi lvs_httpd.sh |
#!/bin/bash #LVS_DR_RealServer的httpd初始化脚本,并发处理。 IFS=$‘\n‘ alias sed=‘sed -c --follow-syslinks‘ ntpserver=172.16.8.100 vip=192.168.122.100 for line in $(cat real_serverip.txt) #real_serverip.txt #old_ip hostname newip #192.168.122.10 web10 192.168.122.10 #192.168.122.11 web11 192.168.122.20 #192.168.122.12 web12 192.168.122.30 #... do { ip=$(echo $line | awk ‘{print $1}‘) hostname=$(echo $line | awk ‘{print $2}‘) newip=$(echo $line | awk ‘{print $3}‘) ssh [email protected]$ip ‘chkconfig NetworkManager off‘ ssh [email protected]$ip ‘iptables -F ; service iptables save‘ ssh [email protected]$ip "sed -r -i "/^SELINUX/cSELINUX=permissive" /etc/selinux/config" ssh [email protected]$ip "sed -r -i "/^HOSTNAME/cHOSTNAME=$hostname" /etc/sysconfig/network" ssh [email protected]$ip "sed -r -i "/^BOOTPROTO/cBOOTPROTO=none" /etc/sysconfig/network-scripts/ifcfg-eth0" ssh [email protected]$ip "sed -r -i "/IPADDR/cIPADDR=$newip" /etc/sysconfig/network-scripts/ifcfg-eth0" ssh [email protected]$ip "sed -r -i "3aPREFIX=24" /etc/sysconfig/network-scripts/ifcfg-eth0" ssh [email protected]$ip "sed -r -i "3aGATEWAY=$gw" /etc/sysconfig/network-scripts/ifcfg-eth0" ssh [email protected]$ip "wget ftp://172.16.8.100/rhel6.repo -O /etc/yum.repos.d/rhel6.repo" ssh [email protected]$ip "yum install -y lftp tree httpd" ssh [email protected]$ip "chkconfig httpd on" ssh [email protected]$ip "echo "ServerName $hostname" > /etc/httpd/conf.d/sv.conf" ssh [email protected]$ip "service httpd restart" ssh [email protected]$ip "echo $hostname > /var/www/html/index.html" }& done |
LVS调度算法详解
LVS持久性连接
LVS端口亲缘性
基本LVS LB集群解决方案一 LVS KeepAlived
基本LVS LB集群解决方案二 LVS Piranha
LVS持久性连接
LVS端口亲缘性
基本LVS LB集群解决方案一 LVS KeepAlived
基本LVS LB集群解决方案二 LVS Piranha