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

本文涉及的产品
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
简介: 目录 一、概念了解... 3 二、搭建集群... 3 2.1 集群架构设计... 3 2.2 基础准备工作... 3 2.3 配置两台Mysql服务器... 6 2.4 配置主负载服务器... 8 2.5 配置从负载服务器... 13 三、测试集群... 14   使用LVS+Keepalived实现Mysql的 负载均衡Web集群系统 一、概念了解 为了实现一个负载均衡的Web集群系统,综合比较之后,我决定选LVS+Keepalived+Mysql的方式。

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


目录


使用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 多个连接

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
9月前
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
4月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
636 7
|
分布式计算 关系型数据库 MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
174 3
|
9月前
|
负载均衡 前端开发 JavaScript
LVS-DR模式、keepalived、Nginx与Tomcat合作,打造动静分离,高效负载均衡与高可用性
为了采用这样的架构,你需要对LVS-DR、Keepalived、Nginx与Tomcat有一定的理解和掌握,同时也需要投入一些时间去研究和配置,但是一旦你把它运行起来,你将会发现,这一切都是值得的。
382 11
|
10月前
|
负载均衡 算法 关系型数据库
大数据新视界--大数据大厂之MySQL数据库课程设计:MySQL集群架构负载均衡故障排除与解决方案
本文深入探讨 MySQL 集群架构负载均衡的常见故障及排除方法。涵盖请求分配不均、节点无法响应、负载均衡器故障等现象,介绍多种负载均衡算法及故障排除步骤,包括检查负载均衡器状态、调整算法、诊断修复节点故障等。还阐述了预防措施与确保系统稳定性的方法,如定期监控维护、备份恢复策略、团队协作与知识管理等。为确保 MySQL 数据库系统高可用性提供全面指导。
|
消息中间件 分布式计算 关系型数据库
大数据-140 - ClickHouse 集群 表引擎详解5 - MergeTree CollapsingMergeTree 与其他数据源 HDFS MySQL
大数据-140 - ClickHouse 集群 表引擎详解5 - MergeTree CollapsingMergeTree 与其他数据源 HDFS MySQL
318 0
|
12月前
|
监控 关系型数据库 MySQL
云数据库:从零到一,构建高可用MySQL集群
在互联网时代,数据成为企业核心资产,传统单机数据库难以满足高并发、高可用需求。云数据库通过弹性扩展、分布式架构等优势解决了这些问题,但也面临数据安全和性能优化挑战。本文介绍了如何从零开始构建高可用MySQL集群,涵盖选择云服务提供商、创建实例、配置高可用架构、数据备份恢复及性能优化等内容,并通过电商平台案例展示了具体应用。
|
负载均衡 算法 Linux
LVS+Keepalived:实现高效软负载均衡的利器
本文介绍了如何使用LVS(Linux Virtual Server)和Keepalived搭建高可用负载均衡集群。LVS通过不同调度算法将请求转发给后端服务器,而Keepalived基于VRRP协议实现服务高可用,避免IP单点故障。具体步骤包括环境准备、安装配置ipvsadm和Keepalived、启动服务及测试。文中还详细解释了配置文件中的关键参数,并提供了故障转移测试方法。最后,文章简要对比了软件、硬件和云负载均衡方案的特点,帮助读者选择合适的负载均衡策略。
1893 4
|
SQL 分布式计算 关系型数据库
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
383 0
|
4月前
|
算法 Java Go
【GoGin】(1)上手Go Gin 基于Go语言开发的Web框架,本文介绍了各种路由的配置信息;包含各场景下请求参数的基本传入接收
gin 框架中采用的路优酷是基于httprouter做的是一个高性能的 HTTP 请求路由器,适用于 Go 语言。它的设计目标是提供高效的路由匹配和低内存占用,特别适合需要高性能和简单路由的应用场景。
425 4

推荐镜像

更多