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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql主主备份及集群

發布時間:2023/12/15 数据库 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql主主备份及集群 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

閱讀目錄

1、簡介
2、基本環境
3、配置MySQL主主復制
4、中間件簡述
4.1、Haproxy介紹
4.2、keepalived介紹
5、中間件的安裝與配置(haproxy、keepalived)
5.1、安裝haproxy
1)、編譯安裝haproxy
2)、提供啟動腳本
3)、提供配置文件
4)、啟動日志
5)、啟動haproxy
6)、測試haproxy
5.2、安裝keepalived
1)、解決缺少的軟件庫文件
2)、編譯安裝keepalived軟件
3)、創建配置文件
4)、創建腳本文件
6、功能測試
6.1、流程簡述
6.2、測試haproxy監聽前端端口3306
6.3、測試高可用+keepalived不搶占vip
6.4、測試負載均衡
7、總結與建議
回到頂部
1、簡介
使用MySQL時隨著時間的增長,用戶量以及數據量的逐漸增加,訪問量更是劇增,最終將會使MySQL達到某個瓶頸,那么MySQL的性能將會大大降低。這一結果也不利于軟件的推廣。

  那么如何跨過這個瓶頸,提高MySQL的并發量呢?方法有很多,分布式數據庫、讀寫分離、高可用負載均衡、增加緩存服務器等等。之前的文章里已經介紹了讀寫分離的方案了,接下來我將講解MySQL高可用負載均衡這一方法。

  其中實現高可用負載均衡的方法有很多,例如LVS+keepalived組合實現、haproxy+keepalived組合實現等等,這里我們采用haproxy+keepalived組合實現MySQL高可用負載均衡這一技術。

回到頂部
2、基本環境
四臺linux虛擬主機

Linux版本CentOS6.6

MySQL 5.5(已安裝好)

haproxy-1.5.14

keepalived-1.2.19

IP:192.168.95.11(mysql1)、192.168.95.12(mysql2)、192.168.95.13(haproxy+keepalived)、192.168.95.14(haproxy+keepalived)、192.168.95.55(vip)

回到頂部
3、配置MySQL主主復制
詳細配置步驟可以參考這篇文章:

http://www.cnblogs.com/phpstudy2015-6/p/6485819.html#_label7

以下簡要介紹一下mysql的主主復制:

何為主主復制?就是兩個mysql都能讀能寫,數據記錄通過二進制傳達給對方從而保持數據的一致性。

(192.168.95.11主從復制+192.168.95.12主從復制==192.168.95.11、192.168.95.12主主復制)

  因此主主復制中必須要解決的事情就是自增主鍵的問題。如果mysql1主鍵id增加到12了,此時二進制數據還沒到達mysql2,那么mysql2恰好要插入數據,那么新數據主鍵id也是12,那不就是亂套了么!解決這一問題我們可以直接更改MySQL中的配置文件即可。

1)、更改配置文件

復制代碼
--192.168.95.11:MySQL
server-id=11 #任意自然數n,只要保證兩臺MySQL主機不重復就可以了。
log-bin=mysql-bin #開啟二進制日志
auto_increment_increment=2 #步進值auto_imcrement。一般有n臺主MySQL就填n
auto_increment_offset=1 #起始值。一般填第n臺主MySQL。此時為第一臺主MySQL
binlog-ignore=mysql #忽略mysql庫【我一般都不寫】
binlog-ignore=information_schema #忽略information_schema庫【我一般都不寫】
replicate-do-db=aa #要同步的數據庫,默認所有庫
--192.168.95.12:MySQL
server-id=12
log-bin=mysql-bin
auto_increment_increment=2
auto_increment_offset=2
replicate-do-db=aa
復制代碼
配置好后重啟MySQL

2)、配置192.168.95.11主從復制

  1、在192.168.95.12中創建一個192.168.95.11主機中可以登錄的MySQL用戶

用戶:mysql11密碼:mysql11

mysql>GRANT REPLICATION SLAVE ON?.?TO ‘mysql11’@’192.168.95.11’ IDENTIFIED BY ’mysql11’;
mysql>FLUSH PRIVILEGES;
2、查看192.168.95.12二進制日志

mysql> show master status;

  3、告知二進制文件名與位置

復制代碼
mysql> change master to
-> master_host='192.168.95.11',
-> master_user='mysql11',
->master_password='mysql11',
->master_log_file='mysql-bin.000097',
-> master_log_pos=107;
復制代碼
4、查看結果

mysql> slave start;
mysql> show slave status\G

配置主從復制成功

3)、配置192.168.95.12主從復制

同上

配置主從復制成功。

回到頂部
4、中間件簡述
回到頂部
4.1、Haproxy介紹
Haproxy是一個開源的高性能的反向代理或者說是負載均衡服務軟件之一,它支持雙機熱備、虛擬主機、基于TCP和HTTP應用代理等功能。其配置簡單,而且擁有很好的對服務器節點的健康檢查功能(相當于keepalived健康檢查),當其代理的后端服務器出現故障時,Haproxy會自動的將該故障服務器摘除,當服務器的故障恢復后Haproxy還會自動將RS服務器。

HAProxy特別適用于那些負載特大的web站點,這些站點通常又需要會話保持或七層處理。HAProxy運行在當前的硬件上,完全可以支持數以萬計的并發連接。并且它的運行模式使得它可以很簡單安全的整合進您當前的架構中, 同時可以保護你的web服務器不被暴露到網絡上。

Haproxy軟件引入了frontend,backend的功能,frontend(acl規則匹配)可以根據任意HTTP請求頭做規則匹配,然后把請求定向到相關的backend(server pools等待前端把請求轉過來的服務器組)。通過frontend和backup,我們可以很容易的實現haproxy的7層代理功能,haproxy是一款不可多得的優秀代理服務軟件。

回到頂部
4.2、keepalived介紹
keepalived是以VRRP協議為實現基礎的,VRRP全稱Virtual Router Redundancy Protocol,即虛擬路由冗余協議。

虛擬路由冗余協議,可以認為是實現路由器高可用的協議,即將N臺提供相同功能的路由器組成一個路由器組,這個組里面有一個master和多個backup,master上面有一個對外提供服務的vip(該路由器所在局域網內其他機器的默認路由為該vip),master會發組播,當backup收不到vrrp包時就認為master宕掉了,這時就需要根據VRRP的優先級來選舉一個backup當master。這樣的話就可以保證路由器的高可用了。

keepalived主要有三個模塊,分別是core、check和vrrp。core模塊為keepalived的核心,負責主進程的啟動、維護以及全局配置文件的加載和解析。check負責健康檢查,包括常見的各種檢查方式。vrrp模塊是來實現VRRP協議的。

回到頂部
5、中間件的安裝與配置(haproxy、keepalived)
百度云下載:http://pan.baidu.com/s/1qYoCjDE?密碼:7cef

回到頂部
5.1、安裝haproxy
在192.168.95.13、192.168.95.14安裝haproxy(一模一樣安裝)

回到頂部
1)、編譯安裝haproxy

tar -zxvf haproxy-1.5.14.tar.gz

cd haproxy-1.5.14

make TARGET=linux26 ARCH=x86_64

make install SBINDIR=/usr/sbin/ MANDIR=/usr/share/man/ DOCDIR=/usr/share/doc/

注意:

1、為什么不用configure,請看下圖。haproxy-1.5.14已經存在Makefile文件了。

2、make的時候,target以及arch需要根據自己的linux主機設置

3、make install的時候我增加了一些額外選項。這可加可不加由自己配置,不加的話將會按默認路徑安裝,請看下圖。

回到頂部
2)、提供啟動腳本
將haproxy這個啟動腳本放在/etc/init.d/文件夾下,以便我們可以直接service啟動它

【注意】:此啟動腳本僅僅適合我以上的安裝路徑。假若安裝路徑不同,則需要進行相應的修改方可使用。

復制代碼
#!/bin/sh
#

haproxy

#

chkconfig: - 85 15

description: HAProxy is a free, very fast and reliable solution \

offering high availability, load balancing, and \

proxying for TCP and HTTP-based applications

processname: haproxy

config: /etc/haproxy/haproxy.cfg

pidfile: /var/run/haproxy.pid

Source function library.

. /etc/rc.d/init.d/functions

Source networking configuration.

. /etc/sysconfig/network

Check that networking is up.

[ "$NETWORKING" = "no" ] && exit 0

exec="/usr/sbin/haproxy"
prog=$(basename $exec)

[ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog

cfgfile=/etc/haproxy/haproxy.cfg
pidfile=/var/run/haproxy.pid
lockfile=/var/lock/subsys/haproxy

check() {
$exec -c -V -f $cfgfile $OPTIONS
}

start() {
$exec -c -q -f $cfgfile $OPTIONS
if [ $? -ne 0 ]; then
echo "Errors in configuration file, check with $prog check."
return 1
fi

echo -n $"Starting $prog: " # start it up here, usually something like "daemon $exec" daemon $exec -D -f $cfgfile -p $pidfile $OPTIONS retval=$? echo [ $retval -eq 0 ] && touch $lockfile return $retval

}

stop() {
echo -n $"Stopping $prog: "

stop it here, often "killproc $prog"

killproc $prog retval=$? echo [ $retval -eq 0 ] && rm -f $lockfile return $retval

}

restart() {
$exec -c -q -f $cfgfile $OPTIONS
if [ $? -ne 0 ]; then
echo "Errors in configuration file, check with $prog check."
return 1
fi
stop
start
}

reload() {
$exec -c -q -f $cfgfile $OPTIONS
if [ $? -ne 0 ]; then
echo "Errors in configuration file, check with $prog check."
return 1
fi
echo -n $"Reloading $prog: "
$exec -D -f $cfgfile -p $pidfile $OPTIONS -sf $(cat $pidfile)
retval=$?
echo
return $retval
}

force_reload() {
restart
}

fdr_status() {
status $prog
}

case "$1" in
start|stop|restart|reload)
$1
;;
force-reload)
force_reload
;;
check)
check
;;
status)
fdr_status
;;
condrestart|try-restart)
[ ! -f $lockfile ] || restart
;;
*)
echo $"Usage: $0 {start|stop|status|restart|try-restart|reload|force-reload}"
exit 2
esac
復制代碼

#給執行權力
#chmod +x /etc/init.d/haproxy?
回到頂部
3)、提供配置文件
根據上面的啟動腳本建立相應的目錄以及配置文件

mkdir /etc/haproxy

mkdir /var/lib/haproxy

useradd -r haproxy #建立腳本啟動用戶

vi /etc/haproxy/haproxy.cfg

【配置文件】

#這里的配置文件僅僅只是貼出來進行解析說明。

#如果需要這個配置文件最好將注釋解析全部刪除掉,因為我在使用的過程中,正是因為存在注釋解析而導致出錯,刪除后就能正常運行。

#可以下載這個配置文件進行使用,與下面貼出來的配置文件一致,只是不存在注釋解析

#百度云下載該配置文件(不含注釋):鏈接:http://pan.baidu.com/s/1gfOMtKB?密碼:zl9o

復制代碼
global

log 127.0.0.1 local2 //日志定義級別 chroot /var/lib/haproxy //當前工作目錄 pidfile /var/run/haproxy.pid //進程id maxconn 4000 //最大連接數 user haproxy //運行改程序的用戶 group haproxy daemon //后臺形式運行 stats socket /var/lib/haproxy/stats

defaults
mode tcp //haproxy運行模式(http | tcp | health)
log global
option dontlognull
option redispatch //serverId對應的服務器掛掉后,強制定向到其他健康的服務器
retries 3 //三次連接失敗則服務器不用
timeout http-request 10s
timeout queue 1m
timeout connect 10s //連接超時
timeout client 1m //客戶端超時
timeout server 1m //服務器超時
timeout http-keep-alive 10s
timeout check 10s //心跳檢測
maxconn 600 //最大連接數

listen stats //配置haproxy狀態頁(用來查看的頁面)
mode http
bind :8888
stats enable
stats hide-version //隱藏haproxy版本號
stats uri /haproxyadmin?stats //一會用于打開狀態頁的uri
stats realm Haproxy\ Statistics //輸入賬戶密碼時的提示文字
stats auth admin:admin //用戶名:密碼

frontend main?
bind 0.0.0.0:3306 //使用3306端口。監聽前端端口【表示任何ip訪問3306端口都會將數據輪番轉發到mysql服務器群組中】
default_backend mysql //后端服務器組名

backend mysql
balance leastconn //使用最少連接方式調度
server mysql1 192.168.95.11:3306 check port 3306 maxconn 300
server mysql2 192.168.95.12:3306 check port 3306 maxconn 300
復制代碼

回到頂部
4)、啟動日志

vi /etc/rsyslog.conf

#service rsyslog restart
回到頂部
5)、啟動haproxy

service haproxy start

回到頂部
6)、測試haproxy
安照配置文件進行相應的測試

打開瀏覽器輸入192.168.95.13:8888/haproxyadmin?stats

登陸后如下如所示,表明安裝haproxy成功。

回到頂部
5.2、安裝keepalived
官網下載:http://www.keepalived.org/download.html

在192.168.95.13、192.168.95.14安裝keepalived

回到頂部
1)、解決缺少的軟件庫文件
【這一步驟視具體的linux版本而定,有些已經安裝openssl了。具體情況可以執行./configure就能夠確定缺不缺少軟件庫文件了】

首先我們先將keepalived-1.2.19.tar.gz解壓,然后進入目錄./configure查看

tar -zxvf keepalived-1.2.19.tar.gz

./configure --prefix=/usr/local/keepalived --sbindir=/usr/sbin/ --sysconfdir=/etc/ --mandir=/usr/local/share/man/ --with-kernel-dir=/usr/src/kernels/2.6.32-504.el6.x86_64/

由上圖可見keepalived的安裝需要先安裝軟件OpenSSL

缺少頭文件,只需要安裝openssl和openssl-devel即可

最簡單的方法是:yum -y install openssl openssl-devel

沒網的朋友也不用怕,接下來將介紹的是rpm方法安裝:

#掛載光盤,在光盤中查找軟件。若光盤找不到就直接下載,再傳入linux進行安裝

mount /dev/cdrom /home/suifeng2/rom/

cd rom/

cd Packages/

ls |grep openssl

安裝keepalived軟件時存在各種依賴,下圖是我安裝軟件后整理的依賴關系圖:

既然已經知道各軟件依賴,則可按最后面的軟件開始安裝:

(你也可以從前面開始進行安裝,一步一步的查看各個依賴關系)

1、安裝openssl

rpm -ivh openssl-1.0.1e-30.el6.x86_64.rpm

安裝openssl成功

2、安裝openssl-devel

安裝libsepol-devel:

rpm -ivh libsepol-devel-2.0.41-4.el6.x86_64.rpm

安裝pkgconfig(libsepol):

rpm -ivh pkgconfig-0.23-9.1.el6.x86_64.rpm

安裝libselinux-devel:

rpm -ivh libselinux-devel-2.0.94-5.8.el6.x86_64.rpm

安裝keyutils-libs-devel:

rpm -ivh keyutils-libs-devel-1.4-5.el6.x86_64.rpm

安裝libcom_err-devel:

rpm -ivh libcom_err-devel-141.12-21.el6.x86_64.rpm

安裝krb5-devel:

rpm -ivh krb5-devel-1.10.3-33.el6.x86_64.rpm

安裝zlib-devel:

rpm -ivh zlib-devel-1.2.3-29.el6.x86_64.rpm

安裝openssl-devel:

rpm -ivh openssl-devel-1.0.1e-30.el6.x86_64.rpm

回到頂部
2)、編譯安裝keepalived軟件
復制代碼

cd keepalived-1.2.19

./configure --prefix=/usr/local/keepalived --sbindir=/usr/sbin/ --sysconfdir=/etc/ --mandir=/usr/local/share/man/ --with-kernel-dir=/usr/src/kernels/2.6.32-504.el6.x86_64/

make && make install

chkconfig --add keepalived #添加開機自啟(我暫時沒添加)

chkconfig keepalived on

復制代碼

【注意】:

1、安裝時./configure中的—prefix后的幾個選擇可選可不選,選了就可以采用service直接啟動了。建議最好都加上吧

2、--with-kernel-dir這個選項根據自己的linux版本進行填寫(在linux中使用命令uname –a可以查到)

回到頂部
3)、創建配置文件
/etc/keepalived/文件夾已存在keepalived.conf文件,我們將它改名為keepalived.conf.back,再建立一個我們自己keepalived.conf配置文件。

vi /etc/keepalived/keepalived.conf(13與14配置文件路徑一致)

【以下是簡單的配置文件,使用時最好去掉注釋】

配置文件下載(不含注釋):

192.168.95.13配置文件:

復制代碼
! Configuration File for keepalived
#簡單的頭部,這里主要可以做郵件通知報警等的設置,此處就暫不配置了;
global_defs {
notificationd LVS_DEVEL
}
#預先定義一個腳本,方便后面調用,也可以定義多個,方便選擇;
vrrp_script chk_haproxy {
script "/etc/keepalived/chk.sh" #具體腳本路徑
interval 2 #腳本循環運行間隔
}
#VRRP虛擬路由冗余協議配置
vrrp_instance VI_1 { #VI_1 是自定義的名稱;
state BACKUP #MASTER表示是一臺主設備,BACKUP表示為備用設備【我們這里因為設置為開啟不搶占,所以都設置為備用】
nopreempt #開啟不搶占
interface eth0 #指定VIP需要綁定的物理網卡
virtual_router_id 11 #VRID虛擬路由標識,也叫做分組名稱,該組內的設備需要相同
priority 130 #定義這臺設備的優先級 1-254;開啟了不搶占,所以此處優先級必須高于另一臺

advert_int 1 #生存檢測時的組播信息發送間隔,組內一致 authentication { #設置驗證信息,組內一致auth_type PASS #有PASS 和 AH 兩種,常用 PASSauth_pass asd #密碼 } virtual_ipaddress {192.168.95.55 #指定VIP地址,組內一致,可以設置多個IP } track_script { #使用在這個域中使用預先定義的腳本,上面定義的chk_haproxy }notify_backup "/etc/init.d/haproxy restart" #表示當切換到backup狀態時,要執行的腳本 notify_fault "/etc/init.d/haproxy stop" #故障時執行的腳本

}
復制代碼
192.168.95.14配置文件:

配置文件與上面的幾乎一樣,僅僅改變priority 120【只需要比上面的小即可】

回到頂部
4)、創建腳本文件
創建上面配置文件所需的腳本文件(13、14一樣)

(檢測haproxy有沒有發生故障,發生故障則將keepalived停掉,讓出vip)

vi /etc/keepalived/chk.sh#!/bin/bash

#
if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ]; then
/etc/init.d/keepalived stop
fi
給執行權限

chmod +x /etc/keepalived/chk.sh

啟動keepalived:

service keepalived start

安裝keepalived成功!

回到頂部
6、功能測試
測試之前先在mysql1和mysql2中建立一個mysql用戶,此用戶可以允許13、14linux主機登陸:

用戶:jack

密碼:321

host:192.168.95.%

mysql> GRANT ALL ON?.?TO 'jack'@'192.168.95.%' IDENTIFIED BY '321';
mysql> FLUSH PRIVILEGES;
回到頂部
6.1、流程簡述
大概講述一下整體的運作流程:

首先兩個11,12的mysql以及13、14的haproxy、keepalived都啟動;

keepalived在keepalived群組中獲取虛擬IP,以及檢測haproxy是否被kill;

haproxy負責將進來的數據轉發到11或者12的mysql中。

下圖是我畫的簡單理解圖:(相對來說比較簡潔哈,湊合湊合哈)

接下來我們將一個個功能的進行測試驗證。

回到頂部
6.2、測試haproxy監聽前端端口3306
1、frontend監聽端口3306時,將mysql、haproxy、keepalived全部開啟

2、使用任意一個mysql客戶端登陸用戶jack

登陸成功(windowns上登陸mysql)

3、更改frontend監聽端口為3307,繼續操作登陸測試

登陸失敗

結果:說明了frontend監聽端口的用處,有助于我們理解haproxy用法。

回到頂部
6.3、測試高可用+keepalived不搶占vip
可以通過haproxy監控頁面獲知誰獲取了vip

1、依次啟動13、14的keepalived、haproxy(啟動keepalived后將會自動開啟haproxy)

2、訪問http://192.168.95.55:8888/haproxyadmin?stats

13獲取了vip

3、# kill -9 8923

刷新http://192.168.95.55:8888/haproxyadmin?stats

14獲取了vip,機器正常工作

結果:證明了高可用,掛了一臺另一臺繼續工作

4、重新啟動13的haproxy以及keepalived

并刷新http://192.168.95.55:8888/haproxyadmin?stats

結果:此時vip仍在14手中,證明了keepalived配置了不搶占vip,不必浪費資源去獲取vip。

回到頂部
6.4、測試負載均衡
1、全部正常啟動,此時vip在14手中

2、分別在11、12中開啟抓包

tcpdump -n -i eth0 host 192.168.95.11 and 192.168.95.14

tcpdump -n -i eth0 host 192.168.95.12 and 192.168.95.14

3、使用不同客戶端登陸jack用戶,不斷向數據庫添加數據

結果:此時14向11、12都有發送數據,此時證明負載均衡

【我們設置的haproxy中balance方式是最少連接方式,假若采用roundrobin方式測試結果將會更加明顯】

注意:

當某一臺mysql掛了以后,haproxy會將其踢出mysql服務器群組。

當有命令傳來時會將其轉發到正常的服務器上。

當出問題的mysql恢復后,haproxy又會自動地將它放回mysql服務器群組中,并且自動同步沒有同步的數據

測試:

1、全部正常啟動

mysql1、mysql2都正常

2、將mysql2關掉

mysql2出問題,將其踢出mysql群組

3、啟動mysql2

mysql2恢復后又將其放回mysql群組里

【當mysql2掛掉時,若有數據插入,將會轉發給mysql1,當mysql恢復后,又會將這些數據同步到mysql2中】

回到頂部
7、總結與建議
在這篇博文中我們不僅僅只關注這一整個mysql高可用負載均衡的實現方式,我們還應該理解haproxy以及keepalived的工作方式。Haproxy和keepalived這兩個工具很強大,了解他們的實現方式,那么就可以以此類推與其他服務器組合構建強大健壯的服務集群。例如它可以與apache組合,構成高可用負載均衡的web集群。

  這篇文章中只是簡簡單單的搭建了一個mysql高可用負載均衡的環境,真正應用到生產環境中,還需要根據具體項目進行相應的修改。

  最后我的小建議就是看完這篇博客可以去了解了解更多的haproxy和keepalived的相應配置,以及學習與haproxy功能差不多的LVS。


本文轉自 wdy198622 51CTO博客,原文鏈接:http://blog.51cto.com/weimouren/2071375


總結

以上是生活随笔為你收集整理的mysql主主备份及集群的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。