使用LVS+Keepalived实现Mysql的 负载均衡Web集群系统

  1. 云栖社区>
  2. 博客>
  3. 正文

使用LVS+Keepalived实现Mysql的 负载均衡Web集群系统

郑郑.in 2018-02-10 14:08:04 浏览1701
展开阅读全文

图片上传太复杂,文本阅读请见附件


目录


使用LVS+Keepalived实现Mysql的

负载均衡Web集群系统

一、概念了解

为了实现一个负载均衡的Web集群系统,综合比较之后,我决定选LVS+Keepalived+Mysql的方式。在开始正式搭建环境之前我对LVS进行了了解。

LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器,是由章文嵩发起的软件项目,现在已经是linux标准内核的一部分。LVS主要用于服务器集群的负载均衡。它工作在网络层,可以实现高性能,高可用的服务器集群技术。它廉价,可把许多低性能的服务器组合在一起形成一个超级服务器。它易用,配置非常简单,且有多种负载均衡的方法。它稳定可靠,即使在集群的服务器中某台服务器无法正常工作,也不影响整体效果。另外可扩展性也非常好。

使用LVS架设的服务器集群系统有三个部分组成:(1)最前端的负载均衡层,用Load Balancer表示;(2)中间的服务器集群层,用Server Array表示;(3)最底端的数据共享存储层,用Shared Storage表示。在用户看来,所有的内部应用都是透明的,用户只是在使用一个虚拟服务器提供的高性能服务。LVS是四层负载均衡,也就是说建立在OSI模型的第四层——传输层之上,传输层上有我们熟悉的TCP/UDP,LVS支持TCP/UDP的负载均衡。因为LVS是四层负载均衡,因此它相对于其它高层负载均衡的解决办法,比如DNS域名轮流解析、应用层负载的调度、客户端的调度等,它的效率是非常高的。这里我们使用DR模式。

二、搭建集群

2.1 集群架构设计

本次实验基于DR负载均衡模式,虚拟IP(VIP)为192.168.5.200。这里创建四台虚拟机,其中,一台作为作为主负载均衡主机,一台作为备用负载均衡主机,两台提供真正的Mysql服务。集群中使用静态IP,他们的主机名及对应ip如表2.1所示。

主机名

功能

IP

lvs-master

主负载均衡主机

192.168.5.120

lvs-slave

备用负载均衡主机

192.168.5.121

lvs-mysql1

提供Mysql服务

192.168.5.122

lvs-mysql2

提供Mysql服务

192.168.5.123

2.2 基础准备工作

本部分对于四台主机做一些基础配置。

(1)配置IP地址,根据集群架构设计,我们将四台主机的IP分别设置为对应IP,如图2.1,图2.2,图2.3,图2.4所示。

c7b5c3df796311e2693166ebd08434fabf56a73e

图2.1 主机的IP设置

188bcb2015927d39b2c232edb60d4e9f8dbac6fc

图2.2 主机的IP设置

21a606e01ca2227b3b5aece621dcdec2eb6642ae

图2.3 主机的IP设置

b2f523070ac9cb184a4d889c13838cf898e5dba7

图2.4 主机的IP设置

(2)将IP地址与主机名绑定。在/etc/hosts文件中进行修改,如图2.5所示。并使用ping命令进行检查,如图2.6所示。

fead08f98c438dea325a2445cba0b189353a8846

图2.5 绑定IP与主机名

068b6c3ae3dc7afbdc1b29e1f654241cfa6ff2dfc97a8da48123e6c84406881b6220220e1b05a6f0

b3f969db3cd7d381a9a19e69a11690eb70dcccd74cb7a5313a831de427f1541092ff2f963f1960e7

图2.6 验证

3)关闭防火墙。使用命令service iptables stop、chkconfig iptables off将四台主机的防火墙关闭。如图2.7所示。

07b3f0d8b3563fe5cbfb5b7609c7144e04814a09  aa52ef711af1cabaa7c7a20701b30b123dd6d108

5a84b92d289a4f8d3c233ffc8b0c7bcc9156c3c1  90d2db42900b56e1da51bd7bb5357dc7bdd4decc

 

图2.7 关闭防火墙

2.3 配置两台Mysql服务器

(1)安装Mysql,使用命令yum install -y mysql-server mysql mysql-deve,在两台Mysql服务器中安装mysql,如图2.8所示。

241168252741975c880bf4bb62e06d979da1ae1710756e71046d45e929332ceece57e01dca916a75

图2.8 安装mysql




(2)创建数据库及表,添加数据。我们分别在两台Mysql服务器上创建数据库bruce,并在bruce中创建表test,在表test中加入数据。如图2.9所示。



5f974c10d924756a518e34d02b94e10e2bdccefa


图2.9  数据库配置

(3)编辑realserver脚本文件,①进入指定文件夹:cd /etc/init.d/;②创建脚本文件:vi realserver这里我们设置虚拟IP为:192.168.5.200;③保存脚本文件后更改该文件权限:chmod 755 realserver;④开启realserver服务:service realserver start;如图2.10所示

4c4ff0f399ed3801baef974f6904628061f6ebc1fcb125e592462030352dcfb8e06783a268bfdd47


图2.10 编辑realserver脚本文件

2.4 配置主负载服务器

(1) 安装Keepalived相关包,我们使用wget http://www.keepalived.org/software/keepalived-1.2.13.tar.gz、tar -zxvf keepalived-1.2.13.tar.gz、cd keepalived-1.2.13命令下载并解压安装包,如图2.11所示。然后使用./configure --disable-fwmark --prefix=/usr/local/keepalived命令时,却出现了报错,如图2.12所示。

499ec78b8f6b07e768be242db480f85cf034132b

图2.11  下载并解压安装包

d75c851e430707e749d7198f4b5ae6fd570296f7

图2.12  出现了一个错误

过认真研究后。我发现这个错误是因为keepalived相关包没有先被安装而引发的错误,于是在安装keepalived之前,我先安装了ipvsadm、popt-devel、openssl-devel包,如图2.13所示。

ab5c94c92590f893f32627333211e95b2e4737da95a5524e11967707e31ca4a7646bcda7c4ce47a29c14d0100aa009a984c5dde8fc131943cac2db03

 图2.13 通过安装依赖包解决错误

经过以上步骤后,Keepalived可以正常安装,如图2.14所示。

 846335b0d81fa8fec2bbcd7bba7d37e081e97212ab102398642a587184b0684b2cba29f693245138

图2.14 Keepalived安装成功

(2)编辑keepalived.conf配置文件。①进入keepalived.conf所在目录:cd /etc/keepalived;②首先清除掉keepalived原有配置:> keepalived.conf;③重新编辑keepalived配置文件:vi keepalived.conf。在这部分,一开始我就遇到了问题:找不到/etc/keepalived目录,如图2.15所示。

fcb125e592462030352dcfb8e06783a268bfdd47

图2.15 找不到文件夹

我通过find命令查找keepalived.conf文件,最终在目录/home/zmy21751106/

keepalived1.2.13/keepalived/etc/keepalived/keepalived.conf中找到了该文件,然后对其进行了修改,如图2.16所示。

499ec78b8f6b07e768be242db480f85cf034132b79a6bde1f947c28d49fd5540e3c2b31d85ebe2ba

图2.16 查找并修改keepalived.conf文件

(3)启动keepalived.服务。我们使用命令service keepalived start来开启服务,这里我又遇到了服务不识别的问题,尴尬……,如图2.17所示。

ee1f0e7d6a242aed207549d2807eceef1763b397

图2.16 服务不识别

通过浏览大量博客,我发现,在启动keepalived服务时会到/etc/keepalived文件夹在去找配置,所以我尝试将前文/home/zmy21751106/keepalived1.2.13/keepalived/etc/keepalive

ed/keepalived.conf文件连接到新创建的文件夹/etc/keepalived下,如图2.17所示。然后再次开启服务,发现问题没有被解决,还是服务不能被识别的错误。

 

cd9f92222e43b87ea81e5d2b3eb225c564950fe4

 

图2.17 尝试使用连接方式解决问题

后来,我又发现想要启动keepalived还需要将他的启动脚本添加到系统服务、拷贝相关的启动命令,于是,我又操作了一番:

cp /usr/local/keepalived/sbin/keepalived /usr/sbin/

cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/

cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
chkconfig --add keepalived
chkconfig --level 2345 keepalived on

如图2.18所示,这次服务可以正常启动了。使用命令ipvsadm查看集群状态,可以看到集群已经启动成功了,如图2.19所示。

bf5606b810d7ad0af595264f8553a98868e6e5b0

图2.18 解决问题及启动服务

8c198c39e8876175e78eb3cc092c8d827eca4240

图2.19 查看集群状态

2.5 配置从负载服务器

从负载服务器与主负载服务器的配置大致相同,只是在keepalived的配置文件中需要改以下两处:(1)将state由MASTER改为BACKUP;(2)将priority由100改为99,如图2.20所示。

0af5fa3e307048329eca08eabbdf70b9bf30232c

图2.20 负载服务器配置文件

三、测试集群

在测试集群部分,我使用集群之外的一台主机对VIP发起连接请求,然而这一部分并不顺利。当向VIP发起请求时,报错了,显示无法连接到192.168.5.120上,并且VIP也ping不通,但是却能够ping同集群内其他真实IP,如图2.21所示。

图2.21 无法连接到VIP

对于这个问题,首先我考录是Mysql权限方面的问题,于是,我增加了一个open用户,密码为123456以供连接。如图2.22所示。

 

图2.22 Mysql权限开放

经过测试,我发现这样修改之后并没有解决问题。在浏览博客的过程中,我发现配置问价中的网卡写错的话,会跟我有一样的报错,于是我检查了配置文件,发现自己的网卡是eth0,而配置文件里写的是eth1,于是进行了修改,后又重启了keepalived服务。如图2.23所示。

 

图 2.23 修改网卡

 经过以上修正,集群已经可以接收外部请求了,下面我们开始测试。

(1)一个连接。我们通过集群外的一台主机向集群发送数据库连接请求,主负载服务器的状态如图2.24所示,Mysql服务器的状态如图2.25所示。

图2.24 主负载服务器状态

图2.25 Mysql服务器状态

 (2)多个连接。当我们使用多个客户端发起连接请求时,集群总是将连接均匀的分配给Mysql服务器,如图2.26所示,即实现了负载均衡。

图2.26 多个连接

网友评论

登录后评论
0/500
评论
郑郑.in
+ 关注