下麵一步一步介紹一下如何在Red Hat Enterprise Linux系統上為SQL Server配置共用磁碟集群(Shared Disk Cluster)及其相關使用(僅供測試學習之用,基礎篇) 一. 創建共用磁碟和 Cluster 微軟官方配置文檔:https://docs.microsof ...
下麵一步一步介紹一下如何在Red Hat Enterprise Linux系統上為SQL Server配置共用磁碟集群(Shared Disk Cluster)及其相關使用(僅供測試學習之用,基礎篇)
一. 創建共用磁碟和 Cluster
微軟官方配置文檔:https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-shared-disk-cluster-red-hat-7-configure。
Linux Cluster結構圖如下:
具體配置步驟如下:
1. 安裝及配置SQL Server
a) 先安裝兩個SQL Server作為Cluster的兩個節點,請參考博文“SQL Server on Red Hat Enterprise Linux——RHEL上的SQL Server(全截圖)”(如果需要更多節點則安裝更多);
b) 在Secondary端停掉並禁用SQL Server服務:
sudo systemctl stop mssql-server sudo systemctl disable mssql-server
c) 備份同步Server Master Key(由於Linux中SQL Server是以本地用戶mssql運行的,因此不同的節點無法識別別的節點的認證,所以需要備份同步加密key從Primary端到其它節點上以便於能夠成功解密Server Master Key):
- Secondary端備份原來的machine-key:
sudo su cd /var/opt/mssql/secrets mv machine-key machine-key.original.bak
- Primary端把machine-key複製到Secondary端:
sudo su cd /var/opt/mssql/secrets/ scp machine-key root@**<Secondary Node IP Address>**:/var/opt/mssql/secrets/
- Secondary端檢查是否成功備份過來並且添加相關許可權:
ls
chown mssql:mssql machine-key
d) 在Primary端為Pacemaker程式創建一個SQL登錄用戶,並給足足夠的許可權運行sp_server_diagnostics。
先開啟SQL Server服務:
sudo systemctl start mssql-server
連接到SQL Server上:
sqlcmd -S localhost -U sa -P **<Your Password>**
執行以下SQL語句創建用戶並賦予許可權:
USE [master] CREATE LOGIN [<loginName>] with PASSWORD= N'<loginPassword>' GRANT VIEW SERVER STATE TO <loginName> GO
退出sqlcmd:
exit
e) 在Primary端停掉並禁用SQL Server服務:
sudo systemctl stop mssql-server sudo systemctl disable mssql-server
f) 配置每一個節點的hosts文件,保證互相能夠識別。
sudo vi /etc/hosts
下圖是配置完成後的例子:
2. 配置共用磁碟以及轉移資料庫文件
有很多種提供共用磁碟的解決方案。下麵簡單介紹配置NFS的共用磁碟。推薦使用Kerberos去配置NFS以提高安全性:https://www.certdepot.net/rhel7-use-kerberos-control-access-nfs-network-shares/。這裡僅介紹最簡單的方式用於簡單測試和學習。
用NFS配置共用磁碟
找另一個RHEL系統機器作為NFS Server,執行如下命令(由於僅是測試研究,這裡選用Cluster的一個節點作為NFS Server也可):
a) 安裝NFS軟體包:
sudo yum -y install nfs-utils
b) 啟用並開啟rpcbind服務:
sudo systemctl enable rpcbind && systemctl start rpcbind
c) 啟用並開啟nfs-server服務:
sudo systemctl enable nfs-server && systemctl start nfs-server
d) 編輯/etc/exports文件去設置想要共用的存儲路徑,註意每一個共用是一行:
vi /etc/exports
設置完的例子如下:
e) 導出共用並確定是否成功:
sudo exportfs -rav sudo showmount -e
f) 在SELinux中添加異常設置:
sudo setsebool -P nfs_export_all_rw 1
g) 防火牆中允許相關服務通信:
sudo firewall-cmd --permanent --add-service=nfs sudo firewall-cmd --permanent --add-service=mountd sudo firewall-cmd --permanent --add-service=rpc-bind sudo firewall-cmd --reload
為Cluster所有節點設置NFS
在所有的Cluster節點機器上執行如下命令,確保能訪問NFS共用磁碟:
a) 安裝NFS軟體包:
sudo yum -y install nfs-utils
b) 防火牆中允許相關服務通信:
sudo firewall-cmd --permanent --add-service=nfs sudo firewall-cmd --permanent --add-service=mountd sudo firewall-cmd --permanent --add-service=rpc-bind sudo firewall-cmd --reload
c) 確認是否可以看到NFS共用:
sudo showmount -e **<IP OF NFS SERVER>**
更多關於NFS的文檔資源參考以下站點:
- NFS servers and firewalld | Stack Exchange
- Mounting an NFS Volume | Linux Network Administrators Guide
- NFS server configuration
設置資料庫文件路徑為共用磁碟
轉移資料庫文件到共用磁碟上:
a) 在Primary節點上先把資料庫文件保存到臨時路徑/var/opt/mssql/tmp下,
su mssql mkdir /var/opt/mssql/tmp cp /var/opt/mssql/data/* /var/opt/mssql/tmp rm /var/opt/mssql/data/* exit
b) 在所有節點上編輯/etc/fstab文件,保證重啟系統後自動掛載NFS共用磁碟:
<IP OF NFS SERVER>:<shared_storage_path> <database_files_directory_path> nfs timeo=14,intr
例子如下:
Note(摘自微軟):
c) 掛載剛剛配置的NFS存儲:
sudo mount -a
可以執行mount命令檢測是否已經成功掛載:
d) 在Primary節點上把臨時路徑下的資料庫文件複製到新掛載的路徑下,並保證mssql這個本地用戶有讀寫許可權:
chown mssql /var/opt/mssql/data chgrp mssql /var/opt/mssql/data su mssql cp /var/opt/mssql/tmp/* /var/opt/mssql/data/ rm /var/opt/mssql/tmp/* exit
e) 在Primary節點上開啟SQL Server服務驗證是否成功,這時SQL Server已經使用NFS伺服器上的共用磁碟了:
sudo systemctl start mssql-server sudo systemctl status mssql-server sudo systemctl stop mssql-server
f) 在其它非Primary節點上依次開啟SQL Server服務驗證是否成功。
Note:目前所有節點的SQL Server都使用這個NFS伺服器共用磁碟了,根據微軟推薦,為了防止衝突,需要使用一個File System Cluster資源來防止一個共用路徑被掛載多次。
3. 安裝及配置Pacemaker
在所有Cluster節點下依次執行以下操作:
a) 創建一個文件保存之前為Pacemaker創建的SQL Server登錄用戶賬戶密碼信息:
sudo touch /var/opt/mssql/secrets/passwd sudo echo '<loginName>' >> /var/opt/mssql/secrets/passwd sudo echo '<loginPassword>' >> /var/opt/mssql/secrets/passwd sudo chown root:root /var/opt/mssql/secrets/passwd sudo chmod 600 /var/opt/mssql/secrets/passwd
b) 設置防火牆允許Pacemaker服務通信:
sudo firewall-cmd --permanent --add-service=high-availability sudo firewall-cmd --reload
Note:如果使用的是其它防火牆工具,需要開啟如下埠。
TCP: Ports 2224, 3121, 21064
UDP: Port 5405
c) 安裝Pacemaker軟體包:
sudo yum install pacemaker pcs fence-agents-all resource-agents
d) 設置安裝Pacemaker和Corosync時創建的預設用戶hacluster的密碼:
sudo passwd hacluster
e) 啟用並開啟pcsd服務,以及啟用Pacemaker:
sudo systemctl enable pcsd && sudo systemctl start pcsd sudo systemctl enable pacemaker
f) 安裝FCI資源代理:
sudo yum install mssql-server-ha
4. 創建Cluster
下麵正式創建Cluster:
a) 在Primary節點上創建Cluster:
sudo pcs cluster auth **<nodeName1 nodeName2 …>** -u hacluster sudo pcs cluster setup --name **<clusterName>** **<nodeName1 nodeName2 …>** sudo pcs cluster start --all
例子如下:
b) 目前CTP 2.1中沒有HyperV和cloud環境用的fencing,因此暫時需要禁用fencing功能(不推薦在生產環境中禁用)
sudo pcs property set stonith-enabled=false sudo pcs property set start-failure-is-fatal=false
c) 配置Cluster的相關資源信息,可能需要設置的信息如下:
SQL Server Resource Name——SQL Server資源名字,
Timeout Value ——Cluster等待一個資源起來的超時時間,如果是SQL Server,則是master database啟動的時間,
Floating IP Resource Name——虛擬IP資源的名字,
IP Address——用來連接SQL Cluster實例的IP地址,
File System Resource Name——文件系統資源的名字,
device——NFS共用路徑,
directory——本地掛載路徑,
fstype——文件共用類型,比如nfs。
腳本如下:
sudo pcs cluster cib cfg sudo pcs -f cfg resource create **<sqlServerResourceName>** ocf:mssql:fci op defaults timeout=**<timeout_in_seconds>** sudo pcs -f cfg resource create **<floatingIPResourceName>** ocf:heartbeat:IPaddr2 ip=**<ip Address>** sudo pcs -f cfg resource create **<fileShareResourceName>** Filesystem device=**<networkPath>** directory=**<localPath>** fstype=**<fileShareType>** sudo pcs -f cfg constraint colocation add **<virtualIPResourceName>** **<sqlResourceName>** sudo pcs -f cfg constraint colocation add **<fileShareResourceName>** **<sqlResourceName> ** sudo pcs cluster cib-push cfg
例子如下:
sudo pcs cluster cib cfg sudo pcs -f cfg resource create mssqlha ocf:mssql:fci op defaults timeout=60s sudo pcs -f cfg resource create virtualip ocf:heartbeat:IPaddr2 ip=10.2.38.180 sudo pcs -f cfg resource create fs Filesystem device="10.2.38.178:/mnt/nfs" directory="/var/opt/mssql/data" fstype="nfs" sudo pcs -f cfg constraint colocation add virtualip mssqlha sudo pcs -f cfg constraint colocation add fs mssqlha sudo pcs cluster cib-push cfg
配置完成後SQL Server會運行在Cluster其中一個節點上。
d) 使用如下命令確認Cluster中相關SQL Server服務是否正常:
sudo pcs status
下圖是正常啟動的情況:
e) 正常啟動後就可以用Cluster虛擬IP訪問SQL Server了:
Note:
- 如果某些資源啟動的時候有問題,可以使用下麵這個命令診斷啟動:
sudo pcs resource debug-start **<resource id>**
如果沒問題或者有問題修複後,則重啟Cluster服務稍微等一段時間就好使了:
sudo pcs cluster stop --all sudo pcs cluster start --all
2. 管理和使用Cluster(基礎篇)
- 微軟官方介紹:https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-shared-disk-cluster-red-hat-7-operate。
這裡暫時只介紹一個常用的功能Failover,可以轉移某個資源到目的端節點上:
sudo pcs resource move **<sqlResourceName>** **<targetNodeName>** sudo pcs resource clear **<sqlResourceName>**
- Linux上為SQL Server搭建的共用磁碟集群系統和Windows SQL Cluster是不一樣的(所以標題為“類”),它不能用SQL Query來判斷是否是Cluster了,以下命令目前檢測不出來是Cluster也獲取不到任何信息:
select serverproperty(‘IsClustered’); select * from ::fn_virtualservernodes(); select * from sys.dm_os_cluster_nodes,sys.dm_io_cluster_shared_drives;
從這個站點可以找到依據,但是不確定未來是否有變化:https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-shared-disk-cluster-red-hat-7-configure。
- Pacemaker是一個在Linux上很成熟的開源高可用性集群。下麵這個站點介紹了Pacemaker GUI的使用:https://keithtenzer.com/2015/06/22/pacemaker-the-open-source-high-availability-cluster/?utm_source=tuicool&utm_medium=referral:
- 其它相關有用的站點:
Note: 文檔比較基礎,未來可能會繼續更新。
[原創文章,轉載請註明出處,僅供學習研究之用,如有錯誤請留言,謝謝支持]
[原站點:http://www.cnblogs.com/lavender000/p/6880355.html,來自永遠薰薰]