Configure Red Hat Enterprise Linux shared disk cluster for SQL Server——RHEL上的“類”SQL Server Cluster功能

來源:互聯網
上載者:User

標籤:tld   location   timeout   hce   tar   blog   sqlcmd   yum   cin   

下面一步一步介紹一下如何在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-serversudo systemctl disable mssql-server

c)       備份同步Server Master Key(由於Linux中SQL Server是以本機使用者mssql啟動並執行,因此不同的節點無法識別別的節點的認證,所以需要備份同步加密key從Primary端到其它節點上以便於能夠成功解密Server Master Key):

  • Secondary端備份原來的machine-key:
sudo sucd /var/opt/mssql/secretsmv machine-key machine-key.original.bak
  • Primary端把machine-key複製到Secondary端:
sudo sucd /var/opt/mssql/secrets/scp machine-key [email protected]**<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-serversudo 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 -ravsudo showmount -e

 

f)        在SELinux中添加異常設定:

sudo setsebool -P nfs_export_all_rw 1

g)       防火牆中允許相關服務通訊:

sudo firewall-cmd --permanent --add-service=nfssudo firewall-cmd --permanent --add-service=mountdsudo firewall-cmd --permanent --add-service=rpc-bindsudo firewall-cmd --reload
為Cluster所有節點設定NFS

在所有的Cluster節點機器上執行如下命令,確保能訪問NFS共用磁碟:

a)       安裝NFS軟體包:

sudo yum -y install nfs-utils

b)      防火牆中允許相關服務通訊:

sudo firewall-cmd --permanent --add-service=nfssudo firewall-cmd --permanent --add-service=mountdsudo firewall-cmd --permanent --add-service=rpc-bindsudo 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 mssqlmkdir /var/opt/mssql/tmpcp /var/opt/mssql/data/* /var/opt/mssql/tmprm /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/datachgrp mssql /var/opt/mssql/datasu mssqlcp /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-serversudo systemctl status mssql-serversudo 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/passwdsudo echo ‘<loginName>‘ >> /var/opt/mssql/secrets/passwdsudo echo ‘<loginPassword>‘ >> /var/opt/mssql/secrets/passwdsudo chown root:root /var/opt/mssql/secrets/passwdsudo chmod 600 /var/opt/mssql/secrets/passwd

b)      設定防火牆允許Pacemaker服務通訊:

sudo firewall-cmd --permanent --add-service=high-availabilitysudo 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 pcsdsudo systemctl enable pacemaker

f)        安裝FCI資源代理:

sudo yum install mssql-server-ha

 

    4.            建立Cluster

下面正式建立Cluster:

a)       在Primary節點上建立Cluster:

sudo pcs cluster auth **<nodeName1 nodeName2 …>** -u haclustersudo 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=falsesudo 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 cfgsudo 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 cfgsudo pcs -f cfg resource create mssqlha ocf:mssql:fci op defaults timeout=60ssudo pcs -f cfg resource create virtualip ocf:heartbeat:IPaddr2 ip=10.2.38.180sudo 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 mssqlhasudo pcs -f cfg constraint colocation add fs mssqlhasudo 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 --allsudo 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:

  • 其它相關有用的網站:
    • Configuring the Red Hat High Availability Add-On with Pacemaker -- Fencing: Configuring STONITH
    • Pacemaker Access Control Lists
    • How to create and edit text files using vi editor, basic vi commands, command mode, insert mode.
    • Linux mount and umount

 

Note: 文檔比較基礎,未來可能會繼續更新。

 

[原創文章,轉載請註明出處,僅供學習研究之用,如有錯誤請留言,謝謝支援]

Configure Red Hat Enterprise Linux shared disk cluster for SQL Server——RHEL上的“類”SQL Server Cluster功能

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.