1.内容概述:
2.简介
LVS是Linux Virtual Server的简称,也就是linux虚拟服务器。
3.实现目标
通过LVS提供的负载均衡技术和linux系统实现一个高性能、高可用的服务器集群,它具有良好的可靠性、可扩展性和可操作性,成本低廉的特性
4.LVS体系结构
包含:
5.LVS集群的特点
5.1 IP负载均衡与负载调度算法:
LVS的IP负载均衡技术:是通过IPVS模块来实现的,IPVS是LVS集群系统的核心软件。它的主要作用是:安装在 Director Server(前端服务器)上,同时Director Server上虚拟出一个IP地址(VIP),用户必须通过这个虚拟的VIP地址访问服务。-----访问请求首先经过VIP到达负载均衡调度器,然后由负载均衡调度器根据设定好的算法 从 Real Server 列表中选取一个服务节点响应用户请求。
5.2IPVS实现负载均衡的机制:
优缺点:
NAT 优点:配置及管理简单。Director Server 和 Real Server 群组可以不再一个
网段
缺点:要求 Director Server 必须要有两块网卡
Director Server很容易成为整个集群的性能瓶颈(所有都数据经过这里)
DR 优点:性能最好
缺点:要求Director Server和所有的Real Server 必须在同一个网段中,不
能实现集群的跨网段应用
TUN 优点: 性能介于 NAT 和 DR 模式之间
Director Server 与 Real Server 可以再不同的网段内,即集群中
的Real Server 可以再不同的城市
缺点: 需要的Real Server 服务器的内核中,必须编译支持IP Tunnel这个选项
5.3负载调度算法(此处只列出了常用的4种,共有8种)
静态:
动态:
5.4使用环境
Director Server 支持的系统: Linux 和 FreeBSD
支持大多数的TCP和UDP协议
Real Server 可以运行在任何支持TCP/IP的操作系统上
6. 基本的 LVS集群的实现
6.1集群环境规划
SElinux and iptables is disable
操作系统使用RHEL 6.3x86_64
服务器名 |
IP地址 |
网关 |
虚拟设备名 |
虚拟IP |
Director Server |
192.168.1.100 |
192.168.1.1 |
eth0:0 |
192.168.1.135 |
Real Server |
192.168.1.210 |
192.168.1.1 |
lo:0 |
192.168.1.135 |
Real Server |
192.168.1.220 |
192.168.1.1 |
lo:0 |
192.168.1.135 |
集群架构规划图:(DR模式)
6.1根据实验规划设置固定IP,实验中为方便起见,规定
A 192.168.1.100
B 192.168.1.210
C 192.168.1.220
本实验时LVS集群的基本实现:
方法一、ipvsadm 命令行模式
方法二、piranha 图形化模式
须知:本实验 不涉及共享存储
不涉及Director Server 的双机热备
6.2(ABC)设置yum 源
[extras-163] name=163-extras baseurl=http://mirrors.163.com/CentOS/6.3/extras/x86_64/ enabled=1 gpgcheck=0 [update-163] name=163-update baseurl=http://mirrors.163.com/centos/6.3/updates/x86_64/ enabled=1 gpgcheck=0 [os-163] name=163-os baseurl=http://mirrors.163.com/centos/6.3/os/x86_64/ enabled=1 gpgcheck=0 [fasttrack-163] name=163-fasttrack baseurl=http://mirrors.163.com/centos/6.3/fasttrack/x86_64/ enabled=1 gpgcheck=0 [plus-163] name=163-plus baseurl=http://mirrors.163.com/centos/6.3/centosplus/x86_64/ enabled=1 gpgcheck=0 |
方法一、命令行管理模式
6.5(A)Directory Server 上安装IPVS管理软件
本例中使用rpm方式安装:
[root@localhost ~]# yum install -y ipvsadm
6.6ipvsadm 的使用方法:
-A 用于虚拟服务器增加虚拟IP即VIP
-E 用于虚拟服务器编辑VIP记录
-D 用于虚拟服务器删除VIP记录
-C 清除虚拟服务器所有的VIP记录
-R 恢复虚拟服务器规则
-S 保存虚拟服务器规则
-a 用于虚拟服务器增加新的Real Server
-e 用于虚拟服务器编辑某条Real Server记录
-d 用于虚拟服务器删除某条Real Server记录
-L| -l 显示出虚拟服务器的列表
-Z 虚拟服务器计数器清零
--set tcp udp 设置连接超时值
-t 说明虚拟服务器提供tcp服务,选项后面跟如下格式:
vip:port 或 Real-Server-ip:port
-u 说明虚拟服务器提供udp服务,选项后面跟如下格式:
vip:port 或 Real-Server-ip:port
-f 说明是经过iptables标记过的服务类型
-s 该选项后面跟LVS使用的调度算法,有如下选项:
rr | wrr | lc | wlc | lblc | lblcr | dh | sh
默认的调度算法是: wlc
-p 在某个Real Server上持续的服务时间。在设定的时间内,来自同一个用户的多个请求,将会转发给同一个Real Server (利用缓存)
默认时间是:300s 例: -p 600
-r 指定Real Server的ip地址,此选项后面跟的格式:
Real-Server-ip:port
-g 指定LVS的工作模式为直接路由模式 (此模式为LVS的默认工作模式)
-i 指定LVS的工作模式为隧道模式
-m 指定LVS的工作模式为NAT模式
-w 指定Real Server的权值
-c 显示LVS目前的连接信息
-L --timeout 显示服务连接超时值
--daemon 显示同步守护进程状态
--stats 显示统计信息
--rate 显示速率信息
--sort 对虚拟服务器和真是服务器排序输出
举例如下:
添加虚拟IP:
ipvsadm -A -t 192.168.1.100:80 -s rr -p 600
ipvsadm -A -t 192.168.1.150:21 -s wlc
添加Real Server:
ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.210:80 -g
ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.220:80 -g
用法总结:首先添加VIP 指定策略
其次针对指定的VIP 添加 Real Server 并指定工作模式(g)
7.开始配置LVS集群(使用ipvsadm命令行工具)
下面通过搭建www服务的负载均衡实例,讲述DR模式的LVS集群配置
7.1 (A)Director Server 的配置
7.1.1 (A)在Director Server上绑定一个VIP,用于对外提供服务。
[root@localhost ~]# /sbin/ifconfig eth0:0 192.168.1.135 broadcast 192.168.1.135 netmask 255.255.255.255 up
特别注意:
广播地址 与 ip地址 相同
子网掩码 255.255.255.255
7.1.2(A)在Director Server上为eth0:0指定路由
[root@localhost ~]# /sbin/route add -host 192.168.1.135 dev eth0:0
开启内核IP转发
[root@localhost ~]# echo "1" >> /proc/sys/net/ipv4/ip_forward
在DR模式下,开启ip转发不是必须的,在NAT模式下开启ip转发是必须的。
注意:7.1.1 和 7.1.2 对于网卡的操作都是一次性的,重启不能生效。
解决: /sbin/ifconfig eth0:0 192.168.1.135 broadcast 192.168.1.135 netmask 255.255.255.255 up
/sbin/route add -host 192.168.1.135 dev eth0:0
echo "1" >> /proc/sys/net/ipv4/ip_forward
将三条命令写入 rc.local # cat <
7.2(A)使用ipvsadm配置LVS
[root@localhost ~]# ipvsadm -C #清除原有记录
[root@localhost ~]# ipvsadm -A -t 192.168.1.135:80 -s rr -p 500
[root@localhost ~]# ipvsadm -a -t 192.168.1.135:80 -r 192.168.1.210:80 -g
[root@localhost ~]# ipvsadm -a -t 192.168.1.135:80 -r 192.168.1.220:80 -g
[root@localhost ~]# service ipvsadm save
[root@localhost ~]# service ipvsadm start
注意:实际生产中是不直接使用ipvsadm 直接配置LVS集群的
8.使用ldirectord配置LVS
8. 1(A)在Director Server上绑定一个VIP,用于对外提供服务。
[root@localhost ~]# ifconfig eth0:0 192.168.1.135 broadcast 192.168.1.135 netmask 255.255.255.255 up
特别注意:
广播地址 与 ip地址 相同
子网掩码 255.255.255.255
8.2(A)在Director Server上为eth0:0指定路由
[root@localhost ~]# route add -host 192.168.1.135 dev eth0:0
开启内核IP转发
[root@localhost ~]# echo "1" >> /proc/sys/net/ipv4/ip_forward
在DR模式下,开启ip转发不是必须的,在NAT模式下开启ip转发是必须的。
8.3安装ldirectord
#yum install -y heartbeat-ldirectord 用以LVS监控real server 节点的运行状态,当real server失效是,把它从虚拟服务器列表中删除,恢复是重新加入到列表。同时,它还能调用ipvsadm 自动创建LVS路由表。
需要说明的是:ldirectord 和 Piranha 都具有监控 real server的功能。如果要通过ldirectord监控节点状态,只需要启动 ldirectord服务,整个集群就可以运行起来。
如果要通过Piranha工具配置LVS,就无需使用ldirectord。
查找安装的示例配置文件
#rpm -qd heartbeat-ldirectord
复制示例文件做配置文件
#cp /usr/share/doc/heartbeat-ldirectord-
服务启动脚本
service ldirectord start|stop
编辑配置文件
#vim /etc/ha.d/ldirectord.cf
#全局配置选项
checktimeout=20 #判定real server出错的时间间隔
checkinterval=10
#判定ldirectord在两次检查之间的间隔
fallback=127.0.0.1:80
#当所有的real server都不工作时,web服务重定向
autoreload=yes
#自动重载配置文件。
logfile="/var/log/ldirectord.log"
#指定日志文件路径
quiescent=no #"no" 表示:如果一个节点在checktimeout设置的时间周期内没有相应,ldirectord会从LVS的路由表中之间移除real server,此时中断现有的客户端连接,并是LVS丢掉所有的连接跟踪记录和持续连接记录;"yes" 表示当某个real server失效时,ldirectord 将失效节点的权值设置为0,新的连接将不能到达,但是并不从LVS路由表中清除此节点,同时,连接跟踪记录和程序连接模版仍然保留在Director上
----------注意:以上为ldrectord.cf文件的全局配置。它们可以应用大下面多个虚拟主机上,下面是每个虚拟主机的配置。 #sample for 按 http virtual servicevirtual=192.168.1.135:80 #设置VIP和端口号,注意:virtual行后面的行必须缩进4个空格或以一个tab字符进行标记。
real=192.168.1.210:80 gate #指定real server服务器地址和端口,同时设定LVS的工作模式 gate: DR | ipip: TUNL | masq : NAT
real=192.168.1.220:80 gate
fallback=127.0.0.1:80 gate
service=http #指定做负载均衡的服务
request="index.html" #ldirectord将根据real server 地址,结合该选项给出的请求路径,发送访问请求,检查real server上的服务是否正常运行,确保这里给出的页面是可以访问的,否则ldirectord会误认为此节点已经失效,发生错误监控现象。
receive="Test Page" #指定请求和应答字符串
scheduler=rr #指定调度算法,这里是rr 轮询 算法
protocol=tcp #指定协议类型,包含 tcp 和 udp
checkport=80 #指定监控的端口号
checktype=negotiate #指定ldirectord的检查类型
virtualhost=www.example.com #虚拟服务器的名称
9.real server 的配置
9.1禁止real server 相应ARP请求,只允许LVS 相应
[root@zzh /]# vim /etc/sysctl.conf
编辑内核运行参数,添加下面字段
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
|
[root@zzh /]# sysctl -p
|
使上面的修改立即生效
|
9.2配置VIP地址
[root@localhost ~]# ifconfig lo:0 192.168.1.135 broadcast 192.168.1.135 netmask 255.255.255.255 up
[root@localhost ~]# route add -host 192.168.1.135 dev lo:0
需要在所有的real server 执行相同的命令,可以写成脚本在所有的real server上执行,并 放到 /etc/rc.d/rc.local 中使该脚本开机执行
10.在Director Server 启动 Keepalived 服务
service ldirectord start方法二、图形化管理模式
11.安装图形化管理配置工具
配置文件
|
说明
|
/etc/sysconfig/ha/lvs.cf
|
由
web
界面生成的配置写入这个文件中
|
/etc/init.d/piranha-gui start
|
启动
piranha
服务的
WEB
配置界面
|
/etc/init.d/pulse
|
启动
piranha
服务读取的就是
/etc/sysconfig/ha/lvs.cf
文件
|
/etc/sysconfig/ha/conf/httpd.conf
|
这个文件是他的配置文件可以改用什么端口来管理
|
11.1使用RedHat提供的工具piranha来配置LVS
Piranha 是renhat提供的基于web的LVS的配置软件。也可以单独用作cluster功能。例如:可以通过 Piranha激活 Director Server的后背主机,也就是配置Director Server的双机热备功能。
[root@localhost yum.repos.d]# rpm -qc piranha
/etc/sysconfig/ha/lvs.cf 所有的配置都被注释掉了
/etc/sysconfig/ha/conf/httpd.conf
/etc/sysconfig/ha/conf/httpd.conf 对LVS管理界面的访问控制
11.2 Director Server上prianha的设置
11.2.1开启web页面管理服务
[root@localhost Desktop]# /etc/init.d/piranha-gui start 11.2.2查看3636端口
[root@localhost Desktop]# netstat -tunalp | grep :3636
11.2.3设置管理用户piranha的密码
[root@localhost Desktop]# piranha-passwd
New Password:
Verify:
Adding password for user piranha
tcp 0 0 :::3636 :::* LISTEN 2978/httpd
11.2.4登录 192.168.1.100:3636
12.web页面配置部分
--------由于本实验只涉及到一台Director Server调度服务器,未做双机热备,所以不用理会下面两个选项:
12.1GLOBAL SETTINGS 是用来设置 Director Server 的全局配置:
包含: primary server public ip : LVS 服务器的ip
primary server public ip : LVS 如果启用双机热备,心跳地址
超时设置:
Use network type :使用的工作模式 .默认是 : DR模式
是用来设置 Director Server的双机热备从服务器
12.2设置 VIRTUAL SERVERS
添加
编辑VIRTUAL SERVER
选项说明:
Load monitoring tool :用于监视各个real server上的负载状态
rup : 要求real server 启动 rstatd 服务
rup : 要求real server 启动 rwhod 服务
Service timeout: 表示real server 失效后,从lvs路由表中移除所要经过的时间,S
Re-entry Time : 表示某个real server被移除后,重新加入路由表必须经过的时间
Quiesce server :“yes” 表示当有新的节点加入集群时,最少链接数会被清零,此时lvs会发送大量的请求到这个新的服务节点,造成新节点的服务阻塞。建议是 "no"
Scheduling : 使用的调度算法 默认是:wlc 加权最小链接
为了实验便于查看结果,此处使用了 rr 轮询算法
12.3激活VIRTUAL SERVER
基于该 VIRTUAL SERVER(192.168.1.135),添加REAL SERVER 并设置("EDIT")
12.4添加并设置REAL SERVER
添加
编辑 REAL SERVER
再次添加REAL SERVER
设置 REAL SERVER 2
12.5激活添加的REAL SERVER
12.6启动pulse服务
注意:上面的虚拟服务器激活了才可启动
|
[root@localhost Desktop]# service pulse start
Starting pulse: [ OK ]
[root@localhost Desktop]#chkconfig pulse on
13.从 Piranha 上配置
----由于本实验中 VIRTUAL SERVER 没有做双机热备,也就不用设置从 Piranha
14.REAL SERVER 配置
在选择连接类型有NAT、DR(路由直连)、Tunneling三种,选择不同类型真实服务器也要对应不同的设置上面我们选择了DR类型,只要把每台真实服务器按着之前做路由直连时 ( ipvsadm ),设置多台真实服务器就可以了 10.1禁止real server 相应ARP请求,只允许LVS 相应[root@zzh /]# vim /etc/sysctl.conf编辑内核运行参数,添加下面字段
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
|
[root@zzh /]# sysctl -p
|
使上面的修改立即生效
|
需要在所有的real server 执行相同的命令,可以写成脚本在所有的real server上执行,并 放到 /etc/rc.d/rc.local 中使该脚本开机执行
15.测试
REAL SERVER1 上
[root@localhost ~]# cd /var/www/html/ [root@localhost html]# ls [root@localhost html]# echo "real server 1" >> index.html [root@localhost html]# service httpd start Starting httpd: httpd: Could not reliably determine t he server's fully qualified domain name, using localhost.localdomain for ServerName [ OK ] [root@localhost html]# chkconfig httpd on REAL SERVER2 上 [root@localhost ~]# cd /var/www/html/ [root@localhost html]# ls [root@localhost html]# echo "real server 2" >> index.html [root@localhost html]# service httpd start Starting httpd: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain for ServerName [ OK ] [root@localhost html]# chkconfig httpd on |
----实验成功
多种配置LVS的方式,real server的配置都是一样的。附上配置脚本,设置固定ip后就可以执行该脚本,并立即生效。而且重启后依然有效。
real server配置脚本 #!/bin/bash #本次生效 VIP=192.168.1.135/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up /sbin/route add -host $VIP dev lo:0 echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce sysctl -p &> /dev/null /usr/sbin/setenforce 0 /sbin/iptables -F /sbin/iptables -Z service iptables save #每次开机自动执行lvs.sh /bin/cat < /sbin/lvs-rs.sh EOF /bin/cat < #!/bin/bash VIP=192.168.1.135 /sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up /sbin/route add -host $VIP dev lo:0 echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce sysctl -p &> /dev/null /usr/sbin/setenforce 0 EOF |