1. 程式人生 > >SQL Server On Linux(5)——Linux上新增磁碟

SQL Server On Linux(5)——Linux上新增磁碟

接上文:SQL Server On Linux(4)——Linux 初步配置

隨著資料庫的使用時間越來越久,空間問題越顯突出。這個時候其中一個手段就是加空間。很多時候是通過加磁碟來實現。在很多規範化的企業裡面,有專門的IT人員負責運維伺服器,DBA通常只負責管理資料庫。但是作為新時代的DBA,有必要了解DB以外的內容。那麼下面來演示一下如何在Linux上新增磁碟以滿足SQL Server的空間要求。

  要新增磁碟,首先要了解當前環境的情況,Linux相對於Windows Server而言這部分不夠直觀,但是用久了就習慣了。這裡我們先使用lsblk命令來檢視所有所有塊裝置,在前面安裝的環境下檢視會得出下面的截圖。

在這裡插入圖片描述

  接下來邊實操邊做相關的介紹,但是注意不管是Windows還是Linux,其實都有很多知識點,所以不可能講解太深入,夠用就好。

新增磁碟

  本環境是使用基於Hyper-v的虛擬機器,下面先關閉Linux機器。然後在Hyper-v控制檯新增磁碟:這裡新增3個盤,一個用於資料庫檔案,一個用於日誌檔案,一個用於TempDB。不同的虛擬化軟體有不同的新增方法,這裡僅能演示Hyper-V的新增方法。

在這裡插入圖片描述

  分別用SQLDBFiles、SQLLogFiles和SQLTempDBFiles作為實際磁碟檔名稱,以便在伺服器管理員巡檢時不至於誤刪。同時為了簡化,這裡全部設定為50GB每個。下面以SQLDBFiles為例。

在這裡插入圖片描述

  在新增磁碟後,會有磁碟型別的選擇,這裡可以選擇IDE、SCSI,對於SQL Server磁碟,SCSI會更具有可管理性和效能更佳。在新增過程中,下圖的【位置】部分要注意,選擇沒有顯示(使用中)的位置,否則新增會失敗。

在這裡插入圖片描述

  新增成功後,重啟機器,登入進去並執行lvmdiskscan命令,如果不是使用sudo或者root使用者的話,需要提權執行這個命令。可以使用這個命令檢查lvm現在看到的磁碟。

在這裡插入圖片描述
  從上圖中可以看到,有3個50GB的目錄,根據Linux驅動命名轉換規則, 新磁碟會被標識為sdb/sdc/sdd。

LVM:Logical Volume Manager ,邏輯卷管理器,以物理卷的形式組織儲存空間,並分組為一個或多個卷組。這些卷組可以被分割成邏輯卷(logical volume),應用程式可以使用這些邏輯捲來儲存資料。跟Windows對驅動器(物理硬碟)、分割槽和卷所做的操作非常類似。

在這裡插入圖片描述

  下一步就是在LVM上建立物理卷(physical volumnes)。

建立物理卷

  建立物理卷的其中一個方式是使用pvcreate命令,可以一個一個建立,也可以一起建立,比如下面的例子就是一次性建立物理卷。

pvcreate /dev/sdb /dev/sdc /dev/sdd

在這裡插入圖片描述

建立卷組

  接下來使用vgcreate命令對每個物理卷建立一個卷組(volumn group),以/dev/sdb為例,建立一個卷組名為vg_data01:

vgcreate vg_data01 /dev/sdb

vg_data01這個卷組就是針對/dev/sdb這個物理卷。按同樣方法把 剩下兩個建立完。

在這裡插入圖片描述

建立邏輯卷

  最後就是建立邏輯卷的時候了,使用lvcreate命令,對每個卷組建立一個邏輯卷。邏輯卷實現了“儲存虛擬化”,使得在調整容量過程中,資料可以繼續聯機等好處。

lvcreate -l 100%FREE vg_data01

在這裡插入圖片描述

  使用lsblk再次檢查,可以發現所有卷已經掛載成功。

在這裡插入圖片描述

  和Windows一樣,分好了邏輯卷之後,還要進行格式化,特別是Linux平臺,支援的檔案系統型別有很多,SQL Server On Linux目前官方建議是etx4和XFS兩種。根據國外專家的建議,ext4是標準的檔案系統型別,並且略快於XFS,而XFS提供更多面向伺服器的特性,有更好的穩定性,高階日誌記錄和更好的大檔案支援。所以對於資料庫這種核心應用,建議使用XFS。

  下面使用mkfs.xfs命令對邏輯捲進行格式化:

mkfs.xfs -f /dev/vg_data01/lvol0
mkfs.xfs -f /dev/vg_log01/lvol0
mkfs.xfs -f /dev/vg_tempdb/lvol0

在這裡插入圖片描述

  到這一步,檔案系統已經可以使用這些捲了,但是我們需要再做非同步,讓它們“適應”SQL Server,接下來分別建立三個對應的目錄到SQL Server On Linux的預設路徑(/var/opt/mssql/data/)下:

mkdir /var/opt/mssql/data/data01
mkdir /var/opt/mssql/data/log01
mkdir /var/opt/mssql/data/tempdb

在這裡插入圖片描述

  建立完畢之後進行授權,這個非常重要,因為在Windows上,雖然也有很嚴格的許可權控制,但是就本人過去所在的企業內部,對許可權管理都很弱,而Linux上就不一樣,很多操作都需要進行授權,在作者一開始做這篇文章的實踐時,就出現了很多奇怪的問題。其中一個就是返回系統錯誤2,就是找不到檔案。後來翻了不少資料之後發現可能是mssql這個SQL Server On Linux的預設服務賬號許可權是否不夠,用ls -l檢查了/var/opt/mssql/data之後發現確實是只有root使用者及其組才有許可權。經過授權之後問題解決。

chown -R mssql:mssql /var/opt/mssql/data01
chown -R mssql:mssql /var/opt/mssql/log01
chown -R mssql:mssql /var/opt/mssql/tempdb

在這裡插入圖片描述

  授權之後檢查可以看到下圖3個紅框部分,證明這三個目錄已經對mssql使用者及其組有足夠的許可權。

在這裡插入圖片描述

  下面這一步雖然非必須,但是很實用,目的是為了讓這三個目錄在伺服器重啟之後依舊存在,不需要每次重啟都重新配置。需要修改/etc/fstab檔案。在檔案後面新增下圖三行內容:

/dev/vg_tempdb/lvol0 /var/opt/mssql/data/tempdb xfs defaults,nobarrier 1 2
/dev/vg_data01/lvol0 /var/opt/mssql/data/data01 xfs defaults,nobarrier 1 2
/dev/vg_log01/lvol0 /var/opt/mssql/data/log01xfs defaults,nobarrier 1 2

  注意不要敲錯,本人當時也吧nobarrier敲成novarrier(鍵盤的b和v相鄰),導致系統啟動之後只能本機登入,不能使用ssh連線,查詢問題過程也是比較痛苦(請體諒本人對Linux的不熟悉)。

在這裡插入圖片描述

  下面可以手動或者通過重啟來實現掛載新磁碟,然後使用df命令檢查,如下圖可見成功建立了三個目錄:

在這裡插入圖片描述

  如果到這一步都沒有任何問題,證明新增磁碟操作已經成功,下面使用T-SQL建立一個測試資料庫進行校驗,這裡把資料檔案和日誌檔案分別放置在上面新建立的目錄下面,然後使用sys.database_files檢查:

CREATE DATABASE [testdb]
 CONTAINMENT = NONE
 ON  PRIMARY 
( NAME = N'testdb', FILENAME = N'/var/opt/mssql/data/data01/testdb.mdf' , SIZE = 8192KB , FILEGROWTH = 65536KB )
 LOG ON 
( NAME = N'testdb_log', FILENAME = N'/var/opt/mssql/data/log01/testdb_log.ldf' , SIZE = 8192KB , FILEGROWTH = 65536KB )
GO
USE testdb
GO
SELECT * FROM sys.database_files

  結果如下圖:

在這裡插入圖片描述

  另外保險起見再用ls命令檢查一下目錄內容:

在這裡插入圖片描述

  到此為止,這個操作已經基本完成。作為多年來在Windows平臺上操作的DBA,並且有專門的運維人員管理伺服器,實操完之後感覺確實不容易。但是多操作幾次應該就不會有太多的困惑。接下來我們總結一下。

總結

步驟小結

Step 1 新增物理磁碟

  為了實現Linux上的磁碟新增。首先需要在伺服器外層(可能是虛擬環境下的虛擬機器管理軟體,或者物理機的磁碟管理)中新增實際磁碟。磁碟建議使用SCSI。

Step 2 建立物理卷

   使用pvcreate命令建立,引數是通過lvmdiskscan命令獲得的資訊。為了簡便這裡使用了同等大小,但是除非你是一個盤全流程完成後再做另外一個,不然可能不容易識別lvmdiskscan中顯示的是哪個盤,當然如果盤的效能及大小是等同的就無所謂。如果不是,那麼可能要考慮使用不同的空間大小來識別或者一個一個全流程建立。

Step 3 建立卷組

  LVM卷組類似於非LVM系統中的物理硬碟,其由物理卷組成。可以在卷組上建立一個或多個“LVM分割槽”(邏輯卷),LVM卷組由一個或多個物理卷組成。
  卷組使用vgcreate命令建立。

Step 4 建立邏輯卷

  使用lvcreate命令建立,邏輯卷建立後需要進行格式化,使用mkfs.xfs命令實現。

Step 5 後續完善操作

  雖然建立邏輯卷以後就可以使用,但是為了避免每次伺服器重啟都要重新掛載和建立,需要修改/etc/fstab檔案。