
本文共 5024 字,大约阅读时间需要 16 分钟。
MHA高可用性架构搭建及GTID复制技术解析
1.1 MHA简介
MHA(Master High Availability)由日本DeNA公司youshimaton开发,是MySQL高可用性领域的优秀解决方案。其主要目标是在10~30秒内完成数据库故障切换,同时保证数据一致性。MHA支持一主多从架构,通过Manager节点管理多套复制集群,无需额外服务器,性能优异且无修改复制环境需求。
1.2 环境搭建
1.2.1 系统环境
- db01(master):CentOS 6.9,IP:10.0.0.51
- db02(slave1)
- db03(slave1,MHA Manager、Atlas节点)
1.2.2 MySQL软件
所有节点安装MySQL 5.6.36,支持GTID复制。
1.3 基于GTID的主从复制配置
1.3.1 先决条件
- 主库和从库开启binlog
- server-id各不相同
- 创建复制用户
- 主从复制用户:repl@'10.0.0.%',密码:123
1.3.2 配置主从复制
db01(master):my.cnf配置
[mysqld]server-id=51log-bin=mysql-binbinlog_format=ROWgtid-mode=onenforce-gtid-consistency=truelog-slave-updates=1relay_log_purge=0socket=/tmp/mysql.sock
db02、db03(slave):my.cnf配置
[mysqld]server-id=52server-id=53binlog_format=ROWgtid-mode=onenforce-gtid-consistency=truelog-bin=mysql-binsocket=/tmp/mysql.sock
创建复制用户:
GRANT REPLICATION SLAVE ON *.* TO repl@'10.0.0.%' IDENTIFIED BY '123';
从库启动复制:
CHANGE MASTER TO MASTER_HOST='10.0.0.51', MASTER_USER='repl', MASTER_PASSWORD='123', MASTER_AUTO_POSITION=1;START SLAVE;
1.4 MHA部署
1.4.1 环境准备
安装依赖包:
yum install perl-DBD-MySQL -y
下载并安装MHA软件包:
wget https://github.com/mha4mysql/mha4mysql-manager/releases/download/0.56/mha4mysql-manager-0.56-0.el6.noarch.rpmrpm -ivh mha4mysql-manager-0.56-0.el6.noarch.rpm
安装MHA Node:
rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm
创建MHA管理用户:
grant all privileges on *.* to mha@'10.0.0.%' identified by 'mha';
创建命令软链接:
ln -s /application/mysql/bin/mysqlbinlog /usr/bin/mysqlbinlogln -s /application/mysql/bin/mysql /usr/bin/mysql
1.4.2 部署Manager节点
部署在db03上:
# 安装Manager依赖yum install perl-Config-Tiny epel-release perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes -y# 安装Manager软件rpm -ivh mha4mysql-manager-0.56-0.el6.noarch.rpm
创建必要目录:
mkdir -p /etc/mhamkdir -p /var/log/mha/app1
编辑MHA Manager配置文件:
vim /etc/mha/app1.cnf
配置文件示例:
[server default]manager_log=/var/log/mha/app1/managermanager_workdir=/var/log/mha/app1master_binlog_dir=/data/mysqluser=mhapassword=mhaping_interval=2repl_password=123repl_user=replssh_user=root[server1]hostname=10.0.0.51port=3306[server2]hostname=10.0.0.52port=3306[server3]hostname=10.0.0.53port=3306
配置SSH信任关系:
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsafor i in 1 2 3; do ssh-copy-id -i ~/.ssh/id_dsa.pub root@10.0.0.$i; done
启动MHA Manager:
nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/mha/app1/manager.log 2>&1 &
1.5 虚拟IP漂移配置
1.5.1 配置VIP漂移
MHA支持通过脚本实现VIP漂移,需在app1.cnf中配置:
master_ip_failover_script=/usr/local/bin/master_ip_failover
脚本内容:
my $vip = '10.0.0.55/24';my $key = '0';my $ssh_start_vip = "/sbin/ifconfig eth0:$key $vip";my $ssh_stop_vip = "/sbin/ifconfig eth0:$key down";chmod +x /usr/local/bin/master_ip_failover
手动绑定VIP:
ifconfig eth0:0 10.0.0.55/24
1.5.2 测试VIP漂移
停止主库:
/etc/init.d/mysqld stop
验证从库状态:
mysql -umha -pmha -h127.0.0.1 -P33060
检查VIP状态:
ip a s eth0
1.6 Binlog Server配置
1.6.1 配置Binlog Server
准备db03作为Binlog Server:
mkdir -p /data/mysql/binlogchown -R mysql:mysql /data/mysql/binlog
启动Binlog Server:
cd /data/mysql/binlogmysqlbinlog -R --host=10.0.0.51 --user=mha --password=mha --raw --stop-never mysql-bin.000001 &
1.6.2 测试Binlog备份
查看Binlog目录:
ll /data/mysql/binlog
刷新Binlog:
mysql -uroot -p123 -e "flush logs;"
验证备份文件:
ll /data/mysql/binlog
1.7 MySQL中间件Atlas
1.7.1 Atlas简介
Atlas是Qihoo 360公司开发的MySQL中间件,支持读写分离、从库负载均衡、自动分表等功能,适合复杂的高并发场景。
1.7.2 Atlas配置
安装Atlas:
wget https://github.com/Qihoo360/Atlas/releases/download/2.2.1/Atlas-2.2.1.el6.x86_64.rpmrpm -ivh Atlas-2.2.1.el6.x86_64.rpm
配置Atlas:
vim /usr/local/mysql-proxy/conf/test.cnf
配置文件示例:
[mysql-proxy]admin-username=useradmin-password=pwdproxy-backend-addresses=10.0.0.55:3306proxy-read-only-backend-addresses=10.0.0.52:3306,10.0.0.53:3306client-ips=192.168.1.2,192.168.1.0/24daemon=truekeepalive=trueevent-threads=8log-level=messagelog-path=/usr/local/mysql-proxy/logsql-log=onproxy-address=0.0.0.0:33060admin-address=0.0.0.0:2345charset=utf8
启动Atlas:
/usr/local/mysql-proxy/bin/mysql-proxyd test start
1.7.3 Atlas管理操作
登录Atlas管理界面:
mysql -umha -pmha -h127.0.0.1 -P2345
查看后端状态:
SELECT * FROM backends;
平滑摘除数据库:
REMOVE BACKEND 2;
保存配置并添加新节点:
SAVE CONFIG;ADD SLAVE 10.0.0.52:3306;
1.8 Atlas-Sharding版本
1.8.1 版本介绍
Atlas-Sharding实现水平切分,将大数据表分布到多个数据库组,支持Range和Hash两种切分方式,适合应对大数据查询压力。
1.8.2 架构示例
配置文件:
[shardrule-0]table=test.sharding_testtype=rangeshard-key=idgroups=0:0-999,1:1000-1999[group-0]proxy-backend-addresses=192.168.0.15:3306proxy-read-only-backend-addresses=192.168.0.16:3306[group-1]proxy-backend-addresses=192.168.0.17:3306proxy-read-only-backend-addresses=192.168.0.18:3306
1.8.3 使用限制
- 支持的语句:SELECT、INSERT、DELETE、UPDATE
- 不支持DDL和跨库事务
- Hash切分暂不支持数据迁移
1.9 参考文献
[1] https://www.cnblogs.com/cenalulu/p/4309009.html
[2] https://yq.aliyun.com/articles/57731[3] https://www.jianshu.com/p/b68e429d09c7[4] https://www.cnblogs.com/yyhh/archive/2015/12/29/5084844.html[5] https://blog.csdn.net/jhq0113/article/details/44302703[6] https://blog.csdn.net/jhq0113/article/details/44239823[7] https://www.guokr.com/blog/475765/[8] https://blog.csdn.net/bluishglc/article/details/6161475/发表评论
最新留言
关于作者
