mysql MHA高可用方案部署

一、准备环境:

1、mysql版本:8.0.26

2、3台服务器(一主两从)

3、MHA高可用软件:

MHA Manager(管理节点)
可以单独部署在一台独立的机器上管理多个master-slave集群,也可以部署在一台slave上。
MHA Node(数据节点)
运行在每台MySQL服务器上

二、搭建步骤:

清理环境

pkill mysql

\rm -rf /data/3306/data/*

编写配置文件

主节点配置

cat >/etc/my.cnf <<EOF

[mysqld]

basedir=/usr/local/mysql

datadir=/data/3306/data

socket=/tmp/mysql.sock

server_id=51

port=3306

gtid-mode=on

enforce-gtid-consistency=true

log-slave-updates=1

[mysql]

prompt=db01 [\\d]>

EOF

从节点配置:

cat >/etc/my.cnf <<EOF

[mysqld]

basedir=/usr/local/mysql

datadir=/data/3306/data

socket=/tmp/mysql.sock

server_id=52

port=3306

gtid-mode=on

enforce-gtid-consistency=true

log-slave-updates=1

[mysql]

prompt=db02 [\\d]>

EOF

cat >/etc/my.cnf <<EOF

[mysqld]

basedir=/usr/local/mysql

datadir=/data/3306/data

socket=/tmp/mysql.sock

server_id=53

port=3306

gtid-mode=on

enforce-gtid-consistency=true

log-slave-updates=1

[mysql]

prompt=db03 [\\d]>

EOF

mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/3306/data

步骤三:配置主从架构(主库执行)

create user repl@'10.0.0.%' identified with mysql_native_password by '123456';

grant replication slave on *.* to repl@'10.0.0.%';

//从库执行

change master to

master_host='10.0.0.51',

master_user='repl',

master_password='123456',

master_auto_position=1;

start slave;

步骤四:实现主从节点之间的SSH互信

# 配置各节点互信

\rm -rf /root/.ssh

ssh-keygen

cd /root/.ssh

mv id_rsa.pub authorized_keys

scp  -r  /root/.ssh  10.0.0.52:/root

scp  -r  /root/.ssh  10.0.0.53:/root

//验证是否互信

ssh 10.0.0.51 date

ssh 10.0.0.52 date

ssh 10.0.0.53 date

步骤五:MHA高可用软件安装部署:

///usr/local/mysql/bin/  这个目录是mysql的安装目录,下面两个语句的作用是创建软连接,方便到mha某些脚本调用mysql,mysqlbinlog 命令,主节点操作

ln -s /usr/local/mysql/bin/mysqlbinlog /usr/bin/mysqlbinlog

ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql

-- 所有节点安装Node软件依赖包

yum install perl-DBD-MySQL -y

//事先准备好软件包

rpm -ivh mha4mysql-node-0.58-0.el7.centos.noarch.rpm

-- Manager软件安装(db03)

yum install -y perl-Config-Tiny epel-release perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes

//事先准备好软件包

yum install -y mha4mysql-manager-0.58-0.el7.centos.noarch.rpm  

rpm -ivh mha4mysql-manager-0.58-0.el7.centos.noarch.rpm

-- 在主库上创建

create user mha@'10.0.0.%' identified with mysql_native_password by 'mha';

grant all privileges on *.* to mha@'10.0.0.%';

# Manager配置文件准备(db03)

mkdir -p /etc/mha    -- 创建配置文件目录

mkdir -p /var/log/mha/app1    -- 创建日志目录

-- 编辑mha配置文件

cat > /etc/mha/app1.cnf <<EOF

[server default]

manager_log=/var/log/mha/app1/manager        

-- MHA的工作日志设置

manager_workdir=/var/log/mha/app1            

-- MHA的工作目录       

master_binlog_dir=/data/3306/data              

-- 主库的binlog目录

user=mha                                     

-- 监控用户,利用此用户连接各个节点,做心跳检测(主要是检测主库的状态)                     

password=mha                                 

-- 监控密码

ping_interval=2                             

-- 心跳检测的间隔时间

repl_password=123456                            

-- 复制密码

repl_user=repl                               

-- 复制用户(用于告知从节点通过新主同步数据信息的用户信息)

ssh_user=root                               

-- ssh互信的用户(可以利用互信用户从主库scp获取binlog日志信息,便于从库进行数据信息补偿)

[server1]                                    

-- 节点信息....

hostname=10.0.0.51

port=3306                                 

[server2]           

hostname=10.0.0.52

port=3306

#candidate_master=1

[server3]

hostname=10.0.0.53

port=3306

EOF

# MHA状态检查(db03)

masterha_check_ssh   --conf=/etc/mha/app1.cnf

Wed Dec 28 20:54:42 2022 - [info] All SSH connection tests passed successfully.

-- 在MHA管理节点,进行ssh互信功能检查,并且显示成功表示检查通过

masterha_check_repl  --conf=/etc/mha/app1.cnf

MySQL Replication Health is OK.

-- 在MHA管理节点,检查主从关系与配置文件信息是否正确

# 开启MHA-manager

开启MHA(db03):

nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover  < /dev/null> /var/log/mha/app1/manager.log 2>&1 &

# 查看MHA状态

masterha_check_status --conf=/etc/mha/app1.cnf

app1 (pid:30770) is running(0:PING_OK), master:192.168.30.101

-- 显示以上提示信息,表示MHA基础环境搭建成功了,但还不能在生产环境使用,还需要有后续的操作配置

MHA功能应用介绍:

在熟悉高可用服务工作原理前,可以先思考下应用高可用服务可以解决哪些需求,或者也可以理解为解决哪些痛点:

① 如何在高可用架构中,当主库宕机异常后,使之及时的发现主库服务程序产生了运行异常?

​    解决此痛点问题,需要实现高可用的监控需求;

② 如何在高可用架构中,当主库宕机异常后,可以找到可以替代主库的服务器主机进行切换?

​    解决此痛点问题,需要实现高可用的选主功能;(并且选择数据量越接近主库的从库成为新主)

③ 如何在高可用架构中,当主库宕机异常后,新的主库接管后可以保证与原有主库数据一致?

​    解决此痛点问题,需要实现高可用的数据补偿;

④ 如何在高可用架构中,当主库宕机异常后,将应用程序的读写请求对接切换到新的主库上?

​    解决此痛点问题,需要实现高可用的应用透明;(VIP技术)

⑤ 如何在高可用架构中,当主库宕机异常后,能够及时向管理员发起告知提醒使之进行修复?(MHA切换是一次性的)

​    解决此痛点问题,需要实现高可用的报警功能;

⑥ 如何在高可用架构中,当主库宕机异常后,当整体主库系统环境都异常时实现数据的补偿?

​    解决此痛点问题,需要实现高可用的额外补偿;

⑦ 如何在高可用架构中,当主库宕机异常后,根据主库服务器的异常情况进行原有主库修复?

​    解决此痛点问题,需要实现高可用的自愈功能;(待开发,只有云平台RDS具有此功能)

 三、MHA应用透明

配置mha高可用的vip地址功能

cd /usr/local/bin/

chmod +x /usr/local/bin/*

dos2unix /usr/local/bin/*

vim master_ip_failover

13 my $vip = '10.0.0.50/24';

14 my $key = '1';

15 my $if = 'ens33';

16 my $ssh_start_vip = "/sbin/ifconfig $if:$key $vip";  

17 my $ssh_stop_vip = "/sbin/ifconfig $if:$key down";

18 my $ssh_Bcast_arp= "/sbin/arping -I ens33 -c 3 -A 10.0.0.50";

vim /etc/mha/app1.cnf

master_ip_failover_script=/usr/local/bin/master_ip_failover

masterha_stop --conf=/etc/mha/app1.cnf

nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover  < /dev/null> /var/log/mha/app1/manager.log 2>&1 &

masterha_check_status --conf=/etc/mha/app1.cnf

第一次启动MHA,需要在主节点手工添加vip地址:

ifconfig ens33:1 10.0.0.50/24

//设置错了可以用:ifconfig ens33:1 down 这个关闭,然后重新设置

07 MHA故障报警

当mha进行故障切换后,需要邮件通知

vim send_report

28 my $smtp='smtp.qq.com';

-- smtp服务器地址域名

29 my $mail_from='xxx@qq.com';

-- 发件箱信息配置

30 my $mail_user='xxx';

-- 用户名 QQ号

31 my $mail_pass='xxx';

-- 邮箱授权码

32 my $mail_to='xxx@qq.com';

or

my $mail_to=['xxx@qq.com','xxx@qq.com','xxx@139.com','xxx@qq.com'];

-- 收件箱信息配置

# vim /etc/mha/app1.cnf

report_script=/usr/local/bin/send_report

masterha_stop --conf=/etc/mha/app1.cnf

nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover  < /dev/null> /var/log/mha/app1/manager.log 2>&1 &

masterha_check_status --conf=/etc/mha/app1.cnf

08 mha数据额外补偿

-- 在mha管理节点进行操作

mkdir -p /data/binlog_server/

chown -R mysql.mysql /data/*

cd /data/binlog_server

mysqlbinlog -R --host=10.0.0.51 --user=mha --password=mha --raw --stop-never binlog.000001 &

vim /etc/mha/app1.cnf

[binlog1]

no_master=1

-- 不存于竞选

hostname=10.0.0.53

-- 将日志额外补偿到哪个主机上

master_binlog_dir=/data/binlog_server/

-- 日志额外补偿的存储目录

masterha_stop --conf=/etc/mha/app1.cnf

nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover  < /dev/null> /var/log/mha/app1/manager.log 2>&1 &

masterha_check_status --conf=/etc/mha/app1.cnf

四、MHA故障切换实践

1)故障切换后的应用透明

关闭主库数据库后,navicat仍可以继续链接数据库

2)故障切换后实现主从重构

3)故障切换后实现数据补充机制

4)故障切换后的选主过程

5)故障切换后的报警功能

  • 31
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值