前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MHA实现mysql的高可用集群

MHA实现mysql的高可用集群

作者头像
用户4877748
发布2020-07-22 10:16:09
8750
发布2020-07-22 10:16:09
举报
文章被收录于专栏:LVM

前言:

        在生产环境中,数据库对于一个企业是至关重要的,因此我们应该做到生产中的mysql高可用,从而实现假如有一台数据库宕机,别的机器会自动代替宕机的服务器的工作,从而实现数据库的快速切换,避免单点故障,从而保证业务的正常运行。MHA就可以很好的实现这一功能。

MHA(Master High Availability)是一套相对成熟的MySQL高可用方案,能做到在0~30s内自动完成数据库的故障切换操作,在master服务器不宕机的情况下,基本能保证数据的一致性。

它由两部分组成:MHA Manager(管理节点)和MHA Node(数据节点)。MHA Manager可以单独部署在一台独立的机器上管理多个master-slave集群,也可以部署在一台slave节点上。MHA Node运行在每台MySQL服务器上,MHA Manager会定时探测集群中的master节点,当master出现故障时,它可以自动将最新数据的slave提升为新的master,然后将所有其他的slave重新指向新的master。整个故障转移过程对应用程序完全透明。

MHA工作原理 1 从宕机崩溃的master保存二进制日志事件(binlog events) 2 识别含有最新更新的slave 3 应用差异的中继日志(relay log)到其他的slave 4 应用从master保存的二进制日志事件(binlog events) 5 提升一个slave为新的master 6 使其他的slave连接新的master进行复制

MHA Manager 工具包:

1. masterha_check_ssh:检查MHA的SSH配置状况 2. masterha_check_repl:检查MySQL的复制状况 3. masterha_manager:启动MHA 4. masterha_check_status:检测当前MHA运行状态 5. masterha_master_monitor:检测master是否宕机 6. masterha_master_switch:控制故障转移(自动或手动) 7. masterha_conf_host:添加或删除配置的server信息 8. masterha_stop:关闭MHA 搭建环境准备:

1:四台centos7主机

mha manager               172.18.253.189                  

 master                   172.18.254.235      

candidate  master (slave1)           172.18.254.144                      

slave2                172.18.254.109

master对外提供写服务,备选master提供读服务,slave1也提供相关的读服务,一旦master宕机,将会把备选master1提升为新的master,slave2指向新的master

2:MHA manager 下载安装MHA

     mha4mysql-manager-0.56-0.el6.noarch.rpm

     在所有机器上安装

     mha4mysql-node-0.56-0.el6.noarch.rpm 由于MHA网址受到防火墙限制,所以可以在放到了个人网盘中,http://pan.baidu.com/s/1boS31vT,有需要的可自行下载。

实验步骤:

1:配置时间同步

代码语言:javascript
复制
#mha服务器上ntpServer
[root@mha ~]# vim /etc/ntp.conf 
restrict 127.0.0.1   #限制可以同步的主机
restrict ::1
restrict 172.18.0.0 mask 255.255.255.0
server 127.127.1.0   #以该主机的时间为标准
[root@mha ~]#systemctl restart ntpd
[root@mha ~]#systemctl restart ntpd  #开机自启动
#其他三台主机ntpclient
以master举例
[root@master ~]# vim /etc/ntp.conf 
server 172.18.153.7 iburst    #确认ntpserver
[root@master ~]# ntpdate 172.18.153.7  #生效

2:配置四台机器彼此ssh免密登陆

代码语言:javascript
复制
[root@mha ~]# cd .ssh/
[root@mha .ssh]# ssh-keygen 
[root@mha .ssh]# ssh-copy-id localhost 主要是生成authorized_keys 文件
[root@mha ~]# rsync -rav /root/.ssh root@172.18.254.235:/root/
[root@mha ~]# rsync -rav /root/.ssh root@172.18.254.144:/root/
[root@mha ~]# rsync -rav /root/.ssh root@172.18.254.209:/root/
另外配置ssh首次连接某主机不要询问yes
[root@mha ~]# vim /etc/ssh/ssh_config  
StrictHostKeyChecking no
另外三个主机同上设置

3:配置主从服务器

代码语言:javascript
复制
#mysql master
[root@master ~]#  vim /etc/my.cnf
[mysqld]
server_id=1
datadir=/mysql/data
innodb_file_per_table
socket=/var/lib/mysql/mysql.sock
log_bin=/mysql/logbin/master-bin
binlog_format=row
skip_name_resolve
[root@master ~]# systemctl restart mariadb.service
[root@master ~]# mysql
MariaDB [(none)]> show master status;
+-------------------+-----------+
| Log_name          | File_size |
+-------------------+-----------+
| master-bin.000001 |       245 |
+-------------------+-----------+
MariaDB [(none)]> grant replication slave on *.* to repluser@'172.18.%.%' identified by 'centos';
#MySQL slave1与MySQLslave2一样
[root@slave ~]#  vim /etc/my.cnf
[mysqld]
server_id=2
datadir=/mysql/data
log_bin=/mysql/logbin/slave-log
read_only=1
relay_log_purge=0
skip_name_resolve=1
[root@slave ~]# systemctl restart mariadb.service
[root@slave ~]# mysql
MariaDB [(none)]> CHANGE MASTER TO
->   MASTER_HOST='172.18.254.235',
->   MASTER_USER='repluser',
->   MASTER_PASSWORD='centos',
->   MASTER_PORT=3306,
->   MASTER_LOG_FILE='master-bin.000001',
->   MASTER_LOG_POS=245,
->   MASTER_CONNECT_RETRY=10;
MariaDB [(none)]> start slave;
MariaDB [(none)]> show slave status\G;(没有异常说明主从配置成功)

4:配置mha

创建mha统一管理帐号

代码语言:javascript
复制
Master [(none)]> grant all on *.* to mhauser@'172.18.%.%' identified by 'centos';
Query OK, 0 rows affected (0.00 sec)

#安装mha软件包,需要epel源
[root@mha ~]# yum -y localinstall mha4mysql-*

#在其他三个节点上安装node
[root@master ~]# yum -y localinstall mha4mysql-node-0.56-0.el6.noarch.rpm
[root@slave1 ~]# yum localinstall mha4mysql-node-0.56-0.el6.noarch.rpm
[root@slave2 ~]# yum localinstall mha4mysql-node-0.56-0.el6.noarch.rpm

#配置mha
[root@mha ~]# mkdir /etc/mha                                                                       
        
[root@mha ~]# vim /etc/mha/app1.conf
[server default]
user=mhauser  #设置监控用户
password=centos #设置监控用户的密码
manager_workdir=/data/mastermha/app1/  #设置manager的工作目录
manager_log=/data/mastermha/app1/manager.log  #设置manager的日志
master_logbin_dir=/mysql/logbin   #master上用于存储binary日志的全路径。这个参数用于当master上mysql死掉后,通过ssh连到mysql服务器上,找到需要binary日志事件 
remote_workdir=/data/mastermha/app1/  #设置远端mysql在发生切换时binlog的保存位置
ssh_user=root #设置ssh的登录用户名
repl_user=repluser  #设置复制环境中的复制用户名
repl_password=centos#设置复制用户的密码
ping_interval=1 #设置监控主库,发送ping包的时间间隔,默认是3秒,尝试三次没有回应的时候进行自动fail

[server1]  
hostname=172.18.254.235 #配置MySQL服务器的机器名或是IP地址,这个配置项是必须的,而且只能配置在[server_xxx]这个块下面。
candidate_master=1  
[server2]  
hostname=172.18.254.144
candidate_master=1  #备用master
[server3]  
hostname=172.18.254.209

5:检查mha

代码语言:javascript
复制
#mha manage
[root@mha ~]# masterha_check_ssh --conf=/etc/mha/app1.conf
[root@mha ~]# masterha_check_repl --conf=/etc/mha/app1.conf

6:运行mha

代码语言:javascript
复制
#mha manage
[root@mha ~]# nohup masterha_manager --conf=/etc/mha/app1.conf > mharun.log &  #放到后端运行,把运行结果放到文件里,检测文件

7:模拟故障,直接对master关机在mha进行日志检查

代码语言:javascript
复制
[root@mha ~]# tailf /data/mastermha/app1/manager.log

Started automated(non-interactive) failover.
The latest slave 172.18.254.144(172.18.254.144:3306) has all relay logs for recovery.
Selected 172.18.254.144(172.18.254.144:3306) as a new master.
172.18.254.144(172.18.254.144:3306): OK: Applying all logs succeeded.
172.18.254.209(172.18.254.209:3306): This host has the latest relay log events.
Generating relay diff files from the latest slave succeeded.
172.18.254.209(172.18.254.209:3306): OK: Applying all logs succeeded. Slave started, replicating from 172.18.254.144(172.18.254.144:3306)
172.18.254.144(172.18.254.144:3306): Resetting slave info succeeded.
Master failover to 172.18.254.144(172.18.254.144:3306) completed successfully.
^C[1]+  完成                  nohup masterha_manager --conf=/etc/mha/app1.conf > mharun.log

8:在切换成功后,再开启旧的主,将旧的主设置为从。

代码语言:javascript
复制
#在slave1 进入mysql
MariaDB [(none)]> show master status;
+------------+----------+--------------+------------------+
| File       | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------+----------+--------------+------------------+
| bin.000007 |      375 |              |                  |
+------------+----------+--------------+------------------+

[root@master ~]# vim /etc/my.cnf
增加以下两行
read_only=ON
relay_log_purge=0

[root@master ~]# systemctl restart mariadb.service

Master [(none)]> CHANGE MASTER TO
    ->   MASTER_HOST='172.18.254.144',
    ->   MASTER_USER='repluser',
    ->   MASTER_PASSWORD='centos',
    ->   MASTER_PORT=3306,
    ->   MASTER_LOG_FILE='slave-log.000003',
    ->   MASTER_LOG_POS=375,
    ->   MASTER_CONNECT_RETRY=10;
Query OK, 0 rows affected (0.05 sec)

Master [(none)]> start slave;
Query OK, 0 rows affected (0.00 sec)

完成了mysql的高可用。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018/10/17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档