高可用Lvs集群搭建和测试报告
Lvs(Linux Virtual Server)是Linux下的负载均衡器,支持LVS-NA T、 LVS-DR、LVS-TUNL三种不同的方式,NA T用的不是很多,主要用的是DR、TUNL方式。
DR方式适合所有的RealServer在同一网段下,即接在同一个交换机上。
TUNL方式不限制RealServer 的位置,完全可以跨地域、空间,只要系统支持Tunnel就可以。
运行Lvs的前端调度器,目前只能为Linux,针对FreeBSD刚刚出来,性能不是很好。
可以针对Web、MySQL、Ftp等服务做load balances。
后端的RealServer则可以为各类系统,Linux、Solaris、Aix、BSD、Windows都可。
下面主要针对DR方式下的Web、MySQL负载均衡,以及Lvs + HA做功能性的验证和性能方面的测试。
1.集群系统拓扑
2.环境搭建说明
1.前端Load Balancer、Backup为虚拟机Linux系统,后端两台Real Server为纯Linux系
统。
2.192.168.6.229为前端负载均衡调度器,虚拟IP为192.168.6.111,安装并配置了ipvsadm
(负载均衡)、ldirectord(健康监控)服务。
3.192.168.6.230为调度器的备份,采用heartbeat实现。
4.192.168.6.240、192.168.6.241为两台提供服务的真实Server。
3.功能性验证
首先在Load Balancer上安装ipvsadm、ldirectord、heartbeat服务,备机上也相同,可以用YUM进行安装,安装完成后需要将ha.cf、haresources、authkeys、ldirectord.cf文件拷贝到/etc/ha.d/ 目录下。
3.1. 验证Apache负载均衡。
3.1.1.配置
1.配置Load Balancer的ipvsadm,脚本内容如下:
2.配置Load Balancer的ldirectord,配置文件(/etc/ha.d/ldirectord.cf)主要内容如下:
并且分别在Real Server上创建index.html脚本,输出内容为Test Page。
3.配置Real Server,脚本内容如下:
注:所有的Real Server配置一样。
3.1.2.测试步骤
1.在两台Real Server上分别创建index.php脚本,一个输出Real Server One,另外一个输
出Real Server Two。
2.分别运行Load Balancer和Real Server上的配置脚本。
3.在客户端用浏览器不断访问http://192.168.6.111/地址,发现Real Server One和Real
Server Two的输出会交替出现,说明客户端的请求被轮叫到了不同的Real Server上。
4.停止一台Real Server(192.168.6.240)的网络服务。
5.在客户端用浏览器不断访问http://192.168.
6.111/地址,发现输出总是Real Server Two,
说明调度器在它的管理列表中删除了宕机的Real Server,客户端的请求被全部转发到了一台正常的Real Server上。
6.再次启动Real Server(192.168.6.240)的网络服务。
7.在客户端用浏览器不断访问http://192.168.6.111/地址,发现Real Server One和Real
Server Two的输出又会交替出现,说明调度器在它的管理列表中又添加了恢复的Real Server,客户端的请求又被轮叫到了不同的Real Server上。
8.通过watch ipvsadm命令,查看到Real Server的健康状况、轮叫次数等信息和上面吻合。
9.通过抓包工具观察,请求返回的地址仍然是Load Balancer的虚拟IP,而非Real Server
的真实IP。
以上测试过程,反复了多次,结果都是一样的。
3.2. 验证MySQL负载均衡。
3.2.1.配置
Load Balancer的ipvsadm配置脚本和上面Apche的负载均衡配置基本相同,只需要把端口号改为3306。
Real Server的配置脚本也同Apche的负载均衡配置脚本。
Load Balancer的ldirectord配置文件(/etc/ha.d/ldirectord.cf)主要内容如下:
并且分别在Real Server的MySQL test库里创建link表,语句如下:
然后执行语句insert into link values (1); 插入一条记录。
3.2.2.测试步骤
1.分别运行Load Balancer和Real Server上的配置脚本。
2.在客户端不断执行命令:mysql -h192.168.6.111 -uasterisk -p1q2w3e4r,发现数据库被交
替的连接到两台Real Server的DB上,说明客户端的请求被轮叫到了不同的Real Server 上。
3.停止一台Real Server(192.168.6.240)的网络服务。
4.在客户端不断执行相同的命令进行连接,发现每次都连接在同一个DB上,说明调度器
在它的管理列表中删除了宕机的Real Server,客户端的请求被全部转发到了一台正常的Real Server上。
5.再次启动Real Server(192.168.
6.240)的网络服务。
6.在客户端不断执行相同的命令进行连接,发现数据库又被交替的连接到两台Real Server
的DB上,说明调度器在它的管理列表中又添加了恢复的Real Server,客户端的请求又被轮叫到了不同的Real Server上。
7.通过watch ipvsadm命令,查看到Real Server的健康状况、轮叫次数等信息和上面吻合。
以上测试过程,反复了多次,结果都是一样的。
3.3. 验证Apache + MySQL负载均衡。
3.3.1.配置
Load Balancer的ipvsadm配置脚本内容如下:
Load Balancer的ldirectord配置文件(/etc/ha.d/ldirectord.cf)内容包含了上面Apache和MySQL 负载均衡的配置部分。
Real Server的配置脚本同Apche的负载均衡配置脚本。
3.3.2.测试步骤
测试步骤综合了上述Apache、MySQL负载均衡测试部分,结果也相同。
3.4. 验证调度器主、备机自动切换。
3.4.1.配置
Heartbeat的配置主要是ha.cf、haresources、authkeys三个配置文件,并且备机的配置必须和主机保持一致。
下面分别列出各配置文件的主要内容。
1.主文件ha.cf的主要内容如下:
2.资源文件haresources的主要内容如下:
分别进行了基于资源httpd、httpd + mysqld、httpd + ipvsadm的配置。
3.认证文件authkeys的主要内容如下:
注:选取一种认证方式,这个文件的权限必须是600。
另外修改主、备机的主机名分别为test7和test8,并分别修改/etc/hosts文件,添加内容:
3.4.2.测试步骤
1.启动主、备机heartbeat服务,此时虚拟IP在主机上,并且主机定义的资源运行正常。
备机定义的资源是停止的,如httpd、mysqld、ipvsadm。
2.在客户端通过浏览器访问虚拟IP或者mysql通过虚拟IP进行连接都是正常的,说明主
机上的资源运行正常。
3.停掉主机的网络服务。
4.立即通过浏览器访问或MySQL连接都不正常,过大概一分多钟,又都正常了。
此时虚
拟IP转移到了备机上,并且备机上的资源相应启动,主机上的资源被停止。
说明主机宕机后,备机heartbeat在定义的时间内没有接收到来自主机的心跳,就启动服务接管了主机的工作。
5.重新启动主机的网络服务。
6.立即通过浏览器访问或MySQL连接又不正常了,过了大概一分多钟,又都正常了。
此
时虚拟IP又转移到了主机上,并且主机上的资源相应启动,备机上的资源被停止。
说明当主机恢复以后,又接管回了所有的服务。
以上测试过程,反复了多次,结果都是一样的。
注:主、备机的时间需要保持一致,不然heartbeat有可能工作不正常,最好都配置NTP服务。
通过以上各个功能性的验证,实现了基于直接路由和轮叫算法的高可用性Lvs集群系统。
4.性能测试
用Apache 的ab 工具对Lvs系统做了简单的性能测试,即请求一个index页面,输出结果为一字符串,测试命令如下:
ab -n 100000 -c 100 http://192.168.6.111/(总共请求100000次,每次并发100个请求。
)
注:调度器为虚拟机,Serv 1、Serv 2为CPU 3.0GHz、内存1G的纯Linux系统。
测试过程中通过抓包工具观察,每次测试请求都全部成功。
并且通过负载均衡提供的工具观察到,所有请求都被均衡的分配到两台服务器上。
从上面结果看,两台real server集群的性能基本上是一台的二倍。