- SequoiaDB分布式數據庫權威指南
- 許建輝 (加)陳元熹
- 1927字
- 2022-05-06 18:40:06
3.1.2 Linux的推薦配置
本節將介紹在安裝SequoiaDB(巨杉數據庫)前,用戶應如何調整Linux操作系統的環境配置,以保障操作系統穩定且高效地運行。需要調整的配置包括ulimit、內核參數、transparent_hugepage(掛載參數)和NUMA。
1.調整ulimit
SequoiaDB相關進程以數據庫管理用戶(安裝SequoiaDB時指定,默認為sdbadmin)權限來運行。因此,建議調整數據庫管理用戶的ulimit配置。可以參照以下2個步驟來完成該配置。
(1)在配置文件/etc/security/limits.conf中進行如下設置:


具體參數說明如下。
● core:在數據庫出現故障時,是否產生core文件來進行故障診斷。在生產系統中建議用戶關閉此功能。
● data:數據庫進程所允許分配的數據內存大小。
● fsize:數據庫進程所允許尋址的文件大小。
● rss:數據庫進程所允許的最大resident set大小。
● as:數據庫進程所允許的最大虛擬內存尋址空間。
● nofile:數據庫進程所允許打開的最大文件數。
(2)在配置文件/etc/security/limits.d/90-nproc.conf中進行如下設置:

其中,參數nproc表示數據庫所允許的最大線程數限制。要注意,每臺作為數據庫服務器的機器都需要配置,而且更改配置后需要重新登錄,以確保配置生效。
2.調整內核參數
用戶可以參照以下步驟來調整內核參數。
(1)備份系統原始的vm參數:

(2)修改文件/etc/sysctl.conf,添加如下內容:

注意:當數據庫可用物理內存不足8GB時無須設置vm.swappiness=0。上述dirty類參數(控制系統的flush進程只采用臟頁超時機制刷新臟頁,而不采用臟頁比例超支刷新臟頁)所給的只是建議值,具體參數值可根據實際情況進行設置。如果用戶采用SSD(固態磁盤),建議設置vm.dirty_expire_centisecs=1000。
(3)執行如下命令,使配置生效:

3.調整文件系統的掛載參數
SequoiaDB推薦使用ext4格式的文件系統。同時,建議在/etc/fstab文件中添加noatime掛載參數,以提升文件系統的性能。
下面以塊設備/dev/sdb(假設其UUID為993c5bba-494f-44ae-b543-a109f3598777,掛載目錄為/data/disk_ssd1)為例,介紹具體操作步驟。如果數據盤需要使用多個塊設備,則需要對所有塊設備進行設置。
首先,檢查目標磁盤的文件系統狀態:

如果輸出結果中顯示文件系統為ext4格式的,并且掛載參數中包含noatime,則表示已完成設置;如果輸出為其他參數,則需要通過后續步驟進行配置。

其次,對已掛載的塊設備進行設置。如果塊設備已創建分區且文件系統為ext4格式的,但其掛載參數不包含noatime,可通過如下操作步驟進行設置。
(1)卸載已掛載的數據盤:

(2)編輯/etc/fstab文件:

(3)將塊設備/dev/sdb的掛載參數調整為如下內容:

(4)掛載塊設備:

(5)檢查掛載參數是否生效:

最后對新塊設備進行設置。對于新增的塊設備,可以進行如下設置。
(1)查看塊設備情況:

(2)創建分區:

(3)將文件系統格式化為ext4格式的:

(4)查看數據盤分區的UUID:

輸出結果如下:

(5)創建需要掛載的數據目錄:

(6)編輯/etc/fstab文件:

添加如下內容:

(7)掛載數據盤:

(8)檢查掛載參數是否生效:

4.關閉transparent_hugepage
具體操作步驟如下。
(1)編輯/etc/rc.local,在第一行#!/bin/sh下添加如下兩行:

(2)執行如下命令使配置生效:

(3)依次執行如下兩條命令,驗證關閉操作是否成功:

如果兩條命令執行后均顯示always madvise [never],則說明關閉操作成功。
5.關閉(禁用)NUMA
Linux操作系統默認情況下會開啟NUMA(Non Uniform Memory Access),其優先在進程所在的CPU節點本地進行內存分配。這種內存分配策略的初衷是,讓內存更接近需要它的進程。但是,這不利于充分利用系統的物理內存,所以這種內存分配策略不適合數據庫這種大規模使用內存的場景,它會導致CPU節點間內存分配得不均衡。比如,當某個CPU節點的內存不足時,NUMA非但不從有充足物理內存的遠程節點分配內存,而且還會直接導致“swap”過高。因此,建議用戶在使用SequoiaDB時關閉NUMA。
首先我們要檢查NUMA的狀態,查看是否已關閉NUMA,具體步驟如下。
(1)安裝numactl工具:

或

(2)檢查是否已關閉NUMA:

如果輸出結果中只有node0,則表示已關閉NUMA;如果有node1等其他節點出現,則表示未關閉NUMA:

關閉NUMA的方法有兩個:一是通過BIOS(Basic Input Output System)設置來關閉NUMA;二是通過修改gurb的配置文件來關閉NUMA。首選是第一個方法:開機后按快捷鍵進入BIOS設置界面,關閉NUMA,之后保存設置并重啟。不同品牌的主板或服務器,具體操作略有差異,此處不做詳述。
對于第二個方法,CentOS、SUSE、Ubuntu的grub配置文件有差異,在同一款Linux的不同版本中也略有不同。
對于CentOS 6/Red Hat 6,關閉NUMA的步驟如下。
(1)修改文件/boot/grub/grub.conf:

(2)找到“kernel”引導行(不同版本的內容略有差異,但其開頭均有“kernel/vmlinuz-”字樣):

(3)在“kernel”引導行的末尾加上空格和“numa=off”:

要注意的是,如果該配置文件中存在多個“kernel”引導行,則每個引導行都需要進行修改。
(4)重啟操作系統:

而對于CentOS 7/Red Hat 7/CentOS 8/Red Hat 8/Suse 12/openEuler/中標麒麟/Ubuntu 16/統信UOS等系統,關閉NUMA的步驟如下。
(1)修改文件/etc/default/grub:

(2)找到配置項“GRUB_CMDLINE_LINUX”:

(3)在配置項“GRUB_CMDLINE_LINUX”的最后加上空格和“numa=off”:

(4)重新生成grub引導文件。
對于CentOS 7/Red Hat 7/CentOS 8/Red Hat 8,用戶需要執行如下命令:

對于Suse12,用戶需要執行如下命令:

對于openEuler/中標麒麟,用戶需要執行如下命令:

對于Ubuntu 16/統信UOS,用戶需要執行如下命令:

(5)關閉NUMA后,需要重啟操作系統:

- LibGDX Game Development Essentials
- 云計算環境下的信息資源集成與服務
- App+軟件+游戲+網站界面設計教程
- 云計算與大數據應用
- 商業分析思維與實踐:用數據分析解決商業問題
- Lean Mobile App Development
- Oracle高性能自動化運維
- 深入淺出MySQL:數據庫開發、優化與管理維護(第2版)
- Dependency Injection with AngularJS
- 數據庫程序員面試筆試真題庫
- 智能數據時代:企業大數據戰略與實戰
- 大數據架構商業之路:從業務需求到技術方案
- 圖數據實戰:用圖思維和圖技術解決復雜問題
- Mastering LOB Development for Silverlight 5:A Case Study in Action
- 聯動Oracle:設計思想、架構實現與AWR報告