mysql高可用(MHA部署)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43768325/article/details/85125418

mha介绍
mha由日本dena公司youshimaton 开放
是一套优秀的实现mysql 高可用的解决方案
数据库的自动故障切换操作能做到在0~30秒之内
mha能确保在故障切换过程中保证数据的一致性达到真正意义上的高可用

mha组成
可以单独部署在一台独立的机器上,管理其他节点
也可以部署在一台slave 节点上
mha node (数据节点)
运行在每一台mysql 服务器上

工作工程
mha 集群架构
一台主机 (至少两台做备主)

由manager 定时探测集群中的master 节点
当master 故障时,manager 自动将拥有最新数据的slave 提升为新的master
关键点
1.从宕机崩溃的master 保存二进制日志事件
2.识别含有最新更新的slave
3.应用差异的中继日志(relay log)到其他的slave
4.应用从master保存的二进制日志事件
5.提升一个islave 为新的master
6.使其他的slave连接新的master进行复制

部署mha集群
环境准备
1.将数据库51 56 恢复到独立数据库服务器(将数据文件 master,relay日志 注释配置文件binlog格式)
2.拷贝包 (mha-soft-student 到51–56)
3.安装程序 yum-y install perl-*
4.所有数据库服务器(51—55)配置无密码(彼此)连接
ssh-keygen
for i in 52 53 54 54;do ssh-copy-id 192…168.4.$i;done (51 52 53 54 55 都要传密钥)
5.配置主机(56 管理主机)免密码连接所有数据库主机

安装步骤
所有 (51–56)
cd mha-soft-student/
yum -y install perl-*
(51–55)
rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm
(56管理主机)
rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm
tar -xf mha4mysql-manager-0.56.tar.gz
cd mha4mysql-manager-0.56 (用pel脚本编写)
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
    ls …/perl-*
    make
    make install

配置一主多从(配置主节点 master51、配置两个备用主节点 master52、master53
配置两个从节点 slave54、slave55、配置管理节点 mgm56)

master51 数据库服务器配置文件(也可以 set global relay_log_purge=off 不自动删除本机的中继日志文件 ,)
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=off; //不自动删除本机的中继日志文件
server_id=51
log-bin=master51
binlog-format=“mixed”
授权主从用户
grant replication slave on . to repluser@"%" identified by “123456”;
show grants for repluser@"%"; (查看用户权限)
±-------------------------------------------------+
| Grants for repluser@% |
±-------------------------------------------------+
| GRANT REPLICATION SLAVE ON . TO ‘repluser’@’%’ |
±-------------------------------------------------+
master52 53 数据库服务器配置文件 ( 配置文件与 51 一致 除了server_id 值不能一样) ----备用主库
change master to
-> master_host=“192.168.4.51”,
-> master_user=“repluser”,
-> master_password=“123456”,
-> master_log_file=“master51.000003”,
-> master_log_pos=441;
start slave (开启slave)
show slave status\G; (查看)

slave 54 55数据库服务器配置文件(都一致) ------纯从库
vim /ect/my.cnf
server_id=54 (54)
plugin-load=rpl_semi_sync_slave=semisync_slave.so (半同步)
rpl-semi-sync-slave-enabled = 1
relay_log_purge=off; //不自动删除本机的中继日志文件

server_id=55 (55)
plugin-load=rpl_semi_sync_slave=semisync_slave.so (半同步)
rpl-semi-sync-slave-enabled = 1
relay_log_purge=off; //不自动删除本机的中继日志文件

change master to
-> master_host=“192.168.4.51”,
-> master_user=“repluser”,
-> master_password=“123456”,
-> master_log_file=“master51.000003”,
-> master_log_pos=441;

start slave
show slave status\G;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

配置管理主机4.56

cd mysql/mha-soft-student/mha4mysql-manager-0.56/samples
mkdir /etc/mha_manager //创建工作目录
cp conf/app1.cnf /etc/mha_manager //提示覆盖,说明安装的时候有,没有可以拷贝过来
cp samples/conf/app1.cnf /etc/mha_manager //建立样板文件
vim /etc/mha_manager/app1.cnf //编辑主配置文件app1.cnf

[server default]
manager_workdir=/etc/mha_manager 与之前创建目录一致
manager_log=/etc/mha_manager/manager.log
master_ip_failover_scrip=/etc/mha_manager/master_ip_failover 自动failover 的切换脚本 (切换vip)
ssh_user=root
ssh_port=22
repl_user=repluser 主从同步用户
repl_password=123456 密码
user=root 数据库管理员 ( 与配置文件一致 grant all on . to root@"%" identified by “123456”😉
password=123456 密码
[server1]
hostname=192.168.4.51
port=3306
[server2]
hostname=192.168.4.52
port=3306
candidate_master=1 (设为候选master’)
[server3]
hostname=192.168.4.53
port=3306
candidate_master=1 (设为候选master’)
[server4]
hostname=192.168.4.54
no_master=1 (不竞选master)
[server5]
hostname=192.168.4.55
no_master=1
cp samples/scripts/master_ip_failover /etc/mha_mangager //创建故障切换的脚本

测试MHA集群
查看MHA集群状态
测试节点之间的SSH登录
测试集群VIP的故障切换功能

验证配置
1)检查配置环境,在主机52,53检查是否有同步数据的用户repluser 主机52:
select user,host from mysql.user where user=“repluser”; (如没有则手动创建)
show grants for repluser@"%"

2)在51的主机上做root的授权,其他的会同步(如果不做,在验证数据节点的主从同步配置时会出错)
grant all on . to root@"%" identified by “123456”;
select user,host from mysql.user where user=“root”;

3)验证ssh 免密登陆数据节点主机 (在管理节点做ssh检查 masterha_check_ssh --conf=管理节点主配置文件)
cd /usr/local/bin/
masterha_check_ssh --conf=/etc/mha_manager/app1.cnf
Wed Sep 19 09:09:33 2018 - [info] All SSH connection tests passed successfully. //出现这个为成功

4)验证数据节点的主从同步配置(先把自动failover时候的切换脚本注释掉)
masterha_check_repl --conf=/etc/mha_manager/app1.cnf
MySQL Replication Health is OK. //验证成功

5)启动管理服务MHA_Manager
–remove_dead_master_conf //删除宕机主库配置
–ignore_last_failover //忽略xxx.health文件
masterha_manager --conf=/etc/mha_manager/app1.cnf --remove_dead_master_conf --ignore_last_failover (一定要加,否则不会跳。)

6)查看状态(另开一个终端)
[root@mgm56 ~]# masterha_check_status --conf=/etc/mha_manager/app1.cnf

7)停止服务
masterha_stop --conf=/etc/mha_manager/app1.cnf

测试故障转移 (测试高可用)
1)在主库51上面配置VIP地址
ifconfig eth0:1 192.168.4.100/24
2)在配置文件里面把自动failover时候的切换脚本去掉注释
3)修改 master_ip_failover 脚本,设置如下内容 (56上)
cd mha-soft-student/
cp master_ip_failover /etc/mha_manager
chmod 755 /etc/mha_manager/master_ip_failover
vim /etc/mha_manager/master_ip_failover
my $vip = ‘192.168.4.100/24’;
my $key = “1”;
my sshstartvip="/sbin/ifconfigeth0:ssh_start_vip = "/sbin/ifconfig eth0:key $vip";
my sshstopvip="/sbin/ifconfigeth0:ssh_stop_vip = "/sbin/ifconfig eth0:key down";
查看vip地址 (ip addr show | grep vip 地址
手动配置 vip 地址 ifconfig eth0:192.168.4.100/24 -------ifconfig eth0:1)
4)启动服务
masterha_manager --conf=/etc/mha_manager/app1.cnf --remove_dead_master_conf --ignore_last_failover
5)查看状态
masterha_check_status --conf=/etc/mha_manager/app1.cnf
app1 master is down and failover is running(50:FAILOVER_RUNNING). master:192.168.4.52

验证数据节点的主从同步配置报错,如图-3所示:
[root@mgm56 bin]# masterha_check_repl --conf=/etc/mha_manager/app1.cnf

解决办法:
root用户没有授权,默认只能本地连接,在主机51上面授权root用户可以远程登录,其他主机会同步
mysql> grant all on . to root@"%" identified by “123456”;

维护集群
怎样将坏掉的数据库服务器再添加到集群
启动51主机数据库服务器,并配置为当前的主库的从数据库服务器
1.systemctl restart mysqld
2.mysql -uroot -p123456
3.change master to master_host=“192.168.4.52”,master_user=“repluser”,master_password=“123456”,master_log_file="" (注查看当前运行的数据库,show master status),master_log_pos="";
修改管理主机56app1.cnf 文件,添加 数据库服务器 51 的配置文件 (加上)
[server1]
candidate_master=1
hostname=192.168.4.51
第三步 启动 管理主机56上的管理服务,并查看状态信息
masterha_manager --conf=/etc/mha_manager/app1.cnf --remove_dead_master_conf --ignore_last_failover
在开一个56终端查看状态信息
masterha_check_status --conf=/etc/mha_manager/app1.cn

展开阅读全文

没有更多推荐了,返回首页