MySQL详解(十):企业中MySQL的高可用架构

企业中MySQL的高可用架构

MySQL数据库作为最流行的开源数据库产品,拥有许多成熟的高可用架构方案,其方案的可用性覆盖率为90%~99.999%,能够适用于对可用性级别的多种不同的需求。其主要是利用复制技术,多个不同数据库主机之间进行复制,以保持数据的一致性,并通过一些第三方开源软件来实现负载均衡统一的访问接口,既减少应用程序开发的复杂性,也降低了企业的运营成本。

 

本章会MySQL两种常用的高可用架构方案进行配置指导;

1.MySQL高可用的简单介绍

       在单点访问服务中,客户访问应用系统,应用系统直接访问数据库,这种系统架构中所有存储数据和读写操作都发生在唯一的一台服务器主机上,数据库数据都存储在一台数据库系统中,往往一旦数据库系统发生故障,应用系统没有办法在短时间内恢复正常;

       通常使用数据库高可用性的设计,同步读写分离,负载均衡等手段达到减少系统的停机时间,提高系统服务可靠性。

 

2.MySQL主从复制

       MySQL主从复制是指单台MySQL服务器的数据复制到另一台MySQL服务器。这种方案不需要复杂的配置,数据可以从单台Master主机复制到任意数量的Salve主机。复制使用异步方式,在MySQL 5.5中增加了半同步复制,有效地提高了复制的可靠性;

 

 

1.MySQL主从架构设计

       该架构由单台服务器和多台从服务器构成,主服务器主要是用来接受来自应用程序的写请求,从服务器接受读请求,在从服务器与应用层之间可以搭建负载均衡设备。例如:LVS、Haproxy、F5等。该架构可以将读写请求分离到不同的机器上执行,但需要应用程序实现不同的连接池,将读操作负载均衡到多个从服务器主机上,提高系统整体读操作的处理能力。但只有单台主服务器可以写数据,所以写操作无法负载均衡,也限制了扩展性,并且当主服务器发生故障的时候,系统将无法写数据,存在单点故障。通常适用于对可用性要求不高的场景,例如:在线备份,将其中一台从服务器用于备份数据,避免了备份对主服务器产生的影响;

 

在应用层和从服务器之间可以添加LVS,便可以实现负载均衡,同时从服务器可以水平扩展来提高系统的整体读性能;

 

 

2.配置环境

主机名

IP地址

角色

备注

主服务器

192.168.1.20

主机

数据库写

从服务器1

192.168.1.21

主机

数据库读

从服务器2

192.168.1.22

从机

数据库读

LVS

192.168.1.23

LVS

负载均衡

 

 

3.服务器的安装配置

首先在主服务器,从服务器1,从服务器2三台主机上安装MySQL数据库。把MySQL安装脚本上传到需要安装MySQL的服务器上,然后执行脚本操作。脚本有三个参数分别是:软件包、安装目录、配置文件、需要指定这三个参数才能顺利安装;

 

配置MySQL

 

安装MySQL完之后,即可对它们进行配置,具体操作步骤如下:

第一步:

在主服务器主机上开启binlog日志,保持server-id的唯一性,这步最好安装mysql之前就写在配置文件中;

 

第二步:

在主服务器上配置复制所需要的账户,如下所示:

mysql > grant replication salve on *.* to repl@% identified by ‘repl_password’;

 

mysql > flush privileges;

第三步:

接着,在从服务器1和从服务器2上分别配置主服务器信息,如下所示:

mysql > change master to master_host=’192.168.1.20’,master_user=’repl’,master_password=’repl_password’;

 

mysql > salve start;

 

mysql > show slave status\G

 

参数说明:

Master_Host:

被复制的主机地址;

Master_User:

       在主服务器上创建的用户复制的账户;

Master_Port:

       主服务器上MySQL运行的端口;

Slave_IO_Running:

       显示I/O线程的运行状态;

Salve_SQL_Running:

       显示SQL线程运行的状态;

Last_Errot:

       当复制中断的时候,此处会显示错误原因,并由此来修复复制;

Seconds_Behind_Master:

       显示从服务器中I/O线程与SQL线程之间的时间差,可以反映出主服务器之间的网络快慢;

 

 

4.LVS的安装配置

接下来可以配置LVS,用来做负载均衡,具体的操作步骤如下:

第一步:

       在LVS主机上安装LVS相关的软件,可以通过Yum的方式:

root@LVS# yum install ipvsadm piranha

第二步:

       安装完毕,开始配置LVS,编辑LVS的配置文件:

root@LVS#vi /etc/sysconfig/ha/lvs.cf

 

在该配置文件中需要配置LVS 的主机物理网络口IP;

Slave-1的主机IP

Slave-2的主机IP

第三步:

       分别在从服务器1和从服务器上安装arptables_jf,进行arp设置,设置完成之后启动arptable_jf服务,并设置开启自动启动;

root@slave-1# yum install arptables_jf

第四步:

       启动LVS服务,并设置开启自动启动;

root@LVS #service pulse start

root@LVS# chkconfig -level  2345 pulse on

第五步:

       启动LVS之后,可以通过ipvsadm命令开查看LVS状态是否正常。

root@LVS# ipvsadm -L -n

 

到此为止,已经配置了一个最简单的MySQL高可用架构,当然这种架构存在单点故障问题,可以为主服务器准备一台备份机器来解决。

3.MySQL + DRBD + HA架构设计

由于一些企业的业务通常会发展的很迅速,对数据库的扩展性、可用性和性能的要求会更高,上面所讲的普通方案无法满足这种业务快速增长的场景对可用性、可靠性的需求。越来越大的压力会使主从之间的复制出现较大的延迟,从而影响了数据库数据的一致性,降低了它的可靠性;

解决该问题的方法:使用DRDB技术执行文件级的复制,主机之间能够保持较高的文件的一致性,可靠性可以达到99.99%,此方案更多的考虑到了扩展性,能够很好地适应企业业务快速增长给数据库带来的读写压力;

1.什么是DRBD

DRDB(Distributed Replicated Block Device)简称分布式复制块设备,是一种基于Linux系统的软件组件,它是由内核模块和相关程序而组成的,用以构建高可用性的集群。当数据写入到本地的DRDB设备上的文件的时候,数据会同时被发送到网络中的另外一台主机之上;

       DRBD实现原理:

是通过网络来镜像整个设备。DRBD复制接收数据,然后写入到本地磁盘,之后会把数据发送给另一台主机,另一台主机会将数据写入到本地磁盘,DRBD通过对故障进行切换操作,从而实现集群的高可用性;

2. MySQL + DRBD + HA架构设计

该架构主要由2台机器组成。分别是Active和Standby。它们之间通过Heartbeat进行连接,对外共用一个虚拟IP地址,正常情况Active对外提供服务,当Active出现软硬件单点故障的时候,Heartbeat自动将虚拟IP指向Standby,有Standby作为新的Active对外提供服务。当原Active的故障排除之后再将其接入系统作为新的Standby存在;

       Active和Standby之间通过DRBD技术实现数据的互为主从的复制,以减少故障切换的时间。

3.配置环境

4.安装Heartbeat

安装Heartbeat的具体操作步骤如下:

第一步:

       分别在两台主机上安装Hearbeat心跳软件,可以通过yum的方式,如下所示:

root@db-01# yum install heartbeat

第二步:

       配置hosts 文件,把主机名与IP添入hosts文件。

root@db-01# cat /etc/hosts

第三步:

       配置网卡IP和心跳IP

root@db-01# cat /etc/sysconfig/network-scripts/ifconfig-eth0

提示:两台数据库主机的系统时间要保持一致,如果内网环境中有NTP服务器,可以定期的更新两台数据库服务器的时间;如果没有,那么可以在两台服务器上配置来保持两者的时间同步;

第四步:

    以db-01作为NTP服务器为例。首先安装ntpd软件包,可以通过yum方式,然后配置其选项,如下所示:

root@db-01# cat /etc/ntp.conf 

第五步;

    启动NTP服务并设置开启自动启动,并在db-02上设置定时任务来更新时间。

root@db-01# service ntpd start

root@db-01#chkconfig --level 2345 ntpd on

root@db-02#crontab -e

准备工作完成之后,就可以开始配置heartbeat,在heartbeat版本中相关的配置文件有3个,分别是ha.cf、authkeys、haresources。

第六步:

    首先配置ha.cf文件,这个是heartbeat的核心配置文件:

root@db-01# cat /etc/ha.d/ha.cf

第七步:

       接着配置authkeys文件并修改其权限配置,该文件主要是设置通信的验证校验机制。

root@db-01# cat/etc/ha.d/authkeys

第八步:
      
配置haresources文件,该文件主要是设置挂载的文件系统类型和路径,以及服务器名和虚拟IP

root@db-01 # cat/etc/ha.d/haresources

这里需要注意的是,由于使用的是DRDB,因此设备名是/dev/drbd0,服务费名为mysql,这个名称是需要和/etc/init.d/mysql脚本名保持一致,否则在发生故障的时候将无法启动mysql;

heartbeat的配置过程中在两台数据库主机中都需要设置,记住有些地方需要改动,例如:主机名;

5.安装配置DRBD

首先下载源码包,http://oss.linbit.com/drbd/8.3/drbd-8.3.7.tar.gz

DRBD分为内核模块和管理工具两部分,Linux从2.6.33开始就将DRBD的驱动模块合并到了内核中,如果linux内核大于2.6.33,就只需要安装DRBD管理工具;

第一步:

分别在两台机器上安装DRBD,

第二步:
       安装完成之后开始配置DRBD,需要为DRBD分配一个块设备,以/dev/sdb1为例;

第三步:

       配置完成之后,就可以开始加载内核模块并进行初始化的设置(两台机器都需要操作)

第四步:
       开始创建主节点,并格式化文件系统,注意此步骤需要在其中的一台服务器上操作,这里以db-01为例;

第五步:

       启动heartbeat服务设置开启自动启动;

root@db-01# chkconfig -level  234 drbd on

root@db-01# service heartbeat start

4.Lvs+Keepalived+MySQL单点写入主主同步方案

目前在MySQL高可用方案中,Lvs+keepalived经常被用到,Lvs和Keepalived为高可用方案提供了负载均衡和故障的转移。通常情况下,MySQL高可用为了实现数据的一致性,会采用单点写入,本章采用keepalived中的sorry_server来实现写入数据库为单点的需求;

下面采用Lvs+keepalived单点写入主主同步方案,主服务器的后面可以添加多个从服务器,并做到负载均衡,事实上该方案中并没有是实现数据库的读写分离,只适用于只有两台的数据库服务器的情况;

1.配置环境

首先,先准备两台机器,并安装好MySQL服务,然后设置两台服务器主主同步,具体步骤如下:

第一步:配置db1

参数说明:

log-slave-updates表示如果一个Master挂掉的话,另一个主机会接管;

第二步:

配置db2,如下所示:
提示:

auto_increment_increment的值表示整个结构中服务器的总数,本案例中使用到两台服务器,所以设置为2,auto_increment_increment和auto_increment_offset 用于主主复制防止出现重复的值;

第三步:

       复制其中一个数据库到另一个数据库,为了保持数据的一致性,首先将服务器上的表锁定起来,避免复制过程中发生数据的变化;

第四步:

       然后在服务器上查询当前二进制文件的名称和以及偏移位置;

第五步:

接着将数据库一的数据进行备份,然后在数据库二上面进行恢复,这样保持两个数据库一开始数据都是一样的;

第六步:

       值的注意的是,在实验的过程中,需要关闭系统自带的防火墙,如下所示:

[root@localhost ~]# service iptables stop

第七步:

数据库一和数据库二相互通告二进制日志的位置并启动复制功能

使用change master to命令指向对方

 

第八步:

在另一个数据库中也是用mysql > change master to命令指向另一台数据库

第九步:

测试两个数据库是否实现同步:

mysql > show salve status\G;

第十步:

下面在数据库2中测试看看是否数据库1和数据库2实现同步;

mysql > show salve status\G;

至此,主主同步配置完成,接下来开始安装Lvs+keepalived

2.Lvs+Keepalived的安装

需要在两台服务器上都安装LVS

接下来需要在两台服务器上都安装Keepalived;

3.Lvs+Keepalived的配置

需要分别对Master 和Backup主机的keepalived进行配置:

vim /etc/keepalived/keepalived.conf

接下来需要对Master和Backup的realserver进行配置,对于realserver的配置master和backup是一致的;

vim /etc/rc.d/init.d/realserver.sh

4.Master和Backup的启动

首先需要先启动Master和Backup的Mysql服务器,之后需要启动keepalived和realserver脚本,如下所示:

/etc/rc.d/init.d/realserver.sh start

/etc/rc.d/init.d/keepalived start

将keepalived和realserver的启动脚本加入到rc.local自启动中:

echo “/etc/rc.d/init.d/realserver.sh start” >> /etc/rc.local

echo “/etc/rc.d/init.d/keepalived start” >> /etc/rc.local

5.MMM高可用MySQL方案

MMM 即MySQL主主复制管理器(Master-Master Replication Manager for MySQL)是关于MySQL主主复制配置监控、故障转移和管理的一套可伸缩的脚本套件,该套件也能对居于标准的主从配置的任意数量的从服务器进行读负载均衡,可以实现数据备份、节点之间重新同步的功能;

1.MMM架构

MMM高可用MySQL架构方案中,如果当前的服务器挂掉之后,会将后端的从服务器自动转向新的主服务器进行同步复制,不需要手工的更改同步配置。

MMM高可用MySQL架构解决了很多的问题,特别是read/write比较高的Web 2.0应用中。该架构存在如下的一些优点和缺点:

优点:

(1)安全性,稳定性比较高,可扩展性好,高可用。当主服务器挂掉之后,另一个主服务器立即接管,其他的从服务器能够自动的切换,不需要人工干预;

(2)写操作全部在主节点进行,并由从服务器数据库节点定时的读取主服务器的二进制日志;

(3)将众多客户的读请求分散到更多的数据库节点,从而减轻了单点的压力;

该方案存在一些缺点:例如该方案中至少需要三个节点,对主机的数量有要求,需要实现读写分离,对程序来说难度系数较高;

MMM高可用方案适合数据库访问量大,业务增长快,并且能够实现读写分离的场景;

2.配置环境

MMM高可用方案是对MySQL Mater-Slave Replication的一个补充,MMM有三个重要的部分,包括mmmd_mon、mmmd_agent和mmm_control。每一个MySQL服务器节点上都需要运行mmmd_agent,同时需要是一个机器运行mmmd_mon,mmmd_mon的作用主要用来监控其他数据库节点运行的状况,可以是独立的一台机器,也可以是和AppServer共享同一个服务器。MMM利用了VIP(虚拟IP)的技术,一个网卡可以同时使用多个IP,当某个数据库节点出现故障的时候,mmmd_mon检查不到mmmd_agent对应MySQL服务器的状态,mmmd_mon此时会下指令给某个正常的数据库节点的mmmd_agent。

创建三种不同功能的用户:

mysql > grant replication client on *.* to ‘mmm_monitor’@’192.168.0.%’ identified by ‘monitor_password’;

 

mysql > grant super,replication client ,process on *.* to ’mmm_agent’@’192.168.0.%’ identified by ‘agent_password’;

 

mysql > grant replication slave on *.* to ‘replication’@’192.168.0.%’ identified by ‘replicatoin_password’;

 

mysql > flush privileges;

 

值的注意的是:mmm_monitor用户使用在Monitor Server(192.168.0.5)中,另外mmm_agent用户和replication用户是在其他的机器中使用的;

在进行MMM配置之前需要对db1和db2两台机器进行主主同步的相关配置,db1和db3实现主从同步。

3.MMM的安装

下载并安装MMM软件,并在db1、db2和db3机器上配置mysql-mmm-agent,mon机器上配置mysql-mmm-monitor;

4.Monitor服务器的配置

MMM配置文件是在/etc/mysql-mmm目录的下面,monitor服务器需要配置该目录下面的mmm_common.conf、mmm_mon.conf两个文件,Mmm_common.conf文件在mmm各个节点都是一样的,因此配置完成之后可以直接复制到其他的各个DB节点即可;

 

5.各个数据库服务器的配置

MMM配置各个数据库服务器之前需要保持各个服务器上面的mmm_comm.conf文件内容一致。下面对每个服务器的mmm_agent.conf文件进行配置;

 

6.MMM的管理

在启动MMM的时候,数据库机器需要启动mmm-agent

[root@localhost ~]# /etc/init.d/mysql-mmm-agent start

Monitor机器需要启动mmm-monitor

[root@localhost ~]# /etc/init.d/mysql-mmm-monitor start

 

停止MMM只需要执行如下的命令即可:

[root@localhost ~]#  /etc/init.d/mysql-mmm-agent stop

[root@localhost ~]# /etc/init.d/mysql-mmm-monitor stop


此时在mon机器上,可以通过如下的命令查看:

[root@localhost ~]# mmm_control show

如果需要将db1设置为online状态,此时会配置db1的VIP,需要执行如下的命令;
[root@localhost ~]# mmm_control set_online db1

 

在实现高可用的方案中,系统的各个层面都需要被监控起来,例如监控Monitor进行的状态,Agent服务器进程的状态,MySQL可用性的监控,数据库同步状态的监控;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值