怎么构建Mysql高可用集群系统

56次阅读
没有评论

共计 3415 个字符,预计需要花费 9 分钟才能阅读完成。

本篇内容主要讲解“怎么构建 Mysql 高可用集群系统”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让丸趣 TV 小编来带大家学习“怎么构建 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 所示:

三、在 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 ndash;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 高可用集群系统”有了更深的了解,不妨来实际操作一番吧!这里是丸趣 TV 网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-01发表,共计3415字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)