日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

Docker部署Mysql集群的實(shí)現(xiàn)

瀏覽:330日期:2023-10-24 14:17:26

單節(jié)點(diǎn)數(shù)據(jù)庫的弊病

大型互聯(lián)網(wǎng)程序用戶群體龐大,所以架構(gòu)必須要特殊設(shè)計(jì) 單節(jié)點(diǎn)的數(shù)據(jù)庫無法滿足性能上的要求 單節(jié)點(diǎn)的數(shù)據(jù)庫沒有冗余設(shè)計(jì),無法滿足高可用

單節(jié)點(diǎn)MySQL的性能瓶領(lǐng)頸

2016年春節(jié)微信紅包巨大業(yè)務(wù)量,數(shù)據(jù)庫承受巨大負(fù)載

Docker部署Mysql集群的實(shí)現(xiàn)

常見MySQL集群方案

mysql 集群方案介紹,建議使用pxc,因?yàn)槿跻恢滦詴?huì)有問題,比如說a節(jié)點(diǎn)數(shù)據(jù)庫顯示我購買成功,b 節(jié)點(diǎn)數(shù)據(jù)庫顯示沒有成功,這就麻煩了,pxc 方案是在全部節(jié)點(diǎn)都寫入成功之后才會(huì)告訴你成功,是可讀可寫雙向同步的,但是replication是單向的,不同節(jié)點(diǎn)的數(shù)據(jù)庫之間都會(huì)開放端口進(jìn)行通訊,如果從防火墻的這個(gè)端口關(guān)閉,pxc就不會(huì)同步成功,也不會(huì)返給你成功了。

Docker部署Mysql集群的實(shí)現(xiàn)

Replication

速度快,但僅能保證弱一致性,適用于保存價(jià)值不高的數(shù)據(jù),比如日志、帖子、新聞等。 采用master-slave結(jié)構(gòu),在master寫入會(huì)同步到slave,能從slave讀出;但在slave寫入無法同步到master。 采用異步復(fù)制,master寫入成功就向客戶端返回成功,但是同步slave可能失敗,會(huì)造成無法從slave讀出的結(jié)果。

Docker部署Mysql集群的實(shí)現(xiàn)

PXC (Percona XtraDB Cluster)

速度慢,但能保證強(qiáng)一致性,適用于保存價(jià)值較高的數(shù)據(jù),比如訂單、客戶、支付等。 數(shù)據(jù)同步是雙向的,在任一節(jié)點(diǎn)寫入數(shù)據(jù),都會(huì)同步到其他所有節(jié)點(diǎn),在任何節(jié)點(diǎn)上都能同時(shí)讀寫。 采用同步復(fù)制,向任一節(jié)點(diǎn)寫入數(shù)據(jù),只有所有節(jié)點(diǎn)都同步成功后,才會(huì)向客戶端返回成功。事務(wù)在所有節(jié)點(diǎn)要么同時(shí)提交,要么不提交。

Docker部署Mysql集群的實(shí)現(xiàn)

建議PXC使用PerconaServer (MySQL改進(jìn)版,性能提升很大)

PXC的數(shù)據(jù)強(qiáng)一致性

同步復(fù)制,事務(wù)在所有集群節(jié)點(diǎn)要么同時(shí)提交,要么不提交 Replication采用異步復(fù)制,無法保證數(shù)據(jù)的一致性

Docker部署Mysql集群的實(shí)現(xiàn)Docker部署Mysql集群的實(shí)現(xiàn)

PXC集群安裝介紹

在Docker中安裝PXC集群,使用Docker倉庫中的PXC官方鏡像:https://hub.docker.com/r/percona/percona-xtradb-cluster

1、從docker官方倉庫中拉下PXC鏡像:

docker pull percona/percona-xtradb-cluster

或者本地安裝

docker load < /home/soft/pxc.tar.gz

安裝完成:

[root@localhost ~]# docker pull percona/percona-xtradb-clusterUsing default tag: latestTrying to pull repository docker.io/percona/percona-xtradb-cluster ... latest: Pulling from docker.io/percona/percona-xtradb-clusterff144d3c0ab1: Pull complete eafdff1524b5: Pull complete c281665399a2: Pull complete c27d896755b2: Pull complete c43c51f1cccf: Pull complete 6eb96f41c54d: Pull complete 4966940ec632: Pull complete 2bafadcea292: Pull complete 3c2c0e21b695: Pull complete 52a8c2e9228e: Pull complete f3f28eb1ce04: Pull complete d301ece75f56: Pull complete 3d24904bec3c: Pull complete 1053c2982c37: Pull complete Digest: sha256:17c64dacbb9b62bd0904b4ff80dd5973b2d2d931ede2474170cbd642601383bdStatus: Downloaded newer image for docker.io/percona/percona-xtradb-cluster:latest[root@localhost ~]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEdocker.io/percona/percona-xtradb-cluster latest 70b3670450ef 2 months ago 408 MB

2、重命名鏡像:(名稱太長(zhǎng),重命名一下)

docker tag percona/percona-xtradb-cluster:latest pxc

然后原來的鏡像就可以刪除掉了

[root@localhost ~]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEdocker.io/percona/percona-xtradb-cluster latest 70b3670450ef 2 months ago 408 MBpxc latest 70b3670450ef 2 months ago 408 MBdocker.io/java latest d23bdf5b1b1b 2 years ago 643 MB[root@localhost ~]# docker rmi docker.io/percona/percona-xtradb-clusterUntagged: docker.io/percona/percona-xtradb-cluster:latestUntagged: docker.io/percona/percona-xtradb-cluster@sha256:17c64dacbb9b62bd0904b4ff80dd5973b2d2d931ede2474170cbd642601383bd[root@localhost ~]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEpxc latest 70b3670450ef 2 months ago 408 MBdocker.io/java latest d23bdf5b1b1b 2 years ago 643 MB

3、出于安全考慮,給PXC集群創(chuàng)建Docker內(nèi)部網(wǎng)絡(luò)

# 創(chuàng)建網(wǎng)段docker network create --subnet=172.18.0.0/24 net1# 查看網(wǎng)段docker network inspect net1# 刪除網(wǎng)段# docker network rm net1

4、創(chuàng)建Docker卷:使用Docker時(shí),業(yè)務(wù)數(shù)據(jù)應(yīng)保存在宿主機(jī)中,采用目錄映射,這樣可以使數(shù)據(jù)與容器獨(dú)立。但是容器中的PXC無法直接使用映射目錄,解決辦法是采用Docker卷來映射

# 創(chuàng)建名稱為v1的數(shù)據(jù)卷,--name可以省略docker volume create --name v1

查看數(shù)據(jù)卷

docker inspect v1

結(jié)果:

[root@localhost ~]# docker inspect v1[ { 'Driver': 'local', 'Labels': {}, 'Mountpoint': '/var/lib/docker/volumes/v1/_data',#這里是在宿主機(jī)的保存位置 'Name': 'v1', 'Options': {}, 'Scope': 'local' }]

刪除數(shù)據(jù)卷

docker volume rm v1

創(chuàng)建5個(gè)數(shù)據(jù)卷

# 創(chuàng)建5個(gè)數(shù)據(jù)卷docker volume create --name v1docker volume create --name v2docker volume create --name v3docker volume create --name v4docker volume create --name v5

5、創(chuàng)建5個(gè)PXC容器:

# 創(chuàng)建5個(gè)PXC容器構(gòu)成集群# 第一個(gè)節(jié)點(diǎn)docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -v v1:/var/lib/mysql --name=node1 --network=net1 --ip 172.18.0.2 pxc# 在第一個(gè)節(jié)點(diǎn)啟動(dòng)后要等待一段時(shí)間,等候mysql啟動(dòng)完成。# 第二個(gè)節(jié)點(diǎn)docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -e CLUSTER_JOIN=node1 -v v2:/var/lib/mysql --name=node2 --net=net1 --ip 172.18.0.3 pxc# 第三個(gè)節(jié)點(diǎn)docker run -d -p 3308:3306 -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -e CLUSTER_JOIN=node1 -v v3:/var/lib/mysql --name=node3 --net=net1 --ip 172.18.0.4 pxc# 第四個(gè)節(jié)點(diǎn)docker run -d -p 3309:3306 -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -e CLUSTER_JOIN=node1 -v v4:/var/lib/mysql --name=node4 --net=net1 --ip 172.18.0.5 pxc# 第五個(gè)節(jié)點(diǎn)docker run -d -p 3310:3306 -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -e CLUSTER_JOIN=node1 -v v5:/var/lib/mysql --name=node5 --net=net1 --ip 172.18.0.6 pxc

查看:

[root@localhost ~]# docker psCONTAINER ID IMAGECOMMAND CREATED STATUS PORTS NAMESf4708ce32209 pxc '/entrypoint.sh ' About a minute ago Up About a minute 4567-4568/tcp, 0.0.0.0:3309->3306/tcp node4bf612f9586bc pxc '/entrypoint.sh ' 17 minutes ago Up 17 minutes 4567-4568/tcp, 0.0.0.0:3310->3306/tcp node59fdde5e6becd pxc '/entrypoint.sh ' 17 minutes ago Up 17 minutes 4567-4568/tcp, 0.0.0.0:3308->3306/tcp node3edd5794175b6 pxc '/entrypoint.sh ' 18 minutes ago Up 18 minutes 4567-4568/tcp, 0.0.0.0:3307->3306/tcp node233d842de7f42 pxc '/entrypoint.sh ' 21 minutes ago Up 21 minutes 0.0.0.0:3306->3306/tcp, 4567-4568/tcp node1

數(shù)據(jù)庫負(fù)載均衡的必要性

雖然搭建了集群,但是不使用數(shù)據(jù)庫負(fù)載均衡,單節(jié)點(diǎn)處理所有請(qǐng)求,負(fù)載高,性能差

Docker部署Mysql集群的實(shí)現(xiàn)

將請(qǐng)求均勻地發(fā)送給集群中的每一個(gè)節(jié)點(diǎn)。

所有請(qǐng)求發(fā)送給單一節(jié)點(diǎn),其負(fù)載過高,性能很低,而其他節(jié)點(diǎn)卻很空閑。 使用Haproxy做負(fù)載均衡,可以將請(qǐng)求均勻地發(fā)送給每個(gè)節(jié)點(diǎn),單節(jié)點(diǎn)負(fù)載低,性能好

Docker部署Mysql集群的實(shí)現(xiàn)

負(fù)載均衡中間件對(duì)比

負(fù)載均衡首先是數(shù)據(jù)庫的集群,加入5個(gè)集群,每次請(qǐng)求都是第一個(gè)的話,有可能第一個(gè)數(shù)據(jù)庫就掛掉了,所以更優(yōu)的方案是對(duì)不同的節(jié)點(diǎn)都進(jìn)行請(qǐng)求,這就需要有中間件進(jìn)行轉(zhuǎn)發(fā),比較好的中間件有nginx,haproxy等,因nginx 支持插件,但是剛剛支持了tcp/ip 協(xié)議,haproxy 是一個(gè)老牌的中間轉(zhuǎn)發(fā)件。如果要用haproxy的話,可以從官方下載鏡像,然后呢對(duì)鏡像進(jìn)行配置(自己寫好配置文件,因?yàn)檫@個(gè)鏡像是沒有配置文件的,配置好之后再運(yùn)行鏡像的時(shí)候進(jìn)行文件夾的映射,配置文件開放3306(數(shù)據(jù)庫請(qǐng)求,然后根據(jù)check心跳檢測(cè)訪問不同的數(shù)據(jù)庫,8888 對(duì)數(shù)據(jù)庫集群進(jìn)行監(jiān)控))。配置文件里面設(shè)置用戶(用戶在數(shù)據(jù)庫進(jìn)行心跳檢測(cè),判斷哪個(gè)數(shù)據(jù)庫節(jié)點(diǎn)是空閑的,然后對(duì)空閑的進(jìn)行訪問),還有各種算法(比如輪訓(xùn)),最大連接數(shù),時(shí)間等,還有對(duì)集群的監(jiān)控。配置文件寫好以后運(yùn)行這個(gè)鏡像,鏡像運(yùn)行成功后進(jìn)入容器啟動(dòng)配置文件 。其實(shí)haprocy返回的也是一個(gè)數(shù)據(jù)庫實(shí)例(但是并不存儲(chǔ)任何的數(shù)據(jù),只是轉(zhuǎn)發(fā)請(qǐng)求),這個(gè)實(shí)例用來check其他節(jié)點(diǎn)。

Docker部署Mysql集群的實(shí)現(xiàn)

安裝Haproxy

1、從Docker倉庫拉取haproxy鏡像:https://hub.docker.com/_/haproxy

docker pull haproxy

[root@localhost ~]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEdocker.io/haproxy latest 11fa4d7ff427 11 days ago 72.2 MB

2、創(chuàng)建Haproxy配置文件。供Haproxy容器使用(docker中未生成配置文件,我們需要在宿主機(jī)中自己創(chuàng)建配置文件)配置文件詳情參考:https://www.cnblogs.com/wyt007/p/10829184.html

# 啟動(dòng)容器時(shí)使用目錄映射技術(shù)使容器讀取該配置文件touch /home/soft/haproxy/haproxy.cfg

haproxy.cfg

# haproxy.cfgglobal #工作目錄 chroot /usr/local/etc/haproxy #日志文件,使用rsyslog服務(wù)中l(wèi)ocal5日志設(shè)備(/var/log/local5),等級(jí)info log 127.0.0.1 local5 info #守護(hù)進(jìn)程運(yùn)行 daemondefaults log global mode http #日志格式 option httplog #日志中不記錄負(fù)載均衡的心跳檢測(cè)記錄 option dontlognull #連接超時(shí)(毫秒) timeout connect 5000 #客戶端超時(shí)(毫秒) timeout client 50000 #服務(wù)器超時(shí)(毫秒) timeout server 50000#監(jiān)控界面 listen admin_stats #監(jiān)控界面的訪問的IP和端口 bind 0.0.0.0:8888 #訪問協(xié)議 mode http #URI相對(duì)地址 stats uri /dbs #統(tǒng)計(jì)報(bào)告格式 stats realm Global statistics #登陸帳戶信息 stats auth admin:abc123456#數(shù)據(jù)庫負(fù)載均衡listen proxy-mysql #訪問的IP和端口 bind 0.0.0.0:3306 #網(wǎng)絡(luò)協(xié)議 mode tcp #負(fù)載均衡算法(輪詢算法) #輪詢算法:roundrobin #權(quán)重算法:static-rr #最少連接算法:leastconn #請(qǐng)求源IP算法:source balance roundrobin #日志格式 option tcplog #在MySQL中創(chuàng)建一個(gè)沒有權(quán)限的haproxy用戶,密碼為空。Haproxy使用這個(gè)賬戶對(duì)MySQL數(shù)據(jù)庫心跳檢測(cè) option mysql-check user haproxy server MySQL_1 172.18.0.2:3306 check weight 1 maxconn 2000 server MySQL_2 172.18.0.3:3306 check weight 1 maxconn 2000 server MySQL_3 172.18.0.4:3306 check weight 1 maxconn 2000 server MySQL_4 172.18.0.5:3306 check weight 1 maxconn 2000 server MySQL_5 172.18.0.6:3306 check weight 1 maxconn 2000 #使用keepalive檢測(cè)死鏈 option tcpka

3、在數(shù)據(jù)庫集群中創(chuàng)建空密碼、無權(quán)限用戶haproxy,來供Haproxy對(duì)MySQL數(shù)據(jù)庫進(jìn)行心跳檢測(cè)

create user ’haproxy’@’%’ identified by ’’;

4、創(chuàng)建Haproxy容器(name=h1的原因是為了高可用)

# 這里要加 --privilegeddocker run -it -d -p 4001:8888 -p 4002:3306 -v /home/soft/haproxy:/usr/local/etc/haproxy --name h1 --net=net1 --ip 172.18.0.7 --privileged haproxy

5、進(jìn)入容器

docker exec -it h1 bash

6、在容器bash中啟動(dòng)Haproxy

haproxy -f /usr/local/etc/haproxy/haproxy.cfg

接下來便可以在瀏覽器中打開Haproxy監(jiān)控界面,端口4001,在配置文件中定義有用戶名admin,密碼abc123456。我這邊訪問的是http://192.168.63.144:4001/dbs,并且要使用用戶名密碼進(jìn)行登錄(小插曲,使用的是Basic登錄,我的Chrome不知為何被屏蔽了,我最后用的火狐)

Docker部署Mysql集群的實(shí)現(xiàn)

這時(shí)候我們手動(dòng)掛掉一個(gè)Docker節(jié)點(diǎn),看一下變化(我們會(huì)發(fā)現(xiàn)已經(jīng)顯示掛掉了)

Docker部署Mysql集群的實(shí)現(xiàn)

8、Haproxy不存儲(chǔ)數(shù)據(jù),只轉(zhuǎn)發(fā)數(shù)據(jù)。可以在數(shù)據(jù)庫中建立Haproxy的連接,端口4002,用戶名和密碼為數(shù)據(jù)庫集群的用戶名和密碼

為什么要采用雙機(jī)熱備

單節(jié)點(diǎn)Haproxy不具備高可用,必須要有冗余設(shè)計(jì)

雙機(jī)就是兩個(gè)請(qǐng)求處理程序,比如兩個(gè)haproxy,當(dāng)一個(gè)掛掉的時(shí)候,另外 一個(gè)可以頂上。熱備我理解就是keepalive。在haproxy 容器中安裝keepalive。

Docker部署Mysql集群的實(shí)現(xiàn)

虛擬IP地址

linux系統(tǒng)可以在一個(gè)網(wǎng)卡中定義多個(gè)IP地址,把這些地址分配給多個(gè)應(yīng)用程序,這些地址就是虛擬IP,Haproxy的雙機(jī)熱備方案最關(guān)鍵的技術(shù)就是虛擬IP。

關(guān)鍵就是虛擬ip,定義一個(gè)虛擬ip,然后比如兩個(gè)haproxy分別安裝keepalive鏡像,因?yàn)閔aproxy是ubuntu系統(tǒng)的,所以安裝用apt-get,keepalive是作用是搶占虛擬ip,搶到的就是主服務(wù)器,沒有搶到的就是備用服務(wù)器,然后兩個(gè)keepalive進(jìn)行心跳檢測(cè)(就是創(chuàng)建一個(gè)用戶到對(duì)方那里試探,看是否還活著,mysql的集群之間也是心跳檢測(cè)),如果 掛掉搶占ip。所以在啟動(dòng)keepalive 之前首先要編輯好他的配置文件,怎么搶占,權(quán)重是什么,虛擬ip是什么,創(chuàng)建的用戶交什么。配置完啟動(dòng)完以后可以ping一下看是否正確,然后將虛擬ip映射到局域網(wǎng)的ip

Docker部署Mysql集群的實(shí)現(xiàn)

利用Keepalived實(shí)現(xiàn)雙機(jī)熱備

定義虛擬IP 在Docker中啟動(dòng)兩個(gè)Haproxy容器,每個(gè)容器中還需要安裝Keepalived程序(以下簡(jiǎn)稱KA) 兩個(gè)KA會(huì)爭(zhēng)搶虛擬IP,一個(gè)搶到后,另一個(gè)沒搶到就會(huì)等待,搶到的作為主服務(wù)器,沒搶到的作為備用服務(wù)器 兩個(gè)KA之間會(huì)進(jìn)行心跳檢測(cè),如果備用服務(wù)器沒有受到主服務(wù)器的心跳響應(yīng),說明主服務(wù)器發(fā)生故障,那么備用服務(wù)器就可以爭(zhēng)搶虛擬IP,繼續(xù)工作 我們向虛擬IP發(fā)送數(shù)據(jù)庫請(qǐng)求,一個(gè)Haproxy掛掉,可以有另一個(gè)接替工作

Docker部署Mysql集群的實(shí)現(xiàn)

Нaproxy雙機(jī)熱備方案

Docker部署Mysql集群的實(shí)現(xiàn)

Docker中創(chuàng)建兩個(gè)Haproxy,并通過Keepalived搶占Docker內(nèi)地虛擬IP

Docker內(nèi)的虛擬IP不能被外網(wǎng),所以需要借助宿主機(jī)Keepalived映射成外網(wǎng)可以訪問地虛擬IP

安裝Keepalived

1、進(jìn)入Haproxy容器,安裝Keepalived:

$ docker exec -it h1 bashapt-get updateapt-get install keepalived

2、Keepalived配置文件(Keepalived.conf):Keepalived的配置文件是/etc/keepalived/keepalived.conf

# vim /etc/keepalived/keepalived.confvrrp_instance VI_1 { state MASTER # Keepalived的身份(MASTER主服務(wù)要搶占IP,BACKUP備服務(wù)器不會(huì)搶占IP)。 interface eth0 # docker網(wǎng)卡設(shè)備,虛擬IP所在 virtual_router_id 51 # 虛擬路由標(biāo)識(shí),MASTER和BACKUP的虛擬路由標(biāo)識(shí)必須一致。從0~255 priority 100 # MASTER權(quán)重要高于BACKUP數(shù)字越大優(yōu)先級(jí)越高 advert_int 1 # MASTER和BACKUP節(jié)點(diǎn)同步檢查的時(shí)間間隔,單位為秒,主備之間必須一致 authentication { # 主從服務(wù)器驗(yàn)證方式。主備必須使用相同的密碼才能正常通信 auth_type PASS auth_pass 123456 } virtual_ipaddress { # 虛擬IP??梢栽O(shè)置多個(gè)虛擬IP地址,每行一個(gè) 172.18.0.201 }}

3、啟動(dòng)Keepalived

service keepalived start

啟動(dòng)成功后,通過ip a可以查看網(wǎng)卡中虛擬IP是否成功,另外可以在宿主機(jī)中ping成功虛擬IP172.18.0.201

4、可以按照以上步驟,再另外創(chuàng)建一個(gè)Haproxy容器,注意映射的宿主機(jī)端口不能重復(fù),Haproxy配置一樣。然后在容器中安裝Keepalived,配置也基本一樣(可以修改優(yōu)先權(quán)重)。這樣便基本實(shí)現(xiàn)了Haproxy雙機(jī)熱備方案命令如下:

創(chuàng)建Haproxy容器(name=h2的原因是為了高可用)

# 這里要加 --privilegeddocker run -it -d -p 4003:8888 -p 4004:3306 -v /home/soft/haproxy:/usr/local/etc/haproxy --name h2 --net=net1 --ip 172.18.0.8 --privileged haproxy

進(jìn)入容器

docker exec -it h2 bash

在容器bash中啟動(dòng)Haproxy

haproxy -f /usr/local/etc/haproxy/haproxy.cfg

接下來便可以在瀏覽器中打開Haproxy監(jiān)控界面,端口4003,在配置文件中定義有用戶名admin,密碼abc123456。我這邊訪問的是http://192.168.63.144:4003/dbs,并且要使用用戶名密碼進(jìn)行登錄(小插曲,使用的是Basic登錄,我的Chrome不知為何被屏蔽了,我最后用的火狐)

安裝Keepalived:

apt-get updateapt-get install keepalived

Keepalived配置文件(Keepalived.conf):Keepalived的配置文件是/etc/keepalived/keepalived.conf

# vim /etc/keepalived/keepalived.confvrrp_instance VI_1 { state MASTER # Keepalived的身份(MASTER主服務(wù)要搶占IP,BACKUP備服務(wù)器不會(huì)搶占IP)。 interface eth0 # docker網(wǎng)卡設(shè)備,虛擬IP所在 virtual_router_id 51 # 虛擬路由標(biāo)識(shí),MASTER和BACKUP的虛擬路由標(biāo)識(shí)必須一致。從0~255 priority 100 # MASTER權(quán)重要高于BACKUP數(shù)字越大優(yōu)先級(jí)越高 advert_int 1 # MASTER和BACKUP節(jié)點(diǎn)同步檢查的時(shí)間間隔,單位為秒,主備之間必須一致 authentication { # 主從服務(wù)器驗(yàn)證方式。主備必須使用相同的密碼才能正常通信 auth_type PASS auth_pass 123456 } virtual_ipaddress { # 虛擬IP??梢栽O(shè)置多個(gè)虛擬IP地址,每行一個(gè) 172.18.0.201 }}

啟動(dòng)Keepalived

service keepalived start

啟動(dòng)成功后,通過ip a可以查看網(wǎng)卡中虛擬IP是否成功,另外可以在宿主機(jī)中ping成功虛擬IP172.18.0.201

實(shí)現(xiàn)外網(wǎng)訪問虛擬IP

查看當(dāng)前局域網(wǎng)IP分配情況:

yum install nmap -ynmap -sP 192.168.1.0/24

在宿主機(jī)中安裝Keepalived

yum install keepalived

宿主機(jī)Keepalived配置如下(/etc/keepalived/keepalived.conf):

vrrp_instance VI_1 { state MASTER#這里是宿主機(jī)的網(wǎng)卡,可以通過ip a查看當(dāng)前自己電腦上用的網(wǎng)卡名是哪個(gè) interface ens33 virtual_router_id 100 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress {#這里是指定的一個(gè)宿主機(jī)上的虛擬ip,一定要和宿主機(jī)網(wǎng)卡在同一個(gè)網(wǎng)段,#我的宿主機(jī)網(wǎng)卡ip是192.168.63.144,所以指定虛擬ip是160 192.168.63.160 }} #接受監(jiān)聽數(shù)據(jù)來源的端口,網(wǎng)頁入口使用virtual_server 192.168.63.160 8888 { delay_loop 3 lb_algo rr lb_kind NAT persistence_timeout 50 protocol TCP#把接受到的數(shù)據(jù)轉(zhuǎn)發(fā)給docker服務(wù)的網(wǎng)段及端口,由于是發(fā)給docker服務(wù),所以和docker服務(wù)數(shù)據(jù)要一致 real_server 172.18.0.201 8888 { weight 1 }} #接受數(shù)據(jù)庫數(shù)據(jù)端口,宿主機(jī)數(shù)據(jù)庫端口是3306,所以這里也要和宿主機(jī)數(shù)據(jù)接受端口一致virtual_server 192.168.63.160 3306 { delay_loop 3 lb_algo rr lb_kind NAT persistence_timeout 50 protocol TCP#同理轉(zhuǎn)發(fā)數(shù)據(jù)庫給服務(wù)的端口和ip要求和docker服務(wù)中的數(shù)據(jù)一致 real_server 172.18.0.201 3306 { weight 1 }}

啟動(dòng)Keepalived服務(wù)

service keepalived start#service keepalived status#service keepalived stop

之后其他電腦便可以通過虛擬IP192.168.63.160的8888和3306端口來訪問宿主機(jī)Docker中的172.18.0.201的相應(yīng)端口。

暫停PXC集群的辦法

vi /etc/sysctl.conf#文件中添加net.ipv4.ip_forward=1這個(gè)配置systemctl restart network

然后把虛擬機(jī)掛起

熱備份數(shù)據(jù)

冷備份

冷備份是關(guān)閉數(shù)據(jù)庫時(shí)候的備份方式,通常做法是拷貝數(shù)據(jù)文件 是簡(jiǎn)單安全的一種備份方式,不能在數(shù)據(jù)庫運(yùn)行時(shí)備份。 大型網(wǎng)站無法做到關(guān)閉業(yè)務(wù)備份數(shù)據(jù),所以冷備份不是最佳選擇

熱備份

熱備份是在系統(tǒng)運(yùn)行狀態(tài)下備份數(shù)據(jù)

MySQL常見的熱備份有LVM和XtraBackup兩種方案

LVM:linux的分區(qū)備份命令,可以備份任何數(shù)據(jù)庫;但是會(huì)對(duì)數(shù)據(jù)庫加鎖,只能讀取;而且命令復(fù)雜 XtraBackup:不需要鎖表,而且免費(fèi)

XtraBackup

XtraBackup是一款基于InnoDB的在線熱備工具,具有開源免費(fèi),支持在線熱備,占用磁盤空間小,能夠非??焖俚貍浞菖c恢復(fù)mysql數(shù)據(jù)庫

備份過程中不鎖表,快速可靠 備份過程中不會(huì)打斷正在執(zhí)行地事務(wù) 備份數(shù)據(jù)經(jīng)過壓縮,占用磁盤空間小

全量備份和增量備份

全量備份:備份全部數(shù)據(jù)。備份過程時(shí)間長(zhǎng),占用空間大。第一次備份要使用全量備份 增量備份: 只備份變化的那部分?jǐn)?shù)據(jù)。備份的時(shí)間短,占用空間小。第二次以后使用增量備份

PXC全量備份

備份要在某個(gè)PXC節(jié)點(diǎn)的容器內(nèi)進(jìn)行,但應(yīng)該把備份數(shù)據(jù)保存到宿主機(jī)內(nèi)。所以采用目錄映射技術(shù)。先新建Docker卷:

docker volume create backup

挑選一個(gè)PXC節(jié)點(diǎn)node1,將其容器停止并刪除,然后重新創(chuàng)建一個(gè)增加了backup目錄映射的node1容器

docker stop node1docker rm node1 # 數(shù)據(jù)庫數(shù)據(jù)保存在Docker卷v1中,不會(huì)丟失# 參數(shù)改變:# 1. -e CLUSTER_JOIN=node2;原來其他節(jié)點(diǎn)是通過node1加入集群的,現(xiàn)在node1重新創(chuàng)建,需要選擇一個(gè)其他節(jié)點(diǎn)加入集群# 2. -v backup:/data;將Docker卷backup映射到容器的/data目錄docker run -d -u root -p 3306:3306 -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -e CLUSTER_JOIN=node2 -v v1:/var/lib/mysql -v backup:/data --network=net1 --ip 172.18.0.2 --name=node1 pxc

在node1容器中安裝percona-xtrabackup-24

docker exec -it node1 bashapt-get updateapt-get install percona-xtrabackup-24

之后便可以執(zhí)行如下命令進(jìn)行全量備份,備份后的數(shù)據(jù)會(huì)保存在/data/backup/full目錄下:

mkdir /data/backupmkdir /data/backup/full#不建議,已過時(shí) innobackupex --backup -u root -p abc123456 --target-dir=/data/backup/fullxtrabackup --backup -uroot -pabc123456 --target-dir=/data/backup/full

官方文檔已經(jīng)不推薦使用innobackupex,而推薦使用xtrabackup命令

PXC全量還原

數(shù)據(jù)庫可以熱備份,但是不能熱還原,否則會(huì)造成業(yè)務(wù)數(shù)據(jù)和還原數(shù)據(jù)的沖突。

對(duì)于PXC集群為了避免還原過程中各節(jié)點(diǎn)數(shù)據(jù)同步?jīng)_突的問題,我們要先解散原來的集群,刪除節(jié)點(diǎn)。然后新建節(jié)點(diǎn)空白數(shù)據(jù)庫,執(zhí)行還原,最后再建立起其他集群節(jié)點(diǎn)。

還原前還要將熱備份保存的未提交的事務(wù)回滾,還原之后重啟MySQL

停止并刪除PXC集群所有節(jié)點(diǎn)

docker stop node1 node2 node3 node4 node5docker rm node1 node2 node3 node4 node5docker volume rm v1 v2 v3 v4 v5

按照之前的步驟重新創(chuàng)建node1容器,并進(jìn)入容器,執(zhí)行冷還原

# 創(chuàng)建卷docker volume create v1# 創(chuàng)建容器docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -v v1:/var/lib/mysql -v backup:/data --name=node1 --network=net1 --ip 172.18.0.2 pxc# 以root身份進(jìn)入容器docker exec -it -uroot node1 bash# 刪除數(shù)據(jù)rm -rf /var/lib/mysql/*# 準(zhǔn)備階段xtrabackup --prepare --target-dir=/data/backup/full/# 執(zhí)行冷還原xtrabackup --copy-back --target-dir=/data/backup/full/# 更改還原后的數(shù)據(jù)庫文件屬主chown -R mysql:mysql /var/lib/mysql# 退出容器后,重啟容器docker stop node1docker start node1

到此這篇關(guān)于Docker部署Mysql集群的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Docker部署Mysql集群內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: MySQL 數(shù)據(jù)庫
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
在线精品视频在线观看高清| 国产主播一区| 欧美日韩三区| 蜜臀va亚洲va欧美va天堂| 免费在线观看视频一区| 亚洲香蕉视频| 欧美欧美黄在线二区| 欧美日韩亚洲在线观看| 精品一区二区男人吃奶| 国产精品一区二区精品视频观看 | 伊人久久在线| 美女视频黄久久| 国产福利资源一区| 日韩精品一级| 国产日本精品| 国产黄色精品| 国产aⅴ精品一区二区三区久久| 日本va欧美va精品发布| 日韩精品一二区| 亚洲国产日韩欧美在线| 日韩另类视频| 亚洲成人三区| 美女精品一区| 日欧美一区二区| 国产精品亚洲片在线播放| 国产麻豆一区二区三区| 国产精选久久| 风间由美中文字幕在线看视频国产欧美| 国产精品高潮呻吟久久久久| 国产精品亚洲欧美| 97精品国产99久久久久久免费| 国产一卡不卡| 成人污污视频| 狠狠干成人综合网| 亚洲精品观看| 成人午夜在线| 亚洲精品九九| 动漫av一区| 国产亚洲午夜| 日韩在线观看一区二区| 国产亚洲久久| 美女精品在线观看| 日韩精品久久久久久久电影99爱| 亚洲免费专区| 亚洲一级影院| 国产精品99一区二区三区| 在线看片一区| 激情欧美日韩一区| 精品一区二区三区在线观看视频 | 蜜臀av国产精品久久久久| 日韩国产一区二区三区| 国产精品美女久久久久久不卡| 国产一区二区精品| 日本欧美不卡| 日产午夜精品一线二线三线| 国产视频一区二| 蜜桃av一区二区在线观看| 免费人成精品欧美精品| 亚洲欧美网站| 亚洲精品黄色| 久久亚洲国产精品一区二区| 每日更新成人在线视频| 在线亚洲国产精品网站| 亚洲激情另类| 亚洲综合图色| 久久精品三级| 香蕉国产精品| 四虎精品永久免费| 国产中文欧美日韩在线 | 欧美高清一区| 亚洲精品观看| 福利一区二区| 久久伦理在线| 国产精品红桃| 欧美日韩色图| 国产三级一区| 久久精品观看| 99日韩精品| 精品日本视频| 蜜臀国产一区| 综合干狼人综合首页| 日产精品一区二区| 亚洲3区在线| 亚洲精品午夜av福利久久蜜桃| 老司机精品在线| 日本不卡中文字幕| 日韩中文字幕一区二区三区| 久久精品亚洲欧美日韩精品中文字幕| 国产精品蜜月aⅴ在线| 亚洲免费毛片| 日韩中文字幕av电影| 久久久噜噜噜| 国产精品欧美一区二区三区不卡 | 日韩啪啪电影网| 国产精品2023| 日本精品另类| 免费成人在线观看| 欧美91视频| 亚洲天堂1区| 日韩在线视频精品| 麻豆国产在线| 97精品在线| 日韩1区2区| 精品久久久网| 欧美精品1区| 亚洲三级精品| 综合国产在线| 中文一区一区三区免费在线观 | 国产精品亚洲综合在线观看| 久久午夜精品一区二区| 久久精品免费一区二区三区| 国产拍在线视频| 成人精品视频| 久久电影tv| 人人香蕉久久| 久久久久网站| 精品中文一区| 亚洲黄色影院| 老司机久久99久久精品播放免费| 国产视频亚洲| 中文一区一区三区免费在线观 | 日韩一区二区三免费高清在线观看 | 精品久久中文| 久久精品国内一区二区三区| 久久久国产精品入口麻豆| 国产精品一区二区免费福利视频 | 日韩专区视频网站| 亚洲2区在线| 久久精品xxxxx| 精品黄色一级片| 日韩欧美一区免费| 99久久久久久中文字幕一区| 久久精品青草| 在线亚洲成人| 亚洲tv在线| 国产精品综合色区在线观看| 久久亚州av| 日本精品影院| 首页亚洲欧美制服丝腿| 亚洲专区视频| 国产精品一区二区av日韩在线| 欧美国产专区| 桃色av一区二区| 狠狠色综合网| 日韩精品亚洲一区二区三区免费| 国产日产精品_国产精品毛片| 精品视频国产| 狠狠操综合网| 少妇精品久久久一区二区三区| 欧美日韩亚洲一区| av中文字幕在线观看第一页| 在线视频观看日韩| 视频一区中文字幕精品| 久久的色偷偷| 欧美三级精品| 中文一区二区| 国产日产高清欧美一区二区三区 | 欧美特黄视频| 日韩国产一区二| 91日韩在线| 欧美影院视频| 日本在线不卡视频| 日韩欧美一区二区三区在线观看 | av一区二区高清| 亚洲精品系列| 欧美va亚洲va日韩∨a综合色| 久久国产精品99国产| 久久精品国产999大香线蕉| 欧美黄色一区| 日韩激情网站| 91成人小视频| 婷婷精品在线| 国产乱论精品| 美女视频免费精品| 日本视频一区二区| 日本综合精品一区| 免费人成精品欧美精品 | 日本黄色精品| 久久久777| 亚洲精选久久| 国产精品伦理久久久久久| 午夜久久黄色| 国产精品啊啊啊| 1024精品一区二区三区| 日本va欧美va精品发布| 久久伦理在线| 国产精品一区二区三区www| 成人亚洲一区| 综合国产视频| 亚洲1234区| 欧美日韩亚洲三区| 亚洲国产专区| 麻豆精品在线播放| 亚洲一区观看| 亚洲一区黄色| 欧美日韩亚洲一区二区三区在线| 国产欧美一区二区三区米奇| 激情欧美亚洲| 97精品97| 日韩电影二区|