Mysql——高可用集群部署

目录

一、源码编译mysql

二、mysql的主从复制

2.1、主从复制

2.2、延迟复制

2.3、慢查询日志

2.4、MySQL的并行复制

三、MySQL半同步模式

四、mysql高可用组复制

五、mysql-router

六、mysql高可用MHA

七、为MHA添加VIP功能


一、源码编译mysql

1、安装依赖

[root@mysql1 ~]# 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

2、解压源码包

[root@mysql1 ~]# tar zxf mysql-boost-5.7.44.tar.gz 
[root@mysql1 ~]# cd mysql-5.7.44/

3、源码编译安装MySQL

[root@mysql1 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@mysql1 mysql-5.7.44]# make -j2
[root@mysql1 mysql-5.7.44]# make install

生成mysql数据目录:

[root@mysql1 ~]# cd /usr/local/mysql/
[root@mysql1 mysql]# useradd -s /sbin/nologin -M mysql
[root@mysql1 mysql]# mkdir /data/mysql -p
[root@mysql1 mysql]# chown mysql.mysql -R /data/mysql

生成启动文件: 

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

 编辑配置文件:

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

编辑环境变量: 

[root@mysql1 mysql]# vim ~/.bash_profile 
[root@mysql1 mysql]# source ~/.bash_profile 

初始化: 

[root@mysql1 mysql]# mysqld --user mysql --initialize
2024-08-22T02:43:33.182882Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2024-08-22T02:43:33.876344Z 0 [Warning] InnoDB: New log files created, LSN=45790
2024-08-22T02:43:33.939173Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2024-08-22T02:43:33.996930Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 530f15cf-6030-11ef-80da-000c29f9980d.
2024-08-22T02:43:33.998428Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2024-08-22T02:43:34.355930Z 0 [Warning] A deprecated TLS version TLSv1 is enabled. Please use TLSv1.2 or higher.
2024-08-22T02:43:34.355957Z 0 [Warning] A deprecated TLS version TLSv1.1 is enabled. Please use TLSv1.2 or higher.
2024-08-22T02:43:34.357064Z 0 [Warning] CA certificate ca.pem is self signed.
2024-08-22T02:43:34.381234Z 1 [Note] A temporary password is generated for root@localhost: CCwv;7jj9nQC[root@mysql1 mysql]# vim passwd
[root@mysql1 mysql]# cat passwd 
CCwv;7jj9nQC

启动mysql: 


[root@mysql1 mysql]# chkconfig mysqld on
[root@mysql1 mysql]# mysql_secure_installation
[root@mysql1 mysql]# /etc/init.d/mysqld start
Starting MySQL.Logging to '/data/mysql/mysql1.err'.SUCCESS! 
[root@mysql1 mysql]# mysql -uroot -pmysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)

二、mysql的主从复制

2.1、主从复制

1、 配置master

[root@mysql1 ~]# vim /etc/my.cnf
[root@mysql1 ~]# /etc/init.d/mysqld restart
Shutting down MySQL.. SUCCESS! 
Starting MySQL. SUCCESS!

mysql> CREATE USER 'repl'@'%' IDENTIFIED BY 'repl';
Query OK, 0 rows affected (0.00 sec)mysql> GRANT REPLICATION SLAVE ON *.* TO repl@'%';
Query OK, 0 rows affected (0.00 sec)mysql> SHOW MASTER STATUS-> ;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      595 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

2、配置salve1

[root@mysql2 ~]# vim /etc/my.cnf
[root@mysql2 ~]# /etc/init.d/mysqld restart
Shutting down MySQL.. SUCCESS! 
Starting MySQL. SUCCESS! 

mysql> CHANGE MASTER TO-> MASTER_HOST='172.25.254.11',MASTER_USER='repl',MASTER_PASSWORD='repl',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=350;
Query OK, 0 rows affected, 2 warnings (0.01 sec)

 

 测试:

mysql>  CREATE DATABASE gyj;
Query OK, 1 row affected (0.01 sec)mysql> CREATE TABLE gyj.userlist(-> username varchar(20) not null,-> password varchar(50) not null);
Query OK, 0 rows affected (0.01 sec)mysql> insert into gyj.userlist value('user1','111');
Query OK, 1 row affected (0.00 sec)mysql> select * from gyj.userlist;
+----------+----------+
| username | password |
+----------+----------+
| user1    | 111      |
+----------+----------+
1 row in set (0.00 sec)

2.2、延迟复制

延迟复制时用来控制 sql 线程的,和 i/o 线程无关,这个延迟复制不是i/o 线程过段时间来复制, i/o 是正常工作的,是日志已经保存在slave 端了,那个 sql 要等多久进行回放。
需要重新创建虚拟机作为延迟复制的slave,确保master的数据丢失后,该slave不会马上丢失。

1、添加slave2

新建虚拟机,从master拷贝mysql文件给新虚拟机,作为slave2。

[root@mysql1 ~]# cd /usr/local/
[root@mysql1 local]# ls
bin  etc  games  include  lib  lib64  libexec  mysql  sbin  share  src
[root@mysql1 local]# rsync -al -r mysql root@172.25.254.13:/usr/local/

slave2的基础配置:

[root@mysql3 local]# cd mysql/
[root@mysql3 mysql]# ls
bin  docs  include  lib  LICENSE  man  mysql-test  README  README-test  share  support-files[root@mysql3 mysql]# useradd -s /sbin/nologin -M mysql
[root@mysql3 mysql]#  mkdir /data/mysql -p
[root@mysql3 mysql]# chown mysql.mysql -R /data/mysql#生成启动文件
[root@mysql3 mysql]# cd support-files/
[root@mysql3 support-files]# cp mysql.server /etc/init.d/mysqld

 编辑配置文件:

#编辑配置文件
[root@mysql3 mysql]# vim /etc/my.cnf

 编辑环境变量:

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

 mysql初始化并启动:

[root@mysql3 support-files]# mysqld --user mysql --initialize
[root@mysql3 support-files]# /etc/init.d/mysqld start
Starting MySQL.Logging to '/data/mysql/mysql3.err'.
. SUCCESS! #修改密码
[root@mysql3 support-files]# mysql_secure_installation

2、从master节点备份数据给slave2:

查看master的数据库表中数据:

 进行拷贝:

#拷贝数据库
[root@mysql1 mysql]# mysqldump -uroot -pmysql gyj > gaoyingjie.sql#查看拷贝的数据库
[root@mysql1 mysql]# ls
bin   gaoyingjie.sql  lib      man         README       share
docs  include         LICENSE  mysql-test  README-test  support-files#将拷贝出的文件远程传输给slave2
[root@mysql1 mysql]# scp -r gaoyingjie.sql root@172.25.254.13:/usr/local/mysql

在slave2中:

#新建一个名为gyj的database
[root@mysql3 support-files]# mysql -uroot -pmysql -e "create database gyj;"#查看可拷贝过来的文件
[root@mysql3 mysql]# ls
bin   gaoyingjie.sql  lib      man         README       share
docs  include         LICENSE  mysql-test  README-test  support-files#将拷贝文件传给新建的database
[root@mysql3 mysql]# mysql -uroot -p gyj <gaoyingjie.sql
Enter password:#查询该数据库的gyj.userlist表 ,与master的表中数据一致
[root@mysql3 mysql]#  mysql -uroot -pmysql -e "select * from gyj.userlist;"
mysql: [Warning] Using a password on the command line interface can be insecure.
+----------+----------+
| username | password |
+----------+----------+
| user1    | 111      |
+----------+----------+

3、配置slave2的slave功能:

在master中查看日志pos

在slave2:

mysql>  CHANGE MASTER TO MASTER_HOST='172.25.254.11', MASTER_USER='repl',MASTER_PASSWORD='repl', MASTEER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=1238;mysql> start slave;
Query OK, 0 rows affected (0.03 sec)mysql> SHOW SLAVE STATUS\G;

查看是否同步数据:

#在master插入一条数据
mysql> insert into gyj.userlist values('user2','222');
Query OK, 1 row affected (0.06 sec)#在slave查看是否有数据
mysql> select * from gyj.userlist;
+----------+----------+
| username | password |
+----------+----------+
| user1    | 111      |
| user2    | 222      |
+----------+----------+
2 rows in set (0.00 sec)

 4、在slave2端添加延迟复制语句

mysql>  STOP SLAVE SQL_THREAD;
Query OK, 0 rows affected (0.01 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> SHOW SLAVE STATUS\G;

 5、测试

当master删除数据时,slave2会延迟60s再删除数据。

master:删除user2

slave2:查询到的仍然是原始数据

2.3、慢查询日志

慢查询,顾名思义,执行很慢的查询 ,当执行SQL 超过 long_query_time 参数设定的时间阈值(默认 10s )时,就被认为是慢查询,这个 SQL语句就是需要优化的;
慢查询被记录在慢查询日志里 ,慢查询日志默认是不开启的 ,如果需要优化SQL语句,就可以开启这个功能,它可以让你很容易地知道哪些语句是需要优化的。
#默认不开启
mysql> SHOW variables like "slow%";
+---------------------+-----------------------------+
| Variable_name       | Value                       |
+---------------------+-----------------------------+
| slow_launch_time    | 2                           |
| slow_query_log      | OFF                         |
| slow_query_log_file | /data/mysql/mysql1-slow.log |
+---------------------+-----------------------------+
3 rows in set (0.00 sec)

1、开启慢查询日志

mysql> SET GLOBAL slow_query_log=ON;
Query OK, 0 rows affected (0.01 sec)mysql> SET long_query_time=4;
Query OK, 0 rows affected (0.00 sec)mysql> SHOW VARIABLES like "long%";
+-----------------+----------+
| Variable_name   | Value    |
+-----------------+----------+
| long_query_time | 4.000000 |
+-----------------+----------+
1 row in set (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/mysql1-slow.log |
+---------------------+-----------------------------+
3 rows in set (0.00 sec)

 2、查看慢查询日志

[root@mysql1 mysql]# cat /data/mysql/mysql1-slow.log 
/usr/local/mysql/bin/mysqld, Version: 5.7.44-log (Source distribution). started with:
Tcp port: 3306  Unix socket: /data/mysql/mysql.sock
Time                 Id Command    Argument

3、测试慢查询

2.4、MySQL的并行复制

默认情况下 slave 中使用的是 sql 单线程回放
master 中时多用户读写,如果使用 sql 单线程回放那么会造成组从延迟严重
开启 MySQL 的多线程回放可以解决上述问题

1、在slave1编辑配置文件

[root@mysql2 mysql]# vim /etc/my.cnf
[root@mysql2 mysql]# /etc/init.d/mysqld restart
Shutting down MySQL.. SUCCESS! 
Starting MySQL... SUCCESS! 

查看slave1的线程有16个:

三、MySQL半同步模式

1、配置gtid

[root@mysql1 mysql]# vim /etc/my.cnf
[root@mysql1 mysql]# /etc/init.d/mysqld restart
Shutting down MySQL............ SUCCESS! 
Starting MySQL. SUCCESS! 

master:

slave1:

slave2:

2、停止slave

两台slave都要停:

[root@mysql2 mysql]# mysql -uroot -pmysqlmysql> stop slave;
Query OK, 0 rows affected (0.00 sec)

3、开启slave的gtid

mysql> CHANGE MASTER TO MASTER_HOST='172.25.254.11', MASTER_USER='repl',MASTER_PASSWORD='repl', MASTERR_AUTO_POSITION=1;
Query OK, 0 rows affected, 2 warnings (0.06 sec)mysql> start slave;
Query OK, 0 rows affected (0.01 sec)mysql> SHOW SLAVE STATUS\G;

4、启动半同步模式

(1)、master端开启半同步

安装半同步插件:

[root@mysql1 mysql]# mysql -uroot -pmysql
#安装插件
mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
Query OK, 0 rows affected (0.07 sec)

 查看插件情况:

mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS-> FROM INFORMATION_SCHEMA.PLUGINS-> WHERE PLUGIN_NAME LIKE '%semi%';
+----------------------+---------------+
| PLUGIN_NAME          | PLUGIN_STATUS |
+----------------------+---------------+
| rpl_semi_sync_master | ACTIVE        |
+----------------------+---------------+
1 row in set (0.05 sec)

打开半同步功能:

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

 查看半同步状态:

 编辑master配置文件

[root@mysql1 mysql]# vim /etc/my.cnf
[root@mysql1 mysql]# /etc/init.d/mysqld restart
Shutting down MySQL........... SUCCESS! 
Starting MySQL. SUCCESS! 

 (2)、slave端开启半同步

#安装插件
mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
Query OK, 0 rows affected (0.05 sec)mysql> SET GLOBAL rpl_semi_sync_slave_enabled =1;
Query OK, 0 rows affected (0.00 sec)#重启io线程,半同步才能生效
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_master_enabled              | OFF        |
| 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 |
| rpl_semi_sync_slave_enabled               | ON         |
| rpl_semi_sync_slave_trace_level           | 32         |
+-------------------------------------------+------------+
8 rows in set (0.05 sec)mysql> SHOW STATUS LIKE 'Rpl_semi_sync%';

编辑配置文件:(必须在mysql加载模块后才能添加此配置)

slave1与slave2相同

[root@mysql2 mysql]# vim /etc/my.cnf
[root@mysql2 mysql]# /etc/init.d/mysqld restart
Shutting down MySQL.. SUCCESS! 
Starting MySQL. SUCCESS! 

 5、测试

  • 在master中写入数据:
mysql> insert into gyj.userlist values('user3','333');
Query OK, 1 row affected (0.03 sec)mysql> select * from gyj.userlist;
+----------+----------+
| username | password |
+----------+----------+
| user1    | 111      |
| user2    | 222      |
| user3    | 333      |
+----------+----------+
3 rows in set (0.00 sec)
#查看
mysql> SHOW STATUS LIKE 'Rpl_semi_sync%';

 连接到2台slave,已同步1笔数据:

  • 模拟故障: 

将slave1和slave2的IO进程停掉

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

在master端插入数据,会有延迟:

 自动转入异步模式OFF,并且未同步数据有2笔:

四、mysql高可用组复制

全部主机停掉mysql:

/etc/init.d/mysqld stop

全部主机删除mysql的数据目录:

rm -rf /data/mysql/*

编辑所有主机musql的配置文件:

配置全部主机的本地解析:

vim /etc/hosts

 初始化mysql:

 mysqld --user=mysql --initialize

启动mysql:

/etc/init.d/mysqld start

 登录mysql并修改密码:

mysql -uroot -p初始化后生成的密码
alter user root@localhost identified by 'gyj';"

配置mysql

mysql> CREATE USER rpl_user@'%' IDENTIFIED BY 'gyj';
Query OK, 0 rows affected (0.00 sec)mysql> GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%';
Query OK, 0 rows affected (0.00 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='gyj' FOR CHANNEL 'group_replication_recovery';
Query OK, 0 rows affected, 2 warnings (0.02 sec)#只在第一台主机中开启,后面的主机直接执行START GROUP_REPLICATION;
mysql> SET GLOBAL group_replication_bootstrap_group=ON; #用以指定初始成员,只在第
一台主机中执行
Query OK, 0 rows affected (0.00 sec)mysql> START GROUP_REPLICATION;
Query OK, 0 rows affected, 1 warning (2.19 sec)mysql> SET GLOBAL group_replication_bootstrap_group=OFF;
Query OK, 0 rows affected (0.00 sec)#查看组成员信息
mysql> SELECT * FROM performance_schema.replication_group_members;

测试:

  • 在任意一台主机写入数据

可以在其他主机看到该数据:

  • 当其中一台主机挂掉后

 查询组成员可以看出没有mysql2,因为组成员还是大于n/2,所以还是可以写入数据的:

 没有挂掉的mysql3也可以看到数据:

当mysql2重启后:

 在mysql1上查看组成员信息发现没有mysql2,,是因为组成员重启后不自动启动组复制:

 需要对mysql2手动开启组复制:

五、mysql-router

上传并安装mysql-router

 rpm -ivh mysql-router-community-8.4.0-1.el7.x86_64.rpm

 编辑配置文件:

[root@mysql1 ~]# vim /etc/mysqlrouter/mysqlrouter.conf 
[root@mysql1 ~]# systemctl start mysqlrouter.service

 建立测试用户测试:

mysql> create user gyj@'%' identified by 'gyj';
Query OK, 0 rows affected (10.04 sec)mysql> GRANT ALL ON  gyj.* to gyj@'%';
Query OK, 0 rows affected (0.00 sec)[root@mysql-router ~]# mysql -ulee -plee -h 172.25.254.11 -P 7001

六、mysql高可用MHA

1、安装MHA所需软件

新建mha主机:mysql-mha(ip172.25.254.50)

mysql-mha主机上传并解压MHA:

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

全部主机取消dns解析:

[root@mysql1 ~]# vim /etc/ssh/sshd_config 
[root@mysql1 ~]# systemctl restart sshd

实现四台主机的免密认证:


[root@mysql1 ~]# ssh-keygen -t rsa
[root@mysql1 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.254.12
[root@mysql1 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.254.13
[root@mysql1 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.254.50[root@mysql2 ~]# ssh-keygen
[root@mysql2 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.254.11
[root@mysql2 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.254.13
[root@mysql2 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.254.50[root@mysql-mha ~]# ssh-keygen
[root@mysql-mha ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.254.11
[root@mysql-mha ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.254.12
[root@mysql-mha ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.254.13

在mysql-mha主机上下载所需要软件:

[root@mysql-mha ~]# cd MHA-7/
[root@mysql-mha MHA-7]# ls
mha4mysql-manager-0.58-0.el7.centos.noarch.rpm  perl-Mail-Sender-0.8.23-1.el7.noarch.rpm
mha4mysql-manager-0.58.tar.gz                   perl-Mail-Sendmail-0.79-21.el7.noarch.rpm
mha4mysql-node-0.58-0.el7.centos.noarch.rpm     perl-MIME-Lite-3.030-1.el7.noarch.rpm
perl-Config-Tiny-2.14-7.el7.noarch.rpm          perl-MIME-Types-1.38-2.el7.noarch.rpm
perl-Email-Date-Format-1.002-15.el7.noarch.rpm  perl-Net-Telnet-3.03-19.el7.noarch.rpm
perl-Log-Dispatch-2.41-1.el7.1.noarch.rpm       perl-Parallel-ForkManager-1.18-2.el7.noarch.rpm
[root@mysql-mha MHA-7]# yum install *.rpm -y

将其中的mha4mysql-node-0.58-0.el7.centos.noarch.rpm拷贝给其余三台主机:

[root@mysql-mha MHA-7]# scp mha4mysql-node-0.58-0.el7.centos.noarch.rpm root@172.25.254.11:/root[root@mysql-mha MHA-7]# scp mha4mysql-node-0.58-0.el7.centos.noarch.rpm root@172.25.254.12:/root[root@mysql-mha MHA-7]# scp mha4mysql-node-0.58-0.el7.centos.noarch.rpm root@172.25.254.13:/root

在三台主机中下载安装mha4mysql-node-0.58-0.el7.centos.noarch.rpm

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

2、搭建主从架构

master节点:

/etc/init.d/mysqld stop
rm -rf /data/mysql/*
vim /etc/my.cnf

初始化并登录mysql: 

[root@mysql1 ~]# mysqld --user mysql --initialize
[root@mysql1 ~]# /etc/init.d/mysqld start
Starting MySQL.Logging to '/data/mysql/mysql1.err'.SUCCESS! 
[root@mysql1 ~]# mysql -uroot -p'Vo%khweBl5jZ'#修改密码
mysql> alter user root@localhost identified by 'mysql';
Query OK, 0 rows affected (0.00 sec)

配置mysql:


mysql> CREATE USER 'repl'@'%' IDENTIFIED BY 'gyj';
Query OK, 0 rows affected (0.01 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.00 sec)mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1;
Query OK, 0 rows affected (0.00 sec)

在两台slave中:

/etc/init.d/mysqld stop
rm -rf /data/mysql/*
vim /etc/my.cnf

 两台slave初始化并登录mysql:

mysqld --user mysql --initialize
mysql -uroot -p'iUP4cDQW:hT)'mysql> alter user root@localhost identified by 'gyj';
Query OK, 0 rows affected (0.00 sec)

配置mysql并开启主从模式:

mysql> CHANGE MASTER TO MASTER_HOST='172.25.254.11', MASTER_USER='repl',-> MASTER_PASSWORD='gyj', MASTER_AUTO_POSITION=1;
Query OK, 0 rows affected, 2 warnings (0.01 sec)mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
Query OK, 0 rows affected (0.00 sec)mysql> start slave;
Query OK, 0 rows affected (0.00 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.04 sec)mysql> START SLAVE IO_THREAD;
Query OK, 0 rows affected (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)

3、配置MHA的管理环境

新建配置文件目录,从模板拷贝:

[root@mysql-mha ~]# mkdir /etc/masterha[root@mysql-mha ~]# cd MHA-7/
[root@mysql-mha MHA-7]# ls
mha4mysql-manager-0.58-0.el7.centos.noarch.rpm  perl-Mail-Sender-0.8.23-1.el7.noarch.rpm
mha4mysql-manager-0.58.tar.gz                   perl-Mail-Sendmail-0.79-21.el7.noarch.rpm
mha4mysql-node-0.58-0.el7.centos.noarch.rpm     perl-MIME-Lite-3.030-1.el7.noarch.rpm
perl-Config-Tiny-2.14-7.el7.noarch.rpm          perl-MIME-Types-1.38-2.el7.noarch.rpm
perl-Email-Date-Format-1.002-15.el7.noarch.rpm  perl-Net-Telnet-3.03-19.el7.noarch.rpm
perl-Log-Dispatch-2.41-1.el7.1.noarch.rpm       perl-Parallel-ForkManager-1.18-2.el7.noarch.rpm
[root@mysql-mha MHA-7]# tar zxf mha4mysql-manager-0.58.tar.gz[root@mysql-mha ~]# cd MHA-7/mha4mysql-manager-0.58/samples/conf/
[root@mysql-mha conf]# cat masterha_default.cnf app1.cnf > /etc/masterha/app1.cnf

编辑配置文件:

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

添加172.25.254.20作为配置文件内检测是否能连接的备用ip,当mha检查如果连接不到master172.25.254.11时,会尝试链接172.25.254.20来判断是哪一方的链接出现问题。

[root@mysql1 ~]# ip a a 172.25.254.20 dev eth0

4、检验配置

检测网络及 ssh 免密:
[root@mysql-mha ~]# masterha_check_ssh --conf=/etc/masterha/app1.cnf

 检测数据主从复制情况 :

#在master节点
mysql> GRANT ALL ON *.* TO root@'%' identified by 'mysql';
#在mysql-mha
[root@mysql-mha ~]# masterha_check_repl --conf=/etc/masterha/app1.cnf

5、故障切换

确保以上检测通过后才能进行切换。

无故障手动切换:

[root@mysql-mha ~]# masterha_master_switch --conf=/etc/masterha/app1.cnf --master_state=alive --new_master_host=172.25.254.12 --new_master_port=3306 --orig_master_is_new_slave --running_updates_limit=10000

可以看到手动切换到172.25.254.12上,变成新的master: 

 master故障手动切换:

[root@mysql1 ~]# /etc/init.d/mysqld stop
Shutting down MySQL............ SUCCESS! 
[root@mysql-mha ~]# masterha_master_switch --master_state=dead --conf=/etc/masterha/app1.cnf --dead_master_host=172.25.254.11 --dead_master_port=3306 --new_master_host=172.25.254.12 --new_master_port=3306 --ignore_last_failover

 在172.25.254.13中查看master已经变成172.25.254.12

当172.25.254.11恢复时:需要手动添加到组从关系内成为新的slave

[root@mysql1 ~]# /etc/init.d/mysqld start
Starting MySQL. SUCCESS! 
[root@mysql1 ~]# mysql -uroot -pmysql#添加到主从关系内,成为salve
mysql> CHANGE MASTER TO MASTER_HOST='172.25.254.12', MASTER_USER='repl',-> MASTER_PASSWORD='gyj', MASTER_AUTO_POSITION=1;
Query OK, 0 rows affected, 2 warnings (0.01 sec)mysql> start slave;
Query OK, 0 rows affected (0.01 sec)

master(172.25.254.12)出现故障后,自动切换:

#监测
[root@mysql-mha ~]# masterha_manager --conf=/etc/masterha/app1.cnf[root@mysql-mha ~]# cat /etc/masterha/manager.log
[root@mysql2 ~]# /etc/init.d/mysqld stop
Shutting down MySQL............ SUCCESS! 

在172.25.254.13中看到master变成了172.25.254.11:

当172.25.254.12恢复时:需要手动添加到主从关系中成为新的slave

mysql>  CHANGE MASTER TO MASTER_HOST='172.25.254.11', MASTER_USER='repl',-> MASTER_PASSWORD='gyj', MASTER_AUTO_POSITION=1;
Query OK, 0 rows affected, 2 warnings (0.04 sec)mysql> start slave;
Query OK, 0 rows affected (0.00 sec)mysql> SHOW SLAVE STATUS\G;

七、为MHA添加VIP功能

清除锁文件

[root@mysql-mha ~]# rm -rf /etc/masterha/app1.failover.complete 

上传vip脚本文件:

[root@mysql-mha ~]# ls
anaconda-ks.cfg  master_ip_failover  master_ip_online_change  MHA-7  MHA-7.zip
[root@mysql-mha ~]# cp master_ip_failover master_ip_online_change /usr/local/bin/
[root@mysql-mha ~]# chmod +x /usr/local/bin/master_ip_*

编辑vip脚本:改为自己的vip

[root@mysql-mha ~]# vim /usr/local/bin/master_ip_failover 
[root@mysql-mha ~]# vim /usr/local/bin/master_ip_online_change 

在master上添加vip:

启动监控:

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

 将master:172.25.254.11停掉:172.25.254.12会变成新的master,并且vip会转移到172.25.254.12

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/414772.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Pyqt5高级技巧:多线程任务、窗体交互、常用控件介绍(含基础Demo)

目录 一、多线程任务和多窗体交互 二、增删改查Demo 三、UI设计 【css效果代码对照表】 【实现效果】 【实现代码】 【常见问题】 Q1&#xff1a;工具栏怎么加&#xff0c;资源图片怎么加 Q2&#xff1a;控件被背景染色怎么办&#xff1f; Q3&#xff1a;QTdesigner有…

磐石云语音识别引擎

磐石云发布了V1.2.2版本语音识别引擎。 经过严格客观的测试识别效果和阿里云、讯飞、火山进行了对比几乎无差。&#xff08;欢迎对比测试&#xff09; 上图是CPU下的流式识别效果 RTF0.1~0.14,也就是一并发一个小时大约处理7~10小时&#xff0c;这取决于硬件的配置&#xff0…

MathType常见问题汇总

文章目录 MathType常见问题汇总一、如何将MathType内嵌到WPS工具栏中&#xff1f;二、在word中&#xff0c;如何批量修改所有MathType公式的字体以及大小格式&#xff1f;三、如何解决插入MathType公式后的行间距发生改变&#xff1f;参考 MathType常见问题汇总 一、如何将Mat…

Altium designer设计经验谈——常用规则的使用(二)

文章目录 前言三、规则设置介绍——走线规则1、Routing——>Width 线宽2、Routing——>Topology 拓扑 四、规则设置介绍——平面层规则1、Plane——>电源层连接样式 Power Plane Connect Style2、Plane——>电源层间距距离 Power Plane Clearance3、Plane——>多…

Oracle rac模式下undo表空间爆满的解决

文章目录 前言一、确认对应实例的undo表空间二、确认对应实例undo的文件位置三、确认回滚段使用情况四、检查undo segment状态五、创建新的undo表空间并进行切换六、等待原undo表空间segment状态变更为offline七、删除原undo表空间以及数据文件 前言 一、确认对应实例的undo表空…

2.【R语言】RStudio的下载和安装

2.1 RStudio的介绍 RStudio 是一种集成开发环境 (Integrated Development Environment, IDE)&#xff0c;主要用于 R 语言的开发和数据分析。它为 R 语言的使用者提供了一系列便捷的工具和功能&#xff0c;使得编写、调试和执行 R 代码变得更加高效和直观。以下是对 RStudio 主…

计算机毕业设计 | SpringBoot+vue移动端音乐网站 音乐播放器(附源码)

1&#xff0c;项目背景 随着计算机技术的发展&#xff0c;网络技术对我们生活和工作显得越来越重要&#xff0c;特别是现在信息高度发达的今天&#xff0c;人们对最新信息的需求和发布迫切的需要及时性。为了满足不同人们对网络需求&#xff0c;各种特色&#xff0c;各种主题的…

【GeoSceneDatastore】连接失败

报错信息 解决方案 删除环境变量tomcat的配置信息&#xff08;CATALINA_BASE、CATALINA_HOME、CATALINA_TMPDIR&#xff09;&#xff0c;重新启动Datastore服务

音频检测电路 | 声音传感器模块 | 口哨开关 | Arduino

音频检测电路 | 声音传感器模块 | 口哨开关 | Arduino 案例分析电路设计1. **基本音频检测电路设计**电路结构:2. **灵敏度调节原理**方法:3. **非 MCU 控制的 LED 触发**设计步骤:4. **电路示例**5. **示意图(文本描述)**总结实验方法案例分析 一个硅胶娃娃,挤压或拍打…

NoSQL:数据库领域的“新潮力量”——从起源到未来的全面解析

引言 曾几何时&#xff0c;关系型数据库&#xff08;RDBMS&#xff09;就是数据管理的“老大哥”&#xff0c;一统江湖&#xff0c;所向披靡。然而&#xff0c;随着大数据时代的到来&#xff0c;数据量像火箭般飙升&#xff0c;数据的形态也变得越来越“随性”&#xff0c;传统…

高职院校大数据分析与可视化微服务架构实训室解决方案

一、前言 随着信息技术的飞速发展&#xff0c;大数据已成为推动社会进步与产业升级的关键力量。为了培养适应未来市场需求的高素质技术技能型人才&#xff0c;高职院校纷纷加大对大数据分析与可视化技术的教学投入。唯众&#xff0c;作为国内领先的职业教育解决方案提供商&…

java编辑器——IntelliJ IDEA

java编辑器有两种选择——IntelliJ IDEA和VsCode。其中IntelliJ IDEA现在是企业用的比较多的&#xff0c;是专门为java设计的&#xff0c;而VsCode则是通过插件来实现Java编辑的。 1.IntelliJ IDEA 官网下载链接&#xff1a;https://www.jetbrains.com/idea/ 注意选择社区版…

软考高级:系统架构设计师——软件架构设计 Chapter 笔记

软考高级&#xff1a;系统架构设计师——软件架构设计 1 软件架构设计—基本概念架构所处的位置架构发展历程架构的“41”视图例题 架构描述语言&#xff08;ADL&#xff09;例题 2软件架构设计—架构风格数据流风格调用/返回 风格独立构件风格虚拟机风格仓库风格&#xff08;以…

遗传算法与深度学习实战(9)——使用遗传算法重建图像

遗传算法与深度学习实战&#xff08;9&#xff09;——使用遗传算法重建图像 0. 前言1. 使用遗传算法重建图像1.1 用多边形绘制图像 2. EvoLisa 项目3. 实现遗传算法复现 EvoLisa 项目3.1 基因构建3.2 构建解决方案 小结系列链接 0. 前言 遗传算法应用于图像处理的最流行方式之…

【机器学习】集成学习------迅速了解什么是集成学习!!!

目录 &#x1f354; 为什么学习集成学习 &#x1f354; 什么是集成学习 &#x1f354; 集成学习分类的串行和并行学习算法 3.1 集成学习关键要素 3.2 集成学习器性能评估 &#x1f354; 小结 学习目标 &#x1f340; 知道什么是集成学习 &#x1f340; 知道集成学习的分类…

pandas操作Excel文件

pandas操作Excel文件 一、前言二、指定读取的工作表与header设置2.1指定工作表2.2header设置 三、读取Excel数据3.1iloc读取数据3.2read_excel读取数据3.3loc读取数据 四、DataFrame数据筛选4.1根据列标签对整列进行筛选4.2使用iloc对区域进行筛选4.3自定义筛选 五、DataFrame类…

对称密码学

1. 使用OpenSSL 命令行 在 Ubuntu Linux Distribution (发行版&#xff09;中&#xff0c; OpenSSL 通常可用。当然&#xff0c;如果不可用的话&#xff0c;也可以使用下以下命令安装 OpenSSL: $ sudo apt-get install openssl 安装完后可以使用以下命令检查 OpenSSL 版本&am…

SQLi-LABS靶场56-60通过攻略

less-56 1.判断注入点 ?id1 页面不正常 2.判断闭合方式 ?id1) -- 可以闭合成功 3.查看页面回显点 ?id-1)%20 union select 1,2,3-- 4.查询数据库名 ?id-1)%20 union select 1,database(),3-- 5.查询所有表 ?id-1)%20 union select 1,(select table_name from inform…

Spring security的SecurityConfig配置时 userDetailsService报错如何解决?

文章目录 报错信息原因解决方案1. 实现 UserDetailsService 接口修改 IUsersService 接口和实现类 2. 修改 SecurityConfig3. 其他注意事项 报错信息 ‘userDetailsService(T)’ in ‘org.springframework.security.config.annotation.authentication.builders.AuthenticationM…

复习:虚析构函数(√)、纯虚析构函数(√)、虚构造函数(X)

虚析构函数 虚析构函数是为了解决基类的指针指向派生类对象&#xff0c;并用基类的指针删除派生类对 象。 #include <bits/stdc.h> #include <cstdio> #include <cstring> #include <iostream> using namespace std;class Base { public:Base(){cout…