兩臺(tái)mysql都可讀寫(xiě),互為主備,默認(rèn)只使用一臺(tái)(masterA)負(fù)責(zé)數(shù)據(jù)的寫(xiě)入,另一臺(tái)(masterB)備用;
masterA是masterB的主庫(kù),masterB又是masterA的主庫(kù),它們互為主從;
兩臺(tái)主庫(kù)之間做高可用,可以采用keepalived等方案(使用VIP對(duì)外提供服務(wù));
建議采用高可用策略的時(shí)候,masterA或masterB均不因宕機(jī)恢復(fù)后而搶占VIP(非搶占模式)。
這樣做可以在一定程度上保證主庫(kù)的高可用,在一臺(tái)主庫(kù)down掉之后,可以在極短的時(shí)間內(nèi)切換到另一臺(tái)主庫(kù)上(盡可能減少主庫(kù)宕機(jī)對(duì)業(yè)務(wù)造成的影響),減少了主從同步給線上主庫(kù)帶來(lái)的壓力。
1)環(huán)境
兩臺(tái)安裝好mysql的服務(wù)器(yum安裝比較快且方便),關(guān)閉防火墻,關(guān)閉selinux。
systemctl stop firewalld(臨時(shí)關(guān)閉)
setenforce 0(臨時(shí)關(guān)閉)
2)我的主機(jī)地址
mysql1:192.168.44.131
mysql2:192.168.44.133
虛擬ip:192.168.44.199
mysql1配置
在/etc/my.cnf新增以下內(nèi)容:
[mysqld]
#作為主從復(fù)制的唯一標(biāo)識(shí),集群中,不能重復(fù)
server-id = 1
#開(kāi)啟二進(jìn)制日志
log-bin = master-log
#開(kāi)啟中繼日志
relay-log = slave-log
auto_increment_offset = 1
auto_increment_increment = 2
注:auto_increment_offset確定AUTO_INCREMENT列值的起點(diǎn),也就是初始值。
auto_increment_increment控制列中的值的增量值,也就是步長(zhǎng)。
mysql中有自增長(zhǎng)字段,在做數(shù)據(jù)庫(kù)的主主同步時(shí)需要設(shè)置自增長(zhǎng)的兩個(gè)相關(guān)配置:auto_increment_offset和auto_increment_increment。
在主主同步配置時(shí),需要將兩臺(tái)服務(wù)器的auto_increment_increment增長(zhǎng)量都配置為2,而要把a(bǔ)uto_increment_offset分別配置為1和2。
mysql2配置
[mysqld]
#作為主從復(fù)制的唯一標(biāo)識(shí),集群中,不能重復(fù)
server-id = 2
#開(kāi)啟二進(jìn)制日志
log-bin = master-log
#開(kāi)啟中繼日志
relay-log = slave-log
auto_increment_offset = 2
auto_increment_increment = 2
重啟mysql服務(wù)
systemctl restart mysqld
mysql1為主,mysql為從配置
進(jìn)入mysql1數(shù)據(jù)庫(kù)創(chuàng)建同步賬號(hào)并賦予權(quán)限:
mysql> create user zjf@192.168.44.% identified by 123456;
mysql> grant replication slave on *.* to zjf@192.168.44.%;
mysql> show master status;
進(jìn)入mysql2數(shù)據(jù)庫(kù)執(zhí)行以下語(yǔ)句:
#log_file和log_pos的數(shù)據(jù)是mariad1上show master status得到的數(shù)據(jù)。
mysql> change master to master_host=192.168.44.131,
master_user=zjf, master_password=123456,
master_log_file=master-log.000001, master_log_pos=441;
開(kāi)啟主從:
mysql> start slave;
mysql> show slave statusG;
mysql2為主,mysql1為從配置
進(jìn)入mysql2數(shù)據(jù)庫(kù)創(chuàng)建同步賬號(hào)并賦予權(quán)限:
mysql> create user zjf@192.168.44.% identified by 123456;
mysql> grant replication slave on *.* to zjf@192.168.44.%;
show master status;
進(jìn)入mysql2數(shù)據(jù)庫(kù)執(zhí)行以下語(yǔ)句:
#log_file和log_pos的數(shù)據(jù)是mariad1上show master status得到的數(shù)據(jù)。
mysql> change master to master_host=192.168.44.131,
master_user=zjf, master_password=123456,
master_log_file=master-log.000004, master_log_pos=441;
開(kāi)啟主從:
mysql> start slave;
mysql> show slave statusG;
至此, 主主同步復(fù)制配置完成!!!
在mysql1創(chuàng)建一個(gè)庫(kù)test1:
Create database test1
mysql1和mysql2都有。
Show databases;
在mysql2創(chuàng)建一個(gè)庫(kù)test2:
Create database test2
Mysql1和msql2都有。
Show databases;
主主同步復(fù)制配置便測(cè)試成功。
8.1 Mysql1和MySQL2都安裝keepalived
yum -y install keepalived
8.2 mysql1的/etc/keepalived/keepalived.conf配置
! configuration File for keepalived
global_defs {
router_id mysql-01 #主機(jī)標(biāo)示符,不一定要用主機(jī)名,默認(rèn)值取主機(jī)名
}
vrrp_instance VI_1 {
state BACKUP #非搶占模式兩臺(tái)服務(wù)器都為BACKUP
interface ens33 #根據(jù)機(jī)器的ifconfig來(lái)定,vip要綁定的網(wǎng)卡
virtual_router_id 50 #虛擬路由ID,倆節(jié)點(diǎn)保持一致 #VRRP組名,兩個(gè)節(jié)點(diǎn)的設(shè)置必須一樣,以指明各個(gè)節(jié)點(diǎn)屬于同
priority 100 #主節(jié)點(diǎn)的優(yōu)先級(jí)(1-254),備用節(jié)點(diǎn)必須比主節(jié)點(diǎn)優(yōu)先級(jí)低
advert_int 1 #組播信息發(fā)送間隔,兩個(gè)節(jié)點(diǎn)設(shè)置必須一樣
nopreempt #不搶占vip資源,防止故障節(jié)點(diǎn)恢復(fù)后因?yàn)閮?yōu)先級(jí)高導(dǎo)致vip再次飄移
authentication { #設(shè)置驗(yàn)證信息,兩個(gè)節(jié)點(diǎn)必須一樣
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { #指定虛擬ip,兩個(gè)節(jié)點(diǎn)必須一致
192.168.44.199
}
}
#虛擬主機(jī)是可選部分,主要用來(lái)配置負(fù)載均衡。這里可以綁定端口
virtual_server 192.168.44.199 3306 { #綁定端口為3306,0代表所有端口
delay_loop 2
lb_algo rr ##負(fù)載均衡輪訓(xùn)算法,詳見(jiàn)官方文檔
lb_kind DR #路由模式,同網(wǎng)段DR,不同網(wǎng)段NAT
persistence_timeout 50
protocol TCP
real_server 192.168.44.131 3306 {
weight 3
notify_down /etc/keepalived/bin/killkeepalived.sh
notify_down /etc/keepalived/bin/mysql_check.sh
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
8.3 mysql2的/etc/keepalived/keepalived.conf配置
! configuration File for keepalived
global_defs {
router_id mysql-02 #主機(jī)標(biāo)示符,不一定要用主機(jī)名,默認(rèn)值取主機(jī)名
}
vrrp_instance VI_1 {
state BACKUP #非搶占模式兩臺(tái)服務(wù)器都為BACKUP
interface ens33 #根據(jù)機(jī)器的ifconfig來(lái)定,vip要綁定的網(wǎng)卡
virtual_router_id 50 #虛擬路由ID,倆節(jié)點(diǎn)保持一致 #VRRP組名,兩個(gè)節(jié)點(diǎn)的設(shè)置必須一樣,以指明各個(gè)節(jié)點(diǎn)屬于同
priority 50 #主節(jié)點(diǎn)的優(yōu)先級(jí)(1-254),備用節(jié)點(diǎn)必須比主節(jié)點(diǎn)優(yōu)先級(jí)低
advert_int 1 #組播信息發(fā)送間隔,兩個(gè)節(jié)點(diǎn)設(shè)置必須一樣
nopreempt #不搶占vip資源,防止故障節(jié)點(diǎn)恢復(fù)后因?yàn)閮?yōu)先級(jí)高導(dǎo)致vip再次飄移
authentication { #設(shè)置驗(yàn)證信息,兩個(gè)節(jié)點(diǎn)必須一樣
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { #指定虛擬ip,兩個(gè)節(jié)點(diǎn)必須一致
192.168.44.199
}
}
#虛擬主機(jī)是可選部分,主要用來(lái)配置負(fù)載均衡。這里可以綁定端口
virtual_server 192.168.44.199 3306 { #綁定端口為3306,0代表所有端口
delay_loop 2
lb_algo rr ##負(fù)載均衡輪訓(xùn)算法,詳見(jiàn)官方文檔
lb_kind DR #路由模式,同網(wǎng)段DR,不同網(wǎng)段NAT
persistence_timeout 50
protocol TCP
real_server 192.168.44.133 3306 {
weight 3
notify_down /etc/keepalived/bin/killkeepalived.sh
notify_down /etc/keepalived/bin/mysql_check.sh
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
8.4 腳本
在兩臺(tái)服務(wù)器上編寫(xiě)兩個(gè)腳本,就在keepalived配置文件指定的地方創(chuàng)建notify_down,當(dāng)Mysql和keepalived 出現(xiàn)問(wèn)題的時(shí)候會(huì)觸發(fā)此腳本,用于關(guān)掉本機(jī)的keepalived進(jìn)程,之后才能進(jìn)行切換到另外一個(gè)節(jié)點(diǎn)上去,并且授予執(zhí)行權(quán)限+x。
#!/bin/bash
counter=$(netstat -na|grep "LISTEN"|grep "3306"|wc -l)
if [ "${counter}" -eq 0 ]; then
systemctl stop keepalived
fi
8.5 結(jié)果
啟動(dòng)兩臺(tái)服務(wù)器的keepalived,可以看到一臺(tái)服務(wù)器有虛擬ip,另一臺(tái)沒(méi)有。
8.6 測(cè)試
停掉有虛擬ip的那臺(tái)主機(jī)的keepalived,虛擬ip會(huì)跑到另一臺(tái)主機(jī)上,且配置了不搶占規(guī)則,即使恢復(fù)服務(wù),ip也不會(huì)漂移回去。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/129469.html
摘要:雙主是一個(gè)比較簡(jiǎn)單的高可用架構(gòu),適用于中小集群,今天就說(shuō)說(shuō)怎么用做的高可用。缺點(diǎn)也比較明顯,就是增加從節(jié)點(diǎn)的情況下,從節(jié)點(diǎn)不會(huì)主動(dòng)切換同步對(duì)象,而且腳本需要自己實(shí)現(xiàn),有一定風(fēng)險(xiǎn)。 雙主 + keepalived 是一個(gè)比較簡(jiǎn)單的 MySQL 高可用架構(gòu),適用于中小 MySQL 集群,今天就說(shuō)說(shuō)怎么用 keepalived 做 MySQL 的高可用。 1 概述 1.1 keepalive...
摘要:雙主是一個(gè)比較簡(jiǎn)單的高可用架構(gòu),適用于中小集群,今天就說(shuō)說(shuō)怎么用做的高可用。缺點(diǎn)也比較明顯,就是增加從節(jié)點(diǎn)的情況下,從節(jié)點(diǎn)不會(huì)主動(dòng)切換同步對(duì)象,而且腳本需要自己實(shí)現(xiàn),有一定風(fēng)險(xiǎn)。 雙主 + keepalived 是一個(gè)比較簡(jiǎn)單的 MySQL 高可用架構(gòu),適用于中小 MySQL 集群,今天就說(shuō)說(shuō)怎么用 keepalived 做 MySQL 的高可用。 1 概述 1.1 keepalive...
MySQL高可用方案測(cè)試 img{ display:block; margin:0 auto !important; width:100%; } body{ width:75%; margin...
閱讀 1356·2023-01-11 13:20
閱讀 1707·2023-01-11 13:20
閱讀 1215·2023-01-11 13:20
閱讀 1906·2023-01-11 13:20
閱讀 4165·2023-01-11 13:20
閱讀 2757·2023-01-11 13:20
閱讀 1402·2023-01-11 13:20
閱讀 3671·2023-01-11 13:20