LVS负载均衡群集
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LVS负载均衡群集相关的知识,希望对你有一定的参考价值。
一、群集、集群
Cluster,由多台主机构成,但对外只表现为一个整体
1.群集分类
- 负载均衡(Load Balancer):提供服务器的响应和处理能力
- 高可用群集(High Available):保障服务器的可靠性
- 高性能群集(High Performance Computer):多个服务器资源整个为一个服务器(提高运算能力,如超级计算机、云环境)
2.集群结构
- 第一层、Web群集:LVS、Keepalived、Haproxy、nginx(upsteam)
- 第二层、数据库集群:主从复制、读写分离、MMMM(主主复制)、Heartbeat+DRBD+mysql高可用方案
- 第三层、存储集群:NFS+Keepalived+DRDB、HA-Cluster(红帽)、MFS(分布式文件系统)
- 第四层、缓存:memcache、nosql、nginx
- 第五层、代理:CDN、Squid、varnish
-
第六层、监控:AIDE、Zabbix
- 客户端访问顺序:客户端 --> 代理层 --> 缓存层 --> Web群集 --> 数据库群集 --> 存储集群
二、LVS(Linux Virtual Server)
1.概述
- 针对linux内核的负载均衡解决方案,将一组服务器构成一个实现可伸缩的、高可用网络服务的虚拟服务器。
- LVS集群采用IP负载均衡技术和基于内容请求分发技术。
- 调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。
- 整个服务器集群的结构对客户是透明的,而且无需修改客户端和服务器端的程序。为此,在设计时需要考虑系统的透明性、可伸缩性、高可用性和易管理性。
- 1998年5月,该项目由我国的章文嵩博士创建,是中国国内最早出现的自由软件项目之一。
- 一般由ipvsadm工具编写规则实现
- 官网:http://www.linuxvirtualserver.org/
modprobe ip_vs
//添加内核对lvs模块的支持
lsmod | grep ip_vs
//过滤查看是否加载lvs模块
2.负载均衡群集三种模式
- NAT:方便配置,负载调度器压力大(适用于内网环境,需做DNAT)
- DR:NAT、TUN综合,但需做DNAT
- TUN:缓解调度器压力,但每个服务器都需一个公网IP(Web分散全国各地,可加快访问)
3.LVS调度算法
- 轮询:依顺序将请求分发给Web(rr)
- 加权轮询:根据服务器性能、动态调整权值(wrr)
- 最小连接:根据服务器的连接数分发给Web(wlc)
- 加权最小连接:根据服务器的性能、最小连接数动态调整权值(wlc)
4.LVS使用ipvsadm工具实现
- 创建虚拟服务器
- 添加、删除服务器节点
- 查看群集及节点情况
- 保存负载均衡分配策略
5.LVS优缺点
优点
1.开源,免费
2.在网上能找到一些相关技术资源
3.具有软件负载均衡的一些优点
缺点
1.最核心的就是没有可靠的支持服务,没有人对其结果负责;
2.功能比较简单,支持复杂应用的负载均衡能力较差,如算法较少等;
3.开启隧道方式需重编译内核;
4.配置复杂;
5.主要应用于LINUX,目前没有专门用于WINDOWS的版本,不过可以通过配置,使windows成为LVS集群中的real server(win2003、win2008中)。
三、LVS-NAT
部署Web-1
1.配置IP地址
vim /etc/sysconfig/network-scrips/ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=static
IPADDR=192.168.1.10
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
/etc/init.d/network restart
2.配置安装YUM
rm -rf /etc/yum.repos.d/*
vim /etc/yum.repos.d/local.repo
[local]
name=local
baseurl=file:///mnt
gpgcheck=0
mount /dev/cdrom /mnt
3.部署httpd
yum -y install httpd
echo "Web1" >/var/www/html/index.html
/etc/init.d/httpd start && chkconfig --level 35 httpd on
部署Web-2
1.配置IP地址
vim /etc/sysconfig/network-scrips/ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=static
IPADDR=192.168.1.20
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
/etc/init.d/network restart
2.配置安装YUM
rm -rf /etc/yum.repos.d/*
vim /etc/yum.repos.d/local.repo
[local]
name=local
baseurl=file:///mnt
gpgcheck=0
mount /dev/cdrom /mnt
3.部署httpd
yum -y install httpd
echo "Web2" >/var/www/html/index.html
/etc/init.d/httpd start && chkconfig --level 35 httpd on
部署网关+LVS
- 需两块网卡,一块vmnet1、第二块桥接
1.配置IP
vim /etc/sysconfig/network-scrips/ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=static
IPADDR=192.168.1.1
NETMASK=255.255.255.0
cp /etc/sysconfig/network-scrips/ifcfg-eth0 /etc/sysconfig/network-scrips/ifcfg-eth1
vim /etc/sysconfig/network-scrips/ifcfg-eth1
DEVICE=eth1
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=dhcp
/etc/init.d/network restart
2.配置安装YUM
rm -rf /etc/yum.repos.d/*
vim /etc/yum.repos.d/local.repo
[local]
name=local
baseurl=file:///mnt
gpgcheck=0
mount /dev/cdrom /mnt
yum -y install ipvsadm
modprobe ip_vs //加载lvs模块
lsmod | grep ip_vs //过滤查看是否加载lvs
3.开启路由转发
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1 //开启路由转发
sysctl -p
4.配置负载分配策略
/etc/init.d/ipvsadm stop //清除原LVS规则
ipvsadm -A -t 192.168.12.149:80 -s rr //指定192.168.12.149:80作为调度器,监听客户端请求
ipvsadm -a -t 192.168.12.149:80 -r 192.168.1.10:80 -m -w 1 //LVS使用NAT模式,将客户端192.168.1.10:80加入到调度器的Web集群中,权值设为1
ipvsadm -a -t 192.168.12.149:80 -r 192.168.1.20:80 -m -w 1 //LVS使用NAT模式,将客户端192.168.1.20:80加入到调度器的Web集群中,权值设为1
service ipvsadm save //保存LVS规则
详解:
-A:添加一条新的记录,记录调度器地址和端口
-a:添加一条新的记录,记录真实服务器(这里指Web服务器)地址和端口
-t:指明调度器提供的是tcp服务
-s:指定算法;常用选项(rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq)
-r:指定真实服务器(这里指Web服务器)的地址和端口
-m:指定LVS的工作模式为NAT模式;还有-i(指定工作模式为TUN隧道模式)、-g(指定工作模式为DR直接路由模式)
-w:指定真实服务器(这里指Web服务器)的权值,值越大越优先分配
ipvsadm -L -n //查看lvs规则
5.测试
LVS-DR模式
- 环境:四台服务器,两台Web一块vmnet1,一台网关(两块网卡,第一块vmnet1、第二块桥接),一台LVS服务器(两块网卡都是vmnet1)
一、Web1节点配置
1.网络参数配置
vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
NM_CONTROLLED="no"
ONBOOT="yes"
BOOTPROTO=static
IPADDR=192.168.1.10
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
cp /etc/sysconfig/network-scripts/ifcfg-lo /etc/sysconfig/network-scripts/ifcfg-lo:0
/etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.1.254
NETMASK=255.255.255.255
ONBOOT=yes
reboot
2.路由添加
route add -host 192.168.1.254 dev lo:0
echo "route add -host 192.168.1.254 dev lo:0" >>/etc/rc.local
3.内核参数配置
vim /etc/sysctl.conf
8 net.ipv4.conf.all.arp_ignore = 1 //定义对目标地址为本地IP的ARP询问不同的应答模式。不响应来自本地网卡的ARP请求
9 net.ipv4.conf.all.arp_announce = 2 //对查询目标使用最适当的本地地址。使用lo:0地址回应ARP请求
sysctl -p
4.YUM源配置并安装软件包
rm -rf /etc/yum.repos.d/*
vim /etc/yum.repos.d/local.repo
[local]
name=local
baseurl=file:///mnt
gpgcheck=0
mount /dev/cdrom /mnt
yum -y install httpd && chkconfig --level 35 httpd on
5.测试页面准备
echo "Web1" >/var/www/html/index.html
6.启动服务
/etc/init.d/httpd start
二、Web2节点配置
1.网络参数配置
vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
NM_CONTROLLED="no"
ONBOOT="yes"
BOOTPROTO=static
IPADDR=192.168.1.20
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
cp /etc/sysconfig/network-scripts/ifcfg-lo /etc/sysconfig/network-scripts/ifcfg-lo:0
/etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.1.254
NETMASK=255.255.255.255
ONBOOT=yes
reboot
2.路由添加
route add -host 192.168.1.254 dev lo:0
echo "route add -host 192.168.1.254 dev lo:0" >>/etc/rc.local
3.内核参数配置
vim /etc/sysctl.conf
8 net.ipv4.conf.all.arp_ignore = 1
9 net.ipv4.conf.all.arp_announce = 2
sysctl -p
4.YUM源配置并安装软件包
rm -rf /etc/yum.repos.d/*
vim /etc/yum.repos.d/local.repo
[local]
name=local
baseurl=file:///mnt
gpgcheck=0
mount /dev/cdrom /mnt
yum -y install httpd
5.测试页面准备
echo "Web2" >/var/www/html/index.html
6.启动服务
/etc/init.d/httpd start && chkconfig --level 35 httpd on
三、LVS
- 两块网卡、都为仅主机模式
1.网络参数配置
vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
NM_CONTROLLED="no"
ONBOOT="yes"
BOOTPROTO=static
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth1
vim /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE="eth1"
NM_CONTROLLED="no"
ONBOOT="yes"
BOOTPROTO=static
IPADDR=192.168.1.254
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
reboot
2.YUM源配置并安装软件包
rm -rf /etc/yum.repos.d/*
vim /etc/yum.repos.d/local.repo
[local]
name=local
baseurl=file:///mnt
gpgcheck=0
mount /dev/cdrom /mnt
yum -y install ipvsadm
modprobe ip_vs
echo "modprobe ip_vs" >>/etc/rc.local
lsmod | grep ip_vs
3.负载策略编写
/etc/init.d/iptables stop
/etc/init.d/ipvsadm stop
ipvsadm -A -t 192.168.1.254:80 -s rr
ipvsadm -a -t 192.168.1.254:80 -r 192.168.1.10:80 -g -w 1
ipvsadm -a -t 192.168.1.254:80 -r 192.168.1.20:80 -g -w 1
/etc/init.d/ipvsadm save && chkconfig --level 35 ipvsadm on
四、网关服务器
- 两块网卡、第一块vmnet1、第二块桥接模式
1.网络配置配置
vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
NM_CONTROLLED="no"
ONBOOT="yes"
BOOTPROTO=static
IPADDR=192.168.1.1
NETMASK=255.255.255.0
cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth1
vim /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE="eth1"
NM_CONTROLLED="no"
ONBOOT="yes"
BOOTPROTO=dhcp
reboot
2.开启路由转发
vim /etc/sysctl.conf
7 net.ipv4.ip_forward = 1
sysctl -p
3.编写防火墙规则
/etc/init.d/iptables stop
iptables -t nat -I PREROUTING -d 192.168.10.139 -i eth1公网接口) -p tcp --dport 80 -j DNAT --to-destination 192.168.1.254:80
/etc/init.d/iptables save && chkconfig --level 35 iptables on
五、测试
IE --> http://192.168.10.139
以上是关于LVS负载均衡群集的主要内容,如果未能解决你的问题,请参考以下文章