如何打造MySQL高可用平台

如何打造MySQL高可用平台,第1张

概述介绍《如何打造MySQL高可平台》开发教程,希望对您有用。

《如何打造MysqL高可用平台》要点:
本文介绍了如何打造MysqL高可用平台,希望对您有用。如果有疑问,可以联系我们。

相关主题:MYSQL高可用 / MYSQL调优

原文:http://www.jianshu.com/p/bc50221972ca

作者:何约什

一 、引子

笔者刚开始进入公司的时候,主要是忙于分布式MysqL系统----MyShard的构建,公司使用了大量的IDC机房,基于这种网络特点,MyShard设计当初完全是为了是一套支持Multi-Master *** 作的高可用性的分布式数据库,可以在多个机房中部署的业务上提供快速的写 *** 作,实现了分布式高可用存储能力。

在业务增长期,MyShard解决了公司的很多大型的数据库存储业务,随着公司业务逐渐稳定下来,分布式存储需求越来越少。而公司却有大量的小业务以及不断尝试的各种新业务,需要越来越多的小数据量的数据库存储。

所以这时候发现,之前的工作方向一直集中在公司的10%不到的业务上,而公司的90%以上的存储需求是MysqL的需求,目前有好上千套的MysqL在给不同的业务提供服务。而在当时,不管是MysqL的交付还是管理都比较原始,极端情况下,我们需要业务申请方自己提供服务器来部署MysqL,所以交付的周期也很长。而在高可用方面,都是需要业务方自己去处理主从切换等等问题,出现主数据库故障的时候,往往需要业务方自己去修改配置文件,重启进程,增加了服务的中断时间。

二、为什么没有采用开源的高可用方案

业界比较流行的MysqL的高可用方案主要有:MMM和MHA两种,对这个方案的分析网上有很多,MHA是优先选取的方案。

MHA的工作原理:


clipboard.png

当master出现故障时,通过对比slave之间I/O线程读取master binlog的位置,选取最接近的slave做为latestslave。其它slave通过与latest slave对比生成差异中继日志。在latest slave上应用从master保存的binlog,同时将latest slave提升为master。最后在其它slave上应用相应的差异中继日志并开始从新的master开始复制。

在MHA实现Master故障切换过程中,MHA Node会试图访问故障的master(通过SSH),如果可以访问(不是硬件故障,比如InnoDB数据文件损坏等),会保存二进制文件,以最大程度保证数据不丢失。MHA和半同步复制一起使用会大大降低数据丢失的危险。

MHA的优点

MHA提供了一个通用的框架,我们可以自定义判断和切换 *** 作的步骤;而且,MHA的代码开源,我们甚至可以进行二次开发,这都为高可用系统提供了很好的扩展 能力。

MHA的缺点

需要在各个节点间打通ssh信任,这对某些公司安全制度来说是个挑战,因为如果某个节点被黑客攻破的话,其他节点也会跟着遭殃;

自带提供的脚本还需要进一步补充完善,当然了,一般的使用还是够用的。

虽然一个MHA manger可以管理多个集群,但是没有大规模集群的经验。

高可用依赖于vip的方案,譬如采用keepalive来达到vip的切换,但是keepalive会限制切换的主机必须在一个网段,对于跨机房不在一个网段的服务器来说,就无法支持了。在大规模为每个MysqL集群安排一个vip也是难以实现的。keepalive在一个网段内,部署多套也会互相影响。

为什么不采用

我们公司的数据库的特点:

数据库多机房部署

数据库集群规模上千

安全性考虑

三、四层代理----RDS项目

除了MMM和MHA之外,MysqL还可以采用代理来实现高可用,MysqL代理会比MHA方案更适合大规模的使用。

当时阿里和腾讯分别推出了rds和cdb。我们研究了腾讯的cdb方案,cdb是基于TGW也即是NAT的模式实现了4层代理模型,来达到MysqL的高可用以及负载均衡功能。

但是TGW方案有个比较大的问题就是需要修改MysqL协议,一旦修改MysqL协议,所有的客户端(各种语言的驱动)都需要进行修改,这在推广上是非常难的。

所以我们采用了一种折中的方案,启动了RDS项目,主要用于提供MysqL内部云服务,其中高可用方案如下图所示,采用了iptables的NAT来实现MysqL的代理路由功能。


clipboard.png

4层代理层基本实现原理

业务方首先连接到代理服务器上,由于代理服务器上有NAT目标地址转换规则,所以会转到目标MysqL主机上,同时从MysqL主机回包到代理服务器后,由于有NAT源地址转换规则,又会转发回业务方,从而实现了代理功能。

下面举例说明我们如何为一个业务启动RDS四层代理:
我们先准备好以下几台机器:

客户端:172.26.14.16
代理 :172.26.82.45 启动业务代理端口20000
目标机器:172.26.82.7 部署MysqL 端口号为3306

在代理机器上设置规则:

1、打开forward
echo 1 > /proc/sys/net/ipv4/ip_forward

2、设置从客户端请求的目标地址和原地址转换规则
iptables -t nat -A PREROUTING -p tcp -s 172.26.14.16 --dport 3306 -j DNAT --to-destination 172.26.82.7:20000
iptables -t nat -A POSTROUTING -p tcp -d 172.26.82.7 --dport 20000 -j SNAT --to-source 172.26.82.45

3、设置好规则之后,就可以通过MysqL来连接到代理的20000端口了。
MysqL -utest -ptest -h172.26.82.45 -P20000
这时候,实际访问的是172.26.82.7上3306端口的MysqL数据库。


总结

以上是内存溢出为你收集整理的如何打造MySQL高可用平台全部内容,希望文章能够帮你解决如何打造MySQL高可用平台所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

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

原文地址: http://outofmemory.cn/sjk/1164202.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存