LVS集群实战
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)
Server gateway
load balancer
own router
Own router
注:Server为Real Server
VS/NAT:
IIS,Apache,Nginx
私有网络
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
0.0.1 localhost
10.10.1 director1.sky.com director1
10.10.10 node1.sky.com node1
10.10.20 node2.sky.com node2
10.10.30 node3.sky.com node3
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服务
echo ServerName node2.sky.com:80 > /etc/httpd/conf.d/sv.conf
echo node2 web > /var/www/html
IPADDR=10.10.10.20
node3部署httpd服务
echo ServerName node3.sky.com:80 > /etc/httpd/conf.d/sv.conf
echo node3 web > /var/www/html
IPADDR=10.10.10.30
配置好网站服务器,测试所有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、 测试
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部署实战
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
VIP:192.168.122.100
DIP:192.168.122.2
Real Server
RIP:192.168.122.10
RIP:192.168.122.20
RIP:192.168.122.30
Nor-arp
DNS Server
LVS/DR实战
1、准备工作(集群中所有主机)
168.122.2 director1.sky.com director1
168.122.10 node1.sky.com node1
168.122.20 node2.sky.com node2
168.122.30 node3.sky.com node3
6、 RS配置
在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
默认网关均指向Director的DIP
7、 Director分发器配置
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
8、 测试
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 root@$ip 'chkconfig NetworkManager off'
ssh root@$ip 'iptables -F ; service iptables save'
ssh root@$ip "sed -r -i "/^SELINUX/cSELINUX=permissive" /etc/selinux/config"
ssh root@$ip "sed -r -i "/^HOSTNAME/cHOSTNAME=$hostname" /etc/sysconfig/network"
ssh root@$ip "sed -r -i "/^BOOTPROTO/cBOOTPROTO=none" /etc/sysconfig/network-scripts/ifcfg-eth0"
ssh root@$ip "sed -r -i "/IPADDR/cIPADDR=$newip" /etc/sysconfig/network-scripts/ifcfg-eth0"
ssh root@$ip "sed -r -i "3aPREFIX=24" /etc/sysconfig/network-scripts/ifcfg-eth0"
ssh root@$ip "sed -r -i "3aGATEWAY=$gw" /etc/sysconfig/network-scripts/ifcfg-eth0"
ssh root@$ip "wget ftp://172.16.8.100/rhel6.repo -O /etc/yum.repos.d/rhel6.repo"
ssh root@$ip "yum install -y lftp tree httpd"
ssh root@$ip "chkconfig httpd on"
ssh root@$ip "echo "ServerName $hostname" > /etc/httpd/conf.d/sv.conf"
ssh root@$ip "service httpd restart"
ssh root@$ip "echo $hostname > /var/www/html/index.html"
}&
done
本文转自rshare 51CTO博客,原文链接:http://blog.51cto.com/1364952/1956226,如需转载请自行联系原作者