网页设计书籍推荐,网站优化怎么做的,张槎建网站,潍坊住房公积金目录 一、MHA概念
1、MHA的组成 2、MHA的特点
3、主从复制有多少种复制方法
二、搭建MySqlMHA部署
1#xff0e;Master、Slave1、Slave2 节点上安装 mysql
2#xff0e;修改 Master、Slave1、Slave2 节点的 Mysql主配置文件/etc/my.cnf
3. 配置 mysql 一主两从
4、安…目录 一、MHA概念
1、MHA的组成 2、MHA的特点
3、主从复制有多少种复制方法
二、搭建MySqlMHA部署
1Master、Slave1、Slave2 节点上安装 mysql
2修改 Master、Slave1、Slave2 节点的 Mysql主配置文件/etc/my.cnf
3. 配置 mysql 一主两从
4、安装MHA所有组件 4.1 安装 MHA 软件
4.2 在所有服务器上配置无密码认证
4.3 在manager节点上配置MHA
编辑
4.4 第一次配置需要在master节点上手动开启虚拟ip
编辑
编辑
4.5 在manager中间件上测试ssh无密码认证
编辑
4.6 在manager中间件测试mysql主从连接情况
4.7 在manager节点上启动MHA
三、故障模拟
四、故障修复
1、修复master
编辑
2、修复主从
2.1 在现主库服务器 slave1(192.168.247.21) 查看二进制文件和同步点
2.2 在原主库服务器master192.168.247.20执行同步操作
2.3 在 manager节点上修改配置文件app1.cnf再把这个记录添加进去因为它检测掉失效时候会自动消失
2.4 在 manager 节点上启动 MHA
五、总结
1、mha
2、mha故障问题 一、MHA概念
MHAMaster High Availability是一套优秀的Mysql高可用环境下故障切换和主从复制的软件。 MHA的出现就是解决Mysql单点的问题。 Mysql故障切换过程中MHA能做到0-30秒内自动完成故障切换操作。 MHA能在故障切换的过程中最大程度受伤保证数据的一致性以达到真正意义上的高可用。
1、MHA的组成
MHA Node数据节点
MHA Node运行在每台Mysql服务器上
MHA Manager管理节点
MHA Manager 可以单独部署在一台独立的机器上管理多个master-slave集群也可以部署在一台slave节点上。MHA Manager 会定时探测集群中的master节点当master出现故障时它可以自动将最新数据的slave 提升为新的master然后将所有其他的slave重新指向新的master整个故障转移过程对应用程序完全透明。
2、MHA的特点
自动故障切换过程中 MHA试图从宕机的主服务器上保存二进制日志最大程度的保证数据不丢失。使用半同步复制 可以大大降低数据丢失的风险如果只有一个slave已经收到了最新的二进制日志MHA可以将最新的二进制日志应用于其它所有的slave服务器上因此可以保证所有节点的数据一致性。目前MHA支持一主多从架构最少三台服务即一主两从
3、主从复制有多少种复制方法
总共有三种同步、半同步、异步
异步 在主从架构中加入当客户端发送了一条update语句主服务器上I/O 线程将二进制日志写入到binlog文件之后就返回客户端结构不管从服务器是否已经同步到了自己的relay-log中继日志中。
优点性能是最好的。缺点主服务器宕机容易造成数据不一致mysql中默认的就是异步复制。
同步 也称全同步当主服务器完成更新并且同步到所有从服务器才会返回成功结果。
优点安全缺点效率低影响性能。
半同步 将两个方法折中当主服务器完成更新至少有一个从服务器接收到并完成更新主服务器就返回成功。
二、搭建MySqlMHA部署
MHA高可用是基于主从复制的基础上进行安装部署一台新的MHKmanager服务器该服务器用来监控master服务器当master服务器出现故障时它可以自动将最新的数据的slave提升为master或者可指定直接新的master。然后其它的slave重新指向新的master。
实验环境
主机名操作系统IP地址安装包/软件managercentos7-5192.168.247.23MHAnode组件、MHAmanager组件mastercentos7-5192.168.247.20mysql-boost-5.7.20.tar.gz、MHAnode组件slave1centos7-5192.168.247.21mysql-boost-5.7.20.tar.gz、MHAnode组件slave2centos7-5192.168.247.22mysql-boost-5.7.20.tar.gz、MHAnode组件
1Master、Slave1、Slave2 节点上安装 mysql 2修改 Master、Slave1、Slave2 节点的 Mysql主配置文件/etc/my.cnf
##Master 节点##
vim /etc/my.cnf
[mysqld]
server-id 1
log_bin master-bin
log-slave-updates truesystemctl restart mysqldln -s /usr/local/mysql/bin/mysql /usr/sbin
ln -s /usr/local/mysql/bin/mysqlbinlog /usr/sbin##slave1节点##
vim /etc/my.cnf
[mysqld]
server-id 2 (另一台可配置server-id 3)
log_bin master-bin
relay-log relay-log-bin
relay-log-index slave-relay-bin.indexsystemctl restart mysqldln -s /usr/local/mysql/bin/mysql /usr/sbin/
ln -s /usr/local/mysql/bin/mysqlbinlog /usr/sbin/###Slave2 节点##
server-id 3
relay-log relay-log-bin
relay-log-index slave-relay-bin.indexsystemctl restart mysqldln -s /usr/local/mysql/bin/mysql /usr/sbin/
ln -s /usr/local/mysql/bin/mysqlbinlog /usr/sbin/3. 配置 mysql 一主两从
1所有数据库节点进行 mysql 授权
mysql -uroot -p
grant replication slave on *.* to myslave192.168.247.% identified by 123456;
##允许myslave用户在192.168.247.0网段使用密码123456登录到本机grant all privileges on *.* to mha192.168.247.% identified by manager;
##允许mha用户在192.168.247.0网段使用密码manager登录到本机grant all privileges on *.* to mhamysql1 identified by manager;
grant all privileges on *.* to mhamysql2 identified by manager;
grant all privileges on *.* to mhamysql3 identified by manager;
##防止上面用户登录不上再加三条授权主机名登录的用户 ##在Master节点查看二进制文件和同步点##
show master statys;
#查看master节点上面的文件名和偏移量。每台机都不一样##在slave1和slave2节点执行同步操作##
change master to master_host192.168.247.20,master_usermyslave,master_password123456,master_log_filemaster-bin.000003,master_log_pos4209;
##执行change指定master服务器登录的myslave用户和密码以及二进制文件名和偏移量start slave;
##启动主从同步show slave status\G
#查看状态 ##在slave1和slave2节点执行为只读模式##
set global read_only1;
#设置只读模式##在 Master 主库插入条数据测试是否同步## 4、安装MHA所有组件
4.1 安装 MHA 软件
##所有服务器都安装MHA依赖环境首先安装epel源##
yum install epel-release --nogpgcheck -y
#安装在线源yum install -y perl-DBD-MySQL \
perl-Config-Tiny \
perl-Log-Dispatch \
perl-Parallel-ForkManager \
perl-ExtUtils-CBuilder \
perl-ExtUtils-MakeMaker \
perl-CPAN
#安装依赖环境将node组件包放在各个服务器的/opt目录下
cd /opt
tar zxvf mha4mysql-node-0.57.tar.gz
#将node安装包解压当当前目录cd mha4mysql-node-0.57
#进入目录perl Makefile.PL
#进行编译make make install
#编译安装##在manager中间件服务器上安装manager组件##
cd /opt
tar zxvf mha4mysql-manager-0.57.tar.gz
#将安装包进行解压cd mha4mysql-manager-0.57
#进入解压后的目录perl Makefile.PL
#进行编译make make install
#安装manager组件安装在/usr/local/bin 下面会生成几个工具主要包括以下几个
工具描述masterha_check_ssh检查MHA的SSH配置状况masterha_check_repl检查MYSQL复制状况masterha_manger启动manager的脚本master_check_status检测当前MHA运行状态masterha_master_monitor检测master是否宕机masterha_master_switch控制故障转移自动或手动masterha_conf_host添加或删除配置的server信息masterha_stop关闭manager
node组件安装在/usr/local/bin 下面会生成几个脚本主要包括以下几个这些工具通常由MHAmabager的脚本触发无需认为操作主要如下
脚本工具描述save_binary_logs保存和复制master的二进制日志apply_diff_relay_logs识别差异的中继日志事件并将其差异的时间应用于其它的slavefilter_mysqlbinlog去除不必要的ROLLBACK事件MHA已不再使用的工具purge_relay_logs清除中继日志不会阻塞sql线程
4.2 在所有服务器上配置无密码认证
##在manager中间件上配置到所有数据节点的无密码认证##
ssh-keygen -t rsa #一路按回车键
ssh-copy-id 192.168.247.20
ssh-copy-id 192.168.247.21
ssh-copy-id 192.168.247.22##在master节点上配置到数据库节点slave1和slave2的无密码认证##
ssh-keygen -t rsa
ssh-copy-id 196.168.247.21
ssh-copy-id 196.168.247.22##在slave1节点上配置到所有数据库节点master和slave2的无密码认证##
ssh-keygen -t rsa
ssh-copy-id 196.168.247.20
ssh-copy-id 196.168.247.22##在slave2节点上配置到所有数据节点master和salve1的无密码认证##
ssh-key -t rsa
ssh-copy-id 192.168.247.20
ssh-copy-id 192.168.247.214.3 在manager节点上配置MHA
##在 manager 节点上复制相关脚本到/usr/local/bin 目录##
cp -rp /opt/mha4mysql-manager-0.57/samples/scripts/ /usr/local/bin/
#复制相关脚本到/usr/local/bin中拷贝后会有四个执行文件
脚本文件描述master_ip_failover自动切换时VIP管理的脚本master_ip_online_change在线切换时vip的管理power_manager故障发生后关闭主机的脚本send_report因故障切换后发送报警的脚本
##复制自动切换vip管理的脚本到/usr/local/bin/目录下##
cp /usr/local/bin/scripts/master_ip_failover /usr/local/bin
#复制上述的自动切换时VIP管理的脚本到/usr/local/bin目录这里使用master_ip_failover脚本来管理VIP和故障切换##修改管理脚本的内容清空原有脚本##
vim /usr/local/bin/master_ip_failover #清空以前的添加内容如下记得修改ip地址#!/usr/bin/env perl
use strict;
use warnings FATAL all;use Getopt::Long;my (
$command, $ssh_user, $orig_master_host, $orig_master_ip,
$orig_master_port, $new_master_host, $new_master_ip, $new_master_port
);
#############################添加内容部分#########################################
my $vip 192.168.247.200; #指定vip的地址
my $brdc 192.168.247.255; #指定vip的广播地址
my $ifdev ens33; #指定vip绑定的网卡
my $key 1; #指定vip绑定的虚拟网卡序列号
my $ssh_start_vip /sbin/ifconfig ens33:$key $vip; #代表此变量值为ifconfig ens33:1 192.168.247.200
my $ssh_stop_vip /sbin/ifconfig ens33:$key down; #代表此变量值为ifconfig ens33:1 192.168.247.200 down
my $exit_code 0; #指定退出状态码为0
#my $ssh_start_vip /usr/sbin/ip addr add $vip/24 brd $brdc dev $ifdev label $ifdev:$key;/usr/sbin/arping -q -A -c 1 -I $ifdev $vip;iptables -F;;
#my $ssh_stop_vip /usr/sbin/ip addr del $vip/24 dev $ifdev label $ifdev:$key;
##################################################################################
GetOptions(
commands \$command,
ssh_users \$ssh_user,
orig_master_hosts \$orig_master_host,
orig_master_ips \$orig_master_ip,
orig_master_porti \$orig_master_port,
new_master_hosts \$new_master_host,
new_master_ips \$new_master_ip,
new_master_porti \$new_master_port,
);exit main();sub main {print \n\nIN SCRIPT TEST$ssh_stop_vip$ssh_start_vip\n\n;if ( $command eq stop || $command eq stopssh ) {my $exit_code 1;
eval {
print Disabling the VIP on old master: $orig_master_host \n;
stop_vip();
$exit_code 0;
};
if ($) {
warn Got Error: $\n;
exit $exit_code;
}
exit $exit_code;
}
elsif ( $command eq start ) {my $exit_code 10;
eval {
print Enabling the VIP - $vip on the new master - $new_master_host \n;
start_vip();
$exit_code 0;
};
if ($) {
warn $;
exit $exit_code;
}
exit $exit_code;
}
elsif ( $command eq status ) {
print Checking the Status of the script.. OK \n;
exit 0;
}
else {
usage();
exit 1;
}
}
sub start_vip() {
ssh $ssh_user\$new_master_host \ $ssh_start_vip \;
}
## A simple system call that disable the VIP on the old_master
sub stop_vip() {
ssh $ssh_user\$orig_master_host \ $ssh_stop_vip \;
}sub usage {
print
Usage: master_ip_failover --commandstart|stop|stopssh|status --orig_master_hosthost --orig_master_ipip --orig_master_portport --new_master_hosthost --new_master_ipip --new_master_portport\n;
}##创建MHA软件目录并拷贝配置文件这里使用app1.cnf配置文件来管理mysql节点服务器##
mkdir /etc/masterhacp /opt/mha4mysql-manager-0.57/samples/conf/app1.cnf /etc/masterha/vim /etc/masterha/app1.cnf #(清空以前的内容添加内容如下)[server default]
manager_log/var/log/masterha/app1/manager.log #manager日志
manager_workdir/var/log/masterha/app1 #manager工作目录
master_binlog_dir/usr/local/mysql/data/ #master保存binlog的位置这里的路径要与master里配置的binlog的路径一致以便MHA能找到
master_ip_failover_script/usr/local/bin/master_ip_failover #设置自动failover时候的切换脚本也就是上面的那个脚本
master_ip_online_change_script/usr/local/bin/master_ip_online_change #设置手动切换时候的切换脚本
passwordmanager #设置mysql中root用户的密码这个密码是前文中创建监控用户的那个密码
ping_interval1 #设置监控主库发送ping包的时间间隔默认是3秒尝试三次没有回应的时候自动进行failover
remote_workdir/tmp #设置远端mysql在发生切换时binlog的保存位置
repl_password123456 #设置复制用户的密码
repl_usermyslave #设置复制用户的用户
report_script/usr/local/send_report #设置发生切换后发送的报警的脚本
secondary_check_script/usr/local/bin/masterha_secondary_check -s 192.168.247.21 -s 192.168.247.22 #指定检查的从服务器IP地址
shutdown_script #设置故障发生后关闭故障主机脚本该脚本的主要作用是关闭主机防止发生脑裂,这里没有使用
ssh_userroot #设置ssh的登录用户名
usermha #设置监控用户root[server1]
hostname192.168.247.20
port3306[server2]
hostname192.168.247.21
port3306
candidate_master1
#设置为候选master设置该参数以后发生主从切换以后将会将此从库提升为主库即使这个从库不是集群中最新的slavecheck_repl_delay0
#默认情况下如果一个slave落后master 超过100M的relay logs的话MHA将不会选择该slave作为一个新的master 因为对于这个slave的恢复需要花费很长时间通过设置check_repl_delay0MHA触发切换在选择一个新的master的时候将会忽略复制延时这个参数对于设置了candidate_master1的主机非常有用因为这个候选主在切换的过程中一定是新的master[server3]
hostname192.168.247.22
port33064.4 第一次配置需要在master节点上手动开启虚拟ip
/sbin/ifconfig ens33:1 192.168.247.200/24
#手动开启虚拟ip4.5 在manager中间件上测试ssh无密码认证
##如果正常最后会输出 successfully##
masterha_check_ssh -conf/etc/masterha/app1.cnf
#测试ssh无密码认证4.6 在manager中间件测试mysql主从连接情况
##最后出现 MySQL Replication Health is OK 字样说明正常##
masterha_check_repl -conf/etc/masterha/masterha/app1.cnf
#测试mysql主从连接情况#注意:如果出现问题需要将slave1和salve2节点服务器上面的[mysq]中的字符集UTF8一行注释掉开启二进制文件。4.7 在manager节点上启动MHA
nohup masterha_manager --conf/etc/masterha/app1.cnf --remove_dead_master_conf --ignore_last_failover /dev/null /var/log/masterha/app1/manager.log 21
#启动MHA--remove_dead_master_conf该参数代表当发生主从切换后老的主库的 ip 将会从配置文件中移除。
--manger_log日志存放位置。
--ignore_last_failover在缺省情况下如果 MHA 检测到连续发生宕机且两次宕机间隔不足 8 小时的话则不会进行 Failover 之所以这样限制是为了避免 ping-pong 效应。该参数代表忽略上次 MHA 触发切换产生的文件默认情况下MHA 发生切换后会在日志记录也就是上面设置的日志app1.failover.complete文件下次再次切换的时候如果发现该目录下存在该文件将不允许触发切换除非在第一次切换后收到删除该文件为了方便这里设置为--ignore_last_failover。##查看 MHA 状态可以看到当前的 master 是 master 节点##
masterha_check_status --conf/etc/masterha/app1.cnf##查看 MHA 日志##
cat /var/log/masterha/app1/manager.log | grep current master##查看master的VIP地址## 若要关闭 manager 服务可以使用如下命令。
masterha_stop --conf/etc/masterha/app1.cnf
或者可以直接采用 kill 进程 ID 的方式关闭三、故障模拟
在manager节点上监控观察日志记录
tail -f /var/log/masterha/app1/manager.log在master节点上停止mysql服务
systemctl stop mysql#正常自动切换一次后MHA 进程会退出。HMA 会自动修改 app1.cnf 文件内容将宕机的 master 节点删除。查看 slave1 是否接管 VIP 查看manager中间件的日志信息 故障切换备选主库的算法 1一般判断从库的是从position/GTID判断优劣数据有差异最接近于master的slave成为备选主。 2数据一致的情况下按照配置文件顺序选择备选主库。 3设定有权重candidate_master1按照权重强制指定备选主。 1默认情况下如果一个slave落后master 100M的relay logs的话即使有权重也会失效。 2如果check_repl_delay0的话即使落后很多日志也强制选择其为备选主。
四、故障修复
1、修复master
systemctl restart mysqld
#开启原master的MySQL数据库 2、修复主从
2.1 在现主库服务器 slave1(192.168.247.21) 查看二进制文件和同步点
show master status; 2.2 在原主库服务器master192.168.247.20执行同步操作
change master to master_host192.168.147.21,master_usermyslave,master_password123456,master_log_filemaster-bin.000002,master_log_pos4209;
#添加同步新的masterstart slave;
#开始同步 2.3 在 manager节点上修改配置文件app1.cnf再把这个记录添加进去因为它检测掉失效时候会自动消失 2.4 在 manager 节点上启动 MHA
masterha_stop --conf/etc/masterha/app1.cnf
#停止MHAnohup masterha_manager --conf/etc/masterha/app1.cnf --remove_dead_master_conf --ignore_last_failover /dev/null /var/log/masterha/app1/manager.log 21
#启动MHAmasterha_check_status --conf/etc/masterha/app1.cnf#查看MHA五、总结
1、mha
① 作用mysql的高可用 故障切换
② 核心部分MHA组件
manager 主要的功能做MHA 启动、关闭管理和检测mysql各种健康状态node 在发生故障时尽可能的保存二进制日志并且实现故障切换VIP地址飘逸
③ MHA需要配置的文件2个:
master ip failover脚本文件 命令工具 定义的是基于VIP的检测和故障转移 VIP从master-----新的 masterapp1.conf配置文件 mha的主要配置文件主要定义了mha的工作目录、日志。mysql二进制日志位置使用mha的登录mysql的用户、密码使用从服务器身份同步master的账号、密码 五个
④ 故障切换mha会做哪些动作
1mha会多次尝试检测master的存活状态
2mha会多次尝试、尽可能的保存master的二进制日志
3mha会根据app1.cnf中的配置部分进行从服务器------》 主服务器的位置
4mha最后会将master的VIP地址切换到从服务器的位置
5mha再选择完新的master之后会在其余的salve上执行change master操作指向性的master, 来保证Mysql的集群的健康性
2、mha故障问题
①软连接必须要做
②MySQL配置文件建议将中文字符集注释掉
③ssh免密钥交互必须要做
④mha的内存建议4G否则可能导致vip地址漂移无效
⑤app1.cnf配置文件中MySQL二进制文件位置一定要指正确