麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 課堂 > 基礎知識 > 正文

經過Docker技術在macOS上布局3實例MGR環境

2024-09-12 20:30:06
字體:
來源:轉載
供稿:網友
   通過Docker技術在macOS上部署3實例MGR環境
 
  自從有了Docker,各種環境部署都簡單從容起來,其實MySQL的環境部署起來同樣得心應手。
 
  前提條件,已經在自己的macOS操作系統中設置成功了運行在本地的3節點MySQL Group Replication集群,如何設置,可以參考官方文檔。
 
  假設在我們的macOS上已經實現了如下架構的3節點MGR集群,我們的目標是將這三個數據庫全部挪到docker容器中去運行,并且可以互相通信,仍然是MGR集群。
  
  Docker on MacOS
 
  接下來我們把MySQL放在一邊,先介紹一下在macOS中的docker架構,在macOS中,docker的實現跟在其它Linux系統中略有不同,在其它Linux系統中,操作系統本身就是docker容器的宿主機,docker鏡像都是直接存儲在宿主機本身的文件系統中,比如我們通過docker info命令可以看到docker的根目錄是:
 
  $ docker info|grep "Docker RootDir"
 
  Docker Root Dir: /var/lib/docker
 
  但是在macOS下,我們直接查看這個目錄,其實是根本不存在的。
 
  $ ls /var/lib/docker
 
  ls: /var/lib/docker: No such file or directory
 
  Docker宿主機是誰
 
  那么這個目錄到底在哪里?實際上是在一個QEMU虛擬機中,當我們在macOS中安裝完docker并啟動,就是啟動了一個虛擬機,這個虛擬機的整個內容全部都在一個文件里,可以在docker程序屬性界面中看到這個文件的路徑,比如在我的機器上,路徑就是/Users/Kamus/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2,該文件通常比較大,特別是安裝了多個docker鏡像之后,會輕易占用到數十GB的空間。
 
   這個虛擬機被限制只能使用2顆CPU和2GB內存。
 
  那么,我們是否可以登錄這個虛擬機來確認這點呢?使用macOS自帶的screen命令可以登錄該臺虛擬機。如下,可以看到這是一個擁有非常新的Linux 4.9.38版本內核的虛擬機,在這個虛擬機中才有/var/lib/docker目錄,只有2顆CPU,總共有2GB內存。
  
  在screen的窗口按組合鍵control+a d(先按control+a,再按d)可以暫時dettach出這個screen,screen -r可以重新打開窗口。更多的screen命令,可以自行man screen來查看。
 
  所以現在我們可以明確一個概念,macOS本身并不是以后將運行的docker容器的宿主機,而這個Linux虛擬機才是真正的宿主機。這臺機器的主機名是moby,這正是docker項目社區版的名稱。
 
  Docker宿主機與macOS操作系統的目錄共享
 
  由于如下共享文件夾功能的存在,在這個虛擬機中可以訪問并更新macOS操作系統本地的目錄,這在后面我們將運行在本地的MySQL數據庫搬遷到docker容器中起了重要的作用。
  
  我們還是在screen中看一下這些共享目錄的情況。
 
  可以看到,確實macOS操作系統中的目錄在虛擬機中是可以直接訪問的,而且更方便的地方是,在虛擬機中自動掛載的目錄路徑跟macOS中的路徑是完全相同的,比如我的個人主目錄無論是在macOS中還是在這個虛擬機中,都是/Users/Kamus。
 
  那現在我們的思路基本上有了,就是要將原本運行在macOS操作系統中的MySQL數據庫的數據文件和配置文件挪到Docker宿主機可以訪問的目錄下,然后在docker容器中啟動MySQL實例。
 
  安裝MySQL docker鏡像
 
  先要將MySQL docker鏡像安裝上,這是運行MySQL docker容器的基礎。安裝鏡像極其簡單,只需要一步就可以,以下命令在macOS操作系統中執行。
 
  標準步驟是:
 
  $ docker pull mysql
 
  但是由于這樣會安裝latest版本,而我原先在macOS中的MySQL數據庫是5.7.17版本,為了避免可能產生的版本升級問題,我做了指定版本的鏡像拉取。
 
  $ docker pull mysql:5.7.17
 
  從官方的docker store中拉取MySQL鏡像,大約只需要幾分鐘時間,完畢以后,可以通過docker images命令來查看。
  
  第一行就是最新拉取的MySQL鏡像,這是創建者在4個月前創建的。
 
  運行MySQL docker容器前的準備
 
  設計docker宿主機目錄結構
 
  現在我們已經有了docker鏡像,也有了在macOS操作系統中運行良好的MySQL MGR集群,開始遷移。首先當然是干凈地關閉在macOS操作系統中的三臺MySQL數據庫,然后我們設計如下的目錄結構,將三個數據庫的數據文件全部分別挪進去。
 
  根據之前闡述的共享文件夾功能,可以知道在docker宿主機中是可以通過完全相同的路徑訪問到這幾個目錄的,我們將原本在macOS操作系統中的三個數據庫的數據文件分別移動到s1-docker,s2-docker,s3-docker目錄中,至于哪些文件需要移動,這是MySQL DBA的基本知識,不在這里贅述。
 
  由于目標是能運行MGR集群,那么是有一部分數據庫初始化參數要額外設置的,而docker容器中的my.cnf內容無法改動,所以我們再設計一個專門的目錄用來存儲所有數據庫的my.cnf文件。
  
  然后將原本各個數據庫的my.cnf文件分別拷貝到conf.d/s1-docker等三個目錄下,最后形成了如下的目錄結構。
 
  設計這些目錄結構的目的是在運行docker容器的時候通過volume選項將數據文件目錄掛載成容器內部的/var/lib/mysql目錄,將my.cnf參數文件所在目錄掛載成容器內部的/etc/mysql/conf.d目錄,從而實現MySQL數據庫實例啟動所需要的所有關鍵文件都存儲在宿主機中,而docker容器本身只提供MySQL軟件鏡像。這比將所有文件都存儲在docker鏡像內部更靈活。
 
  設計docker容器主機名和IP地址
 
  在macOS本機運行的MySQL實例中為MGR配置的各種參數中使用到的主機名往往是localhost,IP地址則是127.0.0.1,MGR集群的節點間通信端口也往往是指定了本機IP上的不同端口,如果我們參照了官方文檔中的搭建指南,使用的就是24901,24902,24903三個端口。
 
  group_replication_group_seeds="127.0.0.1:24901,127.0.0.1:24902,127.0.0.1:24903"
 
  現在我們既然將數據庫搬到了容器中,那么就完全可以重新設計更有意義的主機名和分別的IP地址。
 
  在啟動Docker容器的時候,可以通過hostname和ip選項指定主機名和靜態IP。可以參照最后運行Docker容器的完整命令。
 
  如果要為Docker容器指定靜態IP,則必須要使用手動創建的network,通過以下命令可以創建,比如此處我們創建了名稱為mynet的網絡。
 
  $ docker network create--subnet=192.168.100.0/24 mynet
 
  創建完畢以后,通過network ls命令可以查看新創建的網絡。可以看到默認是橋接方式。
  
  設計docker容器資源占用限制
 
  對于在同一宿主機上運行多個docker容器,進行資源限制是必不可少的需求,雖然在此文中我們只是進行將MySQL實例搬遷到docker容器中的測試,但是也仍然規劃了容器資源限制,由于宿主機本身只有2顆CPU和2GB內存,因此做如下規劃。
 
  在啟動Docker容器的時候,可以通過cpus和memory以及memory-swap選項指定CPU和內存的資源限制。可以參照最后運行Docker容器的完整命令。
 
  根據以上設置修改各數據庫的my.cnf配置
 
  因為我們設計了容器啟動時候會擁有不同的IP地址,因此在容器中運行的MySQL實例的初始化參數中關于MGR的部分也需要指定這些IP地址。以下是my.cnf文件的設置內容。
 
  三個節點的my.cnf文件內容除了loose-group_replication_local_address參數之外,其它內容都是完全相同的。
 
  運行MySQL docker容器
 
  由于MGR集群要求每個數據庫在主機層是可以直接訪問到其它節點的主機名的,如果在普通的主機上,只需要修改/etc/hosts文件增加其它節點的主機名和IP地址對應條目即可,但是容器內的/etc/hosts卻是無法手動修改的,即使手動增加了條目,只要重新啟動容器,該條目就會丟失。
 
  要應對該問題,可以在運行容器時使用add_host選項。在真實的生產環境中,我們可以選擇配置專門的DNS服務器來做IP和主機名對應(DNS服務器同樣可以是Docker容器,我們后續的測試將增加此部分內容,本文先暫時通過add_host的方式來解決)。
 
  全部容器都啟動完畢以后,可以通過docker ps命令查看容器的運行狀態,或者通過docker logs命令查看MySQL數據庫日志的輸出。非常方便。
  
  啟動MGR
 
  通過如下命令登錄到Docker容器的操作系統中,再進入MySQL實例,啟動MGR。我們目前設置的是Single Primary模式的MGR,先啟動第一個Primary實例。
 
  再依次啟動第二個只讀實例。
 
  啟動第三個只讀實例。
 
  到此為止,我們將原先運行在macOS中的一整套MGR集群全部搬遷到docker容器中。最終實現了如下的系統架構。
 
  恩墨學院隸屬于云和恩墨(北京)信息技術有限公司,致力于提供專業高水準的oracle數據庫與大數據培訓服務,挖掘培養大數據與數據庫人才。恩墨學院提供包括個人實戰技能培訓、個人認證培訓、企業內訓在內的全方位大數據和數據庫技術培訓。ACE級別超強師資,配備專業實驗室,沉浸式學習與訓練,專業實驗室、配備專業助教指導訓練。能迅速融入專家圈子,業內資源豐富,迅速積累職場人脈。oracle數據庫課程包括:Oracle DBA實戰班、Oracle OCM考試、Oracle OCP考試等。

(編輯:武林網)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 欧美日韩专区国产精品 | 日韩视频一区二区三区在线观看 | 毛片免费大全短视频 | www视频免费在线观看 | 超碰97最新 | 国产精品毛片无码 | av电影在线播放 | 亚洲九草| 成人羞羞视频在线观看 | 午夜生活理论片 | av影院在线播放 | 特逼视频 | 羞羞答答视频 | 色七七网站 | av老司机久久 | h视频在线免费观看 | 精品国产亚洲人成在线 | 久久99精品国产自在现线 | 黄色片网站在线免费观看 | 欧美一区成人 | 欧美日本综合 | 欧美特黄a | 日本a v免费观看 | h视频在线播放 | 亚洲白嫩在线观看 | 黄色大片网站在线观看 | 精品一区二区久久久久久久网精 | 成人爽a毛片免费啪啪红桃视频 | 久久精品日韩一区 | 91久久综合 | 成人毛片免费在线 | 成人午夜一区 | 久久亚洲一区二区三区成人国产 | 国产三级a三级三级 | 国产日韩亚洲 | 成年人激情在线 | 久久69精品久久久久久国产越南 | 精品国产一区二区三区久久久蜜月 | 久久综合久久精品 | 精品久久久久久久久久久久久 | 亚州综合网 |