1,拉取鏡像 docker pull percona/percona-xtradb-cluster
2,為鏡像該名稱docker tag pivotalcf/lts-pxc pxc
3,創(chuàng)建網(wǎng)段docker network create --subnet=172.18.0.0/24 net1
-subnet 指定子網(wǎng)網(wǎng)段
4,創(chuàng)建docker卷docker volume create v1
4,運(yùn)行鏡像docker run -d -p 3307:3306 -v v1:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=123456 --privileged --name=node1 --net=net1 --ip 172.18.0.2 pxc
參數(shù)解釋: -d:表示后臺運(yùn)行 -v:映射Docker卷到容器的mysql數(shù)據(jù)目錄 MYSQL_ROOT_PASSWORD:表示創(chuàng)建的數(shù)據(jù)庫密碼 CLUSTER_NAME: 表示創(chuàng)建出的集群名字 XTRABACKUP_PASSWORD:表示集群通信密碼 –privileged:表示分配最高權(quán)限 –net:指定網(wǎng)段 –ip:指定IP
5, 安裝mysql集群1) 創(chuàng)建docker卷docker volume create --name v2docker volume create --name v3
2) 運(yùn)行容器每個(gè)pxc節(jié)點(diǎn)運(yùn)行完畢后要等個(gè)一兩分鐘,保證上一個(gè)節(jié)點(diǎn)初始化完畢才能運(yùn)行下一個(gè)節(jié)點(diǎn)??梢杂每梢暬ぞ哌B接判斷是否初始化數(shù)據(jù)庫成功。
docker run -d -p 3308:3306 -v v2:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=123456 -e CLUSTER_JOIN=node1 --privileged --name=node2 --net=net1 --ip 172.18.0.3 pxcdocker run -d -p 3309:3306 -v v3:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -e CLUSTER_JOIN=node1 --privileged --name=node3 --net=net1 --ip 172.18.0.4 pxc
參數(shù)說明: CLUSTER_JOIN : 表示加入node1節(jié)點(diǎn)
注意:第一個(gè)節(jié)點(diǎn)創(chuàng)建時(shí)間較長,必須等待兩分鐘左右再創(chuàng)建剩余節(jié)點(diǎn)。 創(chuàng)建好之后我們就可以使用客戶端連接數(shù)據(jù)庫
6,使用haproxy達(dá)到負(fù)載均衡1)下載鏡像docker pull haproxy
2) 在宿主機(jī)創(chuàng)建配置文件touch /home/soft/haproxy/haproxy.cfg
3) 配置文件內(nèi)容global #工作目錄 chroot /usr/local/etc/haproxy #日志文件,使用rsyslog服務(wù)中l(wèi)ocal5日志設(shè)備(/var/log/local5),等級info log 127.0.0.1 local5 info #守護(hù)進(jìn)程運(yùn)行 daemondefaults log global mode http #日志格式 option httplog #日志中不記錄負(fù)載均衡的心跳檢測記錄 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相對地址 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 #請求源IP算法:source balance roundrobin #日志格式 option tcplog #在MySQL中創(chuàng)建一個(gè)沒有權(quán)限的haproxy用戶,密碼為空。Haproxy使用這個(gè)賬戶對MySQL數(shù)據(jù)庫心跳檢測 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 #使用keepalive檢測死鏈 option tcpka
4) 運(yùn)行容器 docker run -it -d -p 4001:8888 -p 3306:3306 -v /home/soft/haproxy/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg --name h1 --privileged --net=net1 docker.io/haproxy
第一個(gè)端口配置是監(jiān)控界面端口, 第二個(gè)為提供對外tcp訪問的端口, -v 映射宿主機(jī)目錄到linux虛擬機(jī)目錄
5) 進(jìn)入容器運(yùn)行haproxy1,查看容器iddocker ps2,進(jìn)入容器docker exec -it h1 bash3,運(yùn)行haproxy 并指定haproxy配置文件haproxy -f /usr/local/etc/haproxy/haproxy.cfg
6) 進(jìn)入數(shù)據(jù)庫創(chuàng)建一個(gè)用戶作為心跳檢測create user 'haproxy'@'%' identified by '';
7) 進(jìn)入監(jiān)控界面可查xiongchuanhong.cn:4001/dbs 用戶名:admin密碼:abc123456(配置文件中的)
7,負(fù)載均衡高可用,keepalived(此處待完善)1) 進(jìn)入haproxy的容器,安裝keepalived(容器是ubuntu的)docker exec -it h1 bashapt-get updateapt-get install keepalived
keepalived 配置文件路徑 /etc/keepalived/keepalived.conf
2) ,創(chuàng)建配置文件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 }}
3),啟動(dòng)keepalived,看宿主機(jī)能否ping通service keepalived start
8,pxc節(jié)點(diǎn)掛掉之后的重啟pxc集群只要保證了集群中節(jié)點(diǎn)個(gè)數(shù)大于一半就可以保證正常運(yùn)行
1) 如果集群還有可運(yùn)行的pxc節(jié)點(diǎn),可直接啟動(dòng)掛點(diǎn)節(jié)點(diǎn)node2掛了
docker satrt node2
2)集群中沒有可運(yùn)行節(jié)點(diǎn)。node1和node2都掛了
#1,停掉剩余的不能運(yùn)行節(jié)點(diǎn)docker stop node3#2,查看pxc的grastate.datcat /var/lib/docker/volumes/v1/_data/grastate.datcat /var/lib/docker/volumes/v2/_data/grastate.datcat /var/lib/docker/volumes/v3/_data/grastate.dat
grastate.dat文件內(nèi)容 version: 2.1 uuid: 132aaee5-7d0e-11e9-ac50-8666961e3c57 seqno: -1 safe_to_bootstrap: 0
safe_to_bootstrap 為1 代表此節(jié)點(diǎn)在start啟動(dòng)時(shí)作為主節(jié)點(diǎn),當(dāng)查看node1,node2,node3的該文件時(shí),發(fā)現(xiàn)都為0,這樣直接啟動(dòng)就會導(dǎo)致pxc找不到主節(jié)點(diǎn)的情況,導(dǎo)致啟動(dòng)失敗。 解決辦法,隨便修改一個(gè)節(jié)點(diǎn)的safe_to_bootstrap的值,變?yōu)?,先啟動(dòng)這個(gè)節(jié)點(diǎn),再啟動(dòng)另外兩個(gè)節(jié)點(diǎn)即可。
|