1.高级架构演变
多活:没有切换的动作 单活:有切换的动作 高可用架构: 单活: MMM架构——mysql-mmm(google)---2主1从 MHA架构——mysql-master-ha(日本DeNa)---1主2从 T-MHA架构——淘宝的---1主1从 多活: (MGC)MariaDB Galera Cluster架构 (PXC)Percona XtraDB Cluster架构 MySQL Cluster(Oracle rac)架构 (MGR)MySQL Group replication(5.7.17新特性)
Innodb Cluster 高性能架构: 读写分离架构(读性能较高,写比较少) 代码级别 MySQL proxy (Atlas,mysql router,proxySQL(percona),maxscale)、 amoeba(taobao) xx-dbproxy等。 分布式架构(读写性能都提高):分布式架构里面一般都支持高可用方案 分库分表——cobar,TDDL,DRDS Mycat,DBLE自主研发等。 NewSQL,TiDB
innodb cluster.
2.MHA环境搭建
MHA:manager(管理端)+node(节点端) 架构介绍: 1主2从,master:132 slave:133 134 MHA 高可用方案软件构成 Manager软件:选择一个从节点安装 Node软件:所有节点都要安装 安装规划:(实验环境将其manager安装在134上面) 主库: 132 node 从库: 133 node 134 node manager 135 要求: 1.配置免秘钥登录 部署MHA高可用架构: 1.配置关键程序软连接:(mha脚本里面已经写了绝对路径,所以要使用软连接) ln -s /usr/local/mysql/bin/mysqlbinlog /usr/bin/mysqlbinlog ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql 2.配置免秘钥:(mha在工作过程中要传输文件) db01: rm -rf /root/.ssh ssh-keygen cd /root/.ssh mv id_rsa.pub authorized_keys scp -r /root/.ssh 192.168.253.133:/root scp -r /root/.ssh 192.168.253.134:/root 验证结果: ssh 192.168.253.132 date ssh 192.168.253.133 date ssh 192.168.253.134 date 3.安装mha软件 下载mha软件: mha官网:https://code.google.com/archive/p/mysql-master-ha/ github下载地址:https://github.com/yoshinorim/mha4mysql-manager/wiki/Downloads 所有节点安装Node软件依赖包 yum install perl-DBD-MySQL -y rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm Manager软件安装(234机器) yum install -y perl-Config-Tiny epel-release perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes rpm -ivh mha4mysql-manager-0.56-0.el6.noarch.rpm 在132主库中创建mha监控专用的管理用户:主库创建,从库会同步过去 grant all privileges on *.* to mha@'192.168.253.%' identified by 'mha';
3.MHA环境manager管理工具的配置文件
创建manager的配置文件目录(234节点) mkdir -p /etc/mha 创建日志目录 mkdir -p /var/log/mha/app1 编辑mha配置文件 vim /etc/mha/app1.cnf # 注意mha可以管理多个不同的应用,是通过不同的配置文件名来区分不同应用 [server default] manager_log=/var/log/mha/app1/manager manager_workdir=/var/log/mha/app1 master_binlog_dir=/data/mysql/binlog user=mha password=mha ping_interval=2 repl_password=123 repl_user=repl ssh_user=root [server1] hostname=192.168.253.132 port=3306 [server2] hostname=192.168.253.133 port=3306 [server3] hostname=192.168.253.134 port=3306
4.MHA环境的状态检查
1.免秘钥登录检查
[root@db3 data]# masterha_check_ssh --conf=/etc/mha/app1.cnf Mon Feb 24 12:36:07 2020 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping. Mon Feb 24 12:36:07 2020 - [info] Reading application default configuration from /etc/mha/app1.cnf.. Mon Feb 24 12:36:07 2020 - [info] Reading server configuration from /etc/mha/app1.cnf.. Mon Feb 24 12:36:07 2020 - [info] Starting SSH connection tests.. Mon Feb 24 12:36:07 2020 - [debug] Mon Feb 24 12:36:07 2020 - [debug] Connecting via SSH from [email protected](192.168.253.132:22) to [email protected](192.168.253.133:22).. Mon Feb 24 12:36:07 2020 - [debug] ok. Mon Feb 24 12:36:07 2020 - [debug] Connecting via SSH from [email protected](192.168.253.132:22) to [email protected](192.168.253.134:22).. Mon Feb 24 12:36:07 2020 - [debug] ok. Mon Feb 24 12:36:08 2020 - [debug] Mon Feb 24 12:36:07 2020 - [debug] Connecting via SSH from [email protected](192.168.253.133:22) to [email protected](192.168.253.132:22).. Mon Feb 24 12:36:07 2020 - [debug] ok. Mon Feb 24 12:36:07 2020 - [debug] Connecting via SSH from [email protected](192.168.253.133:22) to [email protected](192.168.253.134:22).. Mon Feb 24 12:36:08 2020 - [debug] ok. Mon Feb 24 12:36:08 2020 - [debug] Mon Feb 24 12:36:08 2020 - [debug] Connecting via SSH from [email protected](192.168.253.134:22) to [email protected](192.168.253.132:22).. Mon Feb 24 12:36:08 2020 - [debug] ok. Mon Feb 24 12:36:08 2020 - [debug] Connecting via SSH from [email protected](192.168.253.134:22) to [email protected](192.168.253.133:22).. Mon Feb 24 12:36:08 2020 - [debug] ok. Mon Feb 24 12:36:08 2020 - [info] All SSH connection tests passed successfully. [root@db3 data]#
2.主从状态检查
[root@db3 data]# masterha_check_repl --conf=/etc/mha/app1.cnf Mon Feb 24 12:38:03 2020 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping. Mon Feb 24 12:38:03 2020 - [info] Reading application default configuration from /etc/mha/app1.cnf.. Mon Feb 24 12:38:03 2020 - [info] Reading server configuration from /etc/mha/app1.cnf.. Mon Feb 24 12:38:03 2020 - [info] MHA::MasterMonitor version 0.56. Mon Feb 24 12:38:05 2020 - [info] GTID failover mode = 1 Mon Feb 24 12:38:05 2020 - [info] Dead Servers: Mon Feb 24 12:38:05 2020 - [info] Alive Servers: Mon Feb 24 12:38:05 2020 - [info] 192.168.253.132(192.168.253.132:3306) Mon Feb 24 12:38:05 2020 - [info] 192.168.253.133(192.168.253.133:3306) Mon Feb 24 12:38:05 2020 - [info] 192.168.253.134(192.168.253.134:3306) Mon Feb 24 12:38:05 2020 - [info] Alive Slaves: Mon Feb 24 12:38:05 2020 - [info] 192.168.253.133(192.168.253.133:3306) Version=5.7.26-log (oldest major version between slaves) log-bin:enabled Mon Feb 24 12:38:05 2020 - [info] GTID ON Mon Feb 24 12:38:05 2020 - [info] Replicating from 192.168.253.132(192.168.253.132:3306) Mon Feb 24 12:38:05 2020 - [info] 192.168.253.134(192.168.253.134:3306) Version=5.7.26-log (oldest major version between slaves) log-bin:enabled Mon Feb 24 12:38:05 2020 - [info] GTID ON Mon Feb 24 12:38:05 2020 - [info] Replicating from 192.168.253.132(192.168.253.132:3306) Mon Feb 24 12:38:05 2020 - [info] Current Alive Master: 192.168.253.132(192.168.253.132:3306) Mon Feb 24 12:38:05 2020 - [info] Checking slave configurations.. Mon Feb 24 12:38:05 2020 - [info] read_only=1 is not set on slave 192.168.253.133(192.168.253.133:3306). Mon Feb 24 12:38:05 2020 - [info] read_only=1 is not set on slave 192.168.253.134(192.168.253.134:3306). Mon Feb 24 12:38:05 2020 - [info] Checking replication filtering settings.. Mon Feb 24 12:38:05 2020 - [info] binlog_do_db= , binlog_ignore_db= Mon Feb 24 12:38:05 2020 - [info] Replication filtering check ok. Mon Feb 24 12:38:05 2020 - [info] GTID (with auto-pos) is supported. Skipping all SSH and Node package checking. Mon Feb 24 12:38:05 2020 - [info] Checking SSH publickey authentication settings on the current master.. Mon Feb 24 12:38:05 2020 - [info] HealthCheck: SSH to 192.168.253.132 is reachable. Mon Feb 24 12:38:05 2020 - [info] 192.168.253.132(192.168.253.132:3306) (current master) +--192.168.253.133(192.168.253.133:3306) +--192.168.253.134(192.168.253.134:3306) Mon Feb 24 12:38:05 2020 - [info] Checking replication health on 192.168.253.133.. Mon Feb 24 12:38:05 2020 - [info] ok. Mon Feb 24 12:38:05 2020 - [info] Checking replication health on 192.168.253.134.. Mon Feb 24 12:38:05 2020 - [info] ok. Mon Feb 24 12:38:05 2020 - [warning] master_ip_failover_script is not defined. Mon Feb 24 12:38:05 2020 - [warning] shutdown_script is not defined. Mon Feb 24 12:38:05 2020 - [info] Got exit code 0 (Not master dead). MySQL Replication Health is OK. [root@db3 data]#
3.开启MHA
[root@db3 data]# 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] 10724
4.检查MHA状态
[root@db3 ]# masterha_check_status --conf=/etc/mha/app1.cnf app1 (pid:10724) is running(0:PING_OK), master:192.168.253.132 [root@db3 ]#
5.MHA软件构成
Manager工具包主要包括以下几个工具: masterha_manger # 启动MHA masterha_check_ssh # 检查MHA的SSH配置状况 masterha_check_repl # 检查MySQL复制状况 masterha_master_monitor # 检测master是否宕机 masterha_check_status # 检测当前MHA运行状态 masterha_master_switch # 控制故障转移(自动或者手动) masterha_conf_host # 添加或删除配置的server信息 Node工具包主要包括以下几个工具: 这些工具通常由MHA Manager的脚本触发,无需人为操作 save_binary_logs # 保存和复制master的二进制日志 apply_diff_relay_logs # 识别差异的中继日志事件并将其差异的事件应用于其他的 purge_relay_logs # 清除中继日志(不会阻塞SQL线程)
6.MH高可用架构原理
站在开发的角度分析MHA应该具备的功能
pass