• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >Mysql > 基于MySQL数据库,谈MySQL高可用运维

基于MySQL数据库,谈MySQL高可用运维

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2018-12-05

匿名通过本文主要向大家介绍了mysql高可用运维等相关知识,希望本文的分享对您有所帮助
本篇文章将介绍MySQL的另外一种高可用实现方案,即:MHA(Master High Avaliable)。Master HA。是一个开源的高可用程序,为MySQL的主从架构提供了故障自动恢复的功能。

一、基本知识介绍

1、MHA定义

Master HA。是一个开源的高可用程序,为MySQL的主从架构提供了故障自动恢复的功能。主从复制期间,当MHA监测到MySQL的Master节点故障时,会自动提升复制集群中的某个Slave节点成为新的Master节点。在切换期间,也会通过从其他节点中获取额外信息来避免数据一致性问题。除此之外,MHA还提供了master节点的在线故障切换功能,可以按照需要来切换Master/Slave节点。

2、MHA结构

MHA中的所有节点主要有两种角色,即:管理节点和数据节点。
管理节点(MHA Manager):一般单独部署在一台机器上,用来管理多个master和slave集群,而每个master和slave组成的集群称之为一个application。
数据节点(MHA Node):运行在每一台MySQL服务器上,通过监控具有解析和清理logs功能的脚本来加速节点的故障转移。

3、HMA组件
(1)Manager组件

masterha_check_sh:MHA依赖的ssh环境监测工具
masterha_check_repl:MySQL复制环境监测工具
masterha_manager:MHA服务主程序
masterha_check_status:MHA运行状态探测工具
masterha_master_monitor:MySQL master节点可用性监测工具
masterha_master_switch:master节点切换工具
masterha_conf_host:添加或删除配置的节点
masterha_stop:关闭MHA服务的工具

(2)Node组件

save_binary_logs:保存和赋值master的二进制日志
apply_diff_relay_logs:识别差异的中继日志并应用于其他slave
filter_mysqlbinlog:去除不必要的ROLLBACK事件(MHA已经不再使用这个工具)
purge_relay_logs:清除中继日志(不会阻塞SQL线程)

(3)自定义扩展

secondary_check_script:通过多条网络路由监测master的可用性
master_ip_failover_script:更新application使用的masterip
shutdown_script:强制关闭master节点
report_script:发送报告
init_conf_load_script:加载初始配置参数
master_ip_online_change_script:更新master节点ip地址

二、MHA搭建

1、环境准备
操作系统:CentOS6.9_X86_64
MySQL版本:MySQL5.6.39通用二进制
服务器规划:
主节点Master:192.168.199.104(mysql-master,master)

从节点1:192.168.199.105(mysql-slave01,slave01)
从节点2:192.168.199.106(mysql-slave02,slave02)
管理节点:192.168.199.107(mysql-manager,manager)

2、搭建
(1)配置各个节点的host,在后面使用起来会比较方便,不用每次手写IP

[root@mysql-master ~]# vim /etc/hosts
#添加如下内容:
127.0.0.1  localhost localhost.localdomain localhost4 localhost4.localdomain4
::1        localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.199.104 mysql-master master
192.168.199.105 mysql-slave01 slave01
192.168.199.106 mysql-slave02 slave02
192.168.199.107 mysql-manager manager

(2)将配置好的host文件复制到其他三个节点上

[root@mysql-master ~]# scp /etc/hosts slave01:/etc/
[root@mysql-master ~]# scp /etc/hosts slave02:/etc/
[root@mysql-master ~]# scp /etc/hosts manager:/etc/

(3)配置主从同步,slave01和slave02为master的从库
开启master的二进制日志

[root@mysql-master ~]# vim /etc/my.cnf
#在[mysqld]下面添加如下内容:
server-id = 104
skip-name-resolve
log_bin=/mysql_data/mysql-bin
log_bin_index=/mysql_data/mysql-bin.index
binlog_format = mixed

在master上查看当前的二进制日志点位置,并创建复制账户

[root@mysql-master ~]# mysql -uroot –proot
#查看当前二进制日志点的位置
mysql> SHOW MASTER STATUS \G
*************************** 1. row ***************************
             File: mysql-bin.000090
         Position: 120
     Binlog_Do_DB: 
 Binlog_Ignore_DB: 
Executed_Gtid_Set: 
1 row in set (0.00 sec)
#创建从库的复制账户
mysql> GRANT REPLICATION SLAVE ,REPLICATION CLIENT ON *.* TO 'repl'@'192.168.199.%' IDENTIFIED BY 'repl';
#刷新权限
mysql> FLUSH PRIVILEGES;

在slave01上开启二进制日志和中继日志,并配置为master的从库

[root@mysql-slave01 ~]# vim /etc/my.cnf
#在[mysqld]下添加如下内容:
server-id = 105
log_bin = /mysql_data/mysql-bin
log_bin_index = /mysql_data/mysql-bin.index
relay_log = /mysql_data/mysql-relay
relay_log_index = /mysql_data/mysql-relay.index
read_only
relay_log_purge = 0

参数解释:

relay_log_purge:该参数表示不自动清理中继日志,因为MHA需要根据slave的中继日志判断slave同步master的binlog到什么位置了
read_only:表示是只读,MHA需要根据这个参数来识别主从库
bin_log:开启从库的二进制日志,因为在主节点出现故障时,需要将其中某个从库提升为主库,所以需要开启从库的二进制日志

启动slave01节点,并将需要同步的主节点信息指向master节点:

[root@mysql-slave01 ~]# service mysqld restart
[root@mysql-slave01 ~]# mysql -uroot –proot
#使用change master命令将主库指向master节点
mysql> CHANGE MASTER TO MASTER_HOST = '192.168.199.104',MASTER_PORT=3306,MASTER_USER='repl',MASTER_PASSWORD='repl',MASTER_LOG_FILE='mysql-bin.000090',MASTER_LOG_POS=120;
mysql> START SLAVE;
#查看是否同步成功
mysql> SHOW SLAVE STATUS \G
看到如下信息表示同步成功:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

以同样的方式配置第二台从库,可以直接将slave01上的配置文件直接复制到第二台slave上,然后修改即可。

[root@mysql-slave01 ~]# scp /etc/my.cnf slave02:/etc/
[root@mysql-slave02 ~]# vim /etc/my.cnf
#修改server-id即可:
server-id = 106

修改完成之后,保存退出,并重启mysql,然后配置slave02为master的从库

[root@mysql-slave02 ~]# mysql -uroot –proot
mysql> CHANGE MASTER TO MASTER_HOST = '192.168.199.104',MASTER_PORT=3306,MASTER_USER='repl',MASTER_PASSWORD='repl',MASTER_LOG_FILE='mysql-bin.000090',MASTER_LOG_POS=120;
mysql> START SLAVE;
#查看是否同步成功
mysql> SHOW SLAVE STATUS \G
看到如下信息表示同步成功:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

(4)创建具有管理权限的用户账号

#在主节点master上创建管理账号,使其可以同步到其他连个从节点,注意:这个管理账号需要能够远程连接MySQL
mysql> GRANT ALL ON *.* TO 'mha'@'192.168.199.%' IDENTIFIED BY 'mha';
mysql> FLUSH PRIVILEGES;

(5)由于MHA架构需要各个节点之间可以进行互信通信,所以需要将各个节点之间配置为无秘钥登录,由于节点比较多,单个生成并复制比较麻烦,可以在主节点上生成秘钥对,然后让每个主机都具有同样的私钥

#在master上生成秘钥对
[root@mysql-master ~]# ssh-keygen -t rsa -P ''
#首先保存到本机的秘钥文件中,使得本机可以无秘钥使用ssh方式登陆本机
[root@mysql-master ~]# cat .ssh/id_rsa.pub >> .ssh/authorized_keys
#使用ssh登陆本机测试,发现可以无密码登陆
[root@mysql-master ~]# ssh 192.168.199.104
#修改authorized_keys文件的权限,只能属主查看,同组用户和其他用户不可查看
[root@mysql-master ~]# chmod go= .ssh/authorized_keys

将秘钥对和私钥文件复制到其他三个节点上,注意:保证其原有的权限

[root@mysql-master ~]# scp -p .ssh/id_rsa .ssh/authorized_keys slave01:/root/.ssh/
[root@mysql-master ~]# scp -p .ssh/id_rsa .ssh/authorized_keys slave02:/root/.ssh/
[root@mysql-master ~]# scp -p .ssh/id_rsa .ssh/authorized_keys manager:/root/.ssh/
#测试无密码登陆,在主节点上执行如下命令,查看slave01节点的ip地址
[root@mysql-master ~]# ssh slave01 'ifconfig eth0'
#能够查看到slave01的ip地址表示无秘钥登陆配置成功,其他俩节点可以自己验证

(6)下载mha4mysql-manager和mha4mysql-node安装包
此处使用的软件包版本如下:

管理节点:mha4mysql-manager-0.56.tar.gz
数据节点:mha4mysql-node-0.56.tar.gz

(7)配置epel,因为mha4mysql有的包是来自于base中,有的包是来自于epel中

[root@mysql-master ~]# rpm –ivh  http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-r
  


 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

相关文章

  • 2018-12-05MYSQL随机抽取查询 MySQL Order By Rand()效率问题
  • 2017-05-11[MySQL binlog]mysql如何彻底解析Mixed日志格式的binlog
  • 2018-12-05关于由小变大的文章推荐
  • 2017-05-11MySQL查询优化--调整内部变量的详解
  • 2017-05-11php后台经常提示无法连接mysql 刷新后又可以访问的解决方法
  • 2018-12-05mysql字符集和数据库引擎修改方法分享
  • 2018-12-05MySQL备份和恢复操作(MYSQL语句操作教程3)
  • 2018-12-05数据库查询优化方法
  • 2017-05-11mysql启动错误之mysql启动报1067错误解决方法
  • 2018-12-05MYSQL无法启动提示: Default storage engine (InnoDB) is not a

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • 详解Oracle查询中OVER (PARTITION BY ..)用法
    • mysql 单机数据库优化的一些实践_MySQL
    • 基于ubuntu中使用mysql实现opensips用户认证的解决方法
    • jQuery操作第N个元素的方法
    • mysql主从同步问题及解决过程详解
    • mysql占用CPU过高的解决办法(添加索引)
    • 如何在 MySQL 中判断中文字符?
    • 如何获取SqlServer2005表结构(字段,主键,外键,递增,描述)
    • sql 函数大全 比较常用的一些函数整理第1/2页
    • 有关橄榄的文章推荐4篇

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有