CentOS7如何搭建MySQL5.7高可用

数据库架构:一主两从

master:192.168.8.57

slave1:192.168.8.58

slave2:192.168.8.59

manager:192.168.8.60

MHA工具包:

mha4mysql-manager-0.58.tar.gz

mha4mysql-node-0.58.tar.gz

Manager工具包主要包括以下几个工具:

masterha_check_ssh 检查MHA的SSH配置状况

masterha_check_repl检查MySQL复制状况

masterha_manger启动MHA

masterha_check_status 检测当前MHA运行状态

masterha_master_monitor检测master是否宕机

masterha_master_switch控制故障转移(自动或者手动)

masterha_conf_host 添加或删除配置的服务器信息

Node工具包(这些工具通常由MHA Manager的脚本触发,无需人为操作)主要包括以下几个工具:

save_binary_logs 保存和复制master的二进制日志

apply_diff_relay_logs识别差异的中继日志事件并将其差异的事件应用于其他的slave

filter_mysqlbinlog去除不必要的ROLLBACK事件(MHA已不再使用这个工具)

purge_relay_logs 清除中继日志(不会阻塞SQL线程)

一、配置MySQL5.7

1.在配置文件添加,三台服务器一样,只需修改server-id和log-bin。

注意:binlog-do-db 和 replicate-ignore-db 设置必须相同。 MHA 在启动时候会检测过滤规则,如果过滤规则不同,MHA 不启动监控和故障转移,这里没有设置。

server-id=57log-bin=mysql-bingtid_mode=on#开启gtid,必须主从全开enforce_gtid_consistency=1log_slave_updates=1#开启半同步复制否则自动切换主从的时候会报主键错误plugin_load="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"loose_rpl_semi_sync_master_enabled=1loose_rpl_semi_sync_slave_enabled=1loose_rpl_semi_sync_master_timeout=5000

2.启动服务器,配置主从 (这里简写,百度很多)

MySQL5.7会默认加载validate_password 模块,是来控制密码长度和规则的,可以在配置文件里面关闭该模块 加上validate_password = off ,或者在mysql命令行执行set global validate_password_policy=0;来临时取消密码规则。

在三台服务器上配置复制用户和监控用户,三台服务器都要添加。

添加复制用户

grantreplicationslaveon*.*to'repl'@'192.168.8.%'identifiedby'mysql';

这里注意一定要用repl用户,否则后边会报找不到复制用户

加监控用户

grantallprivilegeson*.*to'root'@'192.168.8.%'identifiedby'mysql';

在slave1和slave2上执行

changemastertomaster_host='192.168.8.57',master_port=3306,master_user='repl',master_password='mysql',master_auto_position=1;

设置从服务器只读,不要在配置文件里写,重点!

set global read_only=1

二、配置MHA

1.安装依赖包(所有节点)

yuminstallperl-DBD-MySQLperl-Config-Tinyperl-Log-Dispatchperl-Parallel-ForkManagerperl-ExtUtils-CBuilderperl-ExtUtils-MakeMakerperl-CPAN

2.安装 manager

tarxfmha4mysql-manager-0.58.tar.gzcdmha4mysql-manager-0.58perlMakefile.PLmake&&makeinstall

安装node (四台服务器都安装)

tarxfmha4mysql-node-0.58.tar.gzcdmha4mysql-node-0.58perlMakefile.PLmake&&makeinstall

安装完成后会在/usr/local/bin目录下面生成相应的脚本,复制相关脚本到/usr/local/bin目录(manager 服务器执行)

cp-ra/root/mha4mysql-manager-0.57/samples/scripts/*/usr/local/bin

master_ip_failover

#自动切换时vip管理的脚本,不是必须,如果我们使用keepalived的,我们可以自己编写脚本完成对vip的管理,比如监控mysql,如果mysql异常,我们停止keepalived就行,这样vip就会自动漂移

master_ip_online_change

#在线切换时vip的管理,不是必须,同样可以可以自行编写简单的shell完成

power_manager

#故障发生后关闭主机的脚本,不是必须

send_report

#因故障切换后发送报警的脚本,不是必须,可自行编写简单的shell完成。

3.配置SSH登录无密码验证

master

ssh-keygen-trsassh-copy-id-i~/.ssh/id_rsa.pubroot@192.168.8.58ssh-copy-id-i~/.ssh/id_rsa.pubroot@192.168.8.59ssh-copy-id-i~/.ssh/id_rsa.pubroot@192.168.8.60

slave1

ssh-keygen-trsassh-copy-id-i~/.ssh/id_rsa.pubroot@192.168.8.57ssh-copy-id-i~/.ssh/id_rsa.pubroot@192.168.8.59ssh-copy-id-i~/.ssh/id_rsa.pubroot@192.168.8.60

slave2

ssh-keygen-trsassh-copy-id-i~/.ssh/id_rsa.pubroot@192.168.8.57ssh-copy-id-i~/.ssh/id_rsa.pubroot@192.168.8.58ssh-copy-id-i~/.ssh/id_rsa.pubroot@192.168.8.60

manager

ssh-keygen-trsassh-copy-id-i~/.ssh/id_rsa.pubroot@192.168.8.57ssh-copy-id-i~/.ssh/id_rsa.pubroot@192.168.8.58ssh-copy-id-i~/.ssh/id_rsa.pubroot@192.168.8.59

4.配置MHA

修改/usr/local/bin/master_ip_failover,这里使用脚本管理vip

将如下代码全部复制进去,根据自己的实际情况进行修改

#!/usr/bin/envperl#Copyright(C)2011DeNACo.,Ltd.##Thisprogramisfreesoftware;youcanredistributeitand/ormodify#itunderthetermsoftheGNUGeneralPublicLicenseaspublishedby#theFreeSoftwareFoundation;eitherversion2oftheLicense,or#(atyouroption)anylaterversion.##Thisprogramisdistributedinthehopethatitwillbeuseful,#butWITHOUTANYWARRANTY;withouteventheimpliedwarrantyof#MERCHANTABILITYorFITNESSFORAPARTICULARPURPOSE.Seethe#GNUGeneralPublicLicenseformoredetails.##YoushouldhavereceivedacopyoftheGNUGeneralPublicLicense#alongwiththisprogram;ifnot,writetotheFreeSoftware#Foundation,Inc.,#51FranklinStreet,FifthFloor,Boston,MA02110-1301USA##Note:Thisisasamplescriptandisnotcomplete.Modifythescriptbasedonyourenvironment.usestrict;usewarningsFATAL=>'all';useGetopt::Long;useMHA::DBHelper;my($command,$ssh_user,$orig_master_host,$orig_master_ip,$orig_master_port,$new_master_host,$new_master_ip,$new_master_port,$new_master_user,$new_master_password);my$vip='192.168.8.88/24';my$key='1';my$ssh_start_vip="/sbin/ifconfigenp0s3:$key$vip";my$ssh_stop_vip="/sbin/ifconfigenp0s3:$keydown";GetOptions('command=s'=>\$command,'ssh_user=s'=>\$ssh_user,'orig_master_host=s'=>\$orig_master_host,'orig_master_ip=s'=>\$orig_master_ip,'orig_master_port=i'=>\$orig_master_port,'new_master_host=s'=>\$new_master_host,'new_master_ip=s'=>\$new_master_ip,'new_master_port=i'=>\$new_master_port,'new_master_user=s'=>\$new_master_user,'new_master_password=s'=>\$new_master_password,);exit&main();submain{if($commandeq"stop"||$commandeq"stopssh"){#$orig_master_host,$orig_master_ip,$orig_master_portarepassed.#Ifyoumanagemasteripaddressatglobalcatalogdatabase,#invalidateorig_master_iphere.my$exit_code=1;eval{#updatingglobalcatalog,etc$exit_code=0;};if($@){warn"GotError:$@\n";exit$exit_code;}exit$exit_code;}elsif($commandeq"start"){#allargumentsarepassed.#Ifyoumanagemasteripaddressatglobalcatalogdatabase,#activatenew_master_iphere.#Youcanalsograntwriteaccess(createuser,setread_only=0,etc)here.my$exit_code=10;eval{my$new_master_handler=newMHA::DBHelper();#args:hostname,port,user,password,raise_error_or_not$new_master_handler->connect($new_master_ip,$new_master_port,$new_master_user,$new_master_password,1);##Setread_only=0onthenewmaster$new_master_handler->disable_log_bin_local();print"Setread_only=0onthenewmaster.\n";$new_master_handler->disable_read_only();##Creatinganappuseronthenewmasterprint"Creatingappuseronthenewmaster..\n";FIXME_xxx_create_user($new_master_handler->{dbh});$new_master_handler->enable_log_bin_local();$new_master_handler->disconnect();##Updatemasteriponthecatalogdatabase,etc#FIXME_xxx;$exit_code=0;};if($@){warn$@;#Ifyouwanttocontinuefailover,exit10.exit$exit_code;}exit$exit_code;}elsif($commandeq"status"){#donothingexit0;}else{&usage();exit1;}}subusage{print"Usage:master_ip_failover--command=start|stop|stopssh|status--orig_master_host=host--orig_master_ip=ip--orig_master_port=port--new_master_host=host--new_master_ip=ip--new_master_port=port\n";}

5.修改MHA配置文件

mkdir-p/etc/masterhacpmha4mysql-manager-0.58/samples/conf/app1.cnf/etc/masterha/
[serverdefault]manager_workdir=/var/log/masterha/app1manager_log=/var/log/masterha/app1/manager.logmaster_binlog_dir=/mysql/datamaster_ip_failover_script=/usr/local/bin/master_ip_failovermaster_ip_online_change_script=/usr/local/bin/master_ip_online_changepassword=mysqluser=rootping_interval=1remote_workdir=/tmprepl_password=mysqlrepl_user=replreport_script=/usr/local/bin/send_reportsecondary_check_script=/usr/local/bin/masterha_secondary_check-s192.168.8.58-s192.168.8.59shutdown_script=""ssh_user=root[server1]hostname=192.168.8.57port=3306[server2]hostname=192.168.8.58port=3306candidate_master=1check_repl_delay=0[server3]hostname=192.168.8.59port=3306

6.测试MHA

测试ssh的连接情况

masterha_check_ssh–conf=/etc/masterha/app1.cnf

测试mysq集群的连接情况

masterha_check_repl–conf=/etc/masterha/app1.cnf

检查MHA的状态

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

启动MHA

nohupmasterha_manager--conf=/etc/masterha/app1.cnf--remove_dead_master_conf--ignore_last_failover</dev/null>/var/log/masterha/app1/manager.log2>&1&

–remove_dead_master_conf 该参数代表当发生主从切换后,老的主库的ip将会从配置文件中移除。

–manger_log 日志存放位置

–ignore_last_failover 在缺省情况下,如果MHA检测到连续发生宕机,且两次宕机间隔不足8小时的话,则不会进行Failover,之所以这样限制是为了避免ping-pong效应。该参数代表忽略上次MHA触发切换产生的文件,默认情况下,MHA发生切换后会在日志目录,也就是上面我设置的/data产生app1.failover.complete文件,下次再次切换的时候如果发现该目录下存在该文件将不允许触发切换,除非在第一次切换后收到删除该文件,为了方便,这里设置为–ignore_last_failover。

为了方便启停MHA,创建以下脚本

catmasterha_start.shnohupmasterha_manager--conf=/etc/masterha/app1.cnf--remove_dead_master_conf--ignore_last_failover</dev/null>/var/log/masterha/app1/manager.log2>&1&catmasterha_stop.shmasterha_stop--conf=/etc/masterha/app1.cnf

7.检查MHA的启动状态

tail-f/var/log/masterha/app1/manager.log

如果最后一行是

[info]Ping(SELECT)succeeded,waitinguntilMySQLdoesn’trespond..

表明启动成功

8.master添加vip

在master上执行

/sbin/ifconfigenp0s3:1192.168.8.88/24
[ifconfigenp0s3:flags=4163<UP,BROADCAST,RUNNING,MULTICAST>mtu1500inet192.168.8.57netmask255.255.255.0broadcast192.168.8.255inet6fe80::5198:593b:cdc5:1f90prefixlen64scopeid0x20<link>ether08:00:27:c0:45:0dtxqueuelen1000(Ethernet)RXpackets72386bytes9442794(9.0MiB)RXerrors0dropped0overruns0frame0TXpackets24221bytes2963104(2.8MiB)TXerrors0dropped0overruns0carrier0collisions0enp0s3:1:flags=4163<UP,BROADCAST,RUNNING,MULTICAST>mtu1500inet192.168.8.88netmask255.255.255.0broadcast192.168.8.255ether08:00:27:c0:45:0dtxqueuelen1000(Ethernet)lo:flags=73<UP,LOOPBACK,RUNNING>mtu65536inet127.0.0.1netmask255.0.0.0inet6::1prefixlen128scopeid0x10<host>looptxqueuelen1000(LocalLoopback)RXpackets84bytes9492(9.2KiB)RXerrors0dropped0overruns0frame0TXpackets84bytes9492(9.2KiB)TXerrors0dropped0overruns0carrier0collisions0virbr0:flags=4099<UP,BROADCAST,MULTICAST>mtu1500inet192.168.122.1netmask255.255.255.0broadcast192.168.122.255ether52:54:00:f4:55:bbtxqueuelen1000(Ethernet)RXpackets0bytes0(0.0B)RXerrors0dropped0overruns0frame0TXpackets0bytes0(0.0B)TXerrors0dropped0overruns0carrier0collisions0
MySQL centos7

上一篇:MySQL5.6中sql_mode常用值的示例分析

下一篇:MySQL中用户与授权管理的示例分析
Copyright © 2002-2019 测速网 https://www.inhv.cn/ 皖ICP备2023010105号 城市 地区 街道
温馨提示:部分文章图片数据来源与网络,仅供参考!版权归原作者所有,如有侵权请联系删除!
热门搜索