部署mysql集群 使用“MHA软件+mysql主从同步”

准备MHA集群环境

1.1 准备6台虚拟机,并按照本节规划配置好IP参数
在这些虚拟机之间实现SSH免密登录
在相应节点上安装好MHA相关的软件包
部署mysql集群 使用“MHA软件+mysql主从同步”_第1张图片
IP规划,如表-2所示:
部署mysql集群 使用“MHA软件+mysql主从同步”_第2张图片

一、MHA介绍

1、MHA两部分组成
MHA 由两部分组成: MHA Manager(管理节点)和 MHA Node(数据节点)。 MHA Manager可以单独部署在一台独立的机器上管理多个 master-slave 集群,也可以部署在一台 slave 节点上。

2、MHA实现原理

原理:
MHA(Master High Availability)是现在解决mysql高可用的一个相对成熟的方案
它是由两部分组成,管理端(master manager)和节点端(node manager),管理端可以单独布置在一台机器上,整个mysql主从集群就是它的各个节点,
管理端对所有节点进行监控,当master宕机之后,管理端会根据自己配置文件里的设定,将某一个从节点升为主节点,(如果没有设置,它会自己比对,将最新数据的节点升为主节点),然后将其他节点自动指向提升上来的新的主节点,在提升的过程中,所有结点之间必须可以无密码ssh连接,管理端可以对所有的节点ssh无密码连接.
在MHA自动故障切换的过程中,如果宕掉的 master 无法ssh连接上,则无法同步最新的二进制日志,也就无法获得最新的数据,造成数据丢失,因此,为了避免这中情况发生,MHA一般配合半同步复制.可以最大程度的保存数据.
为了避免在更换主节点时同步日志出错(pos模式下更换节点,日志同步会出错),我们开启GTID模式
目前MHA支持一主多从,整个MHA架构最少有三个节点,一台主服务器, 一台slave做备用主服务器, 一台slave只做同步,当然,为了充分利用资源,集群可以做读写分离(master做写操作,slave做读操作)

  • 步骤一: 准备集群环境
    1)修改主机名,配置IP(其余几台请按照图-2修改IP和主机名,这里以mysql51为例)
    [root@GGD ~]# virsh console rh7_node51 #连接到域
    连接到域 rh7_node51
    换码符为 ^]

Red Hat Enterprise Linux Server 7.4 (Maipo)
Kernel 3.10.0-693.el7.x86_64 on an x86_64

localhost login: root #用root用户登入
密码: #输入密码
Last login: Tue Jan 30 12:29:01 on :0
[root@localhost ~]# hostnamectl set-hostname mysql51 #修改主机名
[root@localhost ~]# nmcli connection modify eth0 ipv4.method manual ipv4.addresses “192.168.4.51/24” connection.autoconnect yes #配置网卡eth0 IP地址
[root@localhost ~]# nmcli connection up eth0 #激活网卡eth0
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/4)
按CTRL键+ ] #退出域

在mysql51中生成key
[root@mysql51 ~]# ssh-keygen -t rsa -P ’ ’ #生成密钥,用于ssh无密码远程连接其他主机,一路回车就可以了
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:juz3qDODDnUnuyfr8qc6cIVAb+/dnvRREe+b3QZVreo root@mysql51
The key’s randomart image is:
±–[RSA 2048]----+
| … . o|
| … oo|
| .o. …o|
| … .+ |
| …+ S .o .|
| …+ B . … .=|
| .o .= o o… o+|
| .+.=.++ oE. . |
| .o*O%…+ . |
±—[SHA256]-----+

所有节点之间可以互相以ssh密钥对方式认证登陆以(以51为例)

[ ]> [root@mysql51 ~]# for i in 51 52 53 54 55 56
#用for循徊拷贝密钥给其他主机,其他每台主机都要做。
> do
> ssh-copy-id 192.168.4.$i
> done

链接: https://pan.baidu.com/s/19VHYWENm61UDlOvp_vmUQg 提取码: wvph #红帽rhel-server-7.4-x86_64-dvd.iso镜像
链接: https://pan.baidu.com/s/1VimRUtMeJVNWNRLrzCgfFg 提取码: jdu7 #perl依赖用软件包
链接: https://pan.baidu.com/s/1UBuAqRGrE5tkrTs9HVavXw 提取码: 5i2i #mysql-5.7.17软件包

安装MHA Node数据节点所有主机上需要安装Perl依赖包(51-56操作)

[root@mysql51 ~]# yum -y install perl-* #yum源是红帽rhel-server-7.4-x86_64-dvd.iso镜像
安装 183 软件包 (+22 依赖软件包)
[root@mysql51 ~]# cd mha-soft-student/
[root@mysql51 mha-soft-student]# ls
master_ip_failover perl-Mail-Sender-0.8.23-1.el7.noarch.rpm
mha4mysql-manager-0.56.tar.gz perl-Mail-Sendmail-0.79-21.el7.art.noarch.rpm
mha4mysql-node-0.56-0.el6.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-Parallel-ForkManager-1.18-2.el7.noarch.rpm
perl-Log-Dispatch-2.41-1.el7.1.noarch.rpm
[root@mysql51 mha-soft-student]# yum -y install perl-*.rpm #用yum安装软件包

已安装:
perl-Config-Tiny.noarch 0:2.14-7.el7 perl-Email-Date-Format.noarch 0:1.002-15.el7
perl-Log-Dispatch.noarch 0:2.41-1.el7.1 perl-MIME-Lite.noarch 0:3.030-1.el7
perl-MIME-Types.noarch 0:1.38-2.el7 perl-Mail-Sender.noarch 0:0.8.23-1.el7
perl-Mail-Sendmail.noarch 0:0.79-21.el7.art perl-Parallel-ForkManager.noarch 0:1.18-2.el7

作为依赖被安装:
perl-Class-Load.noarch 0:0.20-3.el7 perl-Data-OptList.noarch 0:0.107-9.el7
perl-IO-Socket-IP.noarch 0:0.21-4.el7 perl-IO-Socket-SSL.noarch 0:1.94-6.el7
perl-List-MoreUtils.x86_64 0:0.33-9.el7 perl-MailTools.noarch 0:2.12-2.el7
perl-Module-Implementation.noarch 0:0.06-6.el7 perl-Module-Runtime.noarch 0:0.013-4.el7
perl-Net-LibIDN.x86_64 0:0.12-15.el7 perl-Net-SMTP-SSL.noarch 0:1.01-13.el7
perl-Net-SSLeay.x86_64 0:1.55-6.el7 perl-Package-DeprecationManager.noarch 0:0.13-7.el7
perl-Package-Stash.noarch 0:0.34-2.el7 perl-Package-Stash-XS.x86_64 0:0.26-3.el7
perl-Params-Util.x86_64 0:1.07-6.el7 perl-Params-Validate.x86_64 0:1.08-4.el7
perl-Sub-Install.noarch 0:0.926-6.el7 perl-Sys-Syslog.x86_64 0:0.33-3.el7
perl-TimeDate.noarch 1:2.30-2.el7 perl-Try-Tiny.noarch 0:0.12-2.el7

安装MHA Node数据节点(51-56)操作

[root@mysql51 mha-soft-student]# rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm #rpm升级安装MHA Node数据节点
错误:依赖检测失败:
perl(DBD::mysql) 被 mha4mysql-node-0.56-0.el6.noarch 需要 #错误提示没安装软件包依赖

在所有主服务器上安装 mysql-5.7.17 (50-55)

[root@mysql51 ~]# tar -xf mysql-5.7.17.tar #在当前目录下tar解包
[root@mysql51 ~]# yum -y install mysql-community-*.rpm #在当前目录下用yum安装依赖软件包
[root@mysql51 ~]# systemctl restart mysqld #安装完mysql数据库,重启mysql服务,服务名mysqld,服务默认的端口是3306,可以用netstat -utnlp | grep mysqld 查看监听的端口
[root@mysql51 ~]# systemctl enable mysqld #设置开机自启
[root@mysql51 ~]# grep password /var/log/mysqld.log #查看错误日志,修改登入密码
2019-05-17T08:31:16.432099Z 1 [Note] A temporary password is generated for root@localhost: efXayanCj9_i
[root@mysql50 ~]# mysql -uroot -p"efXayanCj9_i" #用错误日志里的密码,第一次登入数据库,-u用户 -p密码 但是要注意随机密码有特殊符号要用双引号引起来。
mysql [-h服务器 -u用户名 -p密码 数据库]
用该密码登录到服务端后,必须马上修改密码,不然会报如下错误:
mysql> show databases;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
mysql> alter user root@“localhost"identified by"123qqq…A”; #修改密码,密码必须符合四分之三原则
Query OK, 0 rows affected (0.00 sec)

  • 修改密码策略

这个其实与validate_password_policy的值有关,默认为1,所以刚开始设置的密码必须符合长度,且必须含有数字,小写或大写字母,特殊字符。如果我们不希望密码设置的那么复杂,需要修改两个全局参数:

validate_password_policy与validate_password_length。validate_password_length默认值为8,最小值为4,如果你显性指定validate_password_length的值小于4,尽管不会报错,但validate_password_length的值将设为4。

mysql> show variables like “% password%”; #查看密码策略
±--------------------------------------±-------+
| Variable_name | Value | #变量名
±--------------------------------------±-------+
| default_password_lifetime | 0 | #默认密码的生存期
| disconnect_on_expired_password | ON | #密码过期时断开连接
| log_builtin_as_identified_by_password | OFF | #将内置的日志记录为密码标识的日志
| mysql_native_password_proxy_users | OFF |
| old_passwords | 0 |
| report_password | |
| sha256_password_proxy_users | OFF |
| validate_password_check_user_name | OFF |
| validate_password_dictionary_file | |
| validate_password_length | 8 | #密码长度
| validate_password_mixed_case_count | 1 |
| validate_password_number_count | 1 |
| validate_password_policy | MEDIUM | #密码策略
| validate_password_special_char_count | 1 |
±--------------------------------------±-------+
14 rows in set (0.28 sec)

validate_password_policy 验证密码策略
0 or LOW 长度
1 or MEDIUM(默认) 长度;数字;小写/大写、和特殊字符
2 or STRONG 长度;数字、小写/大写和特殊字符;字典文件

mysql> set global validate_password_policy=0; #只验证长度
mysql> set global validate_password_length=6; #修改密码长度,默认值是8个字符
mysql> alter user user() identified by “123456”; #修改登入密码
上述操作的结果是——更改数据库用户root从本机访问时的密码,设为123456。
[root@dba5 ~]# mysql -uroot -p123456 #用新密码登录
连接MySQL服务器时,最基本的用法是通过 -u 选项指定用户名、-p指定密码。密码可以写在命令行(如果不写,则出现交互,要求用户输入)
默认情况下,msyql命令会连接本机的MySQL服务。但在需要的时候,可以通过 -h 选项指定远程主机
[root@dba5 ~]# mysql -h127.0.0.1 -uroot -p123456
查看/删除/创建库的相关操作
以root用户登入“mysql> ”环境后,可以执行各种MySQL指令、SQL指令。
操作指令不区分大小写(库名/表名、密码、变量值等除外)。
每条SQL指令以 ; 结束或分隔。
不支持 Tab 键自动补齐。
\c 可废弃当前编写错的操作指令。

常用的SQL操作指令
DDL 数据定义语言 (create 、alter、drop desc)
DML 数据操作语言(insert 、update、delete、select)
DCL 数据控制语言 (grant、revoke)
DTL 数据事物语言 (commit、rollback、savepoink)

mysql> show databases; #查看现有的库
±-------------------+
| Database |
±-------------------+
| information_schema | #信息概要库
| mysql | #授权库
| performance_schema | #性能结构库
| sys | #系统元数据库
±-------------------+
mysql> use 库名; #切换到库
mysql> select database(); #确认当前所在的库
mysql> create database nsd1902; #新建名为nsd1902的库
mysql> drop database nsd1902; #删除名为nsd1902的库
mysql> show tables; #显示当前数据库已有的表
show databases; #显示已有的库
user #存放数据库用户的表

数据库的命名规则: 可以使用数字、字母、下划线,但不能使用纯数字 区分大小写,具有唯一性 不可使用指令关键字,特殊字符

/etc/my.cnf #主配置文件
/var/lib/mysql #数据库目录,数据库没起服务之前是空,起完服务才有初始数据,初始数据不能删除,不然服务起不来。
[root@mysql50 ~]# vim /etc/my.cnf #修改配置文件,添加,密码策略,永久生效
4 [mysqld]
5 validate_password_policy=0
6 validate_password_length=6
在所有主机上安装Perl依赖包(51-56操作)
[root@mysql51 ~]# yum -y install perl-* #安装系统镜像yum源自带perl软件包
[root@mysql51 ~]# tar -xf mha4mysql-manager-0.56.tar.gz
[root@mysql51 ~]# cd mha4mysql-manager-0.56 #cd切换到解压的目录里去
[root@mysql51 mha-soft-student]# ls
master_ip_failover
mha4mysql-manager-0.56.tar.gz
mha4mysql-node-0.56-0.el6.noarch.rpm
perl-Config-Tiny-2.14-7.el7.noarch.rpm
perl-Email-Date-Format-1.002-15.el7.noarch.rpm
perl-Log-Dispatch-2.41-1.el7.1.noarch.rpm
perl-Mail-Sender-0.8.23-1.el7.noarch.rpm
perl-Mail-Sendmail-0.79-21.el7.art.noarch.rpm
perl-MIME-Lite-3.030-1.el7.noarch.rpm
perl-MIME-Types-1.38-2.el7.noarch.rpm
perl-Parallel-ForkManager-1.18-2.el7.noarch.rpm
[root@mysql51 mha-soft-student]# yum -y install perl-* #安装共享解压目录里perl软件包

安装MHA Manager(管理节点mysql56上安装)

首先mysql56要可以无密码ssh 51-55

[root@mysql56 ~]# cd mha-soft-student/ #切换到共享目录里去
[root@mysql56 mha-soft-student]# tar -xf mha4mysql-manager-0.56.tar.gz #解压管理用压缩文件
[root@mysql56 mha-soft-student]# cd mha4mysql-manager-0.56/ #切换到解压目录里去
[root@mysql51 mha4mysql-manager-0.56]# perl Makefile.PL #perl语言编译安装,后面跟上Makefile.PL文件,相当于配置,配置的时候会提示依赖,这些软件依赖前面以经安装括号里面有数字就表示前面已经安装
*** Module::AutoInstall version 1.03
*** Checking for Perl dependencies…
[Core Features]

  • DBI …loaded. (1.627)
  • DBD::mysql …loaded. (4.023)
  • Time::HiRes …loaded. (1.9725)
  • Config::Tiny …loaded. (2.14)
  • Log::Dispatch …loaded. (2.41)
  • Parallel::ForkManager …loaded. (1.18)
  • MHA::NodeConst …loaded. (0.56)
    *** Module::AutoInstall configuration finished. #配置完成
    Checking if your kit is complete…
    Looks good
    Writing Makefile for mha4mysql::manager
    Writing MYMETA.yml and MYMETA.json

[root@mysql56 mha4mysql-manager-0.56]# make && make install #编译安装

配置MHA集群

  • 配置mysql主从同步 (一主多从)
  1. 配置主服务器51
    [root@mysql51 ~]# vim /etc/my.cnf #进入配置文件
    [mysqld]
    validate_password_policy=0
    validate_password_length=6
    server_id=51 #设置服务器ID为51
    log-bin=master51 #设置日志名为master51
    plugin-load = “rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so” #加载master模块和slave模块
    rpl-semi-sync-master-enabled = 1 #启用半同步模块
    rpl-semi-sync-slave-enabled = 1 #加载半同步模块
    relay_log_purge=off #不自动删除本机的中继日志文件
    [root@mysql51 ~]# systemctl restart mysqld #配置完重起服务
    [root@mysql51 ~]# mysql -uroot -p123qqq…A #登入数据库
    mysql> grant replication slave on . to plj@"%"
    -> identified by “123456”; #添加主从同步授权用户
    Query OK, 0 rows affected, 1 warning (0.20 sec)
    mysql> show master status; #查看日志文件名称,和偏移量
    mysql> set global relay_log_purge=off; #不自动删除本机的中继日志文件

  2. 配置从服务器52(备用主库)
    [root@mysql52 ~]# vim /etc/my.cnf #vim编辑数据库配置文件
    [mysqld]
    validate_password_policy=0
    validate_password_length=6
    server_id=52 #设置服务器ID为52
    log-bin=master52 #设置日志名为master52
    plugin-load = “rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so” #加载master模块和slave模块
    rpl-semi-sync-master-enabled = 1 #启用半同步模块
    rpl-semi-sync-slave-enabled = 1 #加载半同步模块
    relay_log_purge=off #不自动删除本机的中继日志文件
    [root@mysql51 ~]# systemctl restart mysqld #配置完重起服务
    [root@mysql51 ~]# mysql -uroot -p123456 #登入数据库
    mysql> grant replication slave on . to plj@"%"
    -> identified by “123456”; #添加主从同步授权用户
    Query OK, 0 rows affected, 1 warning (0.20 sec)
    mysql> show master status; #查看日志文件名称,和偏移量
    mysql> set global relay_log_purge=off; #不自动删除本机的中继日志文件
    mysql> change master to
    -> master_host=“192.168.4.51”, #设置主机51为52的主库
    -> master_user=“plj”, #51主机上主从同步授权用户为plj
    -> master_password=“123456”, #授权用户密码为123456
    -> master_log_file=“master51.000001”, #51主服务器上日志文件名为master51.000001,一定要跟主服务上一样
    -> master_log_pos=962; #主服务器上偏移量
    mysql> start slave; #配置完重起服务
    mysql> show slave status\G; #查看是否同步
    Slave_IO_Running: Yes #IO线程yes表示同步
    Slave_SQL_Running: Yes #SQL线程yes表示同步

  3. 配置从服务器53(备用主库)
    [root@mysql53 ~]# vim /etc/my.cnf #vim编辑数据库配置文件
    [mysqld]
    validate_password_policy=0
    validate_password_length=6
    server_id=53 #设置服务器ID为53
    log-bin=master53 #设置日志名为master53
    plugin-load = “rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so” #加载master模块和slave模块
    rpl-semi-sync-master-enabled = 1 #启用半同步模块
    rpl-semi-sync-slave-enabled = 1 #加载半同步模块
    relay_log_purge=off #不自动删除本机的中继日志文件
    [root@mysql51 ~]# systemctl restart mysqld #配置完重起服务
    [root@mysql51 ~]# mysql -uroot -p123456 #登入数据库
    mysql> grant replication slave on . to plj@"%"
    -> identified by “123456”; #添加主从同步授权用户
    Query OK, 0 rows affected, 1 warning (0.20 sec)
    mysql> show master status; #查看日志文件名称,和偏移量
    mysql> set global relay_log_purge=off; #不自动删除本机的中继日志文件
    mysql> change master to
    -> master_host=“192.168.4.51”, #设置主机51为53的主库
    -> master_user=“plj”, #51主机上主从同步授权用户为plj
    -> master_password=“123456”, #授权用户密码为123456
    -> master_log_file=“master51.000001”, #51主服务器上日志文件名为master51.000001,一定要跟主服务上一样
    -> master_log_pos=962; #主服务器上偏移量
    mysql> start slave; #配置完重起服务
    mysql> show slave status\G; #查看是否同步
    Slave_IO_Running: Yes #IO线程yes表示同步
    Slave_SQL_Running: Yes #SQL线程yes表示同步

  4. 配置从服务器54(纯从库)
    [root@mysql54 ~]# vim /etc/my.cnf
    [mysqld]
    validate_password_length=6
    validate_password_policy=0
    server_id=54 #设置服务器ID为54
    plugin-load = “rpl_semi_sync_slave=semisync_slave.so” #加载slave功能模块
    rpl-semi-sync-slave-enabled = 1 #启用半同步模块
    relay_log_purge=off #不自动删除本机的中继日志文件
    [root@mysql54 ~]# systemctl restart mysqld #配置完重起服务
    mysql> change master to
    -> master_host=“192.168.4.51”, #设置主机51为54的主库
    -> master_user=“plj”, #51主机上主从同步授权用户为plj
    -> master_password=“123456”, #授权用户密码为123456
    -> master_log_file=“master51.000001”, #51主服务器上日志文件名为master51.000001,一定要跟主服务上一样
    -> master_log_pos=962; #主服务器上偏移量
    mysql> start slave; #配置完重起服务
    mysql> show slave status\G; #查看是否同步
    Slave_IO_Running: Yes #IO线程yes表示同步
    Slave_SQL_Running: Yes #SQL线程yes表示同步

  5. 配置从服务器55(纯从库)
    [root@mysql55 ~]# vim /etc/my.cnf
    [mysqld]
    validate_password_length=6
    validate_password_policy=0
    server_id=55 #设置服务器ID为55
    plugin-load = “rpl_semi_sync_slave=semisync_slave.so” #加载slave功能模块
    rpl-semi-sync-slave-enabled = 1 #启用半同步模块
    relay_log_purge=off #不自动删除本机的中继日志文件
    [root@mysql54 ~]# systemctl restart mysqld #配置完重起服务
    mysql> change master to
    -> master_host=“192.168.4.51”, #设置主机51为55的主库
    -> master_user=“plj”, #51主机上主从同步授权用户为plj
    -> master_password=“123456”, #授权用户密码为123456
    -> master_log_file=“master51.000001”, #51主服务器上日志文件名为master51.000001,一定要跟主服务上一样
    -> master_log_pos=962; #主服务器上偏移量
    mysql> start slave; #配置完重起服务
    mysql> show slave status\G; #查看是否同步
    Slave_IO_Running: Yes #IO线程yes表示同步
    Slave_SQL_Running: Yes #SQL线程yes表示同步

  6. 配置管理主机56
    [root@mysql56 ~]# mkdir /etc/mha_manager #创建存放管理配置文件用目录
    [root@mysql56 ~]# cd /root/mha-soft-student/mha4mysql-manager-0.56 #cd切换到模版目录
    [root@mysql56 conf]# cp -r /root/mha-soft-student/mha4mysql-manager-0.56/samples/conf/ app1.cnf   /etc/mha_manager #拷贝模版配置文件到自己创建的目录下
    [root@mysql56 conf]# vim /etc/mha_manager/app1.cnf #修改配置文件
    [server default]
    manager_workdir=/etc/mha_manager #管理服务的工作目录,根据前面创建存放配置文件的目录去修改
    manager_log=/etc/mha_manager/manager.log #管理文件服务启动后存放日志文件路径和名称
    master_ip_failover_script=/etc/mha_manager/master_ip_failover #指定故障切换脚本
    ssh_user=root #指定ssh服务无密码连接时的用户名
    ssh_port=22 #指定ssh服务无密码连接时的端口号
    repl_user=plj #主库上授权从库连接时同步数据的用户名
    repl_password=123456 #主库上授权从库连接时同步数据的密码
    user=root #管理主机服务器56连接[51-55]时数据库的监控用户
    password=123456 #管理主机服务器56连接[51-55]时数据库的监控用户的密码
    [server1]
    hostname=192.168.4.51 #数据库服务器IP地址
    candidate_master=1 #等于1竞选主库
    [server2]
    hostname=192.168.4.52 #数据库服务器IP地址
    candidate_master=1 #等于1竞选主库
    [server3]
    hostname=192.168.4.53 #数据库服务器IP地址
    candidate_master=1 #等于1竞选主库
    [server4]
    hostname=192.168.4.54
    no_master=1 #不竞选主库
    [server5]
    hostname=192.168.4.55
    no_master=1 #不竞选主库

  • 根据配置文件的设置要在[51-55]上添加数据库的监控用户
  • 给从服务器同步数据的连接用户plj(51/52/53)
  • 52mysql> grant replication slave on *.* to plj@"%"
    identified by “123456”

  • 53ysql> grant replication slave on *.* plj@"%"
    identified by “123456”
    mysql> select host,user from mysql.user;
    ±----------±----------+
    | host | user |
    ±----------±----------+
    | % | plj |
    | % | root |
    | localhost | mysql.sys |
    | localhost | root |
    ±----------±----------+
    4 rows in set (0.00 sec)

  • 管理主机56 监控数据库服务器状态的连接用户root
  • 51mysql> grant all on *.* to root@’%’   identified by “123456” #51主服务器上添加监控用户其它从服务器全部同步
    mysql> select host,user from mysql.user;
    ±----------±----------+
    | host | user |
    ±----------±----------+
    | % | root |
    | localhost | mysql.sys |
    | localhost | root |
    ±----------±----------+
    3 rows in set (0.00 sec)
  • 根据配置文件的设置拷贝master_ip_failover文件到指定目录下
  • [root@mysql56 ~]# cp /root/mha-soft-student/master_ip_failover   /etc/mha_manager/ #拷贝故障切换脚本到指定目录下
  • [root@mysql56 ~]# vim +35 /etc/mha_manager/master_ip_failover
    my $vip = ‘192.168.4.100/24’; # Virtual IP #修改第35行的VIP地址
  • [root@mysql56 ~]# chmod +x /etc/mha_manager/master_ip_failover #给执行权限
  • 把vip地址部署在当前的主库上(192.168.4.51)
  • [root@mysql51 ~]# ifconfig eth0:1 92.168.4.100/24 #添加VIP地址
  • [root@mysql51 ~]# ifconfig eth0:1
    eth0:1: flags=4163 mtu 1500
    inet 92.168.4.100 netmask 255.255.255.0 broadcast 92.168.4.255
    ether 52:54:00:69:a5:ce txqueuelen 1000 (Ethernet)
测试配置(192.168.4.56)
  • 测试ssh无密码登陆
    [root@mysql56 ~]# masterha_check_ssh --conf=/etc/mha_manager/app1.cnf
    Sun May 19 21:59:21 2019 - [info] All SSH connection tests passed successfully. #测试成功
  • 测试mysql主从同步
    [root@mysql56 ~]# masterha_check_repl --conf=/etc/mha_manager/app1.cnf
    MySQL Replication Health is OK. #测试成功
  • 启动管理服务
    [root@mysql56 ~]# masterha_manager --conf=/etc/mha_manager/app1.cnf --remove_dead_master_conf --ignore_last_failover #动态测试服务状态
  • 再开一个终端启动管理服务
    [root@mysql56 ~]# masterha_check_status --conf=/etc/mha_manager/app1.cnf #启动管理服务
    app1 (pid:20413) is running(0:PING_OK), master:192.168.4.51
    [root@mysql56 ~]# ls /etc/mha_manager
  • 测试mysql服务高可用
    在主数据库51上添加访问数据的连接用户test01密码123456
    mysql> grant select ,insert on db9.* to test01@"%" identified by “123456”;
    mysql> create database db9;
    mysql> create table db9.t1 (id int);
  • 在客户端50 连接vip地址访问数据库服务
    [root@mysql50 ~]# mysql -h192.168.4.100 -utest01 -p123456
    mysql> insert into db9.t1 values(100),(200),(300); #写入表数据
    mysql> select * from db9.t1; #在51的所有从服务器上都可以看到同样的数据
    ±-----+
    | id |
    ±-----+
    | 100 |
    | 200 |
    | 300 |
    ±-----+
    3 rows in set (0.00 sec)
  • 停止主数据库51 的数据库服务,50主机依然可以访问到数据
    [root@mysql51 ~]# systemctl stop mysqld #在51上关闭数据库服务
  • 把坏掉的服务器 再添加到集群里
  • 如果主机宕机之后,MHA对所有的机器上进行检查,当发现主数据库宕机后,30秒内进行相应的切换,在原来的主数据库修复之后添加到集群,需要两个条件,第一在修复好的数据库手动指定相应的现在在集群的主数据库,第二在相应的MHA管理服务器上的配置文件重新添加该主机,因为在发现原来的主机宕机后,原来的主机的相应的配置文件会被自动删除掉。

  1. 启动宕机服务器的数据库服务
  2. 把宕机 主机 配置为当前主服务器的从服务器
  3. 把主机宕机的服务器重新添加到app1.cnf文件里
    [root@mysql56 ~]# vim /etc/mha_manager/app1.cnf
    [server1]
    candidate_master=1
    hostname=192.168.4.51
    [server2]
    candidate_master=1
    hostname=192.168.4.52
    在主机56上运行管理服务,并查看服务状态
    [root@mysql56 ~]# masterha_check_repl --conf=/etc/mha_manager/app1.cnf #测试主从同步
    MySQL Replication Health is OK.
    部署mysql集群 使用“MHA软件+mysql主从同步”_第3张图片上图是报错信息,55未同步不能创建db9数据库。

数据库主从同步测试时会提示:
MySQL Replication Health is NOT OK!

  • 再开一个终端动态看服务状态
    部署mysql集群 使用“MHA软件+mysql主从同步”_第4张图片
  • 另一个终端起服务,会看到主服务器已切换
    部署mysql集群 使用“MHA软件+mysql主从同步”_第5张图片

你可能感兴趣的:(mysql,mysql,mha)