循序漸進:如何在沒有共享存儲的Microsoft Azure IaaS中配置Linux故障轉移群集#azan #sanless
在本分步指南中,我將向您介紹在Microsoft Azure IaaS(基礎架構即服務)中配置高可用性2節點MySQL群集(以及見證服務器)所需的所有步驟。 該指南包括適當的屏幕截圖,shell命令和代碼片段。 我假設您對Microsoft Azure有點熟悉,並且已經擁有一個具有關聯訂閱的Azure帳戶。 如果沒有,您今天就可以註冊一個免費帳戶。 我還將假設您具有基本的Linux系統管理技能,並了解基本的故障轉移群集概念,如虛擬IP等。
免責聲明:Azure是一個快速發展的目標。 它每天都在變得越來越好!因此,功能/屏幕/按鈕必然會隨著時間的推移而發生變化,因此您的體驗可能會與您在下面看到的略有不同。 雖然本指南將向您展示如何使MySQL數據庫具有高可用性,但您當然可以調整此信息和流程以保護其他應用程序或數據庫,如SAP,Oracle,PostgreSQL,NFS文件服務器等。以下是在Microsoft Azure IaaS中創建高可用性MySQL數據庫的高級步驟:
- 創建資源組
- 創建一個虛擬網絡
- 創建存儲帳戶
- 在可用性集中創建虛擬機
- 設置虛擬機靜態IP地址
- 將數據磁盤添加到群集節點
- 創建入站安全規則以允許VNC訪問
- Linux OS配置
- 安裝和配置MySQL
- 安裝和配置群集
- 創建內部負載均衡器
- 測試群集連接
概觀
本文將介紹在沒有共享存儲的Microsoft Azure IaaS中配置Linux故障轉移群集的步驟。它將介紹如何在單個Azure區域中創建集群。 由於新的Azure資源管理器(ARM),群集節點(node1,node2和見證服務器)將駐留在可用性集(3個不同的故障域和更新域)中。我們將使用新的Azure資源管理器創建所有資源。配置如下所示:將使用以下IP地址:
- node1:10.0.0.4
- node2:10.0.0.5
- 見證人:10.0.0.6
- 虛擬/“浮動”IP:10.0.0.99
- MySQL端口:3306
創建資源組
首先,創建一個資源組。 您的資源組最終將包含與我們的集群部署相關的所有各種對象:虛擬機,虛擬網絡,存儲帳戶等。 在這裡,我們將調用我們新創建的資源組“cluster-resources”。 選擇您所在地區時請注意。 您的所有資源都需要位於同一區域內。 在這裡,我們將把所有內容部署到“美國西部”地區:
創建虛擬網絡(VNet)
創建虛擬網絡將是您在沒有共享存儲的Microsoft Azure IaaS中配置Linux故障轉移群集的下一步。虛擬網絡是Azure雲中專用於您的隔離網絡。 您可以完全控制IP地址塊和子網,路由,安全策略(即防火牆),DNS設置等內容。 您將在您的虛擬網絡中啟動Azure Iaas虛擬機(VM)。 每當您獲得選項時,請確保選擇“資源管理器”作為部署模型:為新虛擬網絡命名(“虛擬網絡”),並確保選擇在上一步驟中創建的資源組(“群集 – 資源“)。 您的虛擬網絡需要與資源組位於同一區域。 我們將保留IP地址和子網值作為默認值。
創建存儲帳戶
在配置任何虛擬機之前,您需要創建存儲它們的存儲帳戶。 同樣,請確保在任何時候選擇“資源管理器”作為部署模型:接下來,為新存儲帳戶命名。 存儲帳戶名稱在* ALL * Azure中必須是唯一的。 (存儲在Azure存儲中的每個對像都具有唯一的URL地址。存儲帳戶名稱構成該地址的子域。)在此示例中,我將存儲帳戶稱為“linuxclusterstorage”,但您需要在設置自己的存儲帳戶時選擇不同的存儲帳戶。根據您的要求和預算選擇存儲類型。 為了本指南的目的,我選擇了“Standard-LRS”(即 本地冗餘)以最小化成本。確保您的新存儲帳戶已添加到您在同一位置(本示例中為“West US”)的步驟1(“cluster-resources”)中創建的資源組中:
在可用性集中創建虛擬機
我們將在本指南中配置3台虛擬機。 前兩個VM(我稱之為“node1”和“node2”)將作為集群節點運行,能夠將MySQL數據庫及其相關資源聯機。 第三個VM將充當群集的見證服務器,以增強對裂腦的保護。為確保最大可用性,所有3個VM都將添加到同一可用性集中,以確保它們最終位於不同的故障域和更新域中。
創建“node1”VM
創建第一個VM(“node1”)。 在本指南中,我們將使用CentOS 6.X:確保使用Resource Manager部署模型。 默認情況下應該選擇:為VM提供主機名(“node1”)和用戶名/密碼,稍後將用於SSH進入系統。 確保將此VM添加到資源組(“cluster-resources”),並且它與所有其他資源位於同一區域:接下來,選擇實例大小。 有關可用的各種實例大小的更多信息,請單擊此處。出於本指南的目的,我對Node1和Node2使用“A3 Standard”,以最大限度地降低成本,因為這不會運行生產工作負載。 我為見證服務器使用了更小的“A1標準”大小。 選擇最適合您的實例大小。 如果您希望能夠從外部世界連接到VM,請設置公共IP地址。 我這樣做了以後我可以將SSH和VNC引入系統重要信息:默認情況下,您的VM不會被添加到可用性集中。 在確保創建新可用性集期間的“設置”屏幕上,我們將調用“cluster-availability-set”。 Azure資源管理器(ARM)允許您創建具有3個故障域的可用性集。 此處的默認值很好:查看VM屬性,然後單擊“確定”以創建第一個VM:
創建“node2”和“見證”VM
重複上述步驟兩次以創建另外兩個VM。 我創建了另一個名為“node2”的“A3標準”大小的VM和一個名為“見證”的“A1標準”大小的VM。這裡唯一的區別是,您將把這些虛擬機添加到我們剛剛創建的可用性集(“集群可用性集”)中:您的3個虛擬機可能需要一些時間來進行配置。 完成後,您將在Azure門戶的“虛擬機”屏幕上看到您的虛擬機:
設置虛擬機靜態IP地址
將使用以下IP地址設置VM:
- node1:10.0.0.4
- node2:10.0.0.5
- 見證人:10.0.0.6
對每個VM重複此步驟。 選擇VM並編輯網絡接口選擇與VM關聯的網絡接口,然後編輯IP地址。 選擇“靜態”並指定所需的IP地址:
將數據磁盤添加到群集節點
接下來,我們需要為我們的集群節點(“node1”和“node2”)添加一個額外的磁盤。 該磁盤將存儲我們的MySQL數據庫,稍後將在節點之間進行複制。注意:您不需要向“見證”節點添加額外的磁盤。 只有“node1”和“node2”。編輯VM,選擇磁盤,然後附加新磁盤:根據工作負載選擇磁盤類型(標准或高級SSD)和大小。 在這裡,我在兩個群集節點上創建一個10GB標準磁盤。 就主機緩存而言,“無”或“只讀”緩存很好。 我不建議使用“讀/寫”,因為可能會丟失數據:
創建入站安全規則以允許VNC訪問
如果您的VM是網絡安全組(NSG)的一部分,默認情況下,除非您在創建VM期間禁用它,否則“Azure防火牆”中打開的唯一端口是SSH(端口22)。 在本指南的後面,我將使用VNC訪問“node1”的桌面並使用GUI配置集群。 創建入站安全規則以打開VNC訪問。 在該指南中使用端口5902。 根據您的VNC配置進行調整。虛擬機 – >(選擇節點1) – >網絡接口 – >(選擇網卡) – >網絡安全組 – >(選擇NSG) – >入站安全規則 – >添加
Linux OS配置
這裡我們將離開Azure門戶一段時間,並在命令行上弄髒我們,作為Linux管理員,您現在應該習慣這樣做。 您沒有獲得Azure中Linux VM的root密碼,因此一旦您以創建VM期間指定的用戶身份登錄,請使用“sudo”命令獲取root權限:
$ sudo su -
編輯/ etc / hosts
除非您已經設置了DNS服務器,否則您需要在所有3台服務器上創建主機文件條目,以便它們可以通過名稱正確地相互解析。將以下行添加到/ etc / hosts文件的末尾:
10.0.0.4 node1 10.0.0.5 node2 10.0.0.6目擊者 10.0.0.99 mysql-vip
禁用SELinux
編輯/ etc / sysconfig / linux並設置“SELINUX = disabled”:
#vi / etc / sysconfig / selinux #此文件控制系統上SELinux的狀態。 #SELINUX =可以採用以下三個值中的一個: #enforcing - 強制執行SELinux安全策略。 #permissive - SELinux打印警告而不是強制執行。 #disabled - 未加載SELinux策略。 SELINUX =禁用 #SELINUXTYPE =可以採用以下兩個值之一: #targeted - 目標進程受到保護, #mls - 多級安全保護。 SELINUXTYPE =針對性
配置iptables,以便集群虛擬IP可以正常工作
重要信息:為了使群集虛擬IP能夠連接並且還要監視IP資源,需要設置一些iptables規則。 注意:10.0.0.99是我們將在群集中使用的虛擬IP,3306是我的MySQL使用的默認端口。在node1(10.0.0.4)上,運行以下命令:
#iptables --flush #iptables -t nat -A PREROUTING -p tcp --dport 3306 -j DNAT - 到目的地10.0.0.99:303 #iptables -t nat -A POSTROUTING -p icmp -s 10.0.0.99 -j SNAT --to-source 10.0.0.4 #service iptables save #chkconfig iptables on
在Node2(10.0.0.5)上,運行以下命令:
#iptables --flush #iptables -t nat -A PREROUTING -p tcp --dport 3306 -j DNAT - 到目的地10.0.0.99:303 #iptables -t nat -A POSTROUTING -p icmp -s 10.0.0.99 -j SNAT --to-source 10.0.0.5 #service iptables save #chkconfig iptables on
安裝和配置VNC(及相關軟件包)
要訪問我們的Linux服務器的GUI,以便稍後配置我們的集群,請在您的集群節點上安裝VNC服務器。 在我的設置中,我只在“node1”上執行此操作
#yum install tigervnc-server xterm #vncpasswd #vi / etc / sysconfig / vncservers VNCSERVERS =“2:根” VNCSERVERARGS [2] =“ - 幾何1024x768” #service vncserver start #chkconfig vncserver on
通過在筆記本電腦/台式機上打開VNC客戶端並連接到群集節點的公共IP來測試連接性
重新啟動群集節點
重新啟動群集節點,以便禁用SELinux,並檢測先前添加的第二個磁盤。只需要重新啟動“node1”和“node2”。
分區和格式化“數據”磁盤
在本指南的第6步(“將數據磁盤添加到群集節點”中),我們只是… …為每個群集節點添加了一個額外的磁盤,以存儲我們將要保護的應用程序數據。 在這種情況下,它恰好是MySQL數據庫。在Azure IaaS中,Linux虛擬機對磁盤使用以下安排:
- / dev / sda – 操作系統磁盤
- / dev / sdb – 臨時磁盤
- / dev / sdc – 第一個數據磁盤
- / dev / sdd – 第二個數據磁盤
- …
- / dev / sdj – 第8個數據磁盤
我們在本指南的第6步中添加的磁盤應顯示為/ dev / sdc。 您可以運行“fdisk -l”命令進行驗證。 您將看到/ dev / sda(OS)和/ dev / sdb(臨時)已經有磁盤分區並正在使用。
#fdisk -l 磁盤/ dev / sdb:306.0 GB,306016419840字節 255個頭,63個扇區/軌道,37204個氣缸 單位= 16065 * 512 = 8225280字節的柱面 扇區大小(邏輯/物理):512字節/ 512字節 I / O大小(最小/最佳):512字節/ 512字節 磁盤標識符:0xd3920649 設備啟動開始結束塊ID系統 / dev / sdb1 * 1 37205 298842112 83 Linux 磁盤/ dev / sdc:10.7 GB,10737418240字節 255個頭,63個扇區/軌道,1305個氣缸 單位= 16065 * 512 = 8225280字節的柱面 扇區大小(邏輯/物理):512字節/ 512字節 I / O大小(最小/最佳):512字節/ 512字節 磁盤標識符:0x00000000 磁盤/ dev / sda:32.2 GB,32212254720字節 255個頭,63個扇區/軌道,3916個氣缸 單位= 16065 * 512 = 8225280字節的柱面 扇區大小(邏輯/物理):512字節/ 512字節 I / O大小(最小/最佳):512字節/ 512字節 磁盤標識符:0x000c23d3 設備啟動開始結束塊ID系統 / dev / sda1 * 1 3789 30432256 83 Linux / dev / sda2 3789 3917 1024000 82 Linux swap / Solaris
在這裡,我將創建一個分區(/ dev / sdc1),對其進行格式化,並將其掛載到MySQL的默認位置,即/ var / lib / mysql。 在“node1”和“node2”上執行以下步驟:
#fdisk / dev / sdc 命令(m求助):n 命令行動 擴展 p主分區(1-4) p 分區號(1-4):1 第一個柱面(1-1305,默認值1):<enter> 使用默認值1 最後一個氣缸,氣缸或尺寸{K,M,G}(1-1305,默認1305):<enter> 使用默認值1305 命令(m求助):w 分區表已被更改! 調用ioctl()重新讀取分區表。 同步磁盤。 [root @ node1~]# #mkfs.ext4 / dev / sdc1 #mkdir / var / lib / mysql
在node1上,掛載文件系統:
#mount / dev / sdc1 / var / lib / mysql
安裝並配置MySQL
接下來,安裝安裝MySQL包,初始化示例數據庫,並為MySQL設置“root”密碼。
在“node1”上:
#yum -y install mysql mysql-server #/ usr / bin / mysql_install_db --datadir =“/ var / lib / mysql /” - user = mysql #mysqld_safe --user = root --socket = / var / lib / mysql / mysql.sock --port = 3306 --datadir = / var / lib / mysql --log& # ##注意:下一個命令允許來自任何主機的遠程連接。 生產不是一個好主意! #echo“update user set Host ='%'where host ='node1';刷新權限| mysql mysql # ##將MySQL的root密碼設置為'SIOS' #echo“update user set Password = PASSWORD('SIOS')其中User ='root'; flush特權” | mysql mysql
創建MySQL配置文件。我們將它放在數據磁盤上(稍後將被複製 – /var/lib/mysql/my.cnf)。 例:
#vi /var/lib/mysql/my.cnf 的[mysqld] DATADIR =的/ var / lib中/ MySQL的 插座=的/ var / lib中/ MySQL的/的mysql.sock PID文件=的/ var / lib中/ MySQL的/ mysqld.pid 用戶=根 端口= 3306 #建議禁用符號鏈接以防止出現各種安全風險 符號鏈接= 0 [mysqld_safe的] 對數誤差=的/ var /數/ mysqld.log PID文件= / var / run中/ mysqld的/ mysqld.pid [客戶] 用戶=根 密碼= SIOS
刪除位於/ etc中的原始MySQL配置文件(如果存在):
#rm /etc/my.cnf
在“node2”上:
在“node2”上,您只需要安裝MySQL軟件包。 其他步驟不是必需的:
[root @ node2~] #yum -y install mysql mysql-server
安裝和配置群集
此時,我們已準備好安裝和配置我們的集群。 SIOS Protection Suite for Linux(又名SPS-Linux)將在本指南中用作群集技術。 它在單個集成解決方案中提供高可用性故障轉移群集功能(LifeKeeper)以及實時,塊級數據複製(DataKeeper)。 SPS-Linux使您能夠部署“SANLess”群集,即“無共享”群集,這意味著群集節點沒有任何共享存儲,就像Azure VM一樣。
安裝適用於Linux的SIOS Protection Suite
在所有3個VM(node1,node2,見證)上執行以下步驟:下載SPS-Linux安裝映像文件(sps.img),並獲取試用許可證或購買永久許可證。 有關更多信息,請聯繫SIOS。您將環回安裝它並以root身份運行“setup”腳本(或首先“sudo su – ”以獲取根shell)例如:
#mkdir / tmp / install #mount -o loop sps.img / tmp / install #cd / tmp / install # 。/建立
在安裝腳本期間,系統會提示您回答一些問題。 您將在幾乎每個屏幕上按Enter鍵以接受默認值。 請注意以下例外情況:
- 在標題為“High Availability NFS”的屏幕上,您可以選擇“n”,因為我們不會創建高可用性NFS服務器
- 在安裝腳本結束時,您可以選擇立即或稍後安裝試用許可證密鑰。我們稍後會安裝許可證密鑰,因此您可以安全地選擇“n”
- 在“設置”的最後一個屏幕中,從屏幕上顯示的列表中選擇要安裝的ARK(應用程序恢復工具包,即“群集代理”)。
- 僅在“node1”和“node2”上需要ARK。 你不需要在“見證”上安裝
- 使用向上/向下箭頭導航列表,然後按空格鍵選擇以下內容:
- lkDR – 適用於Linux的DataKeeper
- lkSQL – LifeKeeper MySQL RDBMS恢復工具包
- 這將導致在“node1”和“node2”上安裝以下附加RPM:
- SteelEye公司 – LKDR-9.0.2-6513.noarch.rpm
- SteelEye公司 – lkSQL-9.0.2-6513.noarch.rpm
安裝Witness / Quorum包
LifeKeeper(steeleye-lkQWK)的Quorum / Witness服務器支持包與LifeKeeper核心的現有故障轉移過程相結合,可以在總體網絡故障常見的情況下以更大的可信度進行系統故障轉移。這實際上意味著可以在大大降低“裂腦”情況的風險的同時進行故障轉移。在所有3個節點(node1,node2,見證)上安裝Witness / Quorum rpm:
#cd / tmp / install / quorum #rpm -Uvh steeleye-lkQWK-9.0.2-6513.noarch.rpm
在所有3個節點(node1,node2,見證)上,編輯/ etc / default / LifeKeeper,設置NOBCASTPING = 1僅打開見證服務器(“見證”),編輯/ etc / default / LifeKeeper,設置WITNESS_MODE = off / none
安裝許可證密鑰
在所有3個節點上,使用“lkkeyins”命令安裝從SIOS獲取的許可證文件:
#/ opt / LifeKeeper / bin / lkkeyins <path_to_file> / <filename> .lic
啟動LifeKeeper
在所有3個節點上,使用“lkstart”命令啟動集群軟件:
#/ opt / LifeKeeper / bin / lkstart
設置LifeKeeper GUI的用戶權限
在所有3個節點上,編輯/ etc / group並將“tony”用戶(或在VM創建期間指定的任何用戶名)添加到“lkadmin”組以授予對LifeKeeper GUI的訪問權限。 默認情況下,只有“root”是該組的成員,並且我們沒有root密碼:
#vi / etc / group lkadmin:X:1001:根,貝
打開LifeKeeper GUI
與node1的公共IP地址建立VNC連接。 根據上面的VNC和入站安全規則配置,您將使用之前指定的VNC密碼連接到<Public_IP>:2。 登錄後,打開終端窗口並使用以下命令運行LifeKeeper GUI:
#/ opt / LifeKeeper / bin / lkGUIapp&
測試群集連接