`
zhaohaolin
  • 浏览: 979135 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

轻松构建MySQL高可用集群系统

阅读更多

一、 MySQL复制的实现原理
 MySQL支持单向、双向复 制、异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。主服务器将更新写入一个二进制日志文件中,并创建一个索引文件以 跟踪日志循环。这些日志可以记录发送到从服务器的更新。当一个从服务器连接主服务器时,日志文件会通知主服务器,从服务器在日志中读取的最后一次成功更新 的位置。接着,从服务器在上次成功更新的位置处开始进入更新操作。更新完成后从服务器开始进入等待状态,等待主服务器后续的更新。


          需要注意的是:在进行复制时,所有对复制中的表的更新必须在主服务器上进行。否则,可能发生对主服务器上的表进行的更新与对从服务器上的表所进行的更新之间的冲突。
          单向复制有利于健壮性、速度和系统管理.
          主服务器/从服务器设置增加了健壮性。主服务器出现问题时,可以切换到从服务器。
          通过在主服务器和从服务器之间切分处理客户查询的负荷,可以得到更好的客户响应时间。SELECT查询可以发送到从服务器以降低主服务器的查询处理负荷。但修改数据的语句仍然应发送到主服务器,以便主服务器和从服务器保持同步。
 MySQL提供了数据库的同步功能,这对实现数据库的冗灾、备份、恢复、负载均衡等都是有极大帮助的。
          一般情况下,在Mysql复制中,主服务器也称为master,二从服务器称为slave,因此,想要启用同步机制,在master上就必须启用二进制日 志。每个slave接受来自master上在二进制日志中记录的更新操作,而在slave上相当于执行了这个操作的一个拷贝。
二、 MySQL同步细节
 
          MySQL同步功能由3个线程(master上1个binlog dump,slave上2个,分别是Sql进程和IO进程)来实现。执行“START SLAVE”语句后,slave就创建一个I/O线程。I/O线程连接到master上,并请求master发送二进制日志中的语句。master创建一 个线程来把日志的内容发送到slave上。
          slave上的I/O线程读取master的Binlog Dump线程发送的语句,并且把它们拷贝到其数据目录下的中继日志(relay logs)中。第三个是SQL线程,salve用它来读取中继日志,然后执行它们来更新数据。
          slave上使用2个线程的优点是,把读日志和执行分开成2个独立的任务。执行任务如果慢的话,读日志任务不会跟着慢下来。例如,如果slave停止了一 段时间,那么I/O线程可以在slave启动后很快地从master上读取全部日志,尽管SQL线程可能落后I/O线程好几的小时。如果slave在 SQL线程没全部执行完就停止了,但I/O线程却已经把所有的更新日志都读取并且保存在本地的中继日志中了,因此在slave再次启动后就会继续执行它们 了。这就允许在master上清除二进制日志,因为slave已经无需去master读取更新日志了。

         本文讲解的环境为:一个mysql的master主节点node1,三个Mysql的Slave节点,三个Slave节点都从primary节点进行实时的同步数据,Mysql高可用集群主机信息如图1所示:

MySQL  

图1


三、在node1、slave1、slave2、slave3上安装MYSQL

安装MySQL有多种方法,这里仅以rpm安装为列说明。
[root@node1~]#yum -y install mysql-server mysql-devel mysql mysql-bench mysql-test
安装完成后,使用如下命令启动mysql服务:
[root@node1 ~]# /etc/init.d/mysqld start
为了保障数据安全,建议把数据放到专业的存储设备或者磁盘阵列分区,这里假定磁盘阵列的分区为/data目录,接着把数据文件放到/data目录下:
[root@node1 ~]# cp -R /var/lib/mysql /data/mysql
[root@node1 ~]# chown –R mysql:mysql /data/mysql
修改/etc/my.cnf文件,在[mysqld]组增加如下配置:
datadir = /data/mysql
最后,重启MySQL服务即可。

四、在Mysql主节点node1上编辑配置文件my.cnf

编辑主服务器的配置文件/etc/my.cnf,在[mysqld]中添加如下内容即可:
server-id = 1   #服务器ID。服务器之间不能有重复ID,一般master是1
log-bin=mysql-bin   #打开mysql的binlog功能,后面的名字可以自己指定,如果不改名字的话,默认是以主机名字命名
binlog-do-db=ixdba #ixdba是需要备份的数据库名,如果备份多个数据库,重复设置这个选项即可
binlog-ignore-db=mysql #不需要备份的数据库名称,如果需要忽略备份多个数据库,重复设置这个选项即可。

五、在master节点node1上建立复制用
mysql>GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%' IDENTIFIED BY 'repl_password';
这里一定将repl_user用户设置为远程任意节点可以登录。

六、备份Master数据
备份Master上的数据,首先执行如下SQL语句:
mysql>FLUSH TABLES WITH READ LOCK;
Query OK, 0 rows affected (0.00 sec)
mysql> reset master;
Query OK, 0 rows affected (0.00 sec)


 不要退出这个终端,否则这个锁就失效了;在不退出终端的情况,再开一个终端直接打包压缩数据文件或使用mysqldump工具来导出数据。
[root@node1 ~]# cd /var/lib/    #进入mysql的数据目录,根据自己情况而定。
[root@node1 lib]# tar zcvf mysql.tar.gz mysql
[root@node1 lib]# scp mysql.tar.gz  192.168.12.231/232/233:/var/lib/
用scp命令把打包的数据传到其他几台Slave机器上。
数据传输完成之后,在上面的命令终端上执行:
mysql>UNLOCK TABLES;

七、设置Slave主机
编辑/etc/my.cnf文件,在[mysqld]中添加如下内容即可:
server-id = 2
log-bin=mysql-bin
binlog-do-db=ixdba
binlog-ignore-db=mysql
其他的Slave以此类推,保证server-id全局唯一即可。

八、 在slave上执行如下命令
mysql> CHANGE MASTER TO MASTER_HOST='192.168.12.135',
-> MASTER_USER='repl_user',
-> MASTER_PASSWORD='repl_password',
-> MASTER_LOG_FILE='mysql-bin.000001',
-> MASTER_LOG_POS=98;
执行完之后执行:
mysql> slave start;
Query OK, 0 rows affected (0.00 sec)
mysql> show slave status\G
从输出可以看到:Slave_IO_Running和Slave_SQL_Running如果都为Yes时,表示配置成功。

九、需要注意的几个问题
(1)如果在my.cnf里面定义了log-bin、relay-log参数,那么要保证定义与hostname无关,因为如果这两类log的文件名与主机名有关,切换过程会导致slave主机不能继续同步的问题。例如可以做下设置:
log-bin = mysql-bin
relay-log = mysql-relay-bin
保证在两台主机上两种文件的名字一样。
(2)最好把my.cnf文件也放入磁盘阵列所在分区的数据目录。

分享到:
评论

相关推荐

    Mysql高可用集群架构

    数据库位于现代企业应用的核心,它储存了组织机构中最有价值的资产,包括客户信息、产品信息、...对于希望在当今瞬息万变的经济环境立于不败之地并取得成功的企业来说,构建一个具有高可用性的 IT 基础架构至关重要。

    高可用MySQL:构建健壮的数据中心

    《高可用MySQL:构建健壮的数据中心》是“MySQL High Availability”的中文翻译版,主要讲解真实环境下如何使用MySQL的复制、集群和监控特性,揭示MySQL可靠性和高可用性的方方面面。《高可用MySQL:构建健壮的数据...

    MyCAT+MySQL搭建高可用企业级数据库集群.txt

    为了提升数据库的性能,本课程围绕MyCAT来实现对业务数据库的分库分表、读写分离,构建一个以MyCAT为核心的数据库集群架构,以企业级方案解决数据库出现的性能问题,做个数据库高手!

    高可用MySQL_构建健壮的数据中心.pdf

    高可用MySQL_构建健壮的数据中心 本书是"Mysql High Availability"的中文翻译版,主要讲解真实环境下如何使用mysql的复制,集群和监控特性,揭示mysql可靠性和高可用性的方方面面.本书由Mysql开发团队亲自执笔,定位于...

    高可用MySQL

    《高可用mysql:构建健壮的数据中心》是“mysql high availability”的中文翻译版,主要讲解真实环境下如何使用mysql 的复制、集群和监控特性,揭示mysql 可靠性和高可用性的方方面面。本书由mysql 开发团队亲自执笔...

    高可用性、负载均衡的mysql+集群

    高可用性、负载均衡的mysql + 集群

    [高可用MySQL:构建健壮的数据中心.].查理斯·贝尔.扫描版.part1

    《高可用MySQL:构建健壮的数据中心》是“MySQL High Availability”的中文翻译版,主要讲解真实环境下如何使用MySQL的复制、集群和监控特性,揭示MySQL可靠性和高可用性的方方面面。《高可用MySQL:构建健壮的数据...

    MySQL管理之道 性能调优、高可用与监控

    本书由资深MySQL专家撰写,以最新的MySQL版本为基础,以构建高性能MySQL服务器为核心,从故障诊断、表设计、SQL优化、性能参数调优、mydumper逻辑、xtrabackup热备份与恢复、MySQL高可用集群搭建与管理、MySQL服务器...

    [高可用MySQL:构建健壮的数据中心.].查理斯·贝尔.扫描版.part2

    《高可用MySQL:构建健壮的数据中心》是“MySQL High Availability”的中文翻译版,主要讲解真实环境下如何使用MySQL的复制、集群和监控特性,揭示MySQL可靠性和高可用性的方方面面。《高可用MySQL:构建健壮的数据...

    构建DRBD模型的MySQL高可用(HA)集群

    在架构MySQL高可用集群之前,有必要先介绍一下什么是DRBD,以及DRBD的原理和其工作方式DRBD(DistributedReplicatedBlockDevice,分布式复制块设备)是由内核模块和相关脚本而构成,用以构建高可用性的集群。...

    MySQL管理之道:性能调优、高可用与监控

    以最新的mysql版本为基础,以构建高性能mysql服务器为核心,从故障诊断、表设计、sql优化、性能参数调优、mydumper逻辑、xtrabackup热备份与恢复、mysql高可用集群搭建与管理、mysql服务器性能和服务监控等方面多...

    集群好书《高性能Linux服务器构建实战》 试读章节下载

    第14章 构建MySQL+heartbeat+DRBD+LVS集群应用系统 14.1 MySQL高可用集群概述 14.2 heartbeat + DRBD高可用性方案的实现原理 14.3 部署MySQL高可用高扩展集群 14.3.1 配置之前的准备 14.3.2 DRBD的部署 ...

    MySQL从入门到高级系列视频.zip

    目录网盘文件永久链接 1.Mysql数据库入门及安装.mp4 2.MySQL日常操作命令.mp4 3.使用if条件语句编写MySQL备份脚本.mp4 ...5.使用MySQL构建Discuz和Wordpress论坛.mp4 ...17.构建MySQL+DRBD+Keepalived高可用集群.mp4

    MySQL管理之道+性能调优、高可用与监控.7z

    资深MySQL专家撰写,以最新的MySQL版本为基础,以构建高性能MySQL服务器为核心,从故障诊断、表设计、SQL优化、性能参数调优、mydumper逻辑、xtrabackup热备份与恢复、MySQL高可用集群搭建与管理、MySQL服务器性能和...

    高可用MySQL:构建健壮的数据中心 中文版

    主要讲解真实环境下如何使用MySQL的复制、集群和监控特性,揭示MySQL可靠性和高可用性的方方面面。

    MySQL管理之道 性能调优、高可用与监控.part2.rar

    以最新的mysql版本为基础,以构建高性能mysql服务器为核心,从故障诊断、表设计、sql优化、性能参数调优、mydumper逻辑、xtrabackup热备份与恢复、mysql高可用集群搭建与管理、mysql服务器性能和服务监控等方面多...

    MySQL管理之道+性能调优、高可用与监控

    资深MySQL专家撰写,以最新的MySQL版本为基础,以构建高性能MySQL服务器为核心,从故障诊断、表设计、SQL优化、性能参数调优、mydumper逻辑、xtrabackup热备份与恢复、MySQL高可用集群搭建与管理、MySQL服务器性能和...

Global site tag (gtag.js) - Google Analytics