mysql进阶(三)MHA高可用集群

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
简介:
1 、MHA目前在MySQL高可用方面是一个相对成熟的解决方案,是MySQL高可用环境下故障切换和主从提升的高可用软件
2 、MHA能在短时间内完成故障切换,并且在最大程度上保证数据的一致性,以达到真正意义上的高可用
3 、MHA基于mysql协议,通过mysql主从或主主进行复制
4 、MHA官网:https: / / code.google.com / p / mysql - master - ha /
 
软件由两部分组成:MHA Manager(关理节点)和MHA Node(数据节点)
1 、MHA Manager可以单独部署在一台独立的机器上管理多个master - slave集群,也可以部署在一台slave节点上
2 、MHA Node运行在每台MySQL服务器上
3 、MHA_Manager会定时探测集群中的master节点,当master出现故障时,
    它可以自动将最新数据的slave提升为新的master,然后将所有其他的slave重新指向新的master
4 、MHA配合半同步复制使用可以最大限度的保证数据安全性
 
工作原理:
1 、从宕机崩溃的master保存二进制日志事件(binlog events)
2 、识别含有最新更新的slave
3 、应用差异的中继日志(relay log)到其他的slave
4 、应用从master保存的二进制日志事件(binlog events)
5 、提升一个slave为新的master
6 、使其他的slave连接新的master进行复制
 
MHA工具:
Manager工具包:
masterha_check_ssh             #检查MHA的SSH配置状况,MHA强烈依赖ssh秘钥验证
masterha_check_repl       #检查MySQL复制状况
masterha_manager        #MHA主程序
masterha_check_status      #检测当前MHA运行状态
masterha_master_monitor     #检测master是否宕机
masterha_master_switch     #手动控制故障转移
masterha_conf_host       #添加或删除配置的server信息
masterha_stop              #MHA关闭工具
 
Node工具包:
save_binary_logs        #保存和复制master的二进制日志
apply_diff_relay_logs      #识别差异的中继日志事件并将其差异的事件应用于其他的slave
filter_mysqlbinlog       #去除不必要的ROLLBACK事件(MHA已不再使用这个工具)
purge_relay_logs        #清除中继日志(不会阻塞SQL线程)
 
 
 
实验环境:
角色          ip地址        
MHA_manager      192.168 . 0.70
Master          192.168 . 0.40
Slave           192.168 . 0.60
Slave           192.168 . 0.10
 
 
 
安装MHA:
1 、配置elpe和baseyum源
2 、yum  - y localinstall mha4mysql - manager - 0.55 - 0.el6 .noarch.rpm mha4mysql - node - 0.54 - 0.el6 .noarch.rpm
#非管理节点不用安装mha4mysql-manager-0.55-0.el6.noarch.rpm
3 、配置ssh秘钥验证
ssh - keygen                     #生成秘钥,一直回车就行
cat id_rsa.pub >> authorized_keys   #将authorized_keys  id_rsa  id_rsa.pub 拷贝到所有节点的~/.ssh目录下
注意:不能禁止password登陆,否则会出现错误  
 
 
配置mysql主从(建议使用mysql5. 5 版本以上):
master配置:
vim  / etc / my.cnf             #修改配置文件,添加如下内容
[mysqld]                     #找到mysqld配置段
log - bin = mysql - bin            #开启二进制日志
relay - log = relay - bin      #开启中继日志
binlog_format = mixed      #使用混合模式的二进制日志
server - id =  1            #全局唯一的server-id
innodb - file - per - table = 1      #使用单独表空间文件
default - storage - engine = InnoDB     #使用InnoDB存储引擎
autocommit = 0               #关闭事务自动提交
skip - name - resolve = 1        #关闭主机名反解
relay - log - purge = 0            #不允许自动清理中继日志,因为MHA会依靠中继日志恢复数据
 
service mysqld restart         #重启mysql
mysql> SHOW MASTER STATUS;         #查看当前二进制日志位置
+ - - - - - - - - - - - - - - - - - - + - - - - - - - - - - +
File            | Position|
+ - - - - - - - - - - - - - - - - - - + - - - - - - - - - - +
|mysql - bin . 000004  |   360   |         #记住当前值
+ - - - - - - - - - - - - - - - - - - + - - - - - - - - - - +
mysql> GRANT REPLICATION SLAVE,REPLICATION CLIENT ON  * . *  TO  'mha' @ '192.168.0.%'  IDENTIFIED BY  'mha' ;
mysql> GRANT  ALL  ON  * . *  TO  'mymha' @ '192.168.0.%'  IDENTIFIED BY  'mymha' #创建MHA监控用户
mysql> FLUSH PRIVILEGES;
 
 
slave配置:
vim  / etc / my.cnf         #修改配置文件,添加如下内容
[mysqld]             #找到mysqld配置段
log - bin = mysql - bin        #开启二进制日志
relay - log = relay - bin      #开启中继日志
binlog_format = mixed      #使用混合模式的二进制日志
server - id =  2            #全局唯一的server-id
innodb - file - per - table = 1      #使用单独表空间文件
default - storage - engine = InnoDB    #使用InnoDB存储引擎
autocommit = 0             #关闭事务自动提交
skip - name - resolve = 1      #关闭主机名反解
read - only = 1          #只读,对root用户无效(slave节点必须设置)
relay - log - purge = 0        #不允许自动清理中继日志,因为MHA会依靠中继日志恢复数据
 
mysql> CHANGE MASTER TO MASTER_HOST = '192.168.0.10' ,MASTER_USER = 'mha' ,MASTER_PASSWORD = 'mha' ,
      MASTER_LOG_FILE = 'mysql-bin.000004' ,MASTER_LOG_POS = 360 ,MASTER_PORT = 3306 #指定主服务器
mysql> START SLAVE;             #启动复制线程
mysql> SHOW SLAVE STATUS\G;        #查看从服务器状态
Slave_IO_Running: Yes           #必须都为yes
Slave_SQL_Running: Yes
mysql> SELECT USER,PASSWORD,HOST FROM mysql.user;     #查看mha是否同步成功
 
 
MHA配置:
     mkdir  / etc / mha
     mkdir  / var / log / mha_app1
 
vim  / etc / mha / app1.cnf     
[server default]                #MHA工作属性定义(配置时不能有注释)
manager_workdir = / masterha / app1           #MHA的工作目录
manager_log = / var / log / mha_app1 / manager.log     #MHA的日志文件
password = mymha                  #设置MHA监控用户的密码
user = mymha                    #设置监控用户
ping_interval = 1                 #设置监控主库,健康检查时间
remote_workdir = / masterha / app1       #设置远端mysql在发生切换时binlog的保存位置
repl_password = mha            #设置复制用户的密码
repl_user = mha              #设置复制环境中的复制用户名
ssh_user = root             #设置ssh的登录用户名
master_binlog_dir = / usr / local / mysql / data /  #二进制日志文件存放路径 
 
可选参数,脚本都需要自己写:
shutdown_script = / masterha / scripts / shutdown.sh   #故障发生后关闭故障主机脚本(用于防止脑裂)
master_ip_failover_script = / masterha / scripts / automatic.sh  #设置自动故障转移时执行的脚本  
master_ip_online_change_script = / masterha / scripts / manual.sh  #设置手动故障转移时执行的脚本
report_script = / masterha / scripts / twili.py          #设置发生切换后发送的报警脚本
 
 
[server1]                      
hostname = 192.168 . 0.40          
port = 3306                      
 
[server2]                #节点设置
hostname = 192.168 . 0.60        #主机地址
port = 3306            #端口
check_repl_delay = 0          #用防止master故障时,切换时slave有延迟
candidate_master = 1 
#设置为候选master,如果没有设置则在slave中选择数据最新的成为master,如果设置了建议最好指向半同步节点
 
[server3]                      
hostname = 192.168 . 0.10          
port = 3306
 
 
MHA使用:
chmod  600  / etc / mha / app1.cnf        #设置为只有root用户对此文件有权限
masterha_check_ssh  - - conf = / etc / mha / app1.cnf     #检查ssh秘钥认证是否成功
- - conf:指定配置文件
 
masterha_check_repl  - - conf = / etc / mha / app1.cnf        #检查mysql复制环境成功
masterha_check_status  - - conf = / etc / mha / app1.cnf      #检查MHA运行状态
masterha_manager  - - conf = / etc / mha / app1.cnf       #启动MHA

本文转自  红尘世间  51CTO博客,原文链接:http://blog.51cto.com/hongchen99/1946716

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
4月前
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
10月前
|
存储 SQL 关系型数据库
Mysql高可用架构方案
本文阐述了Mysql高可用架构方案,介绍了 主从模式,MHA模式,MMM模式,MGR模式 方案的实现方式,没有哪个方案是完美的,开发人员在选择何种方案应用到项目中也没有标准答案,合适的才是最好的。
797 3
Mysql高可用架构方案
|
5月前
|
负载均衡 算法 关系型数据库
大数据新视界--大数据大厂之MySQL数据库课程设计:MySQL集群架构负载均衡故障排除与解决方案
本文深入探讨 MySQL 集群架构负载均衡的常见故障及排除方法。涵盖请求分配不均、节点无法响应、负载均衡器故障等现象,介绍多种负载均衡算法及故障排除步骤,包括检查负载均衡器状态、调整算法、诊断修复节点故障等。还阐述了预防措施与确保系统稳定性的方法,如定期监控维护、备份恢复策略、团队协作与知识管理等。为确保 MySQL 数据库系统高可用性提供全面指导。
|
11月前
|
分布式计算 关系型数据库 MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
117 3
|
11月前
|
消息中间件 分布式计算 关系型数据库
大数据-140 - ClickHouse 集群 表引擎详解5 - MergeTree CollapsingMergeTree 与其他数据源 HDFS MySQL
大数据-140 - ClickHouse 集群 表引擎详解5 - MergeTree CollapsingMergeTree 与其他数据源 HDFS MySQL
167 0
|
7月前
|
监控 关系型数据库 MySQL
云数据库:从零到一,构建高可用MySQL集群
在互联网时代,数据成为企业核心资产,传统单机数据库难以满足高并发、高可用需求。云数据库通过弹性扩展、分布式架构等优势解决了这些问题,但也面临数据安全和性能优化挑战。本文介绍了如何从零开始构建高可用MySQL集群,涵盖选择云服务提供商、创建实例、配置高可用架构、数据备份恢复及性能优化等内容,并通过电商平台案例展示了具体应用。
|
3月前
|
人工智能 运维 关系型数据库
数据库运维:mysql 数据库迁移方法-mysqldump
本文介绍了MySQL数据库迁移的方法与技巧,重点探讨了数据量大小对迁移方式的影响。对于10GB以下的小型数据库,推荐使用mysqldump进行逻辑导出和source导入;10GB以上可考虑mydumper与myloader工具;100GB以上则建议物理迁移。文中还提供了统计数据库及表空间大小的SQL语句,并讲解了如何使用mysqldump导出存储过程、函数和数据结构。通过结合实际应用场景选择合适的工具与方法,可实现高效的数据迁移。
643 1
|
3月前
|
SQL 关系型数据库 MySQL
Go语言数据库编程:使用 `database/sql` 与 MySQL/PostgreSQL
Go语言通过`database/sql`标准库提供统一数据库操作接口,支持MySQL、PostgreSQL等多种数据库。本文介绍了驱动安装、连接数据库、基本增删改查操作、预处理语句、事务处理及错误管理等内容,涵盖实际开发中常用的技巧与注意事项,适合快速掌握Go语言数据库编程基础。
247 62
|
2月前
|
SQL 存储 关系型数据库
MySQL功能模块探秘:数据库世界的奇妙之旅
]带你轻松愉快地探索MySQL 8.4.5的核心功能模块,从SQL引擎到存储引擎,从复制机制到插件系统,让你在欢声笑语中掌握数据库的精髓!
|
6月前
|
关系型数据库 MySQL Java
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库

推荐镜像

更多