循序漸進:SQL Server v.Next Linux高可用性 – 公共預覽#azure #sql #sanless
今年早些時候,微軟宣布他們將發布一個適用於Linux的SQL Server版本。 今天,我很高興得知微軟最終公佈了他們目前稱之為SQL Server v.Next的公開預覽,並且它可用於Linux和Windows操作系統。 可以在此處找到更多信息以及下載鏈接和文檔:
https://www.microsoft.com/en-us/sql-server/sql-server-vnext-including-Linux
SQL Server for Linux
在本文中,我將向您展示如何在運行SQL Server的Azure中部署Linux VM,以及如何配置雙節點故障轉移群集以使其高度可用!並且沒有使用共享存儲(也稱為“無聖”或“無共享”集群)。最終結果將是Microsoft Azure IaaS(基礎架構即服務)中的2節點SQL Server for Linux集群(以及見證服務器)。 該指南包括適當的屏幕截圖,shell命令和代碼片段。 我假設您對Microsoft Azure有點熟悉,並且已經擁有一個具有關聯訂閱的Azure帳戶。 如果沒有,您今天就可以註冊一個免費帳戶。 我還將假設您具有基本的Linux系統管理技能,並了解基本的故障轉移群集概念,如虛擬IP等。免責聲明:Azure是一個快速發展的目標。 在這裡,我正在使用SQL Server for Linux的公共預覽版。 因此,在SQL v.Next正式發布之前,功能/屏幕/按鈕必然會發生變化,因此您的體驗可能會與您在下面看到的略有不同。 雖然本指南將向您展示如何使SQL Server for Linux數據庫高度可用,但您當然可以調整此信息和過程以保護其他應用程序或數據庫,就像我之前所寫的那樣(MySQL示例)。以下是在Microsoft Azure IaaS中創建高可用性MySQL數據庫的高級步驟:
- 創建資源組
- 創建一個虛擬網絡
- 創建存儲帳戶
- 在可用性集中創建虛擬機
- 設置虛擬機靜態IP地址
- 將數據磁盤添加到群集節點
- 創建入站安全規則以允許VNC訪問
- Linux OS配置
- 安裝和配置SQL Server
- 安裝和配置群集
- 創建內部負載均衡器
- 測試群集連接
概觀
本文將介紹如何在單個Azure區域中創建集群。 由於新的Azure資源管理器(ARM),群集節點(sql-linux1,sql-linux2和見證服務器)將駐留在可用性集(3個不同的故障域和更新域)中。我們將使用新的Azure資源管理器創建所有資源。配置如下所示:將使用以下IP地址:
- sql-linux1:10.0.0.7
- sql-linux2:10.0.0.8
- sql-witness:10.0.0.9
- 虛擬/“浮動”IP:10.0.0.199
- SQL Server端口:1433
創建資源組
首先,創建一個資源組。 您的資源組最終將包含與我們的集群部署相關的所有各種對象:虛擬機,存儲帳戶等。 在這裡,我們將調用我們新創建的資源組“sql-cluster”。 選擇您所在地區時請注意。 您的所有資源都需要位於同一區域內。 在這裡,我們將把所有內容部署到“美國西部”地區:
創建虛擬網絡(VNet)
接下來,如果您還沒有,請創建一個虛擬網絡。 虛擬網絡是Azure雲中專用於您的隔離網絡。 您可以完全控制IP地址塊和子網,路由,安全策略(即防火牆),DNS設置等內容。 您將在您的虛擬網絡中啟動Azure Iaas虛擬機(VM)。我的Azure帳戶已經有一個名為“cluster-network”的現有VNet(10.0.0.0/16),我將在本指南中使用它。 創建一個VNet非常簡單,如果你需要復習,我已經介紹過在這裡創建一個。
創建存儲帳戶
在配置任何虛擬機之前,您需要一個存儲帳戶來存儲它們。 接下來,為您的新存儲帳戶命名。 存儲帳戶名稱在* ALL * Azure中必須是唯一的。 (存儲在Azure存儲中的每個對像都具有唯一的URL地址。存儲帳戶名稱構成該地址的子域。)在此示例中,我將存儲帳戶稱為“sqllinuxcluster”,但您需要在設置自己的存儲帳戶時選擇不同的存儲帳戶。根據您的要求和預算選擇存儲類型。 為了本指南的目的,我選擇了“Standard-LRS”(即 本地冗餘)以最小化成本。確保您的新存儲帳戶已添加到您在相同位置(本示例中為“West US”)的步驟1(“sql-cluster”)中創建的資源組中:
在可用性集中創建虛擬機
我們將在本指南中配置3台虛擬機。 前兩個虛擬機(我稱之為“sql-linux1”和“sql-linux2”)將作為集群節點運行,能夠將SQL Server數據庫及其相關資源聯機。 第三個VM將充當群集的見證服務器,以增強對裂腦的保護。為確保最大可用性,所有3個VM都將添加到同一可用性集中,以確保它們最終位於不同的故障域和更新域中。Azure Marketplace有一個名為“Red Hat Enterprise Linux 7.2上的SQL Server vNext”的VM模板,它預安裝有一個公共預覽評估版SQL Server v.Next for Linux,這將為您節省幾個步驟。 如果您寧願從一個空VM開始並自己安裝SQL,可以在此處找到安裝說明。
創建“sql-linux1”VM
創建您的第一個VM(“sql-linux1”)並選擇上面提到的市場圖像。 為VM提供主機名(“sql-linux1”)和用戶名/密碼,稍後將用於SSH進入系統。 確保將此VM添加到資源組(“sql-cluster”),並且它與所有其他資源位於同一區域:接下來,選擇實例大小。 有關可用的各種實例大小的更多信息,請單擊此處。出於本指南的目的,我選擇了最小/最便宜的尺寸,在本例中為“DS1_V2標準”,以最大限度地降低成本,因為這不會運行生產工作負載。 根據您要測試的內容選擇最有意義的實例大小:重要信息:默認情況下,您的VM不會添加到可用性集中。 在確保創建新可用性集期間的“設置”屏幕上,我們將調用“sql-availability-set”。 Azure資源管理器(ARM)允許您創建具有3個故障域的可用性集。 此處的默認值很好:在下一個屏幕上,查看VM屬性,然後單擊“確定”以創建第一個VM。
創建“sql-linux2”和“sql-witness”VM
重複上述步驟兩次以創建另外兩個VM。這裡唯一的區別是你將把這些虛擬機添加到我們剛剛創建的可用性集(“sql-availability-set”)中。您的3個虛擬機可能需要一段時間才能配置。 完成後,您將在Azure門戶的“虛擬機”屏幕上看到您的VM(sql-linux1,sql-linux2和sql-witness)。
設置虛擬機靜態IP地址
將使用以下IP地址設置VM:
- sql-linux1:10.0.0.7
- sql-linux2:10.0.0.8
- sql-witness:10.0.0.9
對每個VM重複此步驟。 選擇VM並編輯網絡接口選擇與VM關聯的網絡接口,然後編輯IP配置。 選擇“靜態”並指定所需的IP地址:
將數據磁盤添加到群集節點
接下來,我們需要為我們的集群節點添加額外的磁盤(“sql-linux1”和“sql-linux2”)。 該磁盤將存儲我們的SQL數據庫,稍後將在節點之間進行複制。注意:您不需要向“sql-witness”節點添加額外的磁盤。 只有“sql-linux1”和“sql-linux2”。編輯VM,選擇“磁盤”,然後附加新磁盤。 根據您的工作負載選擇磁盤類型(標准或高級SSD)和大小。 在這裡,我在兩個群集節點上創建了一個10GB標準磁盤。 就主機緩存而言,“無”或“只讀”緩存很好。 我不建議使用“讀/寫”,因為可能會丟失數據:
創建入站安全規則以允許VNC訪問
如果您的VM是網絡安全組(NSG)的一部分,默認情況下,除非您在創建VM期間禁用它,否則“Azure防火牆”中打開的唯一端口是SSH(端口22)。 在本指南的後面,我將使用VNC訪問“sql-linux1”的桌面並使用GUI配置集群。 創建入站安全規則以打開VNC訪問。 在該指南中使用端口5902。 根據您的VNC配置進行調整。虛擬機 – >(選擇sql-linux1) – >網絡接口 – >(選擇網卡) – >網絡安全組 – >(選擇NSG) – >入站安全規則 – >添加
Linux OS配置
這裡我們將離開Azure門戶一段時間,並在命令行上弄髒我們,作為Linux管理員,您現在應該習慣這樣做。 您沒有獲得Azure中Linux VM的root密碼,因此一旦您以創建VM期間指定的用戶身份登錄,請使用“sudo”命令獲取root權限:
$ sudo su -
編輯/ etc / hosts
除非您已經設置了DNS服務器,否則您需要在所有3台服務器上創建主機文件條目,以便它們可以通過名稱正確地相互解析。將以下行添加到/ etc / hosts文件的末尾:
10.0.0.7 sql-linux1 10.0.0.8 sql-linux2 10.0.0.9 sql-witness 10.0.0.199 sql-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.199是我們將在群集中使用的虛擬IP,1433是我的SQL Server使用的默認端口。注意:RHEL7將默認防火牆更改為FirewallD,而不是iptables。 還沒有花太多時間在firewalld,所以現在這個指南將禁用firewalld並使用iptables代替。 您還需要安裝“iptables-services”軟件包,以便下面的service和chkconfig命令可以正常工作。
#systemctl stop firewalld #systemctl禁用firewalld
在sql-linux1(10.0.0.7)上,運行以下命令:
#yum install iptables-services #iptables --flush #iptables -t nat -A PREROUTING -p tcp --dport 1433 -j DNAT --to-destination 10.0.0.199:1433 #iptables -t nat -A PREROUTING -p tcp --dport 1434 -j DNAT --to-destination 10.0.0.199:1434 #iptables -t nat -A POSTROUTING -p icmp -s 10.0.0.199 -j SNAT --to-source 10.0.0.7 #service iptables save #chkconfig iptables on
在sql-linux2(10.0.0.8)上,運行以下命令:
#yum install iptables-services #iptables --flush #iptables -t nat -A PREROUTING -p tcp --dport 1433 -j DNAT --to-destination 10.0.0.199:1433 #iptables -t nat -A PREROUTING -p tcp --dport 1434 -j DNAT --to-destination 10.0.0.199:1434 #iptables -t nat -A POSTROUTING -p icmp -s 10.0.0.199 -j SNAT --to-source 10.0.0.8 #service iptables save #chkconfig iptables on
安裝和配置VNC(及相關軟件包)
為了訪問我們的linux服務器的GUI,以及稍後安裝和配置我們的集群,安裝VNC服務器,以及一些其他必需的軟件包(集群軟件需要redhat-lsb和patch rpms)。
#yum install tigervnc-server xterm wget unzip patch redhat-lsb
#vncpasswd
以下URL是在RHEL 7 / CentOS 7上運行VNC服務器的一個很好的指南:https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-vnc-remote-access-for -the-gnome-desktop-on-centos-7注意:此示例配置在顯示器2(:2,也稱為端口5902)和root(不安全)上運行VNC。 相應調整!
#cp /lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@:2.service #vi /etc/systemd/system/vncserver@:2.service [服務] 類型=分叉 #清除/tmp/.X11-unix環境中的所有現有文件 ExecStartPre = / bin / sh -c'/ usr / bin / vncserver -kill%i> / dev / null 2>&1 || :“ ExecStart = / sbin / runuser -l root -c“/ usr / bin / vncserver%i -geometry 1024x768” PIDFILE = /根/ .vnc /%H%i.pid ExecStop = / bin / sh -c'/ usr / bin / vncserver -kill%i> / dev / null 2>&1 || :“ #systemctl daemon-reload #systemctl enable vncserver @:2.service #vncserver:2 -geometry 1024x768
重新啟動群集節點
重新啟動群集節點,以便禁用SELinux,並檢測先前添加的第二個磁盤。
分區和格式化“數據”磁盤
在本指南的第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 / sda:31.5 GB,31457280000字節,61440000個扇區 單位= 1 * 512 = 512字節的扇區 扇區大小(邏輯/物理):512字節/ 4096字節 I / O大小(最小/最佳):4096字節/ 4096字節 磁盤標籤類型:dos 磁盤標識符:0x000c46d3 設備啟動開始結束塊ID系統 / dev / sda1 * 2048 1026047 512000 83 Linux / dev / sda2 1026048 61439999 30206976 83 Linux 磁盤/ dev / sdb:7516 MB,7516192768字節,14680064個扇區 單位= 1 * 512 = 512字節的扇區 扇區大小(邏輯/物理):512字節/ 4096字節 I / O大小(最小/最佳):4096字節/ 4096字節 磁盤標籤類型:dos 磁盤標識符:0x7cd70e11 設備啟動開始結束塊ID系統 / dev / sdb1 128 14678015 7338944 83 Linux 磁盤/ dev / sdc:10.7 GB,10737418240字節,20971520扇區 單位= 1 * 512 = 512字節的扇區 扇區大小(邏輯/物理):512字節/ 4096字節 I / O大小(最小/最佳):4096字節/ 4096字節
在這裡,我將創建一個分區(/ dev / sdc1),對其進行格式化,並將其掛載到SQL的默認位置,即/ var / opt / mssql。 在“sql-linux1”和“sql-linux2”上執行以下步驟:
#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 @sql-linux1~]#
#mkfs.ext4 / dev / sdc1 #mkdir / var / opt / mssql #chmod 770 / var / opt / mssql
掛載文件系統:
#mount / dev / sdc1 / var / opt / mssql
安裝和配置SQL Server
如果您從一個全新的Linux系統開始,可以在此處找到完整的安裝說明。如果您使用“Red Hat Enterprise Linux 7.2上的SQL Server vNext”Azure模板創建了VM,就像我在本指南中所做的那樣,那麼已經安裝了SQL Server。 您現在需要做的就是運行安裝腳本:
#/ opt / mssql / bin / sqlservr-setup Microsoft(R)SQL Server(R)安裝程序 您可以通過按Ctrl-C隨時中止設置。啟動這個程序 使用--help選項獲取有關在無人參與的情況下運行它的信息 模式。 可以從中下載此產品的許可條款 http://go.microsoft.com/fwlink/?LinkId=746388找到了 在/usr/share/doc/mssql-server/LICENSE.TXT中。 你接受許可條款嗎?如果是,請輸入“是”:是 請輸入系統管理員(SA)帳戶的密碼:<輸入所需的密碼> 請確認系統管理員(SA)帳戶的密碼:<輸入所需的密碼> 設置系統管理員(SA)帳戶密碼... 您是否希望立即啟動SQL Server服務?[y / n]:y 您是否希望啟用SQL Server啟動?[y / n]:n 您可以使用sqlservr-setup --enable-service啟用SQL Server 在開機。 安裝成功完成。
驗證服務是否正在運行:
#systemctl status mssql-server
在兩個節點上停止SQL Server。 集群軟件稍後將負責啟動它:
#systemctl stop mssql-server #systemctl stop mssql-server-telemetry
安裝和配置群集
此時,我們已準備好安裝和配置我們的集群。 SIOS Protection Suite for Linux(又名SPS-Linux)將在本指南中用作群集技術。 它在單個集成解決方案中提供高可用性故障轉移群集功能(LifeKeeper)以及實時,塊級數據複製(DataKeeper)。 SPS-Linux使您能夠部署“SANLess”群集,即“無共享”群集,這意味著群集節點沒有任何共享存儲,就像Azure VM一樣。
安裝適用於Linux的SIOS Protection Suite
在所有3個虛擬機上執行以下步驟(sql-linux1,sql-linux2,sql-witness):下載SPS-Linux安裝映像文件(sps.img),並獲取試用許可證或購買永久許可證。 有關更多信息,請聯繫SIOS。您將環回安裝它並以root身份運行“setup”腳本(或者首先“sudo su – ”以獲取root shell,如果您還沒有)例如:
#mkdir / tmp / install #mount -o loop sps.img / tmp / install #cd / tmp / install # 。/建立
在安裝腳本期間,系統會提示您回答一些問題。 您將在幾乎每個屏幕上按Enter鍵以接受默認值。 請注意以下例外情況:
- 在標題為“High Availability NFS”的屏幕上,您可以選擇“n”,因為我們不會創建高可用性NFS服務器
- 在安裝腳本結束時,您可以選擇立即或稍後安裝試用許可證密鑰。我們稍後會安裝許可證密鑰,因此您可以安全地選擇“n”
- 在“設置”的最後一個屏幕中,從屏幕上顯示的列表中選擇要安裝的ARK(應用程序恢復工具包,即“群集代理”)。
- 僅在“sql-linux1”和“sql-linux2”上需要ARK。 你不需要在“sql-witness”上安裝
- 使用向上/向下箭頭導航列表,然後按空格鍵選擇以下內容:
- lkDR – 適用於Linux的DataKeeper
- 這將導致在“sql-linux1”和“sql-linux2”上安裝以下附加RPM:
- SteelEye公司 – LKDR-9.0.2-6513.noarch.rpm
安裝Witness / Quorum包
LifeKeeper(steeleye-lkQWK)的Quorum / Witness服務器支持包與LifeKeeper核心的現有故障轉移過程相結合,可以在總體網絡故障常見的情況下以更大的可信度進行系統故障轉移。這實際上意味著可以在大大降低“裂腦”情況的風險的同時進行故障轉移。在所有3個節點上安裝Witness / Quorum rpm(sql-linux1,sql-linux2,sql-witness):
#cd / tmp / install / quorum #rpm -Uvh steeleye-lkQWK-9.0.2-6513.noarch.rpm
在所有3個節點(sql-linux1,sql-linux2,sql-witness)上,編輯/ etc / default / LifeKeeper,設置NOBCASTPING = 1僅打開Witness服務器(“sql-witness”),編輯/ 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
建立與sql-linux1的公共IP地址的VNC連接。 根據上面的VNC和入站安全規則配置,您將使用之前指定的VNC密碼連接到<Public_IP>:2。 登錄後,打開終端窗口並使用以下命令運行LifeKeeper GUI:
#/ opt / LifeKeeper / bin / lkGUIapp&
系統將提示您連接到第一個群集節點(“sql-linux1”)。 輸入在VM創建期間指定的linux用戶標識和密碼:接下來,通過單擊以下屏幕截圖中突出顯示的“連接到服務器”按鈕連接到“sql-linux2”和“sql-witness”:您現在應該看到所有3個服務器GUI,帶有綠色複選標記圖標,表示他們在線且健康:
創建溝通路徑
右鍵單擊“sql-linux1”並選擇Create Comm Path選擇“sql-linux2”和“sql-witness”,然後按照嚮導進行操作。 這將創建以下之間的通信路徑:
- sql-linux1和sql-linux2
- sql-linux1&sql-witness
仍然需要在sql-linux2和sql-witness之間創建一個comm路徑。 右鍵單擊“sql-linux2”並選擇Create Comm Path。 按照嚮導並選擇“sql-witness”作為遠程服務器:此時已創建以下通信路徑:
- sql-linux1 < – > sql-linux2
- sql-linux1 < – > sql-witness
- sql-linux2 < – > sql-witness
服務器前面的圖標已從綠色“複選標記”更改為黃色“危險標記”。 這是因為我們在節點之間只有一條通信路徑。如果VM具有多個NIC(可以在此處找到有關創建具有多個NIC的Azure VM的信息,但本文不會介紹這些信息),則可以在每個服務器之間創建冗餘通信路徑。 要刪除警告圖標,請轉到“查看”菜單,然後取消選擇“Comm Path Redundancy Warning”:結果:
驗證通信路徑
使用“lcdstatus”命令查看群集資源的狀態。 運行以下命令以驗證您是否已在每個節點上正確創建了其他兩個服務器的通信路徑:#/ opt / LifeKeeper / bin / lcdstatus -q -d sql-linux1 MACHINE NETWORK ADDRESSES / DEVICE STIO PRIO sql-linux2 TCP 10.0.0.7/10.0.0.8 ALIVE 1 sql-witness TCP 10.0.0.7/10.0.0.9 ALIVE 1#/ opt / LifeKeeper / bin / lcdstatus -q -d sql-linux2 MACHINE NETWORK ADDRESSES / DEVICE STIO PRIO sql-linux1 TCP 10.0 .0.8 / 10.0.0.7 ALIVE 1 sql-witness TCP 10.0.0.8/10.0.0.9 ALIVE 1#/ opt / LifeKeeper / bin / lcdstatus -q -d sql-witness MACHINE NETWORK ADDRESSES / DEVICE STATE PRIO sql-linux1 TCP 10.0。0.9 / 10.0.0.7 ALIVE 1 sql-linux2 TCP 10.0.0.9/10.0.0.8 ALIVE 1
創建數據複製群集資源(即 鏡子)
在繼續執行此步驟之前,請確保/ var / opt / mssql在sql-linux1上已安裝,但在sql-linux2上未安裝。 如果需要,在sql-linux2上運行“umount / var / opt / mssql”。接下來,創建數據複製資源以將/ var / opt / mssql分區從sql-linux1(源)複製到sql-linux2(目標)。