Keepalived+LVS DR模式的集群负载均衡

时间:2021-05-08 03:03:50

下面介绍的是如何利用keepalived+LVS来搭建集群均衡负载

Keepalived+LVS DR模式的集群负载均衡

上图是我搭建的LVS集群,集群上面有两个负载均衡器,一个是主,一个是备;下面是两个server服务器,都在同一个网段之中

,而且共用一个虚拟地址210.72.3.238,我的系统版本是Centos 6.5,下面开始详细讲解:

1在主备Director上面安装LSV软件

LVS是通过IPVS模块来的,主要是用来管理集群

这里首先要安装用于编译IPVS的安装包

yum -y groupinstall Desktop

yum -y install "X Window System"

modprobe -l | grep ipvs检测系统是否支持IPVS模块

Keepalived+LVS DR模式的集群负载均衡

有上述输出证明是支持的。

yum install ipvsadm

ipvsadm --help

如果看到安装提示,表明IPVS已经成功安装

查看ipvs有没有加载进去系统内核

Keepalived+LVS DR模式的集群负载均衡

不管有没有加载,我这里建议都是把加载内核命令写进/etc/rc.local之中,如下图

Keepalived+LVS DR模式的集群负载均衡

这样子已经开机就可以自动加载IPVS模块进去内核之中


2在主备Director上面安装keepalived,在http://www.keepalived.org 上面下载对应版本的keepalived,我这里下载的是keepalived-1.1.19.tar.gz;

tar zxvf keepalived-1.1.19.tar.gz

cd keepalived-1.1.19

./configure  --sysconf=/etc \          (指定配置文件的路径在啊/etc下)

>--with-kernel-dir=/usr/src/kernels/2.6.32-696.6.3.el6.x86_64(指定使用内核源码中的头文件)

如果Linux系统是最小化安装,那么会提示OpenSSL IS NOT properly install 和popt libraries is required

解决方法:
yum -y install openssl -devel

yum -y install popt-devel

make && make install

ln -s /usr/local/sbin/keepalived /sbin/(在/sbin/下创建keepalive的启动快捷方式)

keepalived --help

出现参数的话表明keepalived已经成功安装了


3搭建基于LVS DR模式集群

LVS DR模式:负载均衡器和后端服务器共同组成的局域网会虚拟出一个地址,客户端(例如192.168.10.43)访问的是这个虚拟地址(210.72.3.238),当客户端访问这个虚拟地址时,请求会首先发送到主均衡负载器Director1(210.72.3.230),这时候源mac地址是客户端mac地址,目的mac地址是Director的mac地址,然后均衡负载器根据后端server1或者server2情况选择其中一个服务器,这时候源IP和目标IP以及端口是不会变的,也就是源IP是客户端,目标IP是虚拟地址,均衡负载器只会把源mac地址修改为Director的mac地址,目的mac地址修改为后端服务器(如server2)mac地址,然后把ARP请求转发给server2上面,当后端服务器收到ARP请求时,会检查自身设备的mac地址是否与目的mac地址匹配,如果匹配,则会直接响应客户端,这个时候,源mac地址是后端服务器的Mac地址,目的mac地址是客户端的Mac地址,也就是说,DR模式是通过ARP请求来完成的。如下图:

Keepalived+LVS DR模式的集群负载均衡


主备Director配置keepalived,vi /etc/keepalived/keepalived.conf

Keepalived+LVS DR模式的集群负载均衡

这里的virtual_server是210.72.3.238,因为我后面会在server中搭建Httpd服务器,所以监听的端口是80,有两个server,分别是231和232,lb_kind是LVS模式,有DR,TUN,NAT,这里是DR模式,state,主Director为MASTER,备Director为BACKUP,这里是备Director,所以设为BACKUP;priority优先级,主为100,这里备为80,weight权重,根据后端服务器权重设置,性能高的服务器权重比较大

主备Director配置的唯一区别是state和priority的区别。

/etc/init.d/keepalived start    启动keepalived服务

输入命令ipvsadm

Keepalived+LVS DR模式的集群负载均衡

这里出现了两台服务器的信息,表明keepalived已经配置成功


4安装httpd服务

在后端服务器server1和server2安装httpd服务,yum -y install httpd

分别在两台服务器上面打开httpd服务的根目录vi /var/www/html/index.html

在server1的index.html里面输入

<h1>server1</h1>

在server2的Index.html里面输入

</h1>server2</h1>

启动httpd服务

service httpd start


5配置服务器启动脚本,vi /etc/init.d/lsvDR_node创建,

Keepalived+LVS DR模式的集群负载均衡

VIP是虚拟地址210.72.3.238,用于接收Director的数据包

ifconfig lo:0是在回环口设置虚拟地址,arp_ignore和arp_announce在回环口lo和其他能收到ARP广播的接口要分别设置为1和2,下面给出我的理解:

这两个参数是Linux 2.6内核的ARP参数,用于限制ARP请求,在客户端发送请求到集群中的时候,整个集群都能收到ARP广播,因为集群中的主机都绑定了VIP地址,通过限制后端服务器的ARP请求,让请求先到Director均衡负载器。

arp_ignore设置为1时,只回答目标IP地址是来访网络接口本地地址的ARP查询请求。现在server1有eth0(210.72.3.231),lo0(210.72.3.238),那么客户端发起对eth0的ARP请求时,会先到达物理端口eth0,eth0会响应,但是,eth0收到发起对lo0的ARP请求时,eth0不会响应。这里的结果是eth0不会响应,因为客户端请求的是lo0的IP地址,但当Director把目的mac地址修改为server1设备的mac地址时,server1才会响应。

arp_announce设置为2,对查询目标使用最恰当的本地地址。当210这个局域网要发送ARP数据包响应客户端时,Linux默认情况下从哪个接口出去就作为源地址,这里会从server1的eth0出去,所以当arp_announce为0的时候源地址是210.72.3.231;在客户端收到arp请求的时候会更新arp缓存,从而导致一些问题出现。如果arp_announce设置为2,那么请求的源地址就会使用210.72.3.238,即为虚拟地址。

VIP的广播地址设为自己地址,目的是防止局域网各个Vip主机之间进行广播,导致无法通信。


启动脚本:chmod 755 /etc/init.d/lsvDR_node

           /etc/init.d/lsvDR_node


6测试

在浏览器中输入vip,http://210.72.3.238 

Keepalived+LVS DR模式的集群负载均衡

故障测试:在server2上面关掉httpd服务

 service httpd stop

在浏览器中输入vip,http://210.72.3.238

Keepalived+LVS DR模式的集群负载均衡

在主Director中查看日志

tail -20 /var/log/messages

Keepalived+LVS DR模式的集群负载均衡

看到210.72.3.232server2的链接断开了


主备Director故障测试

在主Director上面停止keepalived服务模拟故障

service keepalived stop

在备Director上面查看系统日志

tail -20 /var/log/messages

Keepalived+LVS DR模式的集群负载均衡

可以看到,备Director状态切换成master了