日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

mysql高可用+keepalived

發(fā)布時(shí)間:2025/6/16 数据库 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql高可用+keepalived 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

生產(chǎn)環(huán)境中一臺(tái)mysql主機(jī)存在單點(diǎn)故障,所以我們要確保mysql的高可用性,即倆臺(tái)mysql服務(wù)器如果其中有一臺(tái)mysql服務(wù)器掛掉后,另外一臺(tái)就能立刻接替進(jìn)行工作。

MYSQL的高可用方案一般有

Keepalived+雙主,MHA,PXC,MMM,Heartbeat+DRBD等 比較常用的是keepalived+雙主MHAPXC

這次主要介紹利用keepalived實(shí)現(xiàn)MYSQL數(shù)據(jù)庫(kù)的高可用。

基本思路:倆臺(tái)MYSQL互為主從關(guān)系(雙主),通過(guò)keepalived配置配置虛擬IP,實(shí)現(xiàn)當(dāng)其中一臺(tái)mysql掛機(jī)后,應(yīng)用能夠自動(dòng)切換到另外一臺(tái)MYSQL數(shù)據(jù)庫(kù),保證系統(tǒng)的高可用。

操作系統(tǒng)?Centos7.2

MYSQL版本 ?5.7

Keepalived:keepalived-1.2

Mysql-vip:192.168.0.100

Mysql-master1:192.168.0.7

Mysql-slave1:192.168.0.6



該過(guò)程的第一部分就是master記錄著二進(jìn)制日志。在每個(gè)事務(wù)更新數(shù)據(jù)完成之前,master在二日志記錄這些改變。Mysql將事務(wù)寫(xiě)入二進(jìn)制日志,在事件寫(xiě)入二進(jìn)制日志完成后,master通知存儲(chǔ)引擎提交事務(wù)。

下一步就是slavemasterbinary log拷貝到它自己的中繼日志。首先,slave開(kāi)始一個(gè)工作線程--I/O線程。I/O線程在master上打開(kāi)一個(gè)普通的連接,然后開(kāi)始binlog dump process

Binlog dump process?master的二進(jìn)制日志中讀取事件。?I/O線程將這些事件寫(xiě)入中繼日志。

SQL slave thread?SQL?從線程) 處理該過(guò)程的最后一步。SQL線程從中繼日志讀取事件,并重放其中的事件而更新slave的數(shù)據(jù),使其與master中的數(shù)據(jù)一致。只要該進(jìn)程與I/O線程保持一致,中繼日志通常位于OS緩存中,所以中繼日志的開(kāi)銷很小。

主主同步就是倆臺(tái)機(jī)器互為主從關(guān)系,在任何一臺(tái)機(jī)器上寫(xiě)入都會(huì)同步。

1:修改MYSQL配置文件

倆臺(tái)mysql均要開(kāi)啟binlog?日志功能,開(kāi)啟方法:在MYSQL配置文件加上

Log-bin=MYSQL-bin選項(xiàng),倆臺(tái)mysqlserver-ID不能一樣,默認(rèn)情況下server-ID都是1,需要其中slave修改為2即可。

一:master1中有關(guān)配置如下

1 2 3 4 5 6 7 8 9 10 11 basedir?=?/usr/local/mysql datadir?=?/usr/local/mysql/data server_id?=?1 socket?=?/usr/local/mysql/mysql.sock log-error?=?/usr/local/mysql/data/mysqld.err log-bin=mysql-bin binlog_format=mixed relay-log=relay-bin relay-log-index=slave-relay-bin.index auto-increment-increment=2 auto-increment-offset=1

重啟mysql服務(wù)

Master2中有關(guān)復(fù)制配置如下

1 2 3 4 5 6 7 8 9 10 11 12 [mysqld] basedir?=?/usr/local/mysql datadir?=?/usr/local/mysql/data server_id?=?2 socket?=?/usr/local/mysql/mysql.sock log-error?=?/usr/local/mysql/data/mysqld.err log-bin=mysql-bin binlog_format=mixed relay-log=relay-bin relay-log-index=slave-relay-bin.index auto-increment-increment=2 auto-increment-offset=2

重啟mysqld服務(wù)

二:將master1設(shè)為master2的主服務(wù)器

master1主機(jī)上創(chuàng)建授權(quán)賬戶,允許在master2192.168.0.6)主機(jī)上連接

1 2 mysql>?grant?replication?slave?on?*.*?to?'rep@192.168.0.7'?identified?by?'123456'; Query?OK,?0?rows?affected,?1?warning?(0.01?sec)

查看master1的當(dāng)前binlog狀態(tài)信息

slave上將master設(shè)為自己的主服務(wù)器并開(kāi)啟slave功能

1 2 mysql>change,master,to,master_host='192.168.0.6',master_user='rep',master_password='123456',master_log_file='mysql-bin.000004',master_log_pos=451; Query?OK,?0?rows?affected,?2?warnings?(0.04?sec)

1 2 mysql>?start?slave; Query?OK,?0?rows?affected?(0.01?sec)

查看從的狀態(tài),以下倆個(gè)值必須為yes,代表從服務(wù)器能正常連接主服務(wù)器

?Slave_IO_Running: Yes

?Slave_SQL_Running: Yes

mysql> show slave status\G;

三,master2設(shè)為master1的主服務(wù)器

slave主機(jī)上創(chuàng)建授權(quán)賬戶,允許在master192.168.0.6)主機(jī)上連接

1 2 mysql>?grant?replication?slave?on?*.*?to?'rep'@'192.168.0.6'?identified?by?'123456'; Query?OK,?0?rows?affected,?1?warning?(0.00?sec)

查看slave的當(dāng)前binlog狀態(tài)信息

mysql> show master ?status;

master上將slave設(shè)為自己的主服務(wù)器并開(kāi)啟slave功能

1 2 mysql>change,master,to?,master_host='192.168.0.7',master_user='rep',master_password='123456',master_log_file='mysql-bin.000003',master_log_pos=154; Query?OK,?0?rows?affected,?2?warnings?(0.03?sec)

查看從的狀態(tài)下,以下倆個(gè)值必須為yes代表從服務(wù)器能正常連接主服務(wù)器

四:測(cè)試主主同步

master上創(chuàng)建數(shù)據(jù)庫(kù)?chai?看看slave是否同步

主的服務(wù)器

從的服務(wù)器驗(yàn)證已經(jīng)同步過(guò)來(lái)

現(xiàn)在任何一臺(tái)MYSQL上更新數(shù)據(jù)同步到另一臺(tái)mysql?同步完成

注意:若主MYSQL服務(wù)器已經(jīng)存在,只是后期才搭建從MYSQL服務(wù)器,在配置數(shù)據(jù)同步前應(yīng)先主MYSQL服務(wù)器的要同步的數(shù)據(jù)庫(kù)拷貝到從MYSQL服務(wù)器上(如先在主MYSQL上備份數(shù)據(jù)庫(kù),再用備份在從MYSQL服務(wù)器上恢復(fù)

接著完成keepalived的高可用性

Keepalived是集群管理中保證集群高可用的一個(gè)軟件解決方案,其功能類似與heartbeat?用來(lái)防止單點(diǎn)故障

keepalived的工作原理是VRRP(Virtual Router Redundancy Protocol)虛擬路由冗余協(xié)議。
在VRRP中有兩組重要的概念:VRRP路由器和虛擬路由器,主控路由器和備份路由器。
VRRP路由器是指運(yùn)行VRRP的路由器,是物理實(shí)體,虛擬路由器是指VRRP協(xié)議創(chuàng)建的,是邏輯概念。一組VRRP路由器協(xié)同工作,共同構(gòu)成一臺(tái)虛擬路由器。 Vrrp中存在著一種選舉機(jī)制,用以選出提供服務(wù)的路由即主控路由,其他的則成了備份路由。當(dāng)主控路由失效后,備份路由中會(huì)重新選舉出一個(gè)主控路由,來(lái)繼續(xù)工作,來(lái)保障不間斷服務(wù)。

二?keepalived安裝配置

1?在masterslave上安裝軟件包keepalived

安裝keepalived軟件包和服務(wù)控制

在編譯安裝keepalived之前,必須安裝內(nèi)核開(kāi)發(fā)包?kernel-devel?以及?openssl-devel popt-devel?等支持

若沒(méi)有安裝通過(guò)rom或者yum工具安裝

編譯安裝keepalived

使用指定的linux內(nèi)核位置對(duì)keepalived進(jìn)行配置,并將安裝路徑制定為根目錄,這樣就無(wú)需額外創(chuàng)建連接文件,配置完成 依次執(zhí)行make make install?進(jìn)行安裝

使用keepalived服務(wù)

執(zhí)行make install操作之后 會(huì)自動(dòng)生成/etc/init.d/keepalived腳本文件,但是需要手動(dòng)添加為系統(tǒng)服務(wù),這樣就可以使用server chkconfig?工具對(duì)keepalived服務(wù)進(jìn)程管理了

2修改keepalived配置文件

keepalived?只有一個(gè)配置文件?keepalived.conf,里面主要包括以下幾個(gè)配置區(qū)域,分別是

global_defs、vrrp_instance?和?virtual_server

global_defs:主要是配置故障發(fā)生時(shí)的通知對(duì)象以及機(jī)器標(biāo)識(shí)。

vrrp_instance:用來(lái)定義對(duì)外提供服務(wù)的?VIP?區(qū)域及其相關(guān)屬性。

virtual_server:虛擬服務(wù)器定義

master1?主機(jī)上的?keepalived.conf?文件的修改:

vi /etc/keepalived/keepalived.conf:

! Configuration File for keepalived //!表示注釋

global_defs {

router_id MYSQL-1 //表示運(yùn)行?keepalived?服務(wù)器的一個(gè)標(biāo)識(shí)

}

vrrp_instance VI_1 {

?state BACKUP //指定?keepalived?的角色,兩臺(tái)配置此處均是?BACKUP,設(shè)為?BACKUP?將根據(jù)

優(yōu)先級(jí)決定主或從

?interface eth0 //指定?HA?監(jiān)測(cè)網(wǎng)絡(luò)的接口

virtual_router_id 51 //虛擬路由標(biāo)識(shí),這個(gè)標(biāo)識(shí)是一個(gè)數(shù)字(取值在?0-255?之間,用來(lái)區(qū)分多個(gè)

instance?的?VRRP?組播),同一個(gè)?vrrp?實(shí)例使用唯一的標(biāo)識(shí),

確保和?master2?相同,同網(wǎng)內(nèi)不同集群此項(xiàng)必須不同,否則發(fā)

生沖突。

?priority 100 //用來(lái)選舉?master?的,要成為?master,該項(xiàng)取值范圍是?1-255(在此范圍

之外會(huì)被識(shí)別成默認(rèn)值?100),此處?master2?上設(shè)置為?50

advert_int 1 //發(fā)?VRRP?包的時(shí)間間隔,即多久進(jìn)行一次?master?選舉(可以認(rèn)為是健康查

檢時(shí)間間隔)

nopreempt //不搶占,即允許一個(gè)?priority?比較低的節(jié)點(diǎn)作為?master,即使有?priority?更高

的節(jié)點(diǎn)啟動(dòng)

?authentication { //認(rèn)證區(qū)域,認(rèn)證類型有?PASS?和?HAIPSEC),推薦使用?PASS(密碼

只識(shí)別前?8?位)

auth_type PASS

auth_pass 1111

?}

virtual_ipaddress { //VIP?區(qū)域,指定?vip?地址

?192.168.0.100

?}

}

virtual_server 192.168.0.100 3306 { //設(shè)置虛擬服務(wù)器,需要指定虛擬?IP?地址和服務(wù)端口,

IP?與端口之間用空格隔開(kāi)

delay_loop 2 //設(shè)置運(yùn)行情況檢查時(shí)間,單位是秒

lb_algo rr //設(shè)置后端調(diào)度算法,這里設(shè)置為?rr,即輪詢算法

lb_kind DR //設(shè)置?LVS?實(shí)現(xiàn)負(fù)載均衡的機(jī)制,有?NATTUNDR?三個(gè)模式可選

persistence_timeout 60 //會(huì)話保持時(shí)間,單位是秒。這個(gè)選項(xiàng)對(duì)動(dòng)態(tài)網(wǎng)頁(yè)是非常有用的,

為集群系統(tǒng)中的?session?共享提供了一個(gè)很好的解決方案。

有了這個(gè)會(huì)話保持功能,用戶的請(qǐng)求會(huì)被一直分發(fā)到某個(gè)服務(wù)節(jié)點(diǎn),

直到超過(guò)這個(gè)會(huì)話的保持時(shí)間。

?protocol TCP //指定轉(zhuǎn)發(fā)協(xié)議類型,有?TCP?和?UDP?兩種

real_server 192.168.1.101 3306 { //配置服務(wù)節(jié)點(diǎn)?1,需要指定?real server?的真實(shí)?IP?地址和

端口,IP?與端口之間用空格隔開(kāi)

注:slave?上此處改為?192.168.0.7(即?slave?本機(jī)?ip)

weight 3 //配置服務(wù)節(jié)點(diǎn)的權(quán)值,權(quán)值大小用數(shù)字表示,數(shù)字越大,權(quán)值越高,設(shè)置權(quán)

值大小為了區(qū)分不同性能的服務(wù)器

notify_down /etc/keepalived/bin/mysql.sh //檢測(cè)到?realserver?的?mysql?服務(wù)?down?后執(zhí)行的

腳本

TCP_CHECK {

connect_timeout 3 //連接超時(shí)時(shí)間

nb_get_retry 3 //重連次數(shù)

delay_before_retry 3 //重連間隔時(shí)間

connect_port 3306//健康檢查端口

?}

?}

}

啟動(dòng)?keepalived?服務(wù)

#/etc/init.d/keepalived start

3、master1?和?master2?上都添加此檢測(cè)腳本,作用是當(dāng)?mysql?停止工作時(shí)自動(dòng)關(guān)閉本機(jī)的

keepalived,從而實(shí)現(xiàn)將故障機(jī)器踢出(因每臺(tái)機(jī)器上?keepalived?只添加了本機(jī)為?realserver.

當(dāng)?mysqld?正常啟動(dòng)起來(lái)后,要手動(dòng)啟動(dòng)?keepalived?服務(wù)。

1 2 #mkdir?/etc/keepalived/bin vi?/etc/keepalived/bin/mysql.sh,內(nèi)容如下:

4、測(cè)試

在?master?和?slave?分別執(zhí)行?ipaddr show dev eno16777736?命令查看?master和?slave?對(duì)?VIP

(群集虛擬?IP)的控制權(quán)。

Master1?主的查看結(jié)果:

Slave查看結(jié)果 ?并在master停止mysql ?查看IP地址是否飄逸

總結(jié):

Keepalived+mysql?雙主一般來(lái)說(shuō),中小型規(guī)模的時(shí)候,采用這種架構(gòu)是最省事的。

在?master?節(jié)點(diǎn)發(fā)生故障后,利用?keepalived?的高可用機(jī)制實(shí)現(xiàn)快速切換到備用節(jié)點(diǎn)。

在這個(gè)方案里,有幾個(gè)需要注意的地方:

1.采用?keepalived?作為高可用方案時(shí),兩個(gè)節(jié)點(diǎn)最好都設(shè)置成?BACKUP?模式,避免因?yàn)橐馔?/span>

情況下(比如腦裂)相互搶占導(dǎo)致往兩個(gè)節(jié)點(diǎn)寫(xiě)入相同數(shù)據(jù)而引發(fā)沖突;

2.把兩個(gè)節(jié)點(diǎn)的?auto_increment_increment(自增步長(zhǎng))和?auto_increment_offset(自增起

始值)設(shè)成不同值。其目的是為了避免?master?節(jié)點(diǎn)意外宕機(jī)時(shí),可能會(huì)有部分?binlog?未能

及時(shí)復(fù)制到?slave?上被應(yīng)用,從而會(huì)導(dǎo)致?slave?新寫(xiě)入數(shù)據(jù)的自增值和原先?master?上沖突了,

因此一開(kāi)始就使其錯(cuò)開(kāi);當(dāng)然了,如果有合適的容錯(cuò)機(jī)制能解決主從自增?ID?沖突的話,也可以不這么做;

3.slave?節(jié)點(diǎn)服務(wù)器配置不要太差,否則更容易導(dǎo)致復(fù)制延遲。作為熱備節(jié)點(diǎn)的?slave?服務(wù)器,

硬件配置不能低于?master?節(jié)點(diǎn);

4.如果對(duì)延遲問(wèn)題很敏感的話,可考慮使用?MariaDB?分支版本,或者直接上線?MySQL 5.7?

新版本,利用多線程復(fù)制的方式可以很大程度降低復(fù)制延遲;






本文轉(zhuǎn)自柴鑫旺 51CTO博客,原文鏈接:http://blog.51cto.com/chaixinwang/2056772,如需轉(zhuǎn)載請(qǐng)自行聯(lián)系原作者

總結(jié)

以上是生活随笔為你收集整理的mysql高可用+keepalived的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。