MySQL集群技术

MySQL部署方式

源码安装

安装配置

主从复制

一主两从

延迟复制

慢查询日志

并行复制

半同步模式

MySQL高可用之组复制(MGR)

实现mysql组复制

[MySQL route部署方式](#MySQL route部署方式)

MySQL高可用之MHA

故障切换

为MHA添加VIP功能


MySQL部署方式

源码安装

两个linux7主机,mysql-node1-10、mysql-node2-20

yum install cmake -y

#当cmake出错后如果想重新检测,删除 mysql-5.7.44 中 CMakeCache.txt重新检测即可

#下载安装依赖性

[root@mysql mysql-5.7.44]# yum install cmake gcc-c++ openssl-devel ncurses-devel.x86_64 libtirpc-devel-1.3.3-8.el9_4.x86_64.rpm rpcgen.x86_64 -y



[root@mysql mysql-5.7.44]# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/data/mysql -DMYSQL_UNIX_ADDR=/data/mysql/mysql.sock -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_EXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8mb4 -DDEFAULT_COLLATION=utf8mb4_unicode_ci -DWITH_BOOST=/root/mysql-5.7.44/boost/boost_1_59_0/

[root@mysql mysql-5.7.44]# make -j4

[root@mysql mysql-5.7.44]# make install

#完成

安装配置

[root@mysql ~]# cd /usr/local/mysql/

[root@mysql mysql]# useradd -s /sbin/nologin -M mysql

[root@mysql mysql]# mkdir /data/mysql -p

[root@mysql mysql]# chown mysql.mysql -R /data/mysql

[root@mysql mysql]# cd support-files/



[root@mysql support-files]# cp mysql.server /etc/init.d/mysqld

[root@mysql support-files]# vim /etc/my.cnf



[mysqld]

datadir=/data/mysql

socket=/data/mysql/mysql.sock

symbolic-links=0



[root@mysql support-files]# vim ~/.bash_profile

[root@mysql support-files]# source ~/.bash_profile



PATH=$PATH:$HOME/bin:/usr/local/mysql/bin

[root@mysql ~]# mysqld --user mysql --initialize

#默认密码

#启动

[root@mysql ~]# /etc/init.d/mysqld start

Starting MySQL.Logging to '/data/mysql/mysql.node1.err'.

 SUCCESS!



#设置开机启动

[root@mysql ~]# chkconfig mysqld on

安全初始化

[root@mysql ~]# mysql_secure_installation

#如果初始化有问题,删掉重新初始化

#复制默认密码

n-->n-->y-->y-->一直y

#登录
[root@mysql ~]# mysql -uroot -p

主从复制

MySQL 内建的复制功能是构建大型,高性能应用程序的基础
通过将 MySQL 的某一台主机( master )的数据复制到其他主机( slaves )上,并重新执行一遍来执行
复制过程中一台服务器充当主服务器,而其他一个或多个其他服务器充当从服务器
1 、 MySQL 支持的复制类型
基于语句( statement )的复制
在主服务器上执行 SQL 语句,在从服务器上执行同样的语句。 MySQL 默认采用基于语句的复制,效率比
较高。
基于行( row )的复制
把改变的内容复制过去,而不是把命令在从服务器上执行一遍。从 MySQL 5.0 开始支持。
混合型( mixed )的复制
默认采用基于语句的复制,一旦发现基于语句的无法精确复制时,就会采用基于行的复制。
2 、为什么要做主从复制
灾备
数据分布
负载平衡
读写分离
提高并发能力
3、主从复制原理
主要基于 MySQL 二进制日志
主要包括三个线程( 2 个 I/O 线程, 1 个 SQL 线程)

[root@mysql ~]# vim /etc/my.cnf



[mysqld]

datadir=/data/mysql

socket=/data/mysql/mysql.sock

symbolic-links=0

log-bin=mysql-bin

server-id=10



[root@mysql ~]# /etc/init.d/mysqld restart

[root@mysql ~]# mysql -uroot -p -e "select @@server_id"



mysql> create user repl@'%' identified by '123';

mysql> grant replication slave on *.* to repl@'%';

查看

mysql> show master status;

mysql> change master to master_host='192.168.86.10',master_user='repl',master_password='123',master_log_file='mysql-bin.000001',master_log_pos=595;

mysql> start slave;

一主两从

拉数据

锁库锁表

从master节点备份数据。

[root@mysql-node1 ~]# mysqldump -uroot -p tyw > tyw.sql
Enter password: 
把 sql 语句拷贝到30主机。

[root@mysql-node1 ~]# scp tyw.sql root@172.25.254.30:/mnt/
root@172.25.254.30's password: 
scp: /mnt//tyw.sql: Read-only file system

30中建立 tyw 这个数据库。

[root@mysql-node3 opt]# mysql -uroot -pmysql -e "CREATE DATABASE tyw;"
mysql: [Warning] Using a password on the command line interface can be insecure.
把数据导入库。

[root@mysql-node3 opt]# mysql -uroot -pmysql tyw < tyw.sql
mysql: [Warning] Using a password on the command line interface can be insecure.

延迟复制

目的:防止误操作

从服务器

30关闭 sql 线程,设置延迟同步时间,再开启线程。

mysql> STOP SLAVE SQL_THREAD;
Query OK, 0 rows affected (0.00 sec)

mysql> change master to master_delay=60;
Query OK, 0 rows affected (0.00 sec)

mysql> start slave sql_thread;
Query OK, 0 rows affected (0.00 sec)

慢查询日志

MySQL 如果启用了 slow_query_log = ON 选项,就会记录执行时间超过 long_query_time 的查询(初使表锁
定的时间不算作执行时间)。日志记录文件为 slow_query_log_file [ = file_name ] ,如果没有给出
file_name 值, 默认为主机名,后缀为 - slow .log 。如果给出了文件名,但不是绝对路径名,文件则写入数
据目录。
默认与慢查询相关变量:
mysql > SHOW GLOBAL VARIABLES LIKE '%slow_query_log%' ;
默认没有启用慢查询,为了服务器调优,建议开启
开启方法:
SET GLOBAL slow_query_log = ON ; 当前生效,永久有效配置文件中设置
使用 mysqldumpslow 命令获得日志中显示的查询摘要来处理慢查询日志

mysqldumpslow slow.log

那么多久算是慢呢?
如果查询时长超过 long_query_time 的定义值(默认 10 秒),即为慢查询:
mysql > SHOW GLOBAL VARIABLES LIKE 'long_query_time' ;

主服务器

mysql> SHOW variables like "slow%";
+---------------------+----------------------------------+
| Variable_name       | Value                            |
+---------------------+----------------------------------+
| slow_launch_time    | 2                                |
| slow_query_log      | OFF                              |
| slow_query_log_file | /data/mysql/mysql-node1-slow.log |
+---------------------+----------------------------------+
3 rows in set (0.00 sec)



#开启慢查询

mysql> SET GLOBAL slow_query_log=ON;
Query OK, 0 rows affected (0.00 sec)


mysql> SHOW variables like "slow%";
+---------------------+----------------------------------+
| Variable_name       | Value                            |
+---------------------+----------------------------------+
| slow_launch_time    | 2                                |
| slow_query_log      | ON                               |
| slow_query_log_file | /data/mysql/mysql-node1-slow.log |
+---------------------+----------------------------------+
3 rows in set (0.00 sec)

并行复制

GTID 用于在 binlog 中唯一标识一个事务。当事务提交时, MySQL Server 在写 binlog 的时候,会先写一个
特殊的 Binlog Event ,类型为 GTID_Event ,指定下一个事务的 GTID ,然后再写事务的 Binlog 。主从同步
时 GTID_Event 和事务的 Binlog 都会传递到从库,从库在执行的时候也是用同样的 GTID 写 binlog ,这样
主从同步以后,就可通过 GTID 确定从库同步到的位置了。也就是说,无论是级联情况,还是一主多从情
况,都可以通过 GTID 自动找点儿,而无需像之前那样通过 File_name 和 File_position 找点儿了。
1 、 master 更新数据时,会在事务前产生 GTID ,一同记录到 binlog 日志中。
2 、 slave 端的 i/o 线程将变更的 binlog ,写入到本地的 relay log 中。
3 、 sql 线程从 relay log 中获取 GTID ,然后对比 slave 端的 binlog 是否有记录。
4 、如果有记录,说明该 GTID 的事务已经执行, slave 会忽略。
5 、如果没有记录, slave 就会从 relay log 中执行该 GTID 的事务,并记录到 binlog 。

开启多线程回放实现
GTID 核心参数
重要参数:
GTID 复制配置过程:
1> 准备配置文件
建议使用 5.7.17 以上版本。
replicate - wild - ignore - table = information_schema. %
replicate - wild - ignore - table = performance_schema. %
gtid-mode = on
enforce-gtid-consistency = true
log-slave-updates = 1
gtid-mode = on -- 启用 gtid 类型,否则就是普通的复制架构
enforce-gtid-consistency = true -- 强制 GTID 的一致性
log-slave-updates = 1 --slave 更新是否记入日志

编辑主配置文件。打开GTID。保证ID强一致性。

[root@mysql-node2 ~]# vim /etc/my.cnf

[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
symbolic-links=0
server-id=20
super_read_only=on
gtid_mode=ON
enforce-gtid-consistency=ON
slave-parallel-type=LOGICAL_CLOCK        #基于组提交
slave-parallel-workers=16            #开启线程数量    
master_info_repository=TABLE        #master信息在表中记录,默认记录在/data/mysql//master.info
relay_log_info_repository=TABLE        #回放日志信息在表中记录,默认记录在/data/mysql/relay-log.info
relay_log_recovery=ON                #日志回放恢复功能开启

#重启数据库
[root@mysql-node2 ~]# /etc/init.d/mysqld restart
Shutting down MySQL.... SUCCESS! 
Starting MySQL. SUCCESS!

半同步模式

主服务器

#启用半同步

#编辑10配置文件

[root@mysql-node1 ~]# vim /etc/my.cnf

[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
symbolic-links=0
server-id=10
slow_query_log=on
log-bin=mysql-bin
gtid_mode=ON
enforce-gtid-consistency=ON
rpl_semi_sync_master_enabled=1

[root@mysql-node1 ~]# /etc/init.d/mysqld restart
Shutting down MySQL............ SUCCESS! 
Starting MySQL. SUCCESS!

#安装半同步插件
mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
Query OK, 0 rows affected (0.00 sec)

#查看是否安装成功
mysql> select * from information_schema.PLUGINS where PLUGIN_NAME LIKE '%semi%'\G
*************************** 1. row ***************************
           PLUGIN_NAME: rpl_semi_sync_master
        PLUGIN_VERSION: 1.0
         PLUGIN_STATUS: ACTIVE
           PLUGIN_TYPE: REPLICATION
   PLUGIN_TYPE_VERSION: 4.0
        PLUGIN_LIBRARY: semisync_master.so
PLUGIN_LIBRARY_VERSION: 1.7
         PLUGIN_AUTHOR: He Zhenxing
    PLUGIN_DESCRIPTION: Semi-synchronous replication master
        PLUGIN_LICENSE: GPL
           LOAD_OPTION: ON
1 row in set (0.00 sec)

#打开半同步功能
mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1;
Query OK, 0 rows affected (0.00 sec)

#查看插件状态
mysql> SHOW VARIABLES LIKE 'rpl_semi_sync%';
+-------------------------------------------+------------+
| Variable_name                             | Value      |
+-------------------------------------------+------------+
| rpl_semi_sync_master_enabled              | ON         |
| rpl_semi_sync_master_timeout              | 10000      |
| rpl_semi_sync_master_trace_level          | 32         |
| rpl_semi_sync_master_wait_for_slave_count | 1          |
| rpl_semi_sync_master_wait_no_slave        | ON         |
| rpl_semi_sync_master_wait_point           | AFTER_SYNC |
+-------------------------------------------+------------+
6 rows in set (0.00 sec)

从服务器上

[root@mysql-node2 ~]# /etc/init.d/mysqld stop
Shutting down MySQL. SUCCESS! 
[root@mysql-node2 ~]# vim /etc/my.cnf

[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
symbolic-links=0
server-id=20
#super_read_only=on
gtid_mode=ON
enforce-gtid-consistency=ON
#rpl_semi_sync_master_enable=1

[root@mysql-node2 ~]# /etc/init.d/mysqld start 
Starting MySQL. SUCCESS! 

#安装插件

mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
Query OK, 0 rows affected (0.01 sec)

mysql> SET GLOBAL rpl_semi_sync_slave_enabled =1;
Query OK, 0 rows affected (0.00 sec)

mysql> STOP SLAVE IO_THREAD;
Query OK, 0 rows affected (0.00 sec)

mysql> START SLAVE IO_THREAD;
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW VARIABLES LIKE 'rpl_semi_sync%';
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| rpl_semi_sync_slave_enabled     | ON    |
| rpl_semi_sync_slave_trace_level | 32    |
+---------------------------------+-------+
2 rows in set (0.00 sec)

mysql> SHOW STATUS LIKE 'Rpl_semi_sync%';
+----------------------------+-------+
| Variable_name              | Value |
+----------------------------+-------+
| Rpl_semi_sync_slave_status | ON    |
+----------------------------+-------+
1 row in set (0.00 sec)

MySQL高可用之组复制(MGR)

支持单主和多主

多主用的多

实现mysql组复制

停服务,删数据

[root@mysql ~]# /etc/init.d/mysqld stop

[root@mysql ~]# ps aux | grep mysql

kill -9 号

[root@mysql ~]# rm -rf /data/mysql/*



初始化

[root@mysql ~]# mysqld --user=mysql --initialize





进入后更改密码

mysql> alter user root@localhost identified by '123';
Query OK, 0 rows affected (0.00 sec)
编辑my.cnf文件



[mysqld]

datadir=/data/mysql

socket=/data/mysql/mysql.sock

symbolic-links=0

log-bin=mysql-bin

server-id=10

disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"

gtid_mode=ON

enforce_gtid_consistency=ON

master_info_repository=TABLE

relay_log_info_repository=TABLE

binlog_checksum=NONE

log_slave_updates=ON

log_bin=binlog

binlog_format=ROW

plugin_load_add='group_replication.so'

transaction_write_set_extraction=XXHASH64

group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"

group_replication_start_on_boot=off

group_replication_local_address="192.168.86.10:33061"

group_replication_group_seeds="192.168.86.10:33061,192.168.86.20:33061,192.168.86.30:33061"

group_replication_ip_whitelist="192.168.86.0/24,127.0.0.1/8"

group_replication_bootstrap_group=off

group_replication_single_primary_mode=OFF

group_replication_enforce_update_everywhere_checks=ON

group_replication_allow_local_disjoint_gtids_join=1

配置mysql

mysql> CREATE USER rpl_user@'%' IDENTIFIED BY 'lee';

Query OK, 0 rows affected (0.00 sec)



mysql> GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%';

Query OK, 0 rows affected (0.01 sec)



mysql> FLUSH PRIVILEGES;

Query OK, 0 rows affected (0.00 sec)



mysql> SET SQL_LOG_BIN=1;

Query OK, 0 rows affected (0.00 sec)



mysql> CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='lee' FOR CHANNEL 'group_replication_recovery';

Query OK, 0 rows affected, 2 warnings (0.02 sec)



mysql> SET GLOBAL group_replication_bootstrap_group=ON;

mysql> START GROUP_REPLICATION;



mysql> SET GLOBAL group_replication_bootstrap_group=OFF;



mysql> select * from performance_schema.replication_group_members;

#3台主机做本地解析,提高数据同步速度。

[root@mysql-node1 ~]# vim /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.86.10   mysql-node1.timinglee.org
192.168.86.20   mysql-node2.timinglee.org
192.168.86.30   mysql-node3.timinglee.org

#复制配置到20、30上

[root@mysql-node1 ~]# scp /etc/my.cnf root@192.168.86.20:/etc/my.cnf
root@192.168.86.20's password: 
my.cnf                                       100%  963     1.1MB/s   00:00    
[root@mysql-node1 ~]# scp /etc/my.cnf root@192.168.86.30:/etc/my.cnf
root@192.168.86.30's password: 
my.cnf                                       100%  963     1.5MB/s   00:00 

20主机上

修改id

server-id=20


[root@mysql-node2 ~]# rm -rf /data/mysql/*
[root@mysql-node2 ~]# mysqld --user=mysql --initialize


[root@mysql-node2 ~]# /etc/init.d/mysqld start


mysql> alter user root@localhost identified by '123';
Query OK, 0 rows affected (0.00 sec)

后续同10

最后10上查看。

mysql> SELECT * FROM performance_schema.replication_group_members;
+---------------------------+--------------------------------------+---------------------------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST               | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+---------------------------+-------------+--------------+
| group_replication_applier | 03200011-63c5-11ef-ac95-000c2937a656 | mysql-node1.timinglee.org |        3306 | ONLINE       |
| group_replication_applier | f749ef58-63c9-11ef-8f23-000c2957fcc4 | mysql-node2.timinglee.org |        3306 | RECOVERING   |
+---------------------------+--------------------------------------+---------------------------+-------------+--------------+
2 rows in set (0.00 sec)

MySQL route部署方式

并不能限制数据库的读写

#先安装mysql-router

[root@mysql_router ~]# rpm -ivh mysql-router-community-8.4.0-1.el7.x86_64.rpm
[root@mysql_router ~]# vim /etc/mysqlrouter/mysqlrouter.conf

[routing:rw]
bind_address = 0.0.0.0
bind_port = 7002
destinations = 172.25.254.30:3306,172.25.254.20:3306,172.25.254.10:3306
routing_strategy = first-available

[root@mysql_router ~]# systemctl start mysqlrouter.service

mysql> CREATE USER lee@'%' IDENTIFIED BY 'lee';

mysql> GRANT ALL ON lee.* TO lee@'%';

MySQL高可用之MHA

MySQL+MHA 架构
MHA 目前在 Mysql 高可用方案中应该也是比较成熟和常见的方案,它由日本人开发出来,在 mysql 故障
切换过程中, MHA 能做到快速自动切换操作,而且还能最大限度保持数据的一致性


此架构特点:
1 、安装布署简单,不影响现有架构
2 、自动监控和故障转移
3 、保障数据一致性
4 、故障切换方式可使用手动或自动多向选择
5 、适应范围大(适用任何存储引擎)

mha-50

解压进入目录下

[root@mysql_mha ~]# unzip MHA-7.zip

[root@mysql_mha ~]# cd MHA-7/

免密

[root@mha ~]# ssh-keygen

10、20、30上只需要

[root@mysql ~]# vim /etc/my.cnf

在10中加

log_bin=mysql-bin

[root@mysql ~]# /etc/init.d/mysqld stop



[root@mysql ~]# rm -rf /data/mysql/*



[root@mysql ~]# mysqld --user=mysql --initialize



[root@mysql ~]# /etc/init.d/mysqld start



mysql> alter user root@localhost identified by '123';

Query OK, 0 rows affected (0.00 sec)

10中

mysql> create user 'repl'@'%' identified by 'lee';

Query OK, 0 rows affected (0.00 sec)

mysql> grant replication slave on *.* to repl@'%';

Query OK, 0 rows affected (0.00 sec)

mysql> install plugin rpl_semi_sync_master soname 'semisync_master.so';

Query OK, 0 rows affected (0.01 sec)


set global rpl_semi_sync_master_enabled = 1;



#查看
mysql> show variables like 'rpl_semi_sync%';

20、30中

mysql> change master to master_host='192.168.86.10', master_user='repl',master_password='lee', master_auto_position=1;

Query OK, 0 rows affected, 2 warnings (0.02 sec)





INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';

SET GLOBAL rpl_semi_sync_slave_enabled =1;





mysql> stop slave io_thread;

Query OK, 0 rows affected, 1 warning (0.00 sec)



mysql> start slave io_thread;

Query OK, 0 rows affected (0.00 sec)

部署mha

[root@mysql_mha MHA-7]# yum install *.rpm -y

10、20、30中

[root@mysql_mha MHA-7]# scp mha4mysql-node-0.58-0.el7.centos.noarch.rpm root@192.168.86.10:/mnt

[root@mysql1 ~]# yum install /mnt/mha4mysql-node-0.58-0.el7.centos.noarch.rpm -y





mysql> create user root@'%' identified by 'lee';

Query OK, 0 rows affected (0.00 sec)

50上

[root@mysql_mha conf]# cat masterha_default.cnf app1.cnf > /etc/masterha/app1.cnf
[root@mysql_mha conf]# vim /etc/masterha/app1.cnf

[server default]
user=root
password=lee
ssh_user=root
repl_user=repl
repl_password=lee
master_binlog_dir= /data/mysql
remote_workdir=/tmp
secondary_check_script= masterha_secondary_check -s 192.168.86.10 -s 192.168.86.20
ping_interval=3

# master_ip_failover_script= /script/masterha/master_ip_failover
# shutdown_script= /script/masterha/power_manager
# report_script= /script/masterha/send_report
# master_ip_online_change_script= /script/masterha/master_ip_online_change
[server default]
manager_workdir=/etc/masterha
manager_log=/var/etc/masterha/manager.log

[server1]
hostname=192.168.86.10
candidate_master=1
check_repl_delay=0

[server2]
hostname=192.168.86.20
candidate_master=1
check_repl_delay=0

[server3]
hostname=192.168.86.30
no_master=1
#检测网络及ssh免密

[root@mysql_mha conf]# masterha_check_ssh --conf=/etc/masterha/app1.cnf

mysql1

[root@mysql_mha conf]# mysql -p123456

mysql> GRANT ALL ON . TO root@'%' identified by '123456';

mha

#执行检测

[root@mysql_mha conf]# masterha_check_repl --conf=/etc/masterha/app1.cnf

故障切换

未发生故障手动切换

MHA

前提:主mysql还在正常运行

#在master数据节点还在正常工作情况下

[root@mysql-mha ~]# masterha_master_switch \

--conf=/etc/masterha/app1.cnf \ #指定配置文件

--master_state=alive \ #指定master节点状态

--new_master_host=192.168.86.20 \ #指定新master节点

--new_master_port=3306 \ #执行新master节点端口

--orig_master_is_new_slave \ #原始master会变成新的slave

--running_updates_limit=10000 #切换的超时时间

yes-->yes-->yes


#测试
#模拟master故障

[root@mysql-node20 mysql]# /etc/init.d/mysqld stop

#在MHA-master中做故障切换

[root@mysql-mha masterha]# masterha_master_switch --master_state=dead --

conf=/etc/masterha/app1.cnf --dead_master_host=192.168.56.12 --

dead_master_port=3306 --new_master_host=192.168.56.11 --new_master_port=3306 --ignore_last_failover

 
#恢复故障mysql节点
[root@mysql-node20 tmp]# /etc/init.d/mysqld start

Starting MySQL. SUCCESS!

[root@mysql-node20 tmp]# mysql -p

mysql> CHANGE MASTER TO MASTER_HOST='192.168.86.10', MASTER_USER='repl',

MASTER_PASSWORD='lee', MASTER_AUTO_POSITION=1;

mysql> show slave\G

#测试一主两从是否正常

[root@mysql-mha masterha]# masterha_check_repl --conf=/etc/masterha/app1.cnf

 

[root@mysql-mha masterha]# rm -fr app1.failover.complete #删掉切换锁文件

#监控程序通过指定配置文件监控master状态,当master出问题后自动切换并退出避免重复做故障切换

[root@mysql-mha masterha]# masterha_manager --conf=/etc/masterha/app1.cnf

[root@mysql-mha masterha]# cat /etc/masterha/manager.log

#恢复故障节点

 

[root@mysql-node20 mysql]# /etc/init.d/mysqld start

mysql> CHANGE MASTER TO MASTER_HOST='192.168.86.10', MASTER_USER='repl',

MASTER_PASSWORD='lee', MASTER_AUTO_POSITION=1

 

[root@mysql-mha masterha]# rm -rf app1.failover.complete manager.log

为MHA添加VIP功能

mha

[root@mysql_mha ~]# cp master_ip_failover master_ip_online_change /usr/local/bin/

[root@mysql_mha ~]# chmod +x /usr/local/bin/master_ip_*

[root@mysql_mha ~]# vim /usr/local/bin/master_ip_failover

my $vip = '192.168.86.100/24';

my $ssh_start_vip = "/sbin/ip addr add $vip dev eth0";

my $ssh_stop_vip = "/sbin/ip addr del $vip dev eth0";

[root@mysql_mha ~]# vim /usr/local/bin/master_ip_online_change

my $vip = '192.168.86.100/24';
my $ssh_start_vip = "/sbin/ip addr add $vip dev eth0";
my $ssh_stop_vip = "/sbin/ip addr del $vip dev eth0";
my $exit_code = 0;

[root@mysql_mha masterha]# rm -rf app1.failover.complete manager.log
相关推荐
程序喵D13 分钟前
高德地图SDK Android版开发 11 覆盖物示例 4 线
android·高德地图
pokemon..4 小时前
MySQL主从复制与读写分离
数据库·mysql
码农鑫哥的日常4 小时前
MySQL高可用配置及故障切换
数据库·mysql
深圳智物通讯4 小时前
安卓开发板_联发科MTK开发板使用ADB开发
android·adb·安卓开发板
居安思危_Ho5 小时前
【Android笔记】Android Studio打包 提示Invalid keystore format
android·笔记·gradle·android studio·android 打包
leidata6 小时前
MySQL系列—10.Innodb行格式
数据库·mysql
lareina_yy6 小时前
Android Studio新建工程(Java语言环境)
android·java·android studio
夜夜亮晶晶8 小时前
MySQL——数据类型(一)
数据库·mysql
薛文旺8 小时前
Android MediaProjection录屏权限处理
android
jim_dayday_up8 小时前
android BLE 蓝牙的连接(二)
android