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

来源:http://www.cnblogs.com/lavender000/archive/2017/05/19/6880355.html
-Advertisement-
Play Games

下麵一步一步介紹一下如何在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的文檔資源參考以下站點:

設置資料庫文件路徑為共用磁碟

轉移資料庫文件到共用磁碟上:

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(基礎篇)

 

這裡暫時只介紹一個常用的功能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

 

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


 

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

[原站點:http://www.cnblogs.com/lavender000/p/6880355.html,來自永遠薰薰]


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一般namenode只格式化一次,重新格式化不僅會導致之前的數據都不可用,而且datanode也會無法啟動。在datanode日誌中會有類似如下的報錯信息: java.io.IOException: Incompatible clusterIDs in /tmp/hadoop-root/dfs/da ...
  • 0x00 背景 這兩天處於轉牛角尖的狀態,非常不好。但是上一篇的中提到的問題總算是總結了些東西。 傳送門:疑問點0x02(4) 0x01 測試過程 (1)測試環境情況:創建瞭如下測試表test, mysql> select * from test;+ + + +| user_id | user | ...
  • 【1. 問題描述】 【2. 查找原因】 【3. 解決問題】 本文網址[tom-and-jerry發佈於2017-05-20 18:46] http://www.cnblogs.com/tom-and-jerry/p/6882857.html ...
  • 如何用VBA操作MySQL資料庫?如何直接使用Excel操作MySQL資料庫? ...
  • 本文介紹一個簡單的SQL腳本,實現收縮整個Microsoft SQL Server實例所有非系統DB文件大小的功能。 作為一個與SQL天天打交道的程式猿,經常會遇到DB文件太大,把空間占滿的情況: 而對於開發測試人員來說,如果DB數據不是特別重要的話,不會特意擴大磁碟空間,而是直接利用SQL的Shr ...
  • 2016年5月25日上午,由貴州省政府舉辦的以"大數據開啟智能時代"為主題的中國大數據產業峰會在貴陽開幕,國務院總理李克強發表主旨演講。騰訊集團馬化騰,高通公司總裁Derek Aberle,百度公司李彥巨集,微軟全球陸奇,京東集團劉強東,阿裡巴巴王堅,滴滴出行程維,HTC王雪紅,戴爾Michael D ...
  • 目錄結構: // <![CDATA[ function shocon(){ document.getElementById("modol").style.display="block"; } function clocon(){ document.getElementById("modol").st ...
  • 專職做DBA已經6年多的事件了,看同行、同事犯了太多的錯誤,自己也犯了非常多的錯誤。一路走來,感觸非常深。然而絕大多數的錯誤其實都是很低級的錯誤。有的是因為不瞭解某個引擎的特性導致;有的是因為對線上環境不瞭解導致;有的是因為經驗不足導致;一路上,跌跌撞撞,從小公司DBA,到騰訊高級DBA,再到現在的... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...