架構:
步驟:
1、安裝centos7 ,設置宿主機IP:192.168.1.224
2、先更新yum軟件管理器,再安裝docker
1、yum -y update
2、yum install -y docker
docker管理
docker啟動,停止,重啟
service docker start /stop /restart
3、啟動docker,配置鏡像下載地址
https://www.daocloud.io 中找到docker加速器,找到linux版本加速器,拷貝在linux中執行
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
執行后編輯配置文件: /etc/docker/daemon.json 中將最后一個逗號去掉后保存即可
4、常用docker命令:
查找docker鏡像:
docker xxxx search
如:docker java search
查看當前docker鏡像:
docker images
導出鏡像:
docker save 鏡像id > 目標位置
如:
docker save docker.io/java > /home/java.tar.gz
導入鏡像:
docker load < 鏡像位置
刪除鏡像:
docker rmi 鏡像id
5、安裝PXC鏡像
docker pull percona/percona-xtradb-cluster
6、為PXC鏡像改名
docker tag percona/percona-xtradb-cluster pxc
7、為鏡像創建net網段
docker network create --subnet=172.18.0.0/24 net1
8、為5個pxc集群容器創建5個數據卷
docker volume create --name v1
docker volume create --name v2
docker volume create --name v3
docker volume create --name v4
docker volume create --name v5
為便於修改mysql配置文件,最好創建mysql配置文件的數據卷
docker volume create --name conf1
docker volume create --name conf2
docker volume create --name conf3
docker volume create --name conf4
docker volume create --name conf5
9、創建熱備份數據卷(容器一旦啟動后,不停下來無法創建新的數據卷,所以先創建出來用於保存備份的數據卷)
docker volume create --name backup
10、創建第一個pxc節點容器node1,創建完成后等待1-2分鍾,用mysql客戶端工具連接成功后再創建剩下的2-5pxc容器
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=lezhu123456 -e CLUSTER_NAME=lezhuPXC -e XTRABACKUP_PASSWORD=lezhu123456 -v v1:/var/lib/mysql -v backup:/data -v conf1:/etc/mysql --privileged --name=node1 --net=net1 --ip 172.18.0.2 pxc
創建成功后,以root帳號進入node1,修改mysql配置文件中的默認sql_mode
以root帳號進入docker容器 node1: docker exec -it --user root node1 bash
安裝vim:
apt-get update
apt-get install -y vim
修改mysql配置文件:
vim /etc/mysql/my.cnf
[mysqld]
sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
保存后停掉docker stop node1 重啟node1 docker start node1
按如此方式依次創建node2-5,因node3-5創建的docker容器卷與宿主機的映射conf3-5,所以可以直接在宿主機的conf3-5中直接修改my.cnf
查看conf3-5路徑:
docker inspect conf3
11、創建第2-5pxc容器
docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=lezhu123456 -e CLUSTER_NAME=lezhuPXC -e XTRABACKUP_PASSWORD=lezhu123456 -e CLUSTER_JOIN=node1 -v v2:/var/lib/mysql -v conf2:/etc/mysql --privileged --name=node2 --net=net1 --ip 172.18.0.3 pxc
docker run -d -p 3308:3306 -e MYSQL_ROOT_PASSWORD=lezhu123456 -e CLUSTER_NAME=lezhuPXC -e XTRABACKUP_PASSWORD=lezhu123456 -e CLUSTER_JOIN=node1 -v v3:/var/lib/mysql -v conf3:/etc/mysql --privileged --name=node3 --net=net1 --ip 172.18.0.4 pxc
docker run -d -p 3309:3306 -e MYSQL_ROOT_PASSWORD=lezhu123456 -e CLUSTER_NAME=lezhuPXC -e XTRABACKUP_PASSWORD=lezhu123456 -e CLUSTER_JOIN=node1 -v v4:/var/lib/mysql -v conf4:/etc/mysql --privileged --name=node4 --net=net1 --ip 172.18.0.5 pxc
docker run -d -p 3310:3306 -e MYSQL_ROOT_PASSWORD=lezhu123456 -e CLUSTER_NAME=lezhuPXC -e XTRABACKUP_PASSWORD=lezhu123456 -e CLUSTER_JOIN=node1 -v v5:/var/lib/mysql -v conf5:/etc/mysql -v backup:/data --privileged --name=node5 --net=net1 --ip 172.18.0.6 pxc
至此,5個節點的pxc集群搭建完成,可以使用mysql客戶端工具分別連接后驗證同步情況。
11、下載Haproxy鏡像
docker pull haproxy
12、宿主機上編寫Haproxy配置文件
vi /home/soft/haproxy/haproxy.cfg
haproxy文件配置:
global #工作目錄 chroot /usr/local/etc/haproxy #日志文件,使用rsyslog服務中local5日志設備(/var/log/local5),等級info log 127.0.0.1 local5 info #守護進程運行 daemon defaults log global mode http #日志格式 option httplog #日志中不記錄負載均衡的心跳檢測記錄 option dontlognull #連接超時(毫秒) timeout connect 5000 #客戶端超時(毫秒) timeout client 50000 #服務器超時(毫秒) timeout server 50000 #監控界面 listen admin_stats #監控界面的訪問的IP和端口 bind 0.0.0.0:8888 #訪問協議 mode http #URI相對地址 stats uri /dbs #統計報告格式 stats realm Global\ statistics #登陸帳戶信息 stats auth admin:lezhu123456 #數據庫負載均衡 listen proxy-mysql #訪問的IP和端口 bind 0.0.0.0:3306 #網絡協議 mode tcp #負載均衡算法(輪詢算法) #輪詢算法:roundrobin #權重算法:static-rr #最少連接算法:leastconn #請求源IP算法:source balance roundrobin #日志格式 option tcplog #在MySQL中創建一個沒有權限的haproxy用戶,密碼為空。Haproxy使用這個賬戶對MySQL數據庫心跳檢測 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檢測死鏈 option tcpka
13、在任一pxc節點中創建一個用戶haproxy心跳檢測的mysql賬戶:haproxy,該賬戶密碼可為空,不賦予任何權限
create user 'haproxy'@'%' IDENTIFIED BY ''
14、安裝一主一備2個Haproxy容器:
#創建第1個Haproxy負載均衡服務器 docker run -it -d -p 4001:8888 -p 4002:3306 -v /home/soft/haproxy:/usr/local/etc/haproxy --name h1 --privileged --net=net1 --ip 172.18.0.7 haproxy #進入h1容器,啟動Haproxy docker exec -it h1 bash #加載配置文件,啟動h1 haproxy -f /usr/local/etc/haproxy/haproxy.cfg #創建第2個Haproxy負載均衡服務器 docker run -it -d -p 4003:8888 -p 4004:3306 -v /home/soft/haproxy:/usr/local/etc/haproxy --name h2 --privileged --net=net1 --ip 172.18.0.8 haproxy #進入h2容器,啟動Haproxy docker exec -it h2 bash #加載配置文件,啟動h2 haproxy -f /usr/local/etc/haproxy/haproxy.cfg
至此,一主一備Haproxy設置完畢,可以使用宿主機ip在瀏覽器中查看haproxy:192.168.1.224:4001/dbs 或192.168.1.224:4003/dbs 或使用mysql客戶端連接haproxy驗證 ip:宿主機ip,端口 4002 與4004
15、安裝Keepalived容器(keepalived必須安裝在對應的haproxy容器中,該容器使用烏班圖系統,故下載命令改為apt -get )
#進入h1容器 docker exec -it h1 bash #更新軟件包 apt-get update #安裝VIM apt-get install vim #安裝Keepalived apt-get install keepalived #編輯Keepalived配置文件(參考下方配置文件) vim /etc/keepalived/keepalived.conf #啟動Keepalived service keepalived start #宿主機執行ping命令 ping 172.18.0.201
配置文件內容如下:
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 } }
16 、安裝第二個Keepalived
#進入h2容器 docker exec -it h2 bash #更新軟件包 apt-get update #安裝VIM apt-get install vim #安裝Keepalived apt-get install keepalived #編輯Keepalived配置文件 vim /etc/keepalived/keepalived.conf #啟動Keepalived service keepalived start #宿主機執行ping命令 ping 172.18.0.201 配置文件內容如下: 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 } }
17、宿主機安裝Keepalived,實現雙擊熱備
#宿主機執行安裝Keepalived yum -y install keepalived #修改Keepalived配置文件 vi /etc/keepalived/keepalived.conf #啟動Keepalived service keepalived start Keepalived配置文件如下: vrrp_instance VI_1 { state MASTER interface ens33 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.99.150 } } virtual_server 192.168.99.150 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.99.150 3306 { delay_loop 3 lb_algo rr lb_kind NAT persistence_timeout 50 protocol TCP real_server 172.18.0.201 3306 { weight 1 } }
18、熱備份數據
#進入node1容器 docker exec -it node1 bash #更新軟件包 apt-get update #安裝熱備工具 apt-get install percona-xtrabackup-24 #全量熱備 innobackupex --user=root --password=lezhu123456 /data/backup/full
19、冷還原數據
停止其余4個節點,並刪除節點,由於前面做過了數據卷,故mysql中數據不會丟失,只是刪除容器
docker stop node2
docker stop node3
docker stop node4
docker stop node5
docker rm node2
docker rm node3
docker rm node4
docker rm node5
node1容器中刪除MySQL的數據
#刪除數據
rm -rf /var/lib/mysql/*
#清空事務
innobackupex --user=root --password=lezhu123456 --apply-back /data/backup/full/2018-04-15_05-09-07/
#還原數據
innobackupex --user=root --password=lezhu123456 --copy-back /data/backup/full/2018-04-15_05-09-07/
重新創建其余4個節點,組件PXC集群
20、安裝Redis,配置RedisCluster集群
待續.......