MySQL中mycat与mha应用

目录

一.Mycat代理服务器

1.Mycat应用场景

2.mycat安装目录结构说明

3.Mycat的常用配置文件

4.Mycat日志

5.mycat 实现读写分离

二.MySQL高可用

1.原理过程

2.MHA软件

3.实现MHA


一.Mycat代理服务器

1.Mycat应用场景

  • Mycat适用的场景很丰富,以下是几个典型的应用场景

    • 单纯的读写分离,此时配置最为简单,支持读写分离,主从切换

    • 分表分库,对于超过1000万的表进行分片,最大支持1000亿的单表分片

    • 多租户应用,每个应用一个库,但应用程序只连接Mycat,从而不改造程序本身,实现多租户化报表系统,借助于Mycat的分表能力,处理大规模报表的统计

    • 替代Hbase,分析大数据,作为海量数据实时查询的一种简单有效方案,比如100亿条频繁查询的记录需要在3秒内查询出来结果,除了基于主键的查询,还可能存在范围查询或其他属性查询,此时Mycat可能是最简单有效的选择

  • Mycat长期路线图

    • 强化分布式数据库中间件的方面的功能,使之具备丰富的插件、强大的数据库智能优化功能、全面的系统监控能力、以及方便的数据运维工具,实现在线数据扩容、迁移等高级功能进一步挺进大数据计算领域,深度结合Spark Stream和Storm等分布式实时流引擎,能够完成快速的巨表关联、排序、分组聚合等 OLAP方向的能力,并集成一些热门常用的实时分析算法,让工程师以及DBA们更容易用Mycat实现一些高级数据分析处理功能不断强化Mycat开源社区的技术水平,吸引更多的IT技术专家,使得Mycat社区成为中国的Apache,并将Mycat推到Apache基金会,成为国内顶尖开源项目,最终能够让一部分志愿者成为专职的Mycat开发者,荣耀跟实力一起提升

mycat 可以简单概括为:

  • 一个彻底开源的,面向企业应用开发的大数据库集群

  • 支持事务、ACID、可以替代MySQL的加强版数据库

  • 一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群

  • 一个融合内存缓存技术、NoSQL技术、HDFS大数据的新型SQL Server

  • 结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品

  • 一个新颖的数据库中间件产品

2.mycat安装目录结构说明

  • bin :mycat命令,启动、重启、停止等运行目录

  • catlet: catlet为Mycat的一个扩展功能

  • conf  :mycat 配置信息,重点关注

  • lib:mycat引用的jar包,Mycat是java开发的

  • logs日志文件,包括Mycat启动的日志和运行的日志

  • version.txt :mycat版本说明

3.Mycat的常用配置文件

Mycat的配置文件都在conf目录里面,这里介绍几个常用的文件:

  • server.xml :Mycat软件本身相关的配置文件,设置账号、参数等

  • schema.xml:Mycat对应的物理数据库和数据库表的配置,读写分离、高可用、分布式策略定制、节点控制

  • rule.xml:Mycat分片(分库分表)规则配置文件,记录分片规则列表、使用方法等

4.Mycat日志

Mycat的日志文件都在logs目录里面

  • wrapper.log :mycat启动日志

  • mycat.log :mycat详细工作日志

5.mycat 实现读写分离

(1)环境准备

mycat服务器上不能装mysql

服务器地址
master服务器192.168.240.11
slave1服务器192.168.240.13
mycat服务器192.168.240.12
客户机192.168.240.14

(2)初始化环境

#每台服务器都设置关闭防火墙关闭selinux
systemctl stop  firewalld
systemctl disable --now firewalld
setenforce 0

(3)部署主从复制

主服务器配置

vim /etc/my.cnf
server-id=11
log-bin=/data/mysql/mysql-bin
mkdir /data/mysql  -p
chown  mysql.mysql  /data/  -R
systemctl restart mysqld
进入数据库
select @@server_id;
#可以查看serverid  默认都是1
show master status;
#查看二进制日志位置
grant replication slave on *.* to test@'192.168.240.%' identified by 'Admin@123';
#建立复制用户
show processlist;
#查看线程

从服务器配置

vim  /etc/my.cnf
#修改文件
[mysqld]
server_id=101
log-bin=/data/mysql/mysql-bin
relay-log=relay-log-bin
relay-log-index=slave-relay-bin.index
#read only  #只读可加
[root@localhost ~]#mkdir /data/mysql/   -p
#建立文件夹
[root@localhost ~]#chown mysql.mysql /data/ -R
#注意修改权限
[root@localhost ~]#systemctl restart mysqld
进入数据库
help change master toCHANGE MASTER TOMASTER_HOST='192.168.240.11',MASTER_USER='test',MASTER_PASSWORD='Admin@123',MASTER_PORT=3306,MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=154;Seconds_Behind_Master: NULL    #目前数据差start slave;
#开启线程,开启主从复制
show slave status\G;
#查看设置的状态

(4)在主服务器上导入hellodb库文件

source  /opt/hellodb_innodb.sql

(5)安装mycat (192.168.240.12)

将mycat的rpm安装包拖入/opt目录下,创建文件夹/apps
mkdir  /apps
tar zxvf Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz -C /apps/
cd /apps
echo 'PATH=/apps/mycat/bin:$PATH' > /etc/profile.d/mycat.sh
#设置变量环境
source /etc/profile.d/mycat.sh
启动mycat
mycat start
mycat status

(6)客户端连接数据库

#这里密码初始为123456   需要加端口
[root@localhost bin]#mysql -uroot -p123456 -h 192.168.240.12 -P8066

(7)修改mycat配置文件

/apps/mycat/conf/server.xml

备份配置文件
cp /apps/mycat/conf/server.xml  /apps/mycat/conf/server.xml.bak
vim /apps/mycat/conf/server.xml
#去掉44行行注释,对应的在51行行末注释,删除50行行末注释,5 * 60 * 1000L; //连接空>    闲检查
#修改45行端口号为3306
45 <property name="serverPort">3306</property>
#配置Mycat的连接信息(账号密码),在110 和111行, 可以修改user    用户配置节点
name    逻辑用户名,客户端登录MyCAT的用户名,也就是客户端用来连接Mycat的用户名。
password     客户端登录MyCAT的密码
schemas      数据库名,这里会和schema.xml中的配置关联,可配置多个,多个用逗号分开,例如:db1,db2
privileges   配置用户针对表的增删改查的权限
readOnly mycat   逻辑库所具有的权限。true为只读,false为读写都有,默认为false##注意
1.#server.xml文件里登录mycat的用户名和密码可以任意定义,这个账号和密码是为客户机登录mycat时使用的账号信息
2.#逻辑库名(如上面的TESTDB,也就是登录mycat后显示的库名,切换这个库之后,显示的就是代理的真实mysql数据库的表)要在schema.xml里面也定义,否则会导致mycat服务启动失败!这里只定义了一个标签,所以把多余的都注释了。如果定义多个标签,即设置多个连接mycat的用户名和密码,那么就需要在schema.xml文件中定义多个对应的库!

修改配置文件/apps/mycat/conf/schema.xml

[root@localhost ~]#vim  /apps/mycat/conf/schema.xml
#删除所有内容,重新写入以下
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/"><schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">#schema标签:数据库设置,此数据库为逻辑数据库,name与server.xml中schema对应。#name:逻辑数据库名,与server.xml中的schema对应;#checkSQLschema: 数据库前缀相关设置,这里为false;#sqlMaxLimit:  select时默认的limit,避免查询全表,否则可能会遇到查询量特别大的情况造成卡 死;#dataNode:表存储到哪些节点,多个节点用逗号分隔。节点为下文dataNode设置的name
</schema><dataNode name="dn1" dataHost="localhost1" database="hellodb" />#dataNode标签: 定义mycat中的数据节点,也是通常说的数据分片,也就是分库相关配置#name: 定义数据节点的名字,与table中dataNode对应#datahost: 物理数据库名,与datahost中name对应,该属性用于定义该分片属于哪个数据库实例#database: 物理数据库中数据库名,该属性用于定义该分片属性哪个具体数据库实例上的具体库<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"#dataHost标签: 物理数据库,真正存储数据的数据库#name: 物理数据库名,与dataNode中dataHost对应#maxCon属性指定每个读写实例连接池的最大连接。也就是说,标签内嵌套的writeHost、readHost标  签都会使用这个属性的值来实例化出连接池的最大连接数#minCon属性指定每个读写实例连接池的最小连接,初始化连接池的大小#balance: 均衡负载的方式writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">#writeType: 写入方式#dbType: 数据库类型#dbDriver指定连接后端数据库使用的 Driver,目前可选的值有 native 和 JDBC。用 native 的话,因为这个值执行的是二进制的 mysql 协议,所以可以使用 mysql 和maridb。其他类型的数据库则需要使用 JDBC 驱动来支持。#switchType:  “-1” 表示不自动切换; “1” 默认值,自动切换; “2” 基于 MySQL主从同步的状态决定是否切换心跳语句为 show slave status; “3” 基于 MySQL galary cluster 的切换机制(适合集群)(1.4.1)心跳语句为 show status like ‘wsrep%’.<heartbeat>select user()</heartbeat>#heartbeat: 心跳检测语句,注意语句结尾的分号要加<writeHost host="host1" url="192.168.240.11:3306" user="root" password="123456">#host:用于标识不同实例,一般 writeHost 我们使用*M1,readHost 我们用*S1。#url:后端实例连接地址。Native:地址:端口 JDBC:jdbc的url#user:后端存储实例需要的用户名字#password:后端存储实例需要的密码<readHost host="host2" url="192.168.240.13:3306" user="root" password="123456"/></writeHost></dataHost>
</mycat:schema>#schema.xml文件中有三点需要注意:balance="1",writeType="0" ,switchType="1" 
#schema.xml中的balance的取值决定了负载均衡对非事务内的读操作的处理。balance 属性负载均衡类型,目前的取值有 4 种:
##balance="0":不开启读写分离机制,所有读操作都发送到当前可用的writeHost上,即读请求仅            发送到writeHost上
##balance="1":一般用此模式,读请求随机分发到当前writeHost对应的readHost和standby的writeHost上。即全部的readHost与stand by writeHost 参与 select 语句的负载均衡,简单的说,当双主双从模式(M1 ->S1 , M2->S2,并且 M1 与 M2 互为主备),正常情况下, M2,S1, S2 都参与 select 语句的负载均衡
##balance="2":读请求随机分发到当前dataHost内所有的writeHost和readHost上。即所有读操作都随机的在writeHost、 readhost 上分发
##balance="3":读请求随机分发到当前writeHost对应的readHost上。即所有读请求随机的分发wiriterHost 对应的 readhost 执行, writerHost 不负担读压力,注意 balance=3 只在 1.4 及其以后版本有,1.3 没有###writeHost和readHost标签,这两个标签都指定后端数据库的相关配置给mycat,用于实例化后端连接池。唯一不同的是:writeHost指定写实例、readHost指定读实例,组着这些读写实例来满足系统的要求。在一个dataHost内可以定义多个writeHost和eadHost。但是,如果writeHost指定的后端数据库宕机,那么这个writeHost绑定的所有readHost都将不可用。另一方面,由于这个writeHost宕机系统会自动的检测到,并切换到备用的writeHost上去   #PS:Mycat主从分离只是在读的时候做了处理,写入数据的时候,只会写入到writehost,需要通过mycat的主从复制将数据复制到readhost

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/"><schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"></schema><dataNode name="dn1" dataHost="localhost1" database="hellodb" /><dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100"><heartbeat>select user()</heartbeat><writeHost host="host1" url="192.168.240.11:3306" user="root" password="Admin@123"><readHost host="host2" url="192.168.240.13:3306" user="root" password="Admin@123"/></writeHost></dataHost>
</mycat:schema>

(8)主服务器授权

GRANT ALL ON *.* TO 'root'@'192.168.240.%' IDENTIFIED BY 'Admin@123';
select user,host from mysql.user;

(9)重启mycat服务,客户机连接mycat

[root@localhost apps]# mycat restart
Stopping Mycat-server...
Stopped Mycat-server.
Starting Mycat-server...
[root@localhost apps]# mycat status
Mycat-server is running (8991).
tail -f /apps/mycat/logs/wrapper.log
ss -antp|grep 3306

show databases;
use TESTDB;
show tables;
select @@server_id;

(10)客户端测试读写分离

在主从服务器上都打开通用日志

#打开通用日志
set global general_log=1;
#查看通用查询日志是否开启
show variables like 'general%';
+------------------+-------------------------------------+
| Variable_name    | Value                               |
+------------------+-------------------------------------+
| general_log      | ON                                  |
| general_log_file | /usr/local/mysql/data/localhost.log |
+------------------+-------------------------------------+

在主从服务器上实时查看通用日志

tail -f /var/lib/mysql/localhost.log

在客户机上的表中插入数据,并查看主从服务器实时日志,可以看到只有主服务器上有日志变化显示

insert into teachers values(5,'Xiao Ming',46,'F');
客户机上操作

 主服务器上查看

从服务器也开启通用日志,当客户机执行查看操作时

看从服务器日志

select * from students;

二.MySQL高可用

MHA实验

MHA集群架构

1.原理过程

  1. MHA利用 SELECT 1 As Value 指令判断master服务器的健康性,一旦master 宕机,MHA 从宕机崩溃的master保存二进制日志事件(binlog events)

  2. 识别含有最新更新的slave

  3. 应用差异的中继日志(relay log)到其他的slave

  4. 应用从master保存的二进制日志事件(binlog events)

  5. 提升一个slave为新的master

  6. 使其他的slave连接新的master进行复制

2.MHA软件

MHA软件由两部分组成,Manager工具包和Node工具包

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     添加或删除配置的server信息
masterha_stop  --conf=app1.cnf 停止MHA
masterha_secondary_check 两个或多个网络线路检查MySQL主服务器的可用

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

save_binary_logs     #保存和复制master的二进制日志
apply_diff_relay_logs   #识别差异的中继日志事件并将其差异的事件应用于其他的slave
filter_mysqlbinlog   #去除不必要的ROLLBACK事件(MHA已不再使用此工具)
purge_relay_logs #清除中继日志(不会阻塞SQL线程)

MHA配置文件:

global配置,为各application提供默认配置,默认文件路径 /etc/masterha_default.cnf
application配置:为每个主从复制集群

3.实现MHA

服务器地址
mha 服务器192.168.240.12
master192.168.240.11
slave1192.168.240.13
slave2192.168.240.14

(1)关闭防火墙和selinux 

systemctl disable --now firewalld
setenforce 0

(2)MHA(192.168.240.12)安装管理和客户端

yum install epel-release.noarch -y
将下载好的mha的rpm安装包拖入/data下
[root@localhost data]#ls
mha4mysql-manager-0.58-0.el7.centos.noarch.rpm  mha4mysql-node-0.58-0.el7.centos.noarch.rpm[root@localhost opt]#yum -y install mha4mysql-*.rpm

(3)其余服务器master  slave1 slave2  安装客户端

[root@localhost opt]#yum install epel-release.noarch -y
[root@localhost data]# yum install  mha4mysql-node-0.58-0.el7.centos.noarch.rpm -y

(4)所有节点基于key验证

可以使用免密登录脚本


#!/bin/bash
PASS=123
#使用此脚本免密登录,密码必须相同
#设置网段最后的地址,4-255之间,越小扫描越快
END=254IP=`ip a s ens33 | awk -F'[ /]+' 'NR==3{print $3}'`
NET=${IP%.*}.rm -f /root/.ssh/id_rsa
[ -e ./SCANIP.log ] && rm -f SCANIP.log
for((i=3;i<="$END";i++));do
ping -c 1 -w 1  ${NET}$i &> /dev/null  && echo "${NET}$i" >> SCANIP.log &
done
waitssh-keygen -P "" -f /root/.ssh/id_rsa
rpm -q sshpass || yum -y install sshpass
sshpass -p $PASS ssh-copy-id -o StrictHostKeyChecking=no $IPAliveIP=(`cat SCANIP.log`)
for n in ${AliveIP[*]};do
sshpass -p $PASS scp -o StrictHostKeyChecking=no -r /root/.ssh root@${n}:
done

也可以使用秘钥 

[root@localhost data]#ssh-keygen 
[root@localhost data]#ssh-copy-id  127.0.0.1
#自己和自己连生成 秘钥[root@localhost data]#cd[root@localhost data]#rsync -a .ssh   192.168.240.11:/root/
[root@localhost data]#rsync -a .ssh   192.168.240.13:/root/
[root@localhost data]#rsync -a .ssh   192.168.240.14:/root/
#注意.ssh 后不能加/    -a  保留属性

(5)MHA服务器上建立mha文件夹和配置文件

[root@localhost ~]#mkdir /etc/mastermha
[root@localhost ~]#vim /etc/mastermha/app1.cnf
[server default]
user=mhauser
password=Admin@123
manager_workdir=/data/mastermha/app1/
manager_log=/data/mastermha/app1/manager.log
remote_workdir=/data/mastermha/app1/
ssh_user=root
repl_user=test
repl_password=Admin@123
ping_interval=1
master_ip_failover_script=/usr/local/bin/master_ip_failover
check_repl_delay=0
master_binlog_dir=/data/mysql/[server1]
hostname=192.168.240.11
candidate_master=1[server2]
hostname=192.168.240.13
candidate_master=1  # 这里添加这个使得当主故障时不考虑同步情况(数据差异)直接成为新主
如果不添加则是与主同步最近的,差异最少的成为新主[server3]
hostname=192.168.240.14

(6)准备切换脚本

[root@localhost ~]#vim  master_ip_failover
#!/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.240.188/24';
my $gateway = '192.168.240.2';
my $interface = 'ens33';
my $key = "1";
my $ssh_start_vip = "/sbin/ifconfig $interface:$key $vip;/sbin/arping -I $interface -c 3 -s $vip $gateway >/dev/null 2>&1";
my $ssh_stop_vip = "/sbin/ifconfig $interface:$key down";
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,
);
exit &main();
sub main {
print "\n\nIN SCRIPT TEST====$ssh_stop_vip==$ssh_start_vip===\n\n";
if ( $command eq "stop" || $command eq "stopssh" ) {
# $orig_master_host, $orig_master_ip, $orig_master_port are passed.
# If you manage master ip address at global catalog database,
# invalidate orig_master_ip here.
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" ) {
# all arguments are passed.
# If you manage master ip address at global catalog database,
# activate new_master_ip here.
# You can also grant write access (create user, set read_only=0, etc) here.
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";
`ssh $ssh_user\@$orig_master_host \" $ssh_start_vip \"`;
exit 0;
}
else {
&usage();
exit 1;
}
}
# A simple system call that enable the VIP on the new master
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 --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";
}[root@localhost ~]#cp master_ip_failover   /usr/local/bin/
# 移动文件到对应的地方 之前的配置文件中规定了地方
[root@localhost ~]#chmod +x  /usr/local/bin/master_ip_failover 
#加上执行权限

(7)实现主从复制

主服务器配置

[root@localhost ~]#vim  /etc/my.cnf
#修改文件
[mysqld]
server_id=11
log-bin=/data/mysql/mysql-bin
skip_name_resolve=1
general_log 
#通用日志
systemctl restart mysqld
show master status;
grant replication slave on *.* to test@'192.168.240.%' identified by 'Admin@123';
#建立复制用户
grant all on *.* to mhauser@'192.168.240.%' identified by 'Admin@123';
#建立  mha管理账户

从服务器1配置

[root@localhost ~]#vim  /etc/my.cnf
#修改文件
server_id=13
log-bin=/data/mysql/mysql-bin
read_only
relay_log_purge=0
skip_name_resolve=1 
general_log [root@localhost ~]#mkdir /data/mysql/   -p
#建立文件夹
[root@localhost ~]#chown mysql.mysql /data/ -R
#注意修改权限
[root@localhost ~]#systemctl restart mysqld
[root@localhost data]#mysql -uroot -p123123
CHANGE MASTER TOMASTER_HOST='192.168.240.11',MASTER_USER='test',MASTER_PASSWORD='Admin@123',MASTER_PORT=3306,MASTER_LOG_FILE='mysql-bin.000002',MASTER_LOG_POS=154;注意最后分号mysql> start slave;
mysql> show slave status\G;

 从服务器2配置

[root@localhost ~]#vim  /etc/my.cnf
#修改文件
server_id=14
log-bin=/data/mysql/mysql-bin
read_only
relay_log_purge=0
skip_name_resolve=1 
general_log [root@localhost ~]#mkdir /data/mysql/   -p
#建立文件夹
[root@localhost ~]#chown mysql.mysql /data/ -R
#注意修改权限
[root@localhost ~]#systemctl restart mysqld
[root@localhost data]#mysql -uroot -p123123
CHANGE MASTER TOMASTER_HOST='192.168.240.11',MASTER_USER='test',MASTER_PASSWORD='Admin@123',MASTER_PORT=3306,MASTER_LOG_FILE='mysql-bin.000002',MASTER_LOG_POS=154;注意最后分号mysql> start slave;
mysql> show slave status\G;

(8)主服务器上设置虚拟地址

在 mysql 主节点上配置 虚拟地址 也就是192.168.240.11

ifconfig ens33:1 192.168.240.188/24

(9)在MHA服务器上检测环境是否合格

检测ssh免密登录是否成功

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

如果报错

[root@mha-manager ~]#masterha_check_repl --conf=/etc/mastermha/app1.cnf
#如果设置了默认字符集起不来    在  /etc/my.cnf  文件中
unknown variable 'default-character-set=utf8'

检测主从复制是否可以

[root@localhost /]#masterha_check_repl --conf=/etc/mastermha/app1.cnf
#  --conf=/etc/mastermha/app1.cnf  指明配置文件

查看状态未开启

[root@localhost /]#masterha_check_status --conf=/etc/mastermha/app1.cnf
app1 is stopped(2:NOT_RUNNING).

(10)开启MHA

#开启MHA,默认是前台运行,生产环境一般为后台执行
nohup masterha_manager --conf=/etc/mastermha/app1.cnf &> /dev/null 
#非后台
masterha_manager --conf=/etc/mastermha/app1.cnf #查看状态
masterha_check_status --conf=/etc/mastermha/app1.cnf  

(11)测试

mha 如何发现主节点宕机

通过发送 SELECT 1 As Value 指令 把1 设置成 value 给主, 主无法执行就认为他死了

tail -f   /var/lib/mysql/localhost.log

查看mha服务的日志

tail  -f  /data/mastermha/app1/manager.log 

(12)模拟主节点mysql故障

切换的过程 会将 从服务器的 readonly 指令改成可写

在主服务器故障之前,指定为新主的服务器(192.168.240.13)可以查看只读变量状态

select @@read_only;
+-------------+
| @@read_only |
+-------------+
|           1 |
+-------------+
1 row in set (0.00 sec)

将主服务器关闭

查看新主只读状态,已关闭

select @@read_only;

在新主(192.168.240.13)上查看状态slave 信息为空

在从服务器(192.168.240.14)上查看状态slave ,指向新主

show slave status\G;

查看MHA服务器日志上,已经将主更换为(192.168.240.13)

查看新主的IP地址,虚拟ip已经漂浮到新主(192.168.240.13)上

(13)MHA为一次性高可用如何重新启用高可用

将MHA服务器上/data/mastermha/app1
目录下的app1.failover.complete文件删除
将新的服务器或者修好的原主(192.168.240.11)配置为新的主(192.168.240.13)服务器的从服务器
不支持抢占,原主恢复不会将在主的位置
并将/etc/mastermha/app1.cnf  配置文件中server1设置为新主,原主修改到新主下面

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/40770.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

沪上繁花:上海电信的5G-A之跃

2024年6月18日下午&#xff0c;在上海举行的3GPP RAN第104次会议上&#xff0c;3GPP正式宣布R18标准冻结。R18是无线网络面向5G-A的第一个版本&#xff0c;其成功冻结正式宣布了5G发展迎来新机遇&#xff0c;5G-A商用已进入全新的发展阶段。 在5G-A滚滚而来的时代洪流中&#x…

C#实战|账号管理系统:通用登录窗体的实现。

哈喽,你好啊,我是雷工! 本节记录登录窗体的实现方法,比较有通用性,所有的项目登录窗体实现基本都是这个实现思路。 一通百通,以下为学习笔记。 01 登录窗体的逻辑 用户在登录窗输入账号和密码,如果输入账号和密码信息正确,点击【登录】按钮,则跳转显示主窗体,同时在固…

上海外贸建站公司wordpress模板推荐

Sora索啦高端制造业wordpress主题 红色高端制造业wordpress主题&#xff0c;适合外贸企业出海建独立站的wordpress模板。 https://www.jianzhanpress.com/?p5885 Yamal外贸独立站wordpress主题 绿色的亚马尔Yamal外贸独立站wordpress模板&#xff0c;适用于外贸公司建独立站…

Redis 中 Set 和 Zset 类型

目录 1.Set类型 1.1 Set集合 1.2 普通命令 1.3 集合操作 1.4 内部编码 1.5 使用场景 2.Zset类型 2.1 Zset有序集合 2.2 普通命令 2.3 集合间操作 2.4 内部编码 2.5 使用场景 1.Set类型 1.1 Set集合 集合类型也是保存多个字符串类型的元素&#xff0c;但是和列表类型不同的是&…

【Go】excelize库实现excel导入导出封装(四),导出时自定义某一列或多列的单元格样式

大家好&#xff0c;这里是符华~ 查看前三篇&#xff1a; 【Go】excelize库实现excel导入导出封装&#xff08;一&#xff09;&#xff0c;自定义导出样式、隔行背景色、自适应行高、动态导出指定列、动态更改表头 【Go】excelize库实现excel导入导出封装&#xff08;二&…

WY-35A4T三相电压继电器 导轨安装 约瑟JOSEF

功能简述 WY系列电压继电器是带延时功能的数字式交流电压继电器。 可用于发电机&#xff0c;变压器和输电线的继电保护装置中&#xff0c;作为过电压或欠电压闭锁的动作元件 LCD实时显示当前输入电压值 额定输入电压Un:100VAC、200VAC、400VAC产品满足电磁兼容四级标准 产品…

VBA初学:零件成本统计之一(任务汇总)

经过前期一年多对金蝶K3生产任务流程和操作的改造和优化&#xff0c;现在总算可以将零件加工各个环节的成本进行归集了。 原本想写存储过程&#xff0c;通过直接SQL报表做到K3中去的&#xff0c;但财务原本就是用EXCEL&#xff0c;可以方便调整和保存&#xff0c;加上还有一部分…

便携式气象站:探索自然的智慧伙伴

在探索自然奥秘、追求科学真理的道路上&#xff0c;气象数据始终是我们不可或缺的指引。然而&#xff0c;传统的气象站往往庞大而笨重&#xff0c;难以在偏远地区或移动环境中灵活部署。 便携式气象站&#xff0c;顾名思义&#xff0c;是一种小巧轻便、易于携带和安装的气象观测…

由于找不到xinput1 3.dll无法继续执行重新安装程序

如果您的计算机提示无法找到xinput1_3.dll文件&#xff0c;这可能表明您的计算机存在问题。在这种情况下&#xff0c;您需要立即对xinput1_3.dll文件进行修复&#xff0c;否则您的某些程序将无法启动。以下是解决无法找到xinput1_3.dll文件的方法。 一、关于xinput1_3.dll文件的…

Elasticsearch 实现 Word、PDF,TXT 文件的全文内容提取与检索

文章目录 一、安装软件:1.通过docker安装好Es、kibana安装kibana:2.安装原文检索与分词插件:之后我们可以通过doc命令查看下载的镜像以及运行的状态:二、创建管道pipeline名称为attachment二、创建索引映射:用于存放上传文件的信息三、SpringBoot整合对于原文检索1、导入依赖…

安全及应用(更新)

一、账号安全 1.1系统帐号清理 #查看/sbin/nologin结尾的文件并统计 [rootrootlocalhost ~]# grep /sbin/nologin$ /etc/passwd |wc -l 40#查看apache登录的shell [rootrootlocalhost ~]# grep apache /etc/passwd apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin#改变…

Android增量更新----java版

一、背景 开发过程中&#xff0c;随着apk包越来越大&#xff0c;全量更新会使得耗时&#xff0c;同时浪费流量&#xff0c;为了节省时间&#xff0c;使用增量更新解决。网上很多文章都不是很清楚&#xff0c;没有手把手教学&#xff0c;使得很多初学者&#xff0c;摸不着头脑&a…

边缘概率密度、条件概率密度、边缘分布函数、联合分布函数关系

目录 二维随机变量及其分布离散型随机变量连续型随机变量边缘分布边缘概率密度举例边缘概率密度 条件概率密度边缘概率密度与条件概率密度的区别边缘概率密度条件概率密度举个具体例子 参考资料 二维随机变量及其分布 离散型随机变量 把所有的概率&#xff0c;都理解成不同质量…

逻辑图框架图等结构图类图的高效制作方式不妨进来看看

**逻辑图框架图等结构图类图的高效制作方式不妨进来看看** 基于我们每天都在处理大量的数据和信息。为了更清晰地理解和传达这些信息&#xff0c;结构图、逻辑图和框架图等可视化工具变得越来越重要。然而&#xff0c;如何高效地制作这些图表并确保其准确性和易读性呢&#xf…

Windows密码凭证获取

Windows HASH HASH简介 hash &#xff0c;一般翻译做散列&#xff0c;或音译为哈希&#xff0c;所谓哈希&#xff0c;就是使用一种加密函数进行计算后的结果。这个 加密函数对一个任意长度的字符串数据进行一次数学加密函数运算&#xff0c;然后返回一个固定长度的字符串。…

服装购物商城系统小程序-计算机毕业设计源码35058

摘要 服装购物商城系统小程序&#xff0c;依托Spring Boot框架的强大支持&#xff0c;为用户呈现了一个功能丰富、体验流畅的在线购物平台。该系统不仅涵盖了商品展示、用户注册登录、购物车管理、订单处理、支付集成等核心购物流程&#xff0c;还引入了个性化推荐算法&#xf…

Jmeter使用JSON Extractor提取多个变量

1.当正则不好使时&#xff0c;用json extractor 2.提取多个值时&#xff0c;默认值必填&#xff0c;否则读不到变量

Java | Leetcode Java题解之第212题单词搜索II

题目&#xff1a; 题解&#xff1a; class Solution {int[][] dirs {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};public List<String> findWords(char[][] board, String[] words) {Trie trie new Trie();for (String word : words) {trie.insert(word);}Set<String> a…

VitePress美化

参考资料&#xff1a; https://blog.csdn.net/weixin_44803753/article/details/130903396 https://blog.csdn.net/qq_30678861/category_12467776.html 站点信息修改 首页部分的修改基本都在.vitepress/config.mts,这个文件内修改。 title 站点名称 description 描述 top…

Java springboot校园管理系统源码

Java springboot校园管理系统源码-014 下载地址&#xff1a;https://download.csdn.net/download/xiaohua1992/89364089 技术栈 运行环境&#xff1a;jdk8 tomcat9 mysql5.7 windows10 服务端技术&#xff1a;Spring Boot Mybatis VUE 使用说明 1.使用Navicati或者其它工…