mysql 负载高可用 哪个方案最好

mysql 负载高可用 哪个方案最好,第1张

mysql负责高可用,可以参考如下几种方案:

1.基于共享存储的方案SAN

案介绍:SAN(Storage Area

Network)简单点说就是可以实现网络中不同服务器数据共享,共享存储能够为数据库服务器和存储解耦。使用共享存储时,服务器能够正常挂载文件系统

并 *** 作,如果服务器挂了,备用服务器可以挂载相同的文件系统,执行需要的恢复 *** 作,然后启动MySQL。共享存储的架构如下:

优点:

1.可以避免存储外的其它组件引起的数据丢失。

2.部署简单,切换逻辑简单,对应用透明。

3.保证主备数据的强一致。

限制或缺点:

1.共享存储是单点,若共享存储挂了,则会丢失数据。

2.价格比价昂贵。

2.基于磁盘复制的方案 DRBD

案介绍:DRBD(Distributed Replicated Block

Device)是一种磁盘复制技术,可以获得和SAN类似的效果。DBRD是一个以linux内核模块方式实现的块级别同步复制技术。它通过网卡将主服务

器的每个块复制到另外一个服务器块设备上,并在主设备提交块之前记录下来。DRBD与SAN类似,也是有一个热备机器,开始提供服务时会使用和故障机器相

同的数据,只不过DRBD的数据是复制存储,不是共享存储。DRBD的架构图如下:

优点:

1.切换对应用透明

2.保证主备数据的强一致。

限制或缺点:

1.影响写入性能,由于每次写磁盘,实质都需要同步到网络服务器。

2.一般配置两节点同步,可扩展性比较差

3.备库不能提供读服务,资源浪费

3.基于主从复制(单点写)方案

前面讨论的两种方案分别依赖于底层的共享存储和磁盘复制技术,来解决MYSQL服务器单点和磁盘单点的问题。而实际生产环境中,高可用更多的是依赖

MySQL本身的复制,通过复制为Master制作一个或多个热副本,在Master故障时,将服务切换到热副本。下面的几种方案都是基于主从复制的方

案,方案由简单到复杂,功能也越来越强大,实施难度由易到难,各位可以根据实际情况选择合适的方案。

MySQL是一个高速度、高性能、多线程、开放源代码,建立在客户/服务器(Client/Server)结构上的关系型数据库管理系统(RDBMS)。它始于1979年,最初是MichaelWidenius为瑞典TcX公司创建的UNIREG数据库系统,当时的UNIREG没有SQL(StructuredQueryLanguage结构化查询语言)接口,限制了它的应用。

1996年5月,Widenius开发出了MySQL的最初版本,开始在Internet上公开发行。MySQL的开发人员从一开始就一直关注它的性能,为此不惜特性集,直到今天,MySQL依然保持本色,以高速度高性能为首要原则。随着时间的推移,MySQL也加入了大型数据库产品的高级特性,如存储过程、视图、触发器等,使其在企业级数据库系统中开始被部署应用[1]。

2008年10月,SUN公司收购了MySQLAB公司,开始进入开源领域。随着重量级 *** 作系统Solaris的开源,SUNMySQL在数据库市场占有的份额将会进一步提高。因此,在生产环境中部署具有负载均衡功能的MySQL服务器集群,对于提高企业数据库应用系统的速度、稳定性及可伸缩性具有很大的现实意义,也可以有效降低应用系统的投资成本。

一、负载均衡基本思路

在一个服务器集群中,尽可能的平均负载量。通常做法是在服务器前端设置一个负载均衡器(专门的硬件设备),MySQL的负载均衡,通常都离不开数据分片(把数据分割成小块,存储到不同的db节点中)、复制等 *** 作。

负载均衡的主要贡献,除了均发数据库请求,还可提供管理读/写策略。在分发请求时则确定那些节点可写,可读,随即将请求发送到指定节点上执行 *** 作。

二、实现负载均衡的方式:

1、mysql读写分离:

mysql复制时,产生了多个数据副本(备库),为减少服务器压力,备库用于处理读 *** 作,主库可同时处理读写是mysql集群实现读写分离的常用策略。

由于备库的复制是异步的,无法实时同步,读写分离的主要难点也在于备库上的脏数据。通常如果使用备库进行读,一般对数据的实时性要求不能太高。对此,mysql提供了几种常见的读写分离方式,例如基于查询的读写分离、基于脏数据、基于会话等,有兴趣可继续研究。

mysql设置的读写分离,减少了主库的请求量,将大量读的 *** 作发送给备库,实现负载均衡。

2、修改DNS

在高并发负载均衡(一)——企业架构分析和DNS中详细介绍了DNS以及DNS如何实现负载,简言之,通过n个服务器IP指定到一个域名,根据请求的不同标识特征,将请求发送给不同的IP服务器进行处理。

3、引入中间件

mysql官方提供了一个mysql负载的中间件,mysql_proxy,也需要在服务器上进行安装,修改配置文件(mysql的服务器IP),实质与nginx类似,也是一个代理服务器。

4、利用mysql复制分流查询 *** 作

利用mysql的主从复制可以有效的分流更新 *** 作和查询 *** 作,具体的实现是一个主服务器,承担更新 *** 作,多台从服务器,承担查询 *** 作,主从之间通过复制实现数据的同步。多台从服务器一方面用来确保可用性,一方面可以创建不同的索引满足不同查询的需要。

对于主从之间不需要复制全部表的情况,可以通过在主的服务器上搭建一个虚拟的从服务器,将需要复制到从服务器的表设置成blackhole引擎,然后定义replicate-do-table参数只复制这些表,这样就过滤出需要复制的binlog,减少了传输binlog的带宽。因为搭建的虚拟的从服务器只起到过滤binlog的作用,并没有实际纪录任何数据,所以对主数据库服务器的性能影响也非常的有限。

通过复制分流查询的存在的问题是主数据库上更新频繁或者网络出现问题的时候,主从之间的数据可能存在差异,造成查询结果的异议,应用在设计的时候需要有所考虑。

5、采用分布式数据库架构

mysql从5.0.3开始支持分布式事务,当前分布式事务只对Innodb存储引擎支持。分布式的数据库架构适合大数据量,负载高的情况,有良好的扩展性和高可用性。通过在多台服务器之间分布数据实现在多台服务器之间的负载平均,提高了访问的执行效率。具体实现的时候,可以使用mysql的Cluster功能(NDB引擎)或者自己编写程序来实现全局事务。

我使用下面的Debian服务器,它们都在同一个网段(本例如:192.168.0.x):

sql1.test.com: 192.168.0.101 MySQL 群集节点 1

sql2.test.com: 192.168.0.102 MySQL 群集节点 2

loadb1.test.com: 192.168.0.103 负载均衡 1 / MySQL 群集管理服务器

loadb2.test.com: 192.168.0.104 负载均衡 2

另外我们需要一个虚拟IP地址:192.168.0.105。它会安排给这个MySQL群集的负载均衡,以便于

应用程序通过统一单独的IP地址来访问群集。

尽管我们想在MySQL群集中使用两个节点,但是我们仍然需要第三个节点,MySQL群集管理服务器

,主要的一个原因是:如果其中一个MySQL群集节点坏了,而MySQL群集管理服务器没有运行,那

么两个群集节点上的数据将会不一致(“split brain”)。我们需要它来配置MySQL群集.

因此我们的安装一般需要五台机器:

2个MySQL群集节点 + 1个群集管理服务器 + 2个负载均衡 = 5

因为群集管理服务器没有使用多少资源,系统将会空着什么都不做,所以我们可以把我们的第一

个负载均衡和它一起放在同一台机器上,这样可以节约我们一台服务器,所以最好我们只需要四台

机器。

二 配置MySQL群集管理服务器

首先我们要下载MySQL 5.0.19,并安装群集管理服务器(ndb_mgmd)和群集管理客户端 (ndb_mgm - 它

可以用来监控群集的运行情况). 下面的步骤是在loadb1.test.com (192.168.0.103)上进行的:

loadb1.test.com:

mkdir /usr/src/mysql-mgm

cd /usr/src/mysql-mgm

wget dev.mysql.com/get/Downloads/MySQL-5.0/mysql-max-5.0.19-linux-i686-\

glibc23.tar.gz/from/.mirrorservice.org/sites/ftp.mysql.com/

tar xvfz mysql-max-5.0.19-linux-i686-glibc23.tar.gz

cd mysql-max-5.0.19-linux-i686-glibc23

mv bin/ndb_mgm /usr/bin

mv bin/ndb_mgmd /usr/bin

chmod 755 /usr/bin/ndb_mg*

cd /usr/src

rm -rf /usr/src/mysql-mgm

下一步,我们必须创建群集的配置文件,/var/lib/mysql-cluster/config.ini:

loadb1.test.com:

mkdir /var/lib/mysql-cluster

cd /var/lib/mysql-cluster

vi config.ini

———-

[NDBD DEFAULT]

NoOfReplicas=2

[MYSQLD DEFAULT]

[NDB_MGMD DEFAULT]

[TCP DEFAULT]

# Section for the cluster management node

[NDB_MGMD]

# IP address of the management node (this system)

HostName=192.168.0.103

# Section for the storage nodes

[NDBD]

# IP address of the first storage node

HostName=192.168.0.101

DataDir= /var/lib/mysql-cluster

[NDBD]

# IP address of the second storage node

HostName=192.168.0.102

DataDir=/var/lib/mysql-cluster

# one [MYSQLD] per storage node

[MYSQLD]

[MYSQLD]


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/7610896.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-07
下一篇 2023-04-07

发表评论

登录后才能评论

评论列表(0条)

保存