匿名通过本文主要向大家介绍了MySQL,自动故障,移工具等相关知识,希望本文的分享对您有所帮助
mysqlfailover 是mysql utilities工具包中包含的一个重要的高可用命令,用于对主从复制架构进行健康检测以及实现故障自动转移。它会定期按指定的时间间隔探测各节点的健康状态,一旦在捕获到主节点不可用时,将触发故障转移相关动作,自动执行故障切换到当前最佳的从服务器上。同时整个主从架构内的其他从节点将指向新的主节点,自动完成主从拓扑结构更新。
相关知识点热身
基于mysqldump搭建gtid主从
MySQL GTID 错误处理汇总
配置MySQL GTID 主从复制
使用mysqldump导出数据库
一、mysqlfailover特点
持续监控主从主从拓扑结构健康状况,当主节点不可用时,触发自动故障转移 支持GTID全局事务标识符,传统主从模式不支持 支持设置故障转移首选及备选节点,支持投票选举方式选择新的主节点以及仅监测模式(不切换主从) 支持自定义时间监测间隔 支持交互模式以及守护进程的模式开启mysqlfailover 支持在切换前或切换后执行指定的脚本 支持操作记录到日志不同的粒度以及日志老化
二、mysqlfailover需求
主从需要开启GTID模式(mysql 应使用5.6.5以上版本) 所有的slave端需要配置以下参数,建议主库也添加(切换后主从模式变化) report-host report-port master-info-repository=TABLE relay-log-info-repository=TABLE 权限(mysqlfailover工具检测及切换期间需要,主从都需要) SHOW SLAVE STATUS SHOW MASTER STATUS STOP SLAVE, START SLAVE, WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS, CHANGE MASTER TO REPLICATE SLAVE SUPER, GRANT OPTION, RELOAD, DROP, CREATE, INSERT ,SELECT权限
三、一些重要参数
--failover-mode(转移模式) auto:执行故障自动转移到第一候选人。如果没有从可行的,继续从从列表中找到一个可行的候选者。 如果没有从被认为是一个可行的候选者,该程序将生成错误并退出。一旦候选者被发现,该程序将进行故障切换到最佳从上。 该命令测试每个候选从的先决条件。一旦候选从被选中,其他从作为它的从,收集其他从的任何事务交易。该方式,确保候选者是最新的从 elect:这种模式与aoto一样的,除了如果在指定的候选从列表中没有可行的,不检测剩余的从和产生错误并退出。 fail: 这种模式会产生一个错误,当主失败后不会进行故障转移。这种模式被用来只进行定期健康监测不进行故障切换。 --interval 选项来定义检测主状态和产生健康报告的时间间隔,缺省为15s,最小间隔为5s --master=MASTER 主服务器连接配置 --slaves=SLAVES 从服务器连接配置 --candidates=CANDIDATES 候选服务器连接配置 以上3个连接配置值支持是使用下列方式,多个值以逗号分割 <user>[:<password>]@<host>[:<port>][:<socket>] <login-path>[:<port>][:<socket>] <config-path>[<[group]>] --discover-slaves-login=DISCOVER 基于主服务器用户密码查询当前所有注册到主服务器的从库端 使用<user>[:<password>] or <login-path> --ping=PING Number of ping attempts for detecting downed server. 侦测服务器宕机检测,缺省为3s --force override the registration check on master for multiple instances of the console monitoring the same master. 当控制台启动时,主的主机名和端口将被插入一个特殊的表来跟踪记录哪些实例与主联系 在启动时,如果行匹配这些值,控制台无法启动。如果使用--force选项,该行将被删除 --daemon(使用守护进程方式,如未指定,则为交互方式) start 启动守护进程。需要--log选项。 stop 停止守护进程。如果有指定--pidfile选项,该值需要与start指定的一致。 restart 重新启动守护进程。如果有指定--pidfile选项,该值需要与start指定的一致。 nodetach 启动守护进程,但是不会从控制台分离进程。需要--log选项。 --log=<log_file> 指定日志文件 --log-age 选项用于指定日志存放天数,默认是7天。旧的日志自动轮滚掉 --exec-before 故障转移命令之前执行外部脚本 脚本的返回码来确定是否成功执行,0表示成功,非0表示失败并返回错误信息 --exec-after 故障转移命令之后执行外部脚本 脚本的返回码来确定是否成功执行,0表示成功,非0表示失败并返回错误信息 -p, --pedantic fail if some inconsistencies are found (e.g. errant transactions on slaves). 在检查期间如果发现有不一致的情况(从错误的事务或SQL线程错误)阻止故障转移。
四、搭建GTID主从
1、演示环境
# more /etc/redhat-release CentOS release 6.7 (Final)# more /etc/hosts192.168.1.233 node233.edq.com node233 ###用作主节点192.168.1.245 node245.edq.com node245 ###用作从节点Slave1192.168.1.247 node247.edq.com node247 ###用作从节点Slave2# mysql -Vmysql Ver 14.14 Distrib 5.6.30, for linux-glibc2.5 (x86_64) using EditLine wrapper# mysqlfailover --versionMySQL Utilities mysqlfailover version 1.6.4 License type: GPLv2
2、主从节点参数配置
======================192.168.1.233 Master======================== [mysql]#prompt= (\u@\h)[\d]>prompt= (\u@192.168.1.233)[\d]>user=rootpassword=pass [mysqld]sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLESbasedir = /usr/local/mysqldatadir = /dataserver_id=233gtid_mode=onenforce_gtid_consistency=on#binloglog_bin=node233-binlog log-slave-updates=1binlog_format=rowreport_host=192.168.1.233report_port=3306 master-info-repository = TABLE relay-log-info-repository = TABLE#relay logskip_slave_start=1 ======================192.168.1.245 Slave1======================== [mysql]prompt= (\u@192.168.1.245)[\d]>user=rootpassword=pass [mysqld]sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLESbasedir = /usr/local/mysqldatadir = /dataserver_id=245 gtid_mode=on enforce_gtid_consistency=on log_bin=node245-binlog log-slave-updates=1 binlog_format=row report_host=192.168.1.245report_port=3306 master-info-repository = TABLE relay-log-info-repository = TABLEskip_slave_start=1 ======================192.168.1.247 Slave2======================== [mysql]prompt= (\u@192.168.1.247)[\d]>user=rootpassword=pass [mysqld]sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLESbasedir = /usr/local/mysqldatadir = /datauser = mysql #Author : Leshami#Blog : http:///server_id=247gtid_mode=onenforce_gtid_consistency=onlog_bin=node247-binlog log-slave-updates=1binlog_format=rowreport_host=192.168.1.247report_port=3306 master-info-repository = TABLE relay-log-info-repository = TABLEskip_slave_start=1
3、开启主从节点
--创建主从复制(repl)及切换账户(failover) --以下mysql提示符下Master即代表1.233节点执行,Slave1代表1.245上执行,Slave2代表1.247上执行 (root@Master)[mysql]>grant all privileges on *.* to 'failover'@'%' identified by 'pass' with grant option; (root@Master)[mysql]>grant replication slave on *.* to 'repl'@'%' identified by '123456'; (root@Slave1)[(none)]>grant all privileges on *.* to 'failover'@'%' identified by 'pass' with grant option; (root@Slave1)[(none)]>grant replication slave on *.* to 'repl'@'%' identified by '123456'; (root@Slave2)[(none)]>grant all privileges on *.* to 'failover'@'%' identified by 'pass' with grant option; (root@Slave2)[(none)]>grant replication slave on *.* to 'repl'@'%' identified by '123456'; --主节点上执行相应的操作 [root@node233 ~]# mysql -uroot -ppass -e "create database testdb;create database tempdb"[root@node233 ~]# mysql -uroot -ppass -e "create table testdb.repl(id int,ename varchar(50))"[root@node233 ~]# mysql -uroot -ppass -e "insert into testdb.repl values(1,'leshami')"[root@n