LVS 负载均衡集群搭建

1.内容概述:

    1. LVS 集群的体系结构和特点
    2. 基本LVS集群的安装和配置
    3. 介绍了命令行 ipvsadm 和 ldirectord 配置LVS集群
    4. 介绍了使用RedHat工具 piranha 图形化配置LVS集群

2.简介

LVS是Linux Virtual Server的简称,也就是linux虚拟服务器。

3.实现目标

通过LVS提供的负载均衡技术和linux系统实现一个高性能、高可用的服务器集群,它具有良好的可靠性、可扩展性和可操作性,成本低廉的特性

4.LVS体系结构

LVS 负载均衡集群搭建_第1张图片

包含:

    1. 最前端 负载均衡层
    2. 中间 服务器群组
    3. 最底层 共享存储层

5.LVS集群的特点

5.1 IP负载均衡与负载调度算法:

LVS的IP负载均衡技术:是通过IPVS模块来实现的,IPVS是LVS集群系统的核心软件。它的主要作用是:安装在 Director Server(前端服务器)上,同时Director Server上虚拟出一个IP地址(VIP),用户必须通过这个虚拟的VIP地址访问服务。-----访问请求首先经过VIP到达负载均衡调度器,然后由负载均衡调度器根据设定好的算法 从 Real Server 列表中选取一个服务节点响应用户请求。

5.2IPVS实现负载均衡的机制:

  • NAT 网络地址转换模式
  • TUN 使用IP隧道技术 IP隧道模式
  • DR 使用直接路由技术 直接路由模式

优缺点:

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种)

静态:

  • 轮叫调度(Round Robin)
  • 加权轮叫调度(Weighted Round Robin)

动态:

  • 最少链接调度(Least Connections)
  • 加权最少链接调度(Weighted Least Connections)

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模式)

LVS 负载均衡集群搭建_第2张图片

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 <> /etc/rc.d/rc.local

 

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-/ldirectord.cf /etc/ha.d

服务启动脚本 

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 service

virtual=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.安装图形化管理配置工具

#yum install cman* ipvsadm modcluster piranha

配置文件

说明

/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

LVS 负载均衡集群搭建_第3张图片

LVS 负载均衡集群搭建_第4张图片

 

12.web页面配置部分

--------由于本实验只涉及到一台Director Server调度服务器,未做双机热备,所以不用理会下面两个选项:

12.1GLOBAL SETTINGS 是用来设置 Director Server 的全局配置:

包含: primary server public ip : LVS 服务器的ip

primary server public ip : LVS 如果启用双机热备,心跳地址

超时设置:

Use network type :使用的工作模式 .默认是 : DR模式

LVS 负载均衡集群搭建_第5张图片

初始LVS 负载均衡集群搭建 

是用来设置 Director Server的双机热备从服务器

12.2设置 VIRTUAL SERVERS

LVS 负载均衡集群搭建_第6张图片

添加

LVS 负载均衡集群搭建_第7张图片

编辑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

LVS 负载均衡集群搭建_第8张图片

基于该 VIRTUAL SERVER(192.168.1.135),添加REAL SERVER 并设置("EDIT")

12.4添加并设置REAL SERVER

LVS 负载均衡集群搭建_第9张图片

添加

初始LVS 负载均衡集群搭建

编辑 REAL SERVER

LVS 负载均衡集群搭建_第10张图片

再次添加REAL SERVER

LVS 负载均衡集群搭建_第11张图片

设置 REAL SERVER 2

LVS 负载均衡集群搭建_第12张图片

12.5激活添加的REAL SERVER

LVS 负载均衡集群搭建_第13张图片

初始LVS 负载均衡集群搭建

12.6启动pulse服务

注意:上面的虚拟服务器激活了才可启动

[root@localhost Desktop]# service pulse start

Starting pulse: [ OK ]

[root@localhost Desktop]#chkconfig pulse on

LVS 负载均衡集群搭建_第14张图片

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 负载均衡集群搭建_第15张图片

LVS 负载均衡集群搭建_第16张图片

----实验成功

多种配置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 <> /etc/rc.d/rc.local 

/sbin/lvs-rs.sh 

EOF 

/bin/cat <> /sbin/lvs.sh 

#!/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

你可能感兴趣的:(LVS)