MHA+MySQL高可用

Master High Availability

MHA数据库高可用集群,是一套优秀的最为mysql高可用性环境下故障切换主从的软件,在故障切换的过程中,MHA能够做到在30s自动完成数据可的故障切换,并在切换的过程中最大程度保证数据的一致性,以达到真正意义上的高可用。

MHA的特点:

1.故障转移

2.保证数据的一致性

MHA的工作流程:

当监控的集群中的主库宕机,会尝试获取主库中的二进制文件,获取到之后,找到已经同步最新数据的从库,将把该从库的中继日志同步给其他的从库,来同步数据,保证从库之间的数据一致性,之后再从库中找到一台,作为新的主库,同步获取到的二进制文件,其余的从库从这个新的主库中同步数据,保证主从服务的集群正常的运行。

部署MHA+MySQL数据库高可用

要搭建MHA,要求集群至少要有三个节点,即一主二从。MHA分为MHA-Manager(管理节点)和MHA-Node(数据节点)两部分

实验环境

MHA管理端:192.168.1.6(管理节点)

MySQL主:192.168.1.4(数据节点)

MySQL从:192.168.1.5(数据节点)

MySQL从:192.168.1.10(数据节点)

MHA+MySQL

实验目的

当MySQL主从环境中,主宕机后,从自动升为主服务器

实验步骤

第一步

搭建MySQL主从

需要注意的一点:mysql主从复制的授权用户也需要三台都做,因为一旦有一台主宕机,就有一台从要代替主,所以还是需要有一个可以复制二进制日志的用户,三台用户名也必须一样

MySQL主的my.cnf配置文件

server-id=1
log-bin=master-bin
log-slave-updates=true
relay-log = relay-log-bin

MySQL从的my.cnf配置文件

为什么从的配置文件会有和主一样的log-bin,同授权原因一样,如果主宕机后,从变为主,也需要有二进制日志文件

一台server-id为2,一台server-id为3

server-id=2
log-bin=master-bin
log-slave-updates=true
relay-log=relay-log-bin
relay-log-index=slave-relay-bin.index
read-only=1    # 启动只读属性
relay-log-purge=0    # 高可用进行切换时,从升为主时,保留之前的中继日志

数据库授权mha用户,此用户将用作管理端管理mysql时使用的数据库用户

三台数据库分别登录数据库客户端,执行以下命令进行授权

grant all on *.* to 'mha'@'192.168.1.%' identified by '123.com';

再接着授权主从复制用户(三台数据库都做)

grant replication slave on *.* to 'slave'@'192.168.1.%' identified by '123.com';

查看MySQL主(192.168.1.4)的偏移量,用来从服务器复制使用

mysql>show master status;
+-------------------+----------+--------------+------------------+-------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------+----------+--------------+------------------+-------------------+
| master-bin.000001 |      329 |              |                  |                   |
+-------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

分别在两台MySQL(192.168.1.5/192.168.1.10)从执行以下

change master to master_host='192.168.1.4',master_user='slave',master_password='123.comm',master_log_file='master-bin.000001',master_log_pos=329;
start slave;
show slave status\G  # 出现以下则成功
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

第二步

为了方便管理,四台服务器之间做免密登录

MHA管理端192.168.1.6

[root@localhost ~]# ssh-keygen
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:uNeSnO2vW67XhgcBMf0xTaRwxP9uU+jk1qxjS7rRxtU root@localhost
The key's randomart image is:
+---[RSA 2048]----+
|          oo.oo+o|
|          ...o+..|
|           . ..+ |
|       .    . . o|
|      . S    . .E|
|       o =  .oo.o|
|      . * o oB=+.|
|       . o oo=X.=|
|          =*=*o=.|
+----[SHA256]-----+
# 传送时输入正确密码即可
[root@localhost ~]# ssh-copy-id root@192.168.1.4
[root@localhost ~]# ssh-copy-id root@192.168.1.5
[root@localhost ~]# ssh-copy-id root@192.168.1.10

MySQL主192.168.1.4

[root@localhost ~]# ssh-keygen
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:7G6eELP5rlbtwUPQFcy9NjdJkF/f+Rrjcyh8xhRiaMY root@localhost.localdomain
The key's randomart image is:
+---[RSA 2048]----+
|         . +o+o  |
|        . . o....|
|         o .  o.*|
|       .  E o ==+|
|      o S* . o +o|
|       *. =   + .|
|      +... + + = |
|      .+... o O .|
|     ..=*    + o |
+----[SHA256]-----+
[root@localhost ~]# ssh-copy-id root@192.168.1.5
[root@localhost ~]# ssh-copy-id root@192.168.1.6
[root@localhost ~]# ssh-copy-id root@192.168.1.10

MySQL从192.168.1.5

[root@localhost ~]# ssh-keygen
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:cWPJNZ6lpT5GVglSLtyRNgNqEfbTAYn151tMSKs8aVc root@localhost.localdomain
The key's randomart image is:
+---[RSA 2048]----+
|        ++==Bo=. |
|       ..*.X=%.o |
|        + @.%o+ E|
|       . + O = + |
|        S   X o o|
|           o + o |
|              .  |
|                 |
|                 |
+----[SHA256]-----+
[root@localhost ~]# ssh-copy-id root@192.168.1.4
[root@localhost ~]# ssh-copy-id root@192.168.1.6
[root@localhost ~]# ssh-copy-id root@192.168.1.10

MySQL从192.168.1.10

[root@localhost ~]# ssh-keygen
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:oIjFO/Abq9FJaxQYYaksNosbydjKKnaEdgMi4JVNvq8 root@localhost.localdomain
The key's randomart image is:
+---[RSA 2048]----+
|oo. +.           |
|o= o..           |
|B =  ..          |
|=@ + ...         |
|Xo& ..  S        |
|=O.@  .          |
|++X .  .         |
|+* .  .          |
|* .  E           |
+----[SHA256]-----+
[root@localhost ~]# ssh-copy-id root@192.168.1.4
[root@localhost ~]# ssh-copy-id root@192.168.1.5
[root@localhost ~]# ssh-copy-id root@192.168.1.6

第三步

将每台服务器都安装被管理节点

四台操作一致

[root@localhost ~]# rpm -ivh epel-release-latest-7.noarch.rpm    

使用网络yum安装依赖关系,这里需要使用网络yum

yum -y install perl-DBD-mysql perl-DBI
[root@localhost ~]# rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm

第四步

在MHA管理端(192.168.1.6)安装管理包

在没有mysql的主机上进行安装以下包

yum -y install perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager
rpm -ivh mha4mysql-manager-0.56-0.el6.noarch.rpm

编写配置文件

[root@localhost ~]# vim /etc/masterha_default.cnf
[server default]    # 全局配置
user=mha    # 经过数据库授权的给管理节点的管理用户
password=123.com  # 经过数据库授权的给管理节点的管理用户的密码
repl_user=slave        # 主从复制使用的用户
repl_password=123.com   # 主从复制使用的用户密码
ssh_user=root    # 管理节点与节点之间使用的ssh用户
master_binlog_dir=/usr/local/mysql/data  # mysql主存放二进制日志的目录
remote_workdir=/data/login    # 当获取到mysql主的二进制日志是存放在本机的此目录
ping_interval=2  # 管理节点与mysql主的通讯时间(秒),超过时间,则认为mysql主宕机了
shutdown_script=""   # 当mysql主宕机时执行的脚本,可以为空

编写管理节点的配置文件

[root@localhost ~]# mkdir /etc/mha
[root@localhost ~]# vim /etc/mha/app1.cnf
[server default]  # 全局配置
manager_workdir=/var/lib/manager   # 工作目录
manager_log=/var/log/manager/manager.log    # 日志目录,manager需要创建

[server1]   # 节点配置
hostname=192.168.1.4
port=3306
ssh_port=22

[server2]
hostname=192.168.1.5
port=3306
ssh_port=22
candidate_master=1  # 表示mysql主宕机后,有server2的节点来接替主

[server3]
hostname=192.168.1.10
port=3306
ssh_port=22

创建目录

mkdir /var/log/manager

测试manager与数据库节点之间的ssh通讯是否正常

[root@localhost ~]# masterha_check_ssh --global-conf=/etc/masterha_default.cnf --conf=/etc/mha/app1.cnf
# 最后显示ok

检测节点之间的主从复制是否正常

[root@localhost ~]# masterha_check_repl --global-conf=/etc/masterha_default.cnf --conf=/etc/mha/app1.cnf
# 最后显示ok

启动MHA管理端,处于监控的状态

[root@localhost ~]# masterha_manager --global-conf=/etc/masterha_default.cnf --conf=/etc/mha/app1.cnf
# 阻塞状态

验证:

MySQL主192.168.1.4

systemctl stop mysqld

将主的mysql服务模拟故障后,监控的管理端会使用mha用户开始选举另一个主,来接替,down掉的主再上线,就是独立的mysql

在变成主库的从上创建库来验证,其他从库是否复制到

评论




正在载入...
PoweredHexo
HostedAliyun
DNSAliyun
ThemeVolantis
UV
PV
BY-NC-SA 4.0