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.pswp.cn/web/40770.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/40770.shtml
英文地址,請注明出處:http://en.pswp.cn/web/40770.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

進程輸入輸出及終端屬性學習

進程的標準輸入輸出 當主進程fork或exec子進程&#xff0c;文件描述符被繼承&#xff0c;因此0,1,2句柄也被繼承&#xff0c;從而使得telnet等服務&#xff0c;可以做到間接調用別的shell或程序。比如如果是遠程登錄使用的zsh&#xff0c;那么其會重定向到相應的pts $ ps|gre…

滬上繁花:上海電信的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 登錄窗體的邏輯 用戶在登錄窗輸入賬號和密碼,如果輸入賬號和密碼信息正確,點擊【登錄】按鈕,則跳轉顯示主窗體,同時在固…

Vue3項目初始化:

緊接著前面的文章&#xff1a;https://blog.csdn.net/weixin_51416826/article/details/138679863?spm1001.2014.3001.5502 當我們生成一個Vue3項目后必須要增加一些依賴和配置&#xff0c;比如安裝組件庫、配置ESLint和Prettier、接下來咱一步步推進~ 安裝組件庫 一般開發…

【基礎篇】1.7 C語言基礎(一)

一,為什么是C語言? C語言是嵌入式系統開發領域廣泛使用的編程語言。STM32作為一種嵌入式系統的微控制器,需要精確控制硬件資源,那么C語言能夠滿足這一需求。 二,STM32 C語言常用基礎知識 下面是我們在日常STM32開發中必備的C語言基礎要點,掌握這些C語言的基礎知識要點…

llama3

Llama 3是由Meta公司發布的一款大型語言模型&#xff08;LLM&#xff09;&#xff0c;該模型在發布后迅速引起了業界的廣泛關注。以下是對Llama 3的詳細介紹&#xff1a; 一、基本信息 發布單位&#xff1a;Meta公司 發布時間&#xff1a;當地時間2024年4月18日 主要特點&…

上海外貿建站公司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產品滿足電磁兼容四級標準 產品…

【Rust入門】猜數游戲

文章目錄 前言Rust的變量Rust占位符讀取一行數據到變量里面示例代碼總結 前言 Rust是一種系統編程語言&#xff0c;它專注于速度、內存安全和并行性。學習Rust可以為你的編程技能庫增添新的一筆。在這篇文章中&#xff0c;我們將通過一個簡單的猜數游戲來介紹Rust的基本概念。…

VBA初學:零件成本統計之一(任務匯總)

經過前期一年多對金蝶K3生產任務流程和操作的改造和優化&#xff0c;現在總算可以將零件加工各個環節的成本進行歸集了。 原本想寫存儲過程&#xff0c;通過直接SQL報表做到K3中去的&#xff0c;但財務原本就是用EXCEL&#xff0c;可以方便調整和保存&#xff0c;加上還有一部分…

便攜式氣象站:探索自然的智慧伙伴

在探索自然奧秘、追求科學真理的道路上&#xff0c;氣象數據始終是我們不可或缺的指引。然而&#xff0c;傳統的氣象站往往龐大而笨重&#xff0c;難以在偏遠地區或移動環境中靈活部署。 便攜式氣象站&#xff0c;顧名思義&#xff0c;是一種小巧輕便、易于攜帶和安裝的氣象觀測…

模擬面試002-Java開發工程師+簡歷+問題+回答

模擬面試002-Java開發工程師簡歷問題回答 目錄 模擬面試002-Java開發工程師簡歷問題回答面試簡歷面試官題問Java基礎與編程框架與工具數據庫與性能優化項目經驗與實踐團隊合作與溝通 求職者回答Java基礎與編程框架與工具數據庫與性能優化項目經驗與實踐團隊合作與溝通 參考資料…

由于找不到xinput1 3.dll無法繼續執行重新安裝程序

如果您的計算機提示無法找到xinput1_3.dll文件&#xff0c;這可能表明您的計算機存在問題。在這種情況下&#xff0c;您需要立即對xinput1_3.dll文件進行修復&#xff0c;否則您的某些程序將無法啟動。以下是解決無法找到xinput1_3.dll文件的方法。 一、關于xinput1_3.dll文件的…

你要允許此應用對你的設備進行更改嗎

在Windows 11中&#xff0c;當你看到提示“你要允許此應用對你的設備進行更改嗎&#xff1f;”時&#xff0c;這是系統檢測到某個應用或軟件試圖對你的設備進行更改或安裝的提醒。這個提示是為了保護你的系統免受潛在惡意軟件的侵害。如果你選擇“是”&#xff0c;則應用可以繼…

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…

2011年的數字IC設計面經

2011年老羅寫的面經&#xff0c;轉眼間2024年了&#xff0c;大家湊合著看吧&#xff0c;可以順便看看2011年的應屆生薪資。 本人通信工程碩士&#xff0c;非電子科班出身&#xff0c;主要找數字IC設計的工作&#xff0c;找工作找了一個月左右&#xff0c;還算滿意吧&#xff0…