当前位置:   article > 正文

Mysql数据库学习(九)MHA集群概述 、 部署MHA集群_mhaxgb

mhaxgb

数据库系统学习
使用MHA 配置mysql数据库服务的高可用集群
软件链接:https://pan.baidu.com/s/119VEJzIOQ4OpMsbPVxCBqg
提取码:tty5
集群知识点回顾:
什么是集群:多台服务器一起提供相同的服务
集群分类:
LB 集群怎么工作:集群中的所有主机平均分摊客户端的访问
HA 集群怎么工作: 至少2台服务器组成集群,一主 一备 主宕机后
备用的服务器自动接替主继续提供服务,这个过程对客户端是透明。

		实现LB集群的软件: haproxy  LVS  Nginx
		实现HA集群的软件: Keepalived (vip地址)浮动ip 
  • 1
  • 2

一 相关概念
1.1 软件介绍
1.2 MHA集群工作原理 (数据库服务器之间必须是一主多从结构)
1.3 拓扑结构:50为客户机,57为管理节点,51 52 53为三台数据库服务器。51为52和53的主。

二、部署MHA集群
2.1 环境准备
安装依赖的perl软件(先把yum源里没有的安装一下)51 52 53 57
]# cd mha
]# yum -y perl-*.rpm

	配置ssh免密登录
		3台数据库服务器之间要能免密登录
			配置51 免密登录 52 和 53
			ssh-keygen 
			ssh-copy-id  root@192.168.4.53
   				ssh-copy-id  root@192.168.4.52
			ssh root@192.168.4.53
			ssh root@192.168.4.52

                            配置52 免密登录 51 和 53
			ssh-keygen 
				ssh-copy-id  root@192.168.4.51
				ssh-copy-id  root@192.168.4.53
 
				ssh root@192.168.4.51
				ssh root@192.168.4.53

                            配置53 免密登录 51 和 52 
			ssh-keygen 
				ssh-copy-id root@192.168.4.51
				ssh-copy-id root@192.168.4.52
   				ssh root@192.168.4.51
			ssh root@192.168.4.52
			
		管理主机57 可用免密登录3台数据库服务器
			 ssh-keygen 
			 ssh-copy-id root@192.168.4.51
			 ssh-copy-id root@192.168.4.52
			 ssh-copy-id root@192.168.4.53
			 ssh root@192.168.4.53
			 ssh root@192.168.4.52
			 ssh root@192.168.4.51
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

配置一主多从 同步结构(前面笔记有搭建过程这里不做赘述)
配置主数据库服务器 51
配置从数据库服务器 52
配置从数据库服务器 53

2.2 配置管理主机192.168.4.57
	安装mha_manager软件
	yum -y install perl-ExtUtils-*   perl-CPAN*
            cd  mha
	yum -y install mha4mysql-node-0.56-0.el6.noarch.rpm

          tar -zxvf mha4mysql-manager-0.56.tar.gz 

          cd mha4mysql-manager-0.56

          perl Makefile.PL  

          make && make install
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

创建并编辑主配置文件app1.cnf
71 mkdir /etc/mha
72 cd mha4mysql-manager-0.56
74 ls samples/conf/
75 cp samples/conf/app1.cnf /etc/mha/

vim /etc/mha/app1.cnf
[server default] 管理服务运行参数设置
[server数字] #指定数据库服务器ip地址
:wq

[root@host57 mha4mysql-manager-0.56]# cat /etc/mha/app1.cnf
[server default]
manager_workdir=/etc/mha
manager_log=/etc/mha/manager.log
master_ip_failover_script=/etc/mha/master_ip_failover

ssh_user=root (ssh登录的用户及端口)
ssh_port=22

repl_user=repluser (主从节点间通过binlog日志实现数据同步的账户)
repl_password=123qqq…A

user=root (管理节点登录数据库服务器的账户)
password=123qqq…A

[server1]
hostname=192.168.4.51(服务器ip)
port=3306 (服务端口)
candidate_master=1 (竞选主服务器开启)

[server2]
hostname=192.168.4.52
port=3306
candidate_master=1

[server3]
hostname=192.168.4.53
port=3306
candidate_master=1
[root@host57 mha4mysql-manager-0.56]#

创建故障切换脚本并编辑
[root@host57 mha]# cd mha
[root@host57 mha]# cp master_ip_failover /etc/mha/
[root@host57 mha]# chmod +x /etc/mha/master_ip_failover

[root@host57 mha]# vim +35 /etc/mha/master_ip_failover(切到第35行)
my $vip = ‘192.168.4.100/24’; # Virtual IP (修改虚拟ip)
my $key = “1”;
my s s h s t a r t v i p = " / s b i n / i f c o n f i g e n s 33 : ssh_start_vip = "/sbin/ifconfig ens33: sshstartvip="/sbin/ifconfigens33:key $vip"; (部署vip地址)
my s s h s t o p v i p = " / s b i n / i f c o n f i g e n s 33 : ssh_stop_vip = "/sbin/ifconfig ens33: sshstopvip="/sbin/ifconfigens33:key down"; (释放vip地址)
:wq

把VIP地址配置在master 服务器51上
[root@host51 ~]# which ifconfig || yum -y install net-tools
/usr/sbin/ifconfig

[root@host51 ~]# ifconfig ens33:1 192.168.4.100
[root@host51 ~]# ifconfig ens33:1

[root@host52 ~]# which ifconfig || yum -y install net-tools
/usr/sbin/ifconfig

[root@host53 ~]# which ifconfig || yum -y install net-tools
/usr/sbin/ifconfig

2.3 配置数据库服务器
2.3.1 安装mha-node软件 (3台数据库服务器都要安装)
]# cd mha
]# yum -y install mha4mysql-node-0.56-0.el6.noarch.rpm

2.3.2 优化配置 (3台数据库服务器都要配置)
开启半同步复制模式(3台数据库服务器都要配置)
命令行配置,马上生效
mysql> install plugin rpl_semi_sync_master SONAME “semisync_master.so”;
mysql> install plugin rpl_semi_sync_slave SONAME “semisync_slave.so”;
mysql> set global rpl_semi_sync_master_enabled=1;
mysql> set global rpl_semi_sync_slave_enabled=1;

vim /etc/my.cnf
[mysqld]
plugin-load =“rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so” #安装模块

rpl_semi_sync_master_enabled=1 #启用模块
rpl_semi_sync_slave_enabled=1

relay_log_purge=0 禁止自动删除本机的中继日志文件
:wq

		在52 和 53主机 做如下配置: 
                            启用binlog日志文件  
  • 1
  • 2

host52~ ]# vim /etc/my.cnf
[mysqld]
log_bin=master52
:wq
]# systemctl restart mysqld
host53~ ]# vim /etc/my.cnf
[mysqld]
log_bin=master53
:wq
]# systemctl restart mysqld

                            添加repluser用户和监控用户root 	
  • 1

host52
MySQL>grant replication slave on . to repluser@"%" identified by “123qqq…A”;

MySQL>grant all on . to root@"%" identified by “123qqq…A”;

host53
MySQL>grant replication slave on . to repluser@"%" identified by “123qqq…A”;
MySQL>grant all on . to root@"%" identified by “123qqq…A”;

host51
MySQL>grant all on . to root@"%" identified by “123qqq…A”;

       2.3.1 安装mha-node软件 (3台数据库服务器都要安装)
	]# cd mha
    ]# yum -y install mha4mysql-node-0.56-0.el6.noarch.rpm
  • 1
  • 2
  • 3

三、启动57主机的管理服务
3.1 测试配置
#检查ssh免密登录
[root@host57 ~]# masterha_check_ssh --conf=/etc/mha/app1.cnf
Tue Jan 26 11:24:51 2021 - [info] All SSH connection tests passed successfully

		#检查主从结构
  • 1

[root@host57 ~]# masterha_check_repl --conf=/etc/mha/app1.cnf
MySQL Replication Health is OK.

    统一排错: 根据检查的报错信息排错 [error]
	出错的原因  /etc/mha/app1.cnf 编写有问题
		    环境准备不对:一主多从结构  ssh免密登录  软件没安装
  • 1
  • 2
  • 3

3.2 启动管理服务(管理服务运行要占用一个终端运行)
[root@host57 ~]# masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover

Tue Jan 26 12:30:03 2021 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping.
Tue Jan 26 12:30:03 2021 - [info] Reading application default configuration from /etc/mha/app1.cnf…
Tue Jan 26 12:30:03 2021 - [info] Reading server configuration from /etc/mha/app1.cnf…

在新终端 查看服务运行状态
[root@host57 ~]# masterha_check_status --conf=/etc/mha/app1.cnf
app1 (pid:51771) is running(0:PING_OK), master:192.168.4.51
[root@host57 ~]#

[root@host57 ~]# masterha_stop --conf=/etc/mha/app1.cnf 停止服务的命令

四、测试高可用集群
在51主机添加用户个客户端连接使用,52 和 53 都会同步用户
mysql> grant all on bbsdb.* to plj188@"%" identified by “123qqq…A”;

在51 查看vip 地址
[root@host51 mha]# ifconfig ens33:1
ens33:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.4.100 netmask 255.255.255.0 broadcast 192.168.4.255
ether 00:0c:29:d5:c9:38 txqueuelen 1000 (Ethernet)

      客户端连接数据库服务器 每次访问的都是vip地址
  host50 mysql -h192.168.4.100 -uplj188  -p123qqq...A
  • 1
  • 2

停止51 主机的mysqld服务
[root@host51 mha]# systemctl stop mysqld
57主机 发现51的数据库服务停止了 , 会自动停止管理服务 ,触发故障切换脚本做vip地址迁移 把VIP 地址部署在新选举的主数据库服务器上

[root@host57 ~]# masterha_check_status --conf=/etc/mha/app1.cnf
app1 is stopped(2:NOT_RUNNING).
[root@host57 ~]#

     在52 和 53 主机查看vip地址 谁有vip地址 谁就是新的master 服务器 
  • 1

[root@host52 mha]# ifconfig ens33:1
ens33:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.4.100 netmask 255.255.255.0 broadcast 192.168.4.255
ether 00:0c:29:56:93:3f txqueuelen 1000 (Ethernet)

[root@host52 mha]#

在另外1台数据库服务器 查看 slave 状态,会自动做新的master 服务器的从服务器
[root@host53 mha]# mysql -uroot -p’123qqq…A’ -e 'show slave status \G ’ | grep -i “master_host”
mysql: [Warning] Using a password on the command line interface can be insecure.
Master_Host: 192.168.4.52
[root@host53 mha]#

客户端依然能连接vip地址数据库服务


  host50 mysql -h192.168.4.100 -uplj188  -p123qqq...A
  • 1
  • 2
  • 3
  • 4

启动管理服务。管理会监视当前主从结构中主数据库服务器运行

[root@host57 ~]# masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover
Tue Jan 26 13:06:44 2021 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping.
Tue Jan 26 13:06:44 2021 - [info] Reading application default configuration from /etc/mha/app1.cnf…
Tue Jan 26 13:06:44 2021 - [info] Reading server configuration from /etc/mha/app1.cnf…

[root@host57 ~]# masterha_check_status --conf=/etc/mha/app1.cnf 
  • 1

app1 (pid:126102) is running(0:PING_OK), master:192.168.4.52
[root@host57 ~]#

启动集群的步骤
    启动master的数据库服务
    启动slave的数据服务
    启动管理服务     
  • 1
  • 2
  • 3
  • 4

五、把宕机的数据库服务器再添加到集群
1.启动host51主机的数据库服务
host51~]# systemctl start mysqld
(如果52数据库里的数据有发生过改变,先完全备份到51恢复再继续以下操作)
2.指定主服务器信息
52主机查看日志及偏移量:
mysql> show master status;
±----------------±---------±-------------±-----------------±------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
±----------------±---------±-------------±-----------------±------------------+
| master52.000001 | 721 | | | |
±----------------±---------±-------------±-----------------±------------------+

[root@host51 ~]# mysql -uroot -p123qqq…A
mysql>change master to master_host=“192.168.4.52”,master_user=“repluser”,master_password=“123qqq…A”,master_log_file=“master52.000001”,master_log_pos=721;
Query OK, 0 rows affected, 2 warnings (0.14 sec)

3.启动slave进程并查看IO线程状态和SQL线程状态:
mysql> start slave;
mysql>show slave status\G
Slave_IO_Running: Yes //IO线程状态正常
Slave_SQL_Running: Yes //SQL线程状态正常

4.配置管理服务器
修改配置文件,添加数据库服务器host51
]# vim /etc/mha/app1.cnf
[server1 ]
hostname=192.168.4.51
port=3306
candidate_master=1
:wq

5.检测群集环境
[root@mgm57 ~]# masterha_check_ssh --conf=/etc/mha/app1.cnf //测试SSH
[root@mgm57 ~]# masterha_check_repl --conf=/etc/mha/app1.cnf//测试主从同步
[root@mgm57 ~]# masterha_stop --conf=/etc/mha/app1.cnf //停止管理服务
[root@mgm57 ~]# masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf \ --ignore_last_failover //启动管理服务
[root@mgm57 ~]# masterha_check_status --conf=/etc/mha/app1.cnf

搭建MHA集群操作步骤总结:
1.四台主机装以来的perl软件:yum -y perl-*.rpm
2.配置免密登录,51 52 53互相免密,57免密登录其他三台
3.配置一主多从,51作为主
4.管理主机57安装mha_manager软件(安装过程出现错误根据提示继续安装对应的包)
5.在根下etc下创建mha目录,把下载的mha软件里samples/conf/app1.cnf移动到创建的/etc/mha里并编辑app1.cnf配置文件
6.把下载的mha软件里master_ip_failover移动到/etc/mha里增加x权限并编辑这个文件
7.把vip地址配置在51主机上
8三台数据库服务器安装mha-node软件
9.三台数据库服务器开启半同步复制模式,要修改他们的配置文件
10数据库52和53主机添加repluser用户,权限为对所有库所有表任何主机的replcation slave,51主机添加root用户,任何权限任何库表任何主机,51添加以后主从模式会自动给另外两台也添加。
11.检查免密登录,检查主从结构,开启服务,查看服务,查看vip所在的节点是哪台

测试高可用集群及故障恢复步骤总结:
1.在51主机添加客户端连接的用户,然后用客户端通过这个用户访问,注意主机ip为虚拟的vip
2关闭51的mysql服务,此时管理节点服务关闭,观察此时vip在哪个数据库服务器。此时拥有vip的节点就作为主节点,另一台作为这台主节点的从,并且客户端连接并不会受影响,等待一会儿自动重新连接即可。
3.启动51的mysql服务,51主机指定主服务器信息成为主服务器的从(如果主数据库里的数据有发生过改变,先完全备份到51恢复再继续以下操作),然后启动slave
4.在管理节点配置文件/etc/mha/app1.cnf重新添加数据库服务器51的配置
5.检测集群环境然后开启服务。

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号