「實(shí)戰(zhàn)篇」開(kāi)源項(xiàng)目docker化運(yùn)維部署-搭建mysql集群(四)

原創(chuàng)文章隘击,歡迎轉(zhuǎn)載膏孟。轉(zhuǎn)載請(qǐng)注明:轉(zhuǎn)載自IT人故事會(huì)鹃锈,謝謝!
原文鏈接地址:「實(shí)戰(zhàn)篇」開(kāi)源項(xiàng)目docker化運(yùn)維部署-搭建mysql集群(四)

有了docker虛擬機(jī)宪萄,就需要利用平臺(tái)部署數(shù)據(jù)庫(kù)的集群,在實(shí)際操作之前介紹下數(shù)據(jù)庫(kù)集群的方案和各自的特點(diǎn)榨惰。源碼:https://github.com/limingios/netFuture/tree/master/mysql-pxc/

集群的方案

單節(jié)點(diǎn)的弊病

  1. 大型互聯(lián)網(wǎng)程序用戶(hù)群體龐大拜英,所以架構(gòu)必須要特殊設(shè)計(jì)
  2. 單節(jié)點(diǎn)的數(shù)據(jù)庫(kù)無(wú)法滿(mǎn)足性能的要求

案例15年前,高考成績(jī)可以在網(wǎng)上查(河南幾十萬(wàn)考生)琅催,那時(shí)候基本家里都沒(méi)電腦居凶,都是去網(wǎng)吧白天去網(wǎng)吧也查不了虫给,太慢了,后來(lái)半夜通宵有時(shí)候可以查到侠碧,也就是說(shuō)白天基本查不了人太多了抹估。晚上看運(yùn)氣。一個(gè)數(shù)據(jù)庫(kù)的實(shí)例1萬(wàn)多人就無(wú)法反應(yīng)了弄兜。

  1. 單節(jié)點(diǎn)的數(shù)據(jù)庫(kù)沒(méi)有冗余設(shè)計(jì)药蜻,無(wú)法滿(mǎn)足高可用

常用的mysql集群設(shè)計(jì)方案

  • Replication
  1. 速度快
  2. 弱一致性
  3. 低價(jià)值
  4. 場(chǎng)景:日志,新聞替饿,帖子
  • PXC
  1. 速度慢
  2. 強(qiáng)一致性
  3. 高價(jià)值
  4. 場(chǎng)景:訂單语泽,賬戶(hù),財(cái)務(wù)

Percona Xtradb Cluster视卢,簡(jiǎn)稱(chēng)PXC踱卵。是基于Galera插件的MySQL集群。相比那些比較傳統(tǒng)的基于主從復(fù)制模式的集群架構(gòu)MHA和MM+keepalived据过,galera cluster最突出特點(diǎn)就是解決了詬病已久的數(shù)據(jù)復(fù)制延遲問(wèn)題惋砂,基本上可以達(dá)到實(shí)時(shí)同步。而且節(jié)點(diǎn)與節(jié)點(diǎn)之間绳锅,他們相互的關(guān)系是對(duì)等的班利。本身galera cluster也是一種多主架構(gòu)绩郎。galera cluster最關(guān)注的是數(shù)據(jù)的一致性莲组,對(duì)待事物的行為時(shí),要么在所有節(jié)點(diǎn)上執(zhí)行获枝,要么都不執(zhí)行积蜻,它的實(shí)現(xiàn)機(jī)制決定了它對(duì)待一致性的行為非常嚴(yán)格闯割,這也能非常完美的保證MySQL集群的數(shù)據(jù)一致性。在PXC里面任何一個(gè)節(jié)點(diǎn)都是可讀可寫(xiě)的竿拆。在其他的節(jié)點(diǎn)一定是可以讀取到這個(gè)數(shù)據(jù)宙拉。

  • 建議PXC使用PerconaServer(MYSQL的改進(jìn)版,性能提升很大)
  • PXC方案和Replication方案的對(duì)比

PXC任意一個(gè)節(jié)點(diǎn)都可以存在讀寫(xiě)的方案丙笋,也就是任意一個(gè)節(jié)點(diǎn)都可以當(dāng)讀或者當(dāng)寫(xiě)谢澈。同步復(fù)制。保證強(qiáng)一致性御板。

Replication方案锥忿,主從的方式,他是采用異步的方式怠肋。

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

同步復(fù)制敬鬓,事務(wù)在所有節(jié)點(diǎn)要提交都提交。要么都不提交

  • Replication弱一致性,主要master成功就成功了钉答。返回給調(diào)用者础芍。如果slave失敗,也沒(méi)辦法数尿。因?yàn)橐呀?jīng)告訴調(diào)用者成功了仑性,調(diào)用者獲取查詢(xún)的時(shí)候查詢(xún)不到信息。例如:在淘寶買(mǎi)個(gè)東西右蹦,付款也成功了诊杆,查詢(xún)訂單沒(méi)信息是不是要罵娘。

環(huán)境搭建

應(yīng)用 IP地址 服務(wù) 配置 安裝應(yīng)用 安裝方式
docker-mysql 192.168.66.100 docker-mysql 雙核 8g內(nèi)存 docker-mysql docker

(1). 虛擬機(jī)vagrant講述安裝的步驟

vagrant up

(2).機(jī)器window/mac開(kāi)通遠(yuǎn)程登錄root用戶(hù)下

su -
# 密碼
vagrant
#設(shè)置 PasswordAuthentication yes
vi /etc/ssh/sshd_config
sudo systemctl restart sshd

PXC集群安裝介紹

PXC既可以在linux系統(tǒng)安裝嫩实,也可以在docker上面安裝刽辙。

  • 安裝鏡像PXC鏡像
docker pull percona/percona-xtradb-cluster
#本地安裝
docker load </home/soft/pxc.tar.gz
  • 創(chuàng)建內(nèi)部網(wǎng)絡(luò)的

處于安全,需要給PXC集群實(shí)例創(chuàng)建Docker內(nèi)部網(wǎng)絡(luò)甲献,都出可虛擬機(jī)自帶的網(wǎng)段是172.17.0.宰缤, 這是內(nèi)置的一個(gè)網(wǎng)段,當(dāng)你創(chuàng)建了網(wǎng)絡(luò)后晃洒,網(wǎng)段就更改為172.18.0.慨灭,

docker network create net1
docker network inspect net1
docker network rm net1
#設(shè)置網(wǎng)段
docker network create  --subnet=172.18.0.0/24 net1
  • 創(chuàng)建Docker 卷

一旦生成docker容器,不要在容器內(nèi)保存業(yè)務(wù)的數(shù)據(jù)球及,要把數(shù)據(jù)放到宿主機(jī)上氧骤,可以把宿主機(jī)的一個(gè)目錄映射到容器內(nèi),如果容器出現(xiàn)問(wèn)題吃引,只需要吧容器刪除筹陵,重新建立一個(gè)新的容器把目錄映射給新的容器。

之前一直有個(gè)疑問(wèn)镊尺,如果直接映射目錄的吧朦佩,存在失敗的問(wèn)題,現(xiàn)在終于知道解決方案了庐氮,直接映射docker卷就可以可以忽略這個(gè)問(wèn)題了语稠。

容器中的PXC節(jié)點(diǎn)映射數(shù)據(jù)目錄的解決方法

docker volume create name --v1

mysql pxc搭建

  • 腳本開(kāi)發(fā)
#!/bin/bash
echo "創(chuàng)建網(wǎng)絡(luò)"
docker network create  --subnet=172.18.0.0/24 net1

echo "創(chuàng)建5個(gè)docker卷"
docker volume create v1
docker volume create v2
docker volume create v3
docker volume create v4
docker volume create v5

echo "創(chuàng)建節(jié)點(diǎn) node1"
docker run -d -p 3306:3306  --net=net1 --name=node1 \
        -e CLUSTER_NAME=PXC \
        -e MYSQL_ROOT_PASSWORD=a123456 \
        -e XTRABACKUP_PASSWORD=a123456 \
        -v v1:/var/lib/mysql \
        --privileged \
        --ip 172.18.0.2 \
        percona/percona-xtradb-cluster
sleep 1m 
echo "創(chuàng)建節(jié)點(diǎn) node2"
docker run -d -p 3307:3306  --net=net1 --name=node2 \
        -e CLUSTER_NAME=PXC \
        -e MYSQL_ROOT_PASSWORD=a123456 \
        -e XTRABACKUP_PASSWORD=a123456 \
        -e CLUSTER_JOIN=node1 \
        -v v2:/var/lib/mysql \
        --privileged \
        --ip 172.18.0.3 \
        percona/percona-xtradb-cluster
sleep 1m 
echo "創(chuàng)建節(jié)點(diǎn) node3"
docker run -d -p 3308:3306  --net=net1 --name=node3 \
        -e CLUSTER_NAME=PXC \
        -e MYSQL_ROOT_PASSWORD=a123456 \
        -e XTRABACKUP_PASSWORD=a123456 \
        -e CLUSTER_JOIN=node1 \
        -v v3:/var/lib/mysql \
        --privileged \
        --ip 172.18.0.4 \
        percona/percona-xtradb-cluster
sleep 1m 
echo "創(chuàng)建節(jié)點(diǎn) node4"
docker run -d -p 3309:3306  --net=net1 --name=node4 \
        -e CLUSTER_NAME=PXC \
        -e MYSQL_ROOT_PASSWORD=a123456 \
        -e XTRABACKUP_PASSWORD=a123456 \
        -e CLUSTER_JOIN=node1 \
        -v v4:/var/lib/mysql \
        --privileged \
        --ip 172.18.0.5 \
        percona/percona-xtradb-cluster
sleep 1m 
echo "創(chuàng)建節(jié)點(diǎn) node5"
docker run -d -p 3310:3306  --net=net1 --name=node5 \
        -e CLUSTER_NAME=PXC \
        -e MYSQL_ROOT_PASSWORD=a123456 \
        -e XTRABACKUP_PASSWORD=a123456 \
        -e CLUSTER_JOIN=node1 \
        -v v5:/var/lib/mysql \
        --privileged \
        --ip 172.18.0.6 \
        percona/percona-xtradb-cluster

新建立一個(gè)aaa數(shù)據(jù)庫(kù) 結(jié)果都可以用

哇塞就這么簡(jiǎn)單,成功的搭建了mysql的集群

增加負(fù)載均衡方案

目前數(shù)據(jù)庫(kù)都是獨(dú)立的ip弄砍,在開(kāi)發(fā)的時(shí)候總不能隨機(jī)連接一個(gè)數(shù)據(jù)庫(kù)吧仙畦。如果想請(qǐng)求,統(tǒng)一的口徑音婶,這就需要搭建負(fù)載均衡了慨畸。雖然上邊已經(jīng)搭建了集群,但是不使用數(shù)據(jù)庫(kù)負(fù)載均衡桃熄,單節(jié)點(diǎn)處理所有請(qǐng)求先口,負(fù)載高型奥,性能差瞳收。下圖就是一個(gè)節(jié)點(diǎn)很忙碉京,其他節(jié)點(diǎn)很閑。

  • 調(diào)整后的方案螟深,使用Haproxy做負(fù)載均衡谐宙,請(qǐng)求被均勻分發(fā)到每個(gè)節(jié)點(diǎn),單節(jié)點(diǎn)的負(fù)載低界弧,性能好凡蜻。haproxy不是數(shù)據(jù)庫(kù),只是一個(gè)轉(zhuǎn)發(fā)器垢箕。
  • 負(fù)載均衡中間件對(duì)比

LVS是不能在虛擬機(jī)環(huán)境下安裝的划栓。

  • 安裝haproxy

docker-haproxy的介紹:https://hub.docker.com/_/haproxy/

  • 配置文件
mkdir haproxy/h1
pwd
vi haproxy.cfg
  • haproxy.cfg配置

登錄:admin
密碼:abc123456

global
    #工作目錄
    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)行
    daemon

defaults
    log global
    mode    http
    #日志格式
    option  httplog
    #日志中不記錄負(fù)載均衡的心跳檢測(cè)記錄
    option  dontlognull
    #連接超時(shí)(毫秒)
    timeout connect 5000
    #客戶(hù)端超時(shí)(毫秒)
    timeout client  50000
    #服務(wù)器超時(shí)(毫秒)
    timeout server  50000

#監(jiān)控界面   
listen  admin_stats
    #監(jiān)控界面的訪問(wèn)的IP和端口
    bind  0.0.0.0:8888
    #訪問(wèn)協(xié)議
    mode        http
    #URI相對(duì)地址
    stats uri   /dbs
    #統(tǒng)計(jì)報(bào)告格式
    stats realm     Global\ statistics
    #登陸帳戶(hù)信息
    stats auth  admin:abc123456
#數(shù)據(jù)庫(kù)負(fù)載均衡
listen  proxy-mysql
    #訪問(wèn)的IP和端口
    bind  0.0.0.0:3306  
    #網(wǎng)絡(luò)協(xié)議
    mode  tcp
    #負(fù)載均衡算法(輪詢(xún)算法)
    #輪詢(xún)算法:roundrobin
    #權(quán)重算法:static-rr
    #最少連接算法:leastconn
    #請(qǐng)求源IP算法:source 
    balance  roundrobin
    #日志格式
    option  tcplog
    #在MySQL中創(chuàng)建一個(gè)沒(méi)有權(quán)限的haproxy用戶(hù)忠荞,密碼為空。Haproxy使用這個(gè)賬戶(hù)對(duì)MySQL數(shù)據(jù)庫(kù)心跳檢測(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  
  • 創(chuàng)建docker下的haproxy容器
docker run -it -d -p 4001:8888 \
-p 4002:3306 \
-v /root/haproxy/h1:/usr/local/etc/haproxy \
--name h1 --privileged --net=net1 \
--ip 172.18.0.7 haproxy
  • 進(jìn)入容器后帅掘,加載配置文件
docker exec -it h1 /bin/bash
haproxy -f /usr/local/etc/haproxy/haproxy.cfg 
  • 在數(shù)據(jù)庫(kù)中創(chuàng)建一個(gè)haproxy的用戶(hù)委煤,不需要設(shè)置密碼
  • 登錄haproxy網(wǎng)頁(yè)端

http://192.168.66.100:4001/dbs

  • 客戶(hù)端連接haproxy-mysql數(shù)據(jù)庫(kù)

正常的連接haproxy,傳遞增刪蓋查修档,其實(shí)是通過(guò)輪詢(xún)的方式碧绞。選擇mysql的節(jié)點(diǎn)。均勻的分發(fā)給mysql的實(shí)例吱窝。不會(huì)吧數(shù)據(jù)庫(kù)的請(qǐng)求都集中在一個(gè)節(jié)點(diǎn)上讥邻。把請(qǐng)求分散出去,每個(gè)數(shù)據(jù)庫(kù)實(shí)例獲取到的請(qǐng)求就小很多了院峡。這就是數(shù)據(jù)庫(kù)的負(fù)載兴使。

  • 虛擬機(jī)重啟后,發(fā)現(xiàn)pxc起不起來(lái)了

查看日志發(fā)現(xiàn)撕予,node1無(wú)法啟動(dòng)鲫惶,輸入命令查看docker logs node1

It may not be safe to bootstrap the cluster from this node. It was not the last one to leave the cluster and may not contain all the updates. To force cluster bootstrap with this node, edit the grastate.dat file manually and set safe_to_bootstrap to 1 .

解決方案

#查看node1掛載點(diǎn)的文件地址
docker volume inspect v1   
# 進(jìn)入目錄下
cd /var/lib/docker/volumes/v1/_data
#編輯文件grastate.dat
vi grastate.dat

高可用負(fù)載均衡方案

目前haproxy只有一個(gè),單haproxy不具備高可用实抡,必須冗余設(shè)計(jì)欠母。haproxy不能形成瓶頸。

  • 虛擬IP技術(shù)

haproxy雙機(jī)互備離不開(kāi)一個(gè)關(guān)鍵的技術(shù)吆寨,這個(gè)技術(shù)是虛擬IP赏淌,linux可以在一個(gè)網(wǎng)卡內(nèi)定義多個(gè)虛擬IP,得把這些IP地址定義到一個(gè)虛擬IP啄清。

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

定義出來(lái)一個(gè)虛擬IP六水,這個(gè)方案叫雙機(jī)熱備,準(zhǔn)備2個(gè)keepalived,keepalived 就是為了搶占虛擬IP的掷贾,誰(shuí)手快誰(shuí)能搶到睛榄,沒(méi)搶到的處于等待的狀態(tài)。搶到的叫做主服務(wù)器想帅,未搶到的叫做備服務(wù)器场靴。兩個(gè)keepalived之前有心跳檢測(cè)的,當(dāng)備用的檢測(cè)到主服務(wù)掛了港准,就立馬搶占虛擬IP旨剥。

  • Haproxy雙機(jī)熱備方案


  • 安裝keepalived

keepalived必須在haproxy所在的容器之內(nèi),也可以在docker倉(cāng)庫(kù)里面下載一個(gè)haproxy-keepalived的鏡像浅缸。這里直接在容器內(nèi)安裝keepalived轨帜。

docker exec -it h1 /bin/bash
#寫(xiě)入dns,防止apt-get update找不到服務(wù)器
echo "nameserver 8.8.8.8" | tee /etc/resolv.conf > /dev/null 
apt-get clean
apt-get update
apt-get install vim
vi /etc/apt/sources.list 

sources.list 添加下面的內(nèi)容

deb http://mirrors.163.com/ubuntu/ precise main universe restricted multiverse 
deb-src http://mirrors.163.com/ubuntu/ precise main universe restricted multiverse 
deb http://mirrors.163.com/ubuntu/ precise-security universe main multiverse restricted 
deb-src http://mirrors.163.com/ubuntu/ precise-security universe main multiverse restricted 
deb http://mirrors.163.com/ubuntu/ precise-updates universe main multiverse restricted 
deb http://mirrors.163.com/ubuntu/ precise-proposed universe main multiverse restricted 
deb-src http://mirrors.163.com/ubuntu/ precise-proposed universe main multiverse restricted 
deb http://mirrors.163.com/ubuntu/ precise-backports universe main multiverse restricted 
deb-src http://mirrors.163.com/ubuntu/ precise-backports universe main multiverse restricted 
deb-src http://mirrors.163.com/ubuntu/ precise-updates universe main multiverse restricted
  • 更新apt源
apt-get clean
apt-get update
apt-get install keepalived
apt-get install vim
  • keepalived配置文件

容器內(nèi)的路徑:/etc/keepalived/keepalived.conf

vi /etc/keepalived/keepalived.conf
  1. VI_1 名稱(chēng)可以自定義
  2. state MASTER | keepalived的身份(MASTER主服務(wù)器衩椒,BACKUP備份服務(wù)器蚌父,不會(huì)搶占虛擬機(jī)ip)。如果都是主MASTER的話烟具,就會(huì)進(jìn)行互相爭(zhēng)搶IP梢什,如果搶到了就是MASTER,另一個(gè)就是SLAVE朝聋。
  3. interface網(wǎng)卡嗡午,定義一個(gè)虛擬IP定義到那個(gè)網(wǎng)卡上邊。網(wǎng)卡設(shè)備的名稱(chēng)冀痕。eth0是docker的虛擬網(wǎng)卡荔睹,宿主機(jī)是可以訪問(wèn)的。
  4. virtual_router_id 51 | 虛擬路由標(biāo)識(shí)言蛇,MASTER和BACKUP的虛擬路由標(biāo)識(shí)必須一致僻他。標(biāo)識(shí)可以是0-255。
  5. priority 100 | 權(quán)重腊尚。MASTER權(quán)重要高于BACKUP 數(shù)字越大優(yōu)選級(jí)越高吨拗。可以根據(jù)硬件的配置來(lái)完成婿斥,權(quán)重最大的獲取搶到的級(jí)別越高劝篷。
  6. advert_int 1 | 心跳檢測(cè)。MASTER與BACKUP節(jié)點(diǎn)間同步檢查的時(shí)間間隔民宿,單位為秒娇妓。主備之間必須一致。
  7. authentication | 主從服務(wù)器驗(yàn)證方式活鹰。主備必須使用相同的密碼才能正常通信哈恰。進(jìn)行心跳檢測(cè)需要登錄到某個(gè)主機(jī)上邊所有有賬號(hào)密碼只估。
  8. virtual_ipaddress | 虛擬ip地址,可以設(shè)置多個(gè)虛擬ip地址着绷,每行一個(gè)蛔钙。根據(jù)上邊配置的eth0上配置的ip。
  • 啟動(dòng)keeplived

容器內(nèi)啟動(dòng)

service keepalived start

宿主機(jī)ping這個(gè)ip

ping 172.18.0.201
創(chuàng)建haproxy2容器,并配置與haproxy1相同的環(huán)境

因?yàn)橐WC有2個(gè)haproxy 和keepalived蓬戚,這次就不那么麻煩了夸楣。直接對(duì)一個(gè)鏡像里面包括keeplived 和 haproxy宾抓。

  • 宿主機(jī)創(chuàng)建文件
mkdir haproxy/h2
cd haproxy/h2
vi haproxy.cfg
vi keepalived.cfg
  • haproxy.cfg

global
    #工作目錄
    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)行
    daemon

defaults
    log global
    mode    http
    #日志格式
    option  httplog
    #日志中不記錄負(fù)載均衡的心跳檢測(cè)記錄
    option  dontlognull
    #連接超時(shí)(毫秒)
    timeout connect 5000
    #客戶(hù)端超時(shí)(毫秒)
    timeout client  50000
    #服務(wù)器超時(shí)(毫秒)
    timeout server  50000

#監(jiān)控界面   
listen  admin_stats
    #監(jiān)控界面的訪問(wèn)的IP和端口
    bind  0.0.0.0:8888
    #訪問(wèn)協(xié)議
    mode        http
    #URI相對(duì)地址
    stats uri   /dbs
    #統(tǒng)計(jì)報(bào)告格式
    stats realm     Global\ statistics
    #登陸帳戶(hù)信息
    stats auth  admin:abc123456
#數(shù)據(jù)庫(kù)負(fù)載均衡
listen  proxy-mysql
    #訪問(wèn)的IP和端口
    bind  0.0.0.0:3306  
    #網(wǎng)絡(luò)協(xié)議
    mode  tcp
    #負(fù)載均衡算法(輪詢(xún)算法)
    #輪詢(xún)算法:roundrobin
    #權(quán)重算法:static-rr
    #最少連接算法:leastconn
    #請(qǐng)求源IP算法:source 
    balance  roundrobin
    #日志格式
    option  tcplog
    #在MySQL中創(chuàng)建一個(gè)沒(méi)有權(quán)限的haproxy用戶(hù)石洗,密碼為空幢泼。Haproxy使用這個(gè)賬戶(hù)對(duì)MySQL數(shù)據(jù)庫(kù)心跳檢測(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  
  • keepalived.cfg
vrrp_instance  VI_1 {
    state  MASTER
    interface  eth0
    virtual_router_id  51
    priority  100
    advert_int  1
    authentication {
        auth_type  PASS
        auth_pass  123456
    }
    virtual_ipaddress {
        172.18.0.201
    }
}
  • docker的方式一下安裝好 haproxy 和keepalived

https://hub.docker.com/r/pelin/haproxy-keepalived/
映射端口更改為4003 4004 name修改h2

docker run -it -d --privileged -p 4003:8888\
    -p 4004:3306 \
    -v /root/haproxy/h2/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg \
    -v /root/haproxy/h2/keepalived.conf:/etc/keepalived/keepalived.conf \
    --name haproxy-keepalived \
    --net=net1 \
    --name h2 \
    --ip 172.18.0.8 \
    pelin/haproxy-keepalived

宿主機(jī)安裝keepalived

yum -y install keepalived
vi /etc/keepalived/keepalived.conf
#刪除這個(gè)表里之前存在的內(nèi)容
  • keepalived.cof
 vrrp_instance VI_1 {
        state MASTER
        interface eth0
        virtual_router_id 51
        priority 100
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            192.168.66.200
        }
    }

    virtual_server 192.168.66.200 8888 {
        delay_loop 3
        lb_algo rr
        lb_kind NAT
        persistence_timeout 50
        protocol TCP

        real_server 172.18.0.201 8888 {
            weight 1
        }
    }

    virtual_server 192.168.66.200 3306 {
        delay_loop 3
        lb_algo rr
        lb_kind NAT
        persistence_timeout 50
        protocol TCP

        real_server 172.18.0.201 3306 {
            weight 1
        }
    }
  • 啟動(dòng)宿主機(jī)
service keepalived start

虛擬機(jī)端口轉(zhuǎn)發(fā) 外部無(wú)法訪問(wèn)

WARNING: IPv4 forwarding is disabled. Networking will not work.
  • 解決方案

宿主機(jī)修改

vi /etc/sysctl.conf
# 添加net.ipv4.ip_forward=1

systemctl restart network

PS:如果通過(guò)docker的方式直接拉取haproxy和keepalived鏡像,比直接在鏡像里面安裝應(yīng)用方便很多讲衫,建議各位老鐵盡量避免在容器內(nèi)安裝應(yīng)用缕棵,這樣真心麻煩不爽,別人封裝的鏡像根據(jù)pull的量好好看看api就可以使用了涉兽。像h1如果容器stop后招驴,重新start,還需要進(jìn)入容器把keeplived給起起來(lái)枷畏。而h2直接start里面的haproxy和keeplived别厘,同時(shí)都起起來(lái)了。 兩個(gè)容器的采用的熱備的方案拥诡,讓用戶(hù)毫無(wú)感知触趴,切換ip的形式真是美滋滋。mysql集群的高性能渴肉,高負(fù)載冗懦,高可用基本完成了,可用按照這個(gè)思路搭建不同的主機(jī)下仇祭。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末披蕉,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子乌奇,更是在濱河造成了極大的恐慌没讲,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,602評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件华弓,死亡現(xiàn)場(chǎng)離奇詭異食零,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)寂屏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)贰谣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)娜搂,“玉大人,你說(shuō)我怎么就攤上這事吱抚“儆睿” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,878評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵秘豹,是天一觀的道長(zhǎng)携御。 經(jīng)常有香客問(wèn)我,道長(zhǎng)既绕,這世上最難降的妖魔是什么啄刹? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,306評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮凄贩,結(jié)果婚禮上誓军,老公的妹妹穿的比我還像新娘。我一直安慰自己疲扎,他們只是感情好昵时,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評(píng)論 5 373
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著椒丧,像睡著了一般壹甥。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上壶熏,一...
    開(kāi)封第一講書(shū)人閱讀 49,071評(píng)論 1 285
  • 那天句柠,我揣著相機(jī)與錄音,去河邊找鬼久橙。 笑死俄占,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的淆衷。 我是一名探鬼主播缸榄,決...
    沈念sama閱讀 38,382評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼祝拯!你這毒婦竟也來(lái)了甚带?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,006評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤佳头,失蹤者是張志新(化名)和其女友劉穎鹰贵,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體康嘉,經(jīng)...
    沈念sama閱讀 43,512評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡碉输,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了亭珍。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片敷钾。...
    茶點(diǎn)故事閱讀 38,094評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡枝哄,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出阻荒,到底是詐尸還是另有隱情挠锥,我是刑警寧澤,帶...
    沈念sama閱讀 33,732評(píng)論 4 323
  • 正文 年R本政府宣布侨赡,位于F島的核電站蓖租,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏羊壹。R本人自食惡果不足惜蓖宦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望舶掖。 院中可真熱鬧球昨,春花似錦、人聲如沸眨攘。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,286評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)鲫售。三九已至,卻和暖如春该肴,著一層夾襖步出監(jiān)牢的瞬間情竹,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,512評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工匀哄, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留秦效,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,536評(píng)論 2 354
  • 正文 我出身青樓涎嚼,卻偏偏與公主長(zhǎng)得像阱州,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子法梯,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 《Docker環(huán)境下的前后端分離部署與運(yùn)維》課程腳本 [TOC] 一苔货、Docker虛擬機(jī)常用命令 先更新軟件包yu...
    mingminy閱讀 595評(píng)論 0 0
  • 1. 組件版本和配置策略 組件版本: Kubernetes 1.10.4 Docker 18.03.1-ce Et...
    Anson前行閱讀 5,756評(píng)論 0 11
  • Kubernetes是Google開(kāi)源的容器集群管理系統(tǒng),其提供應(yīng)用部署立哑、維護(hù)夜惭、 擴(kuò)展機(jī)制等功能,利用Kubern...
    devabel閱讀 6,299評(píng)論 0 13
  • 人事幾回生變铛绰,前緣多少浮沉诈茧。一壺濁酒自相斟。無(wú)言說(shuō)故事捂掰,不必問(wèn)秋心敢会。 茶社自非詩(shī)社镊叁,詩(shī)門(mén)不似佛門(mén)。欲得清凈世間尋走触。...
    莫愁Jessie閱讀 235評(píng)論 0 3
  • 雨連綿晦譬,山景已經(jīng)模糊成一片。 喧囂的世界好像突然安靜了互广,那些紅塵俗世呢敛腌? 我在雨棚下靜靜地看一群螞蟻打架,來(lái)來(lái)往往...
    張先萍閱讀 312評(píng)論 0 2