赞
踩
数据库系统学习
使用MHA 配置mysql数据库服务的高可用集群
软件链接:https://pan.baidu.com/s/119VEJzIOQ4OpMsbPVxCBqg
提取码:tty5
集群知识点回顾:
什么是集群:多台服务器一起提供相同的服务
集群分类:
LB 集群怎么工作:集群中的所有主机平均分摊客户端的访问
HA 集群怎么工作: 至少2台服务器组成集群,一主 一备 主宕机后
备用的服务器自动接替主继续提供服务,这个过程对客户端是透明。
实现LB集群的软件: haproxy LVS Nginx
实现HA集群的软件: Keepalived (vip地址)浮动ip
一 相关概念
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
配置一主多从 同步结构(前面笔记有搭建过程这里不做赘述)
配置主数据库服务器 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
创建并编辑主配置文件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日志文件
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
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
三、启动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
#检查主从结构
[root@host57 ~]# masterha_check_repl --conf=/etc/mha/app1.cnf
MySQL Replication Health is OK.
统一排错: 根据检查的报错信息排错 [error]
出错的原因 /etc/mha/app1.cnf 编写有问题
环境准备不对:一主多从结构 ssh免密登录 软件没安装
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
停止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 服务器
[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
启动管理服务。管理会监视当前主从结构中主数据库服务器运行
[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
app1 (pid:126102) is running(0:PING_OK), master:192.168.4.52
[root@host57 ~]#
启动集群的步骤
启动master的数据库服务
启动slave的数据服务
启动管理服务
五、把宕机的数据库服务器再添加到集群
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.检测集群环境然后开启服务。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。