搭建数据库服务高可用架构
<h1 id="搭建数据库服务高可用架构">搭建数据库服务高可用架构</h1><pre><code class="language-bash">为了实现数据服务主库异常后,可以将从库自动切换为主库
</code></pre>
<h2 id="1搭建高可用主从架构">1.搭建高可用主从架构</h2>
<pre><code class="language-sh">架构环境规划 -- centos 7.9
主库 10.0.0.51 8.0.36MHA-node
从库 10.0.0.52 8.0.36MHA-node
从库 10.0.0.53 8.0.36MHA-node
mgr 10.0.0.54 8.0.36MHA-node MHA-manager
MHA-manager: 管理程序包负责监控和控制主从架构
MHA-node : 节点程序包和管理程序进行对接
步骤一:在虚拟环境中部署安装数据库和MHA程序
主库安装程序信息
安装数据库8.0.36 程序 并实现程序正常运行 (二进制包)
安装MHA-node程序
yum install perl-DBD-MySQL -y
rpm -ivh mha4mysql-node-0.58-0.el7.centos.noarch.rpm
yum localinstall -y mha4mysql-node-0.58-0.el7.centos.noarch.rpm
从库安装程序信息
安装数据库8.0.36 程序 并实现程序正常运行 (二进制包)
安装MHA-node程序
yum install perl-DBD-MySQL -y
rpm -ivh mha4mysql-node-0.58-0.el7.centos.noarch.rpm
yum localinstall -y mha4mysql-node-0.58-0.el7.centos.noarch.rpm
管理节点程序信息
安装数据库8.0.36 程序 不需要程序正常运行 (二进制包)
安装MHA-node程序
yum install perl-DBD-MySQL -y
rpm -ivh mha4mysql-node-0.58-0.el7.centos.noarch.rpm
yum localinstall -y mha4mysql-node-0.58-0.el7.centos.noarch.rpm
安装MHA-manager程序
yum install -y perl-Config-Tiny epel-release perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes
rpm -ivh mha4mysql-manager-0.58-0.el7.centos.noarch.rpm
yum localinstall -y mha4mysql-manager-0.58-0.el7.centos.noarch.rpm
步骤二:在数据库和管理节点中做高可用环境配置
准备好主从同步架构环境 -- GTID(推荐)
show slave status\G
实现主从数据库之间互信 -- ssh互信
主库操作 -- 10.0.0.51
rm -rf /root/.ssh
ssh-keygen
cd /root/.ssh
mv id_rsa.pub authorized_keys
scp-r/root/.ssh10.0.0.52:/root
scp-r/root/.ssh10.0.0.53:/root
scp-r/root/.ssh10.0.0.54:/root
ssh 10.0.0.52 date
ssh 10.0.0.53 date
ssh 10.0.0.54 date
- 以上操作完毕,表示52和53和54都信任了51
ssh 10.0.0.51 date
ssh 10.0.0.53 date
ssh 10.0.0.54 date
-- 以上操作完毕,表示51和53和54都信任了52
ssh 10.0.0.51 date
ssh 10.0.0.52 date
ssh 10.0.0.54 date
-- 以上操作完毕,表示51和52和54都信任了53
ssh 10.0.0.51 date
ssh 10.0.0.52 date
ssh 10.0.0.53 date
-- 以上操作完毕,表示51和52和53都信任了54
步骤三:运行启动高可用服务程序
ln -s /usr/local/mysql/bin/mysql/usr/bin/mysql
ln -s /usr/local/mysql/bin/mysqlbinlog/usr/bin/mysqlbinlog
-- 命令软链接创建,在管理节点和主从节点都进行创建
-- 以下操作信息,在管理节点执行即可(10.0.0.54)
mkdir -p /etc/mha
-- 创建配置文件目录
mkdir -p /var/log/mha/app1
-- 创建日志目录
create user mha@'10.0.0.%' identified with mysql_native_password by 'mha';
grant all privileges on *.* to mha@'10.0.0.%';
-- 在主从环境搭建好,在主库中创建mha监控用户
cat > /etc/mha/app1.cnf <<EOF
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日志信息,便于从库进行数据信息补偿)
-- 节点信息....
hostname=10.0.0.51
port=3306
hostname=10.0.0.52
port=3306
hostname=10.0.0.53
port=3306
EOF
-- 编辑mha配置文件
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:23754) is running(0:PING_OK), master:10.0.0.51
-- 查看mha服务是否正确运行
排查启动异常方法:
1)查看日志信息,确认启动异常原因
/var/log/mha/app1/manager.log
2)执行查看命令,确认启动异常原因
masterha_check_ssh --conf=/etc/mha/app1.cnf
-- 确认SSH互信是否正常
masterha_check_repl --conf=/etc/mha/app1.cnf
-- 确认主从同步是否正常
</code></pre>
<h2 id="2mha高可用功能配置和原理说明">2.MHA高可用功能配置和原理说明</h2>
<pre><code class="language-bash">1)MHA高可用服务运行启动
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 &
--conf=/etc/mha/app1.cnf-- 配置文件没有存储在默认路径下,需要进行指定加载;需要利用自定义配置文件实现多个主从架构高可用
--remove_dead_master_conf -- 表示在配置文件中会将有故障的主节点配置删除,避免配置信息影响选主效率
--ignore_last_failover -- 表示可以让高可用服务出现异常后,快速启动
< /dev/null -- 表示程序运行过程中,忽略所有交互操作信息
PS:MHA实现高可用属于一次性高可用服务
2)MHA高可用主节点监控过程
mha会调用masterha_master_monitor监控主节点脚本 实现确认主库是否存活
应用监控用户(mha)登录连接主库,执行SQL语句 select user();
当发现监控用户无法连接主库或者无法向主库发送查询请求,都会触发故障转移操作
3)MHA会从其余节点中选择新主节点(选主过程)52 53 54 55 56 57
进行分组操作
alive 将活着的从节点划分到存活组中 52 53
latest数据量和主库基本一致的组 52 53
pref 指定接替主库角色节点信息组 (candidate_master=1)
dead 不会参数选主的角色组 54 (no_master=1/log_bin=0/检测主从数据差异量>100M)
根据不同策略选主
最优策略 先考虑 alive 其次考虑latest再其次考虑pref最后确认dead组 55 56
以上策略选择完,还有多个节点信息,根据节点顺序编号选择最终的主节点
次优选择 先考虑 alive 其次考虑latestdead组
以上策略选择完,还有多个节点信息,根据节点顺序编号选择最终的主节点
再次优选择 先考虑 alive 其次考虑pref dead组
以上策略选择完,还有多个节点信息,根据节点顺序编号选择最终的主节点
最后选主方法 先考虑 alive dead组
以上策略选择完,还有多个节点信息,根据节点顺序编号选择最终的主节点
4)MHA数据补偿操作过程
情况一:原有主库只是数据库服务异常,但是数据库系统环境正常(ssh连接管理)
ssh 连接主库 -- 到指定binlog目录中拉取日志 -- 从库中(选举后)-- 将主库binlog信息补充到从库中
情况二:原有主库系统崩溃,无法实现ssh连接管理
1)所有从库之间进行binlog信息对比 ssh连接所有从库
52 新主-- 53 binlog -- 54 binlog -- 55 binlog
1-15 1-9 1-15 1-10
2)借助远程日志备份服务器,将binlog日志信息拉取并补偿数据
必须搭建好原有备份日志服务/管理节点可以连接备份服务器拉取日志
mkdir -p /backup/binlog/10.0.0.51/ && cd /backup/binlog/10.0.0.51/
mysqlbinlog -R --host=10.0.0.51 --user=root --password=123456 --raw --stop-never binlog.000001 &
vim /etc/mha/app1.cnf
hostname=10.0.0.54
master_binlog_dir=/backup/binlog/10.0.0.51/
no_master=1
5) MHA会自动完成主从重建过程
52 新主 10.0.0.523306repl123456
管理其他从节点和新主建立连接
53 从库 stop slave; change master 10.0.0.523306 repl123456; start slave
54 从库 stop slave; change master 10.0.0.523306 repl123456; start slave
6) MHA实现VIP地址创建和实现地址漂移
ifconfig ens33:1 10.0.0.50/24-- 在主库中执行
上传脚本文件信息
vim /usr/local/bin/master_ip_failover
13 my $vip = '10.0.0.50/24';
14 my $key = '1';
15 my $ssh_start_vip = "/sbin/ifconfig ens33:$key $vip";
16 my $ssh_stop_vip = "/sbin/ifconfig ens33:$key down";
17 my $ssh_Bcast_arp= "/sbin/arping -I ens33 -c 3 -A 10.0.0.50";
-- 以上编写内容在mha管理节点操作
vim /etc/mha/app1.cnf
master_ip_failover_script=/usr/local/bin/master_ip_failover
7) MHA故障切换实现邮件报警功能
vim /usr/local/bin/send_report
28 my $smtp='smtp.qq.com';
29 my $mail_from='330882721@qq.com';
30 my $mail_user='330882721';
31 my $mail_pass='lshxuahtxuxfcaec';
32 #my $mail_to=['to1@qq.com','to2@qq.com',];
33 my $mail_to='330882721@qq.com';
vim /etc/mha/app1.cnf
report_script=/usr/local/bin/send_report
</code></pre>
<h3 id="mha额外配置">MHA额外配置</h3>
<pre><code class="language-sh">1)VIP地址漂移功能设置 /usr/local/bin/master_ip_failover mha服务加载
2)数据补偿功能设置 搭建binlog日志远程备份功能/可以拉取备份日志
3)实现MHA报警功能 /usr/local/bin/send_report mha服务加载
</code></pre>
<h3 id="mha高可用切换原理">MHA高可用切换原理</h3>
<pre><code class="language-bash">1)当MHA实现高可用监控后,会不断对主库发起探活测试,但发现主库不能连接或返回查询结果
2)当MHA发现主库异常后,会先举行新主角色选举过程
3)当新的主节点选择后,会将数据信息在新的主节点上进行补偿
4)在新的主节点补偿数据后,会实现新主节点和其余从节点之间主从关系重建
5)在原有主节点上会删除VIP地址,在新主节点上会生成VIP地址(VIP漂移)
6)所有前端业务都会访问新的主节点
7)会利用邮件报警脚本,实现MHA故障转移报警通知
</code></pre>
<h2 id="3mha高可用功能测试和修复">3.MHA高可用功能测试和修复</h2>
<pre><code class="language-bash">MHA切换功能测试
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 &
/etc/init.d/mysqld stop
-- 模拟主库异常
-- 检测VIP地址是否漂移 主库vip是否清理从库是否生成VIP
-- 检查主从关系是否重新建立show slave status\G获取新主库连接信息
-- 检查报警邮件信息是否收到QQ 其他邮箱
MHA切换修复过程:
步骤一:将原有主库恢复运行启动
/etc/init.d/mysqld start
-- 当主库无法正常恢复启动,可以重新建立新的数据库实例(重新加载备份数据 和新主库建立主从同步)
步骤二:在原有主库中做设置,实现和新主库建立主从同步
reset master;
CHANGE MASTER TO
MASTER_HOST='10.0.0.52',
MASTER_PORT=3306,
MASTER_USER='repl',
MASTER_PASSWORD='123456',
master_auto_position=1;
在新主库中做数据备份,在原主库中进行数据恢复
mysqldump -A --source-data >/backup/all-03-09-02.sql
scp -rp /backup/all-03-09-02.sql 10.0.0.51:/backup/
mysql </backup/all-03-09-02.sql
start slave;
步骤三:在MHA配置文件中,添加原主节点配置信息
vim /etc/mha/app1.cnf
hostname=10.0.0.51
port=3306
步骤四:恢复binlog日志远程备份功能
10.0.0.54
mkdir -p /backup/binlog/10.0.0.52/ && chown -R mysql.mysql /backup/binlog/10.0.0.52/
cd /backup/binlog/10.0.0.52/
mysqlbinlog -R --host=10.0.0.52 --user=root --password=123456 --raw --stop-never binlog.000001 &
步骤五:重新恢复MHA服务运行启动
vim /etc/mha/app1.cnf
hostname=10.0.0.54
master_binlog_dir=/backup/binlog/10.0.0.52/
no_master=1
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 &
</code></pre>
<h2 id="4mha切换主数据库角色到原有主库">4.MHA切换主数据库角色到原有主库</h2>
<pre><code class="language-bash">利用脚本文件实现角色手工切换转移 52(主) -主角色切换- 51(主)
步骤一:编写手工切换脚本信息,并加载手工切换脚本
vim /usr/local/bin/master_ip_online_change
21 my $vip = "10.0.0.50/24";
22 my $key = "1";
23 my $ssh_start_vip = "/sbin/ifconfig ens33:$key $vip";
24 my $ssh_stop_vip = "/sbin/ifconfig ens33:$key $vip down";
25 my $ssh_Bcast_arp= "/sbin/arping -I ens33 -c 3 -A 10.0.0.50/24";
vim /etc/mha/app1.cnf
master_ip_online_change_script=/usr/local/bin/master_ip_online_change
步骤二:实现手工切换主备角色信息
masterha_stop--conf=/etc/mha/app1.cnf
masterha_master_switch --conf=/etc/mha/app1.cnf --master_state=alive --new_master_host=10.0.0.51 --orig_master_is_new_slave --running_updates_limit=10000
--master_state=alive -- 表示在主节点正常运行状态,做主备切换
--new_master_host -- 表示将哪个节点切换成主节点
--orig_master_is_new_slav-- 表示让其余从节点和新主节点重新建立主从关系
--running_updates_limit -- 切换过程有异常超过时间设定,会撤销切换
FLUSH NO_WRITE_TO_BINLOG TABLES --在主节点做命令执行切换过程中禁止向主节点写入新的binlog信息
步骤三:重新恢复MHA服务运行
vim /etc/mha/app1.cnf
hostname=10.0.0.54
master_binlog_dir=/backup/binlog/10.0.0.51/
no_master=1
cd /backup/binlog/10.0.0.51/
mysqlbinlog -R --host=10.0.0.51 --user=root --password=123456 --raw --stop-never binlog.00000X &
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 &
</code></pre>
<h1 id="总结">总结</h1>
<pre><code class="language-sh">1)MHA高可用架构部署过程
环境准备(安装程序 主从同步 ssh互信设置) --> 编写配置文件,并启动mha服务 --> 额外功能设置(VIP漂移/数据补偿功能/报警功能设置)
2)MHA高可故障切换原理/高可用切换测试
3)MHA故障修复过程
-- 将故障节点修复后,可以重新加入到高可用集群中
-- 可以手工将原有主库角色恢复
</code></pre>
<h1 id="课程知识练习">课程知识练习</h1>
<pre><code class="language-bash">1.重新部署综合架构LNMP架构(wordpress) 在数据库应用上可以应用mysql数据库(构建为高可用架构)
2.测试主库故障,网站业务是否可以正常访问50x
</code></pre><br><br>
来源:https://www.cnblogs.com/jindongyan666/p/19694112
頁:
[1]