MySQL高可用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL高可用相关的知识,希望对你有一定的参考价值。

mysql高可用

  本文主要围绕MHA和Galera Cluster来讲述两种方案在MySQL中是怎样实现高可用的。

1.几种常见的高可用模式

MMM: Multi-Master Replication Manager for MySQL,Mysql主主复制管理器是一套灵活的脚本程序,基于perl实现,用来对mysql replication进行监控和故障迁移,并能管理mysql Master-Master复制的配置(同一时间只有一个节点是可写的)

官网: http://www.mysql-mmm.org
https://code.google.com/archive/p/mysql-master-master/downloads

MHA: Master High Availability,对主节点进行监控,可实现自动故障转移至其它从节点;通过提升某一从节点为新的主节点,基于主从复制实现,还需要客户端配合实现,目前MHA主要支持一主多从的架构,要搭建MHA,要求一个复制集群中必须最少有三台数据库服务器,一主二从,即一台充当master,一台充当备用master,另外一台充当从库,出于机器成本的考虑,淘宝进行了改造,目前淘宝TMHA已经支持一主一从

官网:https://code.google.com/archive/p/mysql-master-ha/

Galera Cluster:wsrep(MySQL extended with the Write Set Replication)通过wsrep协议在全局实现复制;任何一节点都可读写,不需要主从复制,实现多主读写
MHA集群架构

2.MHA

MHA工作原理

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

MHA

MHA软件由两部分组成,Manager工具包和Node工具包
Manager工具包主要包括以下几个工具:
masterha_check_ssh 检查MHA的SSH配置状况
masterha_check_repl 检查MySQL复制状况
masterha_manger 启动MHA
masterha_check_status 检测当前MHA运行状态
masterha_master_monitor 检测master是否宕机
masterha_master_switch 故障转移(自动或手动)
masterha_conf_host 添加或删除配置的server信息

MHA Node工具包:这些工具通常由MHA Manager的脚本触发,无需人为操作)主要包括以下几个工具:

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

注意:为了尽可能的减少主库硬件损坏宕机造成的数据丢失,因此在配置MHA的同时建议配置成MySQL 5.5的半同步复制

MHA 自定义扩展:

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

配置文件:

global配置,为各application提供默认配置
application配置:为每个主从复制集群

实现MHA

在管理节点上安装两个包:

启用epel源
mha4mysql-manager   
mha4mysql-node

在被管理节点安装:

yum install mha4mysql-node

实现MHA

在管理节点建立配置文件

vim /etc/mastermha/app1.cnf 
[server default]
user=mhauser
password=magedu
manager_workdir=/data/mastermha/app1/
manager_log=/data/mastermha/app1/manager.log
remote_workdir=/data/mastermha/app1/
ssh_user=root
repl_user=repluser
repl_password=magedu
ping_interval=1

[server1]
hostname=192.168.8.17
candidate_master=1
[server2]
hostname=192.168.8.27
candidate_master=1
[server3]
hostname=192.168.8.37

实现Master

vim /etc/my.cnf
[mysqld]
log-bin
server_id=1         
skip_name_resolve=1 MHA必须设

mysql>show master logs
mysql>grant replication slave on *.* to [email protected]‘192.168.8.%‘ identified by ‘magedu‘; 用于从服务器复制
mysql>grant all on *.* to [email protected]‘192.168.8.%’identified by‘magedu‘;  管理账号

实现slave

vim /etc/my.cnf
[mysqld]
server_id=2 不同节点此值各不相同
log-bin
read_only
relay_log_purge=0
skip_name_resolve=1

mysql>CHANGE MASTER TO MASTER_HOST=‘MASTER_IP‘, 
MASTER_USER=‘repluser‘, MASTER_PASSWORD=‘magedu‘, 
MASTER_LOG_FILE=‘mariadb-bin.000001‘, MASTER_LOG_POS=245;

实现MHA

在所有节点实现相互之间ssh key验证  注意时间的同步   

Mha验证和启动
    masterha_check_ssh --conf=/etc/mastermha/app1.cnf
    masterha_check_repl --conf=/etc/mastermha/app1.cnf
    masterha_manager --conf=/etc/mastermha/app1.cnf

排错日志:
    /data/mastermha/app1/manager.log

3.Galera Cluster

Galera Cluster:集成了Galera插件的MySQL集群,是一种新型的,数据不共享的,高度冗余的高可用方案,目前Galera Cluster有两个版本,分别是Percona Xtradb Cluster及MariaDB Cluster,Galera本身是具有多主特性的,即采用multi-master的集群架构,是一个既稳健,又在数据一致性、完整性及高性能方面有出色表现的高可用解决方案
右图图示:三个节点组成了一个集群,与普通的主
从架构不同,它们都可以作为主节点,三个节点是对等的,称为multi-master架构,当有客户端要写入或者读取数据时,连接哪个实例都是一样的,读到的数据是相同的,写入某一个节点之后,集群自己会将新数据同步到其它节点上面,这种架构不共享任何数据,是一种高冗余架构

Galera Cluster特点

多主架构:真正的多点读写的集群,在任何时候读写数据,都是最新的
同步复制:集群不同节点之间数据同步,没有延迟,在数据库挂掉之后,数据不会丢失
并发复制:从节点APPLY数据时,支持并行执行,更好的性能
故障切换:在出现数据库故障时,因支持多点写入,切换容易
热插拔:在服务期间,如果数据库挂了,只要监控程序发现的够快,不可服务时间就会非常少。在节点故障期间,节点本身对集群的影响非常小
自动节点克隆:在新增节点,或者停机维护时,增量数据或者基础数据不需要人工手动备份提供,Galera Cluster会自动拉取在线节点数据,最终集群会变为一致
对应用透明:集群的维护,对应用程序是透明的

Galera Cluster工作过程

Galera Cluster官方文档:

http://galeracluster.com/documentation-webpages/galera-documentation.pdf
http://galeracluster.com/documentation-webpages/index.html 
https://mariadb.com/kb/en/mariadb/getting-started-with-mariadb-galera-cluster/

Galera Cluster包括两个组件

Galera replication library (galera-3) 
WSREP:MySQL extended with the Write Set Replication 

WSREP复制实现:

percona-cluster
MariaDB-Cluster mariadb集群专业版

注意:都至少需要三个节点,不能安装mariadb-server

MySQL复制

yum install MariaDB-Galera-server  需要官方yum源
vim /etc/my.cnf.d/server.cnf
[galera]
wsrep_provider = /usr/lib64/galera/libgalera_smm.so
wsrep_cluster_address="gcomm://192.168.8.7,192.168.8.17,192.168.8.27"
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0

下面配置可选项
wsrep_cluster_name = ‘mycluster‘默认my_wsrep_cluster
wsrep_node_name = ‘node1‘
wsrep_node_address = ‘192.168.8.7‘

MySQL复制

首次启动时,需要初始化集群,在其中一个节点上执行命令

/etc/init.d/mysql start --wsrep-new-cluster

而后正常启动其它节点

service mysql start

查看集群中相关系统变量和状态变量

SHOW VARIABLES LIKE ‘wsrep_%‘;
SHOW STATUS LIKE ‘wsrep_%‘;
SHOW STATUS LIKE ‘wsrep_cluster_size‘;

以上是关于MySQL高可用的主要内容,如果未能解决你的问题,请参考以下文章

Mysql实现MHA高可用

MySQL-高可用架构MHA

MySQL-高可用架构MHA

MySQL高可用方案-PXC(Percona XtraDB Cluster)环境部署详解

MySQL高可用工具Orchestrator raft模式部署

MySQL高可用工具Orchestrator raft模式部署