中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Docker怎么搭建mariadb集群

發布時間:2021-07-29 22:34:45 來源:億速云 閱讀:284 作者:chen 欄目:云計算

本篇內容主要講解“Docker怎么搭建mariadb集群”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Docker怎么搭建mariadb集群”吧!

簡介

本例簡單介紹下如何在多個主機使用docker環境下搭建mairadb集群。只做測試不建議生產中使用。

實現原理: 本例基于severalnines/mariadb鏡像制作Mariadb集群,當容器啟動后會向etcd注冊集群信息,其他容器啟動會從etcd獲取集群信息(集群名稱,運行的容器IP等),從而加入集群。容器之間跨主機的通信則借助flannel來實現。

架構圖

Docker怎么搭建mariadb集群

3節點上安裝跨主機網絡,讓容器之間可以相互通信,第一個容器啟動時向etcd注冊自己的集群信息,后面容器啟動時從etcd中查找集群信息,并加入集群中去。

環境

主機名機器IP系統CPU/MEMDocker版本
node-110.0.102.218CentOS 7.54H/16G18.06.2-ce
node-210.0.102.151CentOS 7.54H/16G18.06.2-ce
node-310.0.102.162CentOS 7.54H/16G18.06.2-ce

依賴組件 etcd提供服務發現與存放flannel網絡信息flannel提供跨主機網絡 etcd安裝etcd服務,集群都要安裝flannel組件(事先關掉docker) 若未裝則運行--network=host網絡

部署

Docker環境設置

有配置flanneld則需要執行
vim /etc/systemd/system/docker.service中增加下面兩條記錄
[Service]
EnvironmentFile=/run/docker_opts.env
ExecStart=/usr/bin/dockerd\
--graph=/var/lib/docker --log-level=error $DOCKER_NETWORK_OPTIONS $DOCKER_OPTS

再啟動docker
systemctl daemon-reload &&systemctl restart docker

etcd集群

臺機器驗證集群的可用性,集群信息如下:
     機器名     IP地址              角色
     node1    10.0.102.218   etcd節點
     node2    10.0.102.151   etcd節點
     node3    10.0.102.162   etcd節點
	
運行容器(每個節點都運行)
REGISTRY=k8s.gcr.io/etcd
ETCD_VERSION=3.2.24
TOKEN=my-etcd-token
NAME_1=k8s-node-1
NAME_2=k8s-node-2
NAME_3=k8s-node-3
HOST_1=10.0.102.218
HOST_2=10.0.102.151
HOST_3=10.0.102.162
CLUSTER=${NAME_1}=http://${HOST_1}:2380,${NAME_2}=http://${HOST_2}:2380,${NAME_3}=http://${HOST_3}:2380
DATA_DIR=/var/lib/etcd

# 在節點 node1 上運行:
THIS_NAME=${NAME_1}
THIS_IP=${HOST_1}
docker run -d \
   -p 2379:2379 \
   -p 2380:2380 \
   --volume=${DATA_DIR}:/etcd-data \
   --name etcd ${REGISTRY}:${ETCD_VERSION} \
   /usr/local/bin/etcd \
   --data-dir=/etcd-data --name ${THIS_NAME} \
   --initial-advertise-peer-urls http://${THIS_IP}:2380 \
   --listen-peer-urls http://0.0.0.0:2380 \
   --advertise-client-urls http://${THIS_IP}:2379 \
   --listen-client-urls http://0.0.0.0:2379 \
   --initial-cluster ${CLUSTER} \
   --initial-cluster-state new --initial-cluster-token ${TOKEN}

# 在節點 node2 上運行:
THIS_NAME=${NAME_2}
THIS_IP=${HOST_2}
docker run -d \
   -p 2379:2379 \
   -p 2380:2380 \
   --volume=${DATA_DIR}:/etcd-data \
   --name etcd ${REGISTRY}:${ETCD_VERSION} \
   /usr/local/bin/etcd \
   --data-dir=/etcd-data --name ${THIS_NAME} \
   --initial-advertise-peer-urls http://${THIS_IP}:2380 \
   --listen-peer-urls http://0.0.0.0:2380 \
   --advertise-client-urls http://${THIS_IP}:2379 \
   --listen-client-urls http://0.0.0.0:2379 \
   --initial-cluster ${CLUSTER} \
   --initial-cluster-state existing --initial-cluster-token ${TOKEN}

# 在節點 node3 上運行:
THIS_NAME=${NAME_3}
THIS_IP=${HOST_3}
docker run -d \
   -p 2379:2379 \
   -p 2380:2380 \
   --volume=${DATA_DIR}:/etcd-data \
   --name etcd ${REGISTRY}:${ETCD_VERSION} \
   /usr/local/bin/etcd \
   --data-dir=/etcd-data \
   --name ${THIS_NAME} \
   --initial-advertise-peer-urls http://${THIS_IP}:2380 \
   --listen-peer-urls http://0.0.0.0:2380 \
   --advertise-client-urls http://${THIS_IP}:2379 \
   --listen-client-urls http://0.0.0.0:2379 \
   --initial-cluster ${CLUSTER} \
   --initial-cluster-state existing --initial-cluster-token ${TOKEN}

驗證集群
#在測試驗證節點NFS上,運行另一個etcd容器,
#以便使用其中的etcdctl命令行程序進行驗證
REGISTRY=k8s.gcr.io/etcd
ETCD_VERSION=3.2.24
docker run -d \
   --name etcd-client ${REGISTRY}:${ETCD_VERSION} \
   /usr/local/bin/etcd

#進入容器,查詢集群狀態
#驗證存入數據、讀取數據
docker exec etcd-client /bin/sh -c "export ETCDCTL_API=3 && /usr/local/bin/etcdctl --endpoints=http://10.0.102.214:2379,http://10.0.102.175:2379,http://10.0.102.191:2379 --write-out=table member list"
docker exec etcd-client /bin/sh -c "export ETCDCTL_API=3 && /usr/local/bin/etcdctl --endpoints=http://10.0.102.214:2379,http://10.0.102.175:2379,http://10.0.102.191:2379 --write-out=table endpoint status"
docker exec etcd-client /bin/sh -c "export ETCDCTL_API=3 && /usr/local/bin/etcdctl --endpoints=http://10.0.102.214:2379,http://10.0.102.175:2379,http://10.0.102.191:2379 --write-out=table endpoint health"
docker exec etcd-client /bin/sh -c "export ETCDCTL_API=3 && /usr/local/bin/etcdctl --endpoints=http://10.0.102.214:2379,http://10.0.102.175:2379,http://10.0.102.191:2379  put url http://www.sina.com.cn"
docker exec etcd-client /bin/sh -c "export ETCDCTL_API=3 && /usr/local/bin/etcdctl --endpoints=http://10.0.102.214:2379,http://10.0.102.175:2379,http://10.0.102.191:2379  get url"

部署mariadb集群

準備工作

鏡像:severalnines/mariadb:10.1

配置文件/etc/my.cnf.d/binlog.cnf mkdir -p /etc/my.cnf.d/ cat > /etc/my.cnf.d/bin-log.cnf<<EOF [mysqld] log-bin = mysql-bin log_slave_updates = 1 expire_logs_days = 20 server-id = 211 EOF

部署操作
node-1節點
第一個節點:帶binlog日志,主機10-0-102-165上操作:
docker run -d -p 3306:3306 --name=galera0_h \
-v /data:/var/lib/mysql -v /etc/my.cnf.d:/etc/my.cnf.d \
-e MYSQL_ROOT_PASSWORD=mypassword \
-e DISCOVERY_SERVICE=10.0.102.215:2379,10.0.102.151:2379,10.0.102.162:2379  \
-e CLUSTER_NAME=my_wsrep_cluster_hp \
-e XTRABACKUP_PASSWORD=mypassword --network=host severalnines/mariadb:10.1

驗證
docker ps –a
 【見圖1】
mysql -uroot -pmypassword -h 10.0.102.215 -e "show status like 'wsrep%';"
  【見圖2】
binlog日志
 【見圖3】

Docker怎么搭建mariadb集群 Docker怎么搭建mariadb集群 Docker怎么搭建mariadb集群

node-2節點
第二個節點:非binlog日志
docker run -d -p 3306:3306 --name=galera1_h \
-v /data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=mypassword \
-e DISCOVERY_SERVICE=10.0.102.215:2379,10.0.102.151:2379,10.0.102.162:2379  \
-e CLUSTER_NAME=my_wsrep_cluster_hp \
-e XTRABACKUP_PASSWORD=mypassword --network=host severalnines/mariadb:10.1
docker ps –a
 【見圖4】
mysql -uroot -pmypassword -h 10.0.102.151 -e "show status like 'wsrep%';"
  【見圖5】
binlog日志
 【見圖6】

Docker怎么搭建mariadb集群 Docker怎么搭建mariadb集群 Docker怎么搭建mariadb集群

node-3節點
第三個節點:非binlog日志
docker run -d -p 3306:3306 --name=galera2_h \
-v /data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=mypassword \
-e DISCOVERY_SERVICE=10.0.102.215:2379,10.0.102.151:2379,10.0.102.162:2379  \
-e CLUSTER_NAME=my_wsrep_cluster_hp \
-e XTRABACKUP_PASSWORD=mypassword --network=host severalnines/mariadb:10.1

mysql -uroot -pmypassword -h 10.0.102.162 -e "show status like 'wsrep%';"
 【見圖7】
binlog日志
【見圖8】

Docker怎么搭建mariadb集群 Docker怎么搭建mariadb集群

注意事項

因為容器運行時掛載主機下的/data目錄,所以備份與恢復操作較k8s中的操作更簡單,在此不再詳述,只簡單說明下注意事項:

1.如果某個容器掛掉 可以先使用docker start CONTAINER_NAME進行啟動,如果啟動不成功,這個時候需要重新將node加入集群中,操作步驟如下: docker stop CONTAINER_NAME docker rm CONTAINER_NAME rm -rf /data/ docker run xxx

2.容器啟動時注意問題: 要按照一定的順序進行,當docker run第一個容器時,要等容器完全啟動起來了再docker run第二個容器,依次類推關閉則執行相反操作,先stop第一個容器,再stop第二個容器,依次類推

3.恢復操作注意問題 恢復操作與k8s中mariadb集群相同,需要依次停止,在最后一個節點上執行恢復操作,恢復完成后重新讓節點加入集群(節點加入集群前需要先刪除本地的/data目錄)

4.使用docker rm命令會造成集群信息紊亂: 關閉某個節點的mariadb容器時,切記不可執行docker rm –f命令,應該先執行docker stop,然后再執行docker rm命令。

補充內容: 使用docker-compose進行部署mariadb-cluster集群 原理與架構均與docker部署相同,在此不再贅述。 一、與上面環境不同點: 1.etcd使用的是集群: 10.0.102.214:2379, 10.0.102.175:2379, 10.0.102.191:2379 原因:測試在之前的etcd中獲得不到集群信息,不想在etcd上過多消耗,而且使用etcd集群會更可靠 2.沒有使用flannel網絡,使用的docker的host網絡。 原因:使用docker-compose啟動時默認會創建網絡,這樣三個節點的容器就是在三個網絡中,無法通信也就創建不了集群,在docker-compose文件中定義網絡為network_mode: host,使用本機IP進行

到此,相信大家對“Docker怎么搭建mariadb集群”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

犍为县| 临潭县| 辽阳县| 凤冈县| 元谋县| 新龙县| 六枝特区| 鄯善县| 万宁市| 木兰县| 福贡县| 阳山县| 高阳县| 宜宾县| 马公市| 连云港市| 乐都县| 二连浩特市| 邛崃市| 平遥县| 铁力市| 新余市| 吴江市| 信宜市| 安多县| 郴州市| 恩平市| 鹰潭市| 元氏县| 高清| 昭通市| 罗田县| 乌拉特前旗| 公主岭市| 介休市| 桂阳县| 安平县| 荣昌县| 方山县| 南召县| 玛曲县|