linux網路存儲方案
Ⅰ 什麼是ISCSI,及linux下怎麼樣通過ISCSI實現共享存儲
iSCSI(iSCSI
=
internet
Small
Computer
System
Interface
)小型計算機介面。是由IEETF開發的網路存儲標准,目的是為了用IP協議將存儲設備連接在一起。通過在IP網上傳送SCSI命令和數據,ISCSI推動了數據在網際之間的傳遞,同時也促進了數據的遠距離管理。由於其出色的數據傳輸能力,ISCSI協議被認為是促進存儲區域網(SAN)市場快速發展的關鍵因素之一。因為IP網路的廣泛應用,
ISCSI能夠在LAN、WAN甚至internet上進行數據傳送,使得數據的存儲不再受地域的現在。
ISCSI技術的核心是在TCP/IP網路上傳輸SCSI協議,是指用TCP/IP報文、和ISCSI報文封裝SCSI報文,使得SCSI命令和數據可以在普通乙太網絡上進行傳輸。
Ⅱ Linux文件系統-ISCSI存儲和Multipathd
iscsi是由scsi協議發展而來,簡單來講,iscsi是對scsi的封裝,並通過乙太網來進行scsi指令的傳輸. 傳統的scsi存儲設備,通過匯流排連接到主機,供主機使用. 通過iscsi,主機可以直接通過乙太網(TCP/IP)連接使用scsi存儲設備,這也是通常所說的NAS存儲的一種,它提供的是塊級存儲服務.
通過iscsi連接的存儲設備,由於中間經過了交換機等網路設備,從主機到同一個存儲設備,可能會存在多條路徑. 每條路徑在linux系統上都會被識別成一個設備,如果把每條路徑都當成獨立設備去處理的話,不同路徑之間的讀寫操作就可能會造成數據的紊亂.
multipathd可以解決上述的多路徑問題,其主要原理包括:
a. 每一個scsi設備都有唯一的scsi_id,multipathd通過探測scsi_id來判斷不同路徑後面是不是同一個存儲設備.
b. 通過內核device-mapper功能,將多條路徑映射為單一的塊設備,提供給文件系統使用.
c. 由於多路徑的存在,multipathd可以提供負載均衡和高可用的服務.
整個環境通過兩台虛擬機搭建,一台虛擬機作為iscsi存儲伺服器,另一台作為客戶端. 兩台虛擬機都配置了兩張網卡,從客戶端到iscsi伺服器,可以形成兩條路徑.
通過openfiler搭建iscsi存儲伺服器,openfiler鏡像包及部署手冊,具體參考openfiler官網.
https://www.openfiler.com/community/download
部署完成後,創建了2個iscsi target:
需要安裝如下軟體包:
iscsi-initiator-utils:提供iscsid服務,及iscsi管理工具iscsiadm
device-mapper-multipath&device-mapper-multipath-libs:提供multipathd服務及multipath管理工具
通過iscsiadm命令探測openfiler伺服器上的iscsi target,具體如下:
可以看到,openfiler返回了2個target,每個target 2條路徑. 執行命令後,在/var/lib/iscsi/目錄生成了如下文件:
對iscsi target執行login操作後,系統才能識別到設備並使用,login命令如下:
執行login命令後,識別到了sda、sdb、sdc、sdd 4個設備,查看它們的scsi_id;可以看到sda、sdc是同一設備的不同路徑,sdb、sdd是同一設備的不同路徑.
啟動multipathd服務後,multipathd會自動識別多路徑,並自動在/dev/mapper/目錄下創建多路徑映射後的設備.
查看multipathd工作模式,命令multipath -ll
從上面輸出可以看到,multipathd默認的策略是兩條路徑一主一備.
使用dd往/dev/mapper/mpathb中寫入數據,數據從sda寫入,sdc處於備用狀態
將sda網路斷開,過幾秒後,切換到sdc寫數據
再查看sda、sdc主備情況如下:
修改multipathd path_grouping_policy、path_selector(路徑選擇策略),在/etc/multipath.conf配置文件中,加入如下配置修改mpathb的工作模式.
重啟multipathd服務後,查看multipathd工作模式,可以看到sda sdc都處於active狀態:
dd測試mpathb寫入數據時的情況如下,sda sdc輪詢寫入,所以吞吐量一樣:
Ⅲ 如何利用Linux和GFS打造集群存儲
負載均衡是一項困難的任務。我們經常需要通過NFS(網路文件系統)或其他機制來為數據提供中心地址,從而共享文件系統。雖然你的安全機制可能可以讓你免於Web伺服器節點的故障,但是你仍然需要通過中央存儲節點來共享數據。
通過GFS(全局文件系統)——Linux的一個免費集群文件系統——你可以創建一個不需要依賴其他伺服器的真正穩定的集群。在這篇文章中,我們將展示如何正確地設置GFS.
從概念上來說,一個集群文件系統可以允許多個操作系統載入同一個文件系統並可以在同一時間內向同一文件系統寫入數據。現在有許多集群文件系統,包括Sun的Lustre,Oracle的OCFS(Oracle集群文件系統),以及Linux的GFS.
有許多方法可以讓一個塊設備同時被多個伺服器所使用。你可以分區出一個對多個伺服器都可視的SAN(存儲區域網)LUN(邏輯單元號),設置好相應的iSCSI(互聯網小型計算機系統介面),或使用DRBD(分布式復制塊設備)在兩台伺服器之間復制一個分區。在使用DRBD的時候,你將需要在主/主節點中設置好DRBD以使用GFS.
GFS要求
運行GFS意味著你在運行一個集群。目前為止,運行GFS的最簡單的手段就是使用Red Hat Cluster Suite(RHCS:Red Hat集群套件)。這個套件在CentOS中就有。此外,還需要下面這些包:cman——集群管理器;lvm2-cluster——使LVM(邏輯卷管理器)可以支持集群的CLVM(集群邏輯卷管理器)包;kmod-gfs——GFS內核模塊;最後是gfs-utils.
集群管理器(cman)包含必要的工具,比如分布式鎖管理器。除非你希望花時間來確認各種不同的分發版本是如何採用cman的,否則我們強烈推薦使用CentOS或RHEL.同時,你還將獲得RH(Red Hat)所維護的各種最新版本的集群服務,此外你還可以獲得一個比較穩定的環境。
Fencing(阻絕)機制是絕對必要的。一些指導性文章建議將阻絕模式設定成"手動",因為阻絕設置有可能比較復雜。阻絕意味在集群中進行隔離,或馬上中斷某些危險節點的運作。如果集群無法阻絕某個發生故障的節點,那麼你的GFS將會出現很多問題,因此不要跳過這個步驟。
創建集群設置
你可以通過/etc/cluster/裡面的cluster.conf完成大部分的集群設置。我不建議使用各種集群管理應用程序來創建這個設置文件。即使是完全支持的RHEL應用程序,比如兩個月前發布的Conga,也經常會創建一些無效的cluster.conf文件,並且無法被必要的服務所解析。
下面是一個cluster.conf文件的例子。這個設置文件採用漂亮的XML格式,其內容非常直接。首先,我們對集群進行命名,我們將這個集群稱作"Web.1".
先跳過fence daemon選項,下一個部分就是集群主體的設置內容。你需要在clusternodes部分定義兩個節點。設置文件將同時存放在兩個節點上,這樣這兩個節點就都知道彼此的情況。
集群內的每個節點都聲明其阻絕方式的名稱是獨一無二的。在clusternames結束標簽下面,我們看到fencedevice部分定義了每個節點如何阻絕其他節點的方式。使用一個支持IPMI(智能平台管理介面)的伺服器是最好的方式,而且其設置也是相當簡單。你只要將IPMI的地點以及登錄方式告訴IP就可以了。為了避免在cluster.conf中留下密碼,你可以將它指向一個由根所擁有的腳本並由這個腳本來返回密碼。
我們還要指出的是我們在設置中定義了兩個節點。這是必須的,因為通常來說,除非大部分節點都同意自己的狀態,否則集群無法達到"Quorate"狀態。如果只有兩個節點的話,沒有肯定多數,因此這種方式讓集群只能在兩個節點下工作,而不能只在只有一個節點的情況下工作。這是設置基本集群的必要方式。
在每個節點上運行"service cman start",系統應該可以開始正常運作。你可以檢查"clustat"或"cman nodes"來確認節點是否良好運行。如果有哪個必要的部分沒有啟動,那麼集群將不會顯示"Quorate"狀態。
GFS設置
首先,我們需要設置CLVM,這樣我們才可以通過GFS使用LVM.激活CLVM只要在lvm.conf中設定"locking type=3"就可以了。
然後,就像平常一樣創建一個LVM卷組和卷,但是使用的是共享的塊設備。如果你使用的是DRBD,你將有可能使用/dev/drbd0.我創建了一個物理卷,然後創建一個名為vg01的卷組,然後創建一個名為web1的邏輯卷,這個卷在:/dev/vg01/web1.
最後,我們需要創建文件系統:
gfs_mkfs -t web1:mygfs -p lock_dlm -j 2 /dev/vg01/web1
-t中給定的名稱必須是集群的名稱,然後後面是你給這個文件系統所起的名字。只有web1集群的成員才可以載入這個文件系統。然後,設定分布式鎖管理器的鎖鑰類型,指明你需要兩份journal(因為這是一個雙節點集群)。如果你預計未來要增加更多的節點,那麼你需要在這時設定足夠高的journal數量。
總結
我們現在可以開始使用這個文件系統了。在兩個節點上啟動"clvmd"和"gfs"服務。現在你就可以通過"-t gfs"來將類型指定為GFS,從而載入文件系統。
在開始啟動之前,一定要設定好cman,clvmd和gfs服務。你最好能熟悉clustat和gfs_tool命令,因為在系統出現問題的時候,你可以用這些命令來查找問題所在。
不要指望GFS能很快。如果有一個節點在進行大量的寫入操作的話,那麼在訪問文件系統的時候出現停頓是很正常的。對於一個數據讀取操作比數據寫入操作多得多的Web集群來說,這倒不是什麼問題。如果出現明顯延遲,那麼首先要檢查一下所有組件的狀況,然後評估正在寫入的數據。防止延遲現象的最常見措施就是確保HTTP對話中的數據不是寫入GFS卷。
Ⅳ 關於linux掛載nas網路存儲
NAS 的中文名稱是網路附加存儲,是基於硬碟的專業存儲技術。它可以直接接入計算機網路,為各種操作系統的客戶端提供集中式的數據存取服務。
NAS支持NFS協議,Linux操作系統也是支持NFS協議的,可以直接在Linux裡面掛載NAS共享出來的NFS目錄,把數據直接拷貝到NAS上。
比如NAS伺服器的地址是10.0.0.111,在Linux上:
# mount 10.0.0.111:/sharefolder /mnt
# cp -r /des /mnt
Ⅳ linux網路存儲存放1g數據哪個軟體適用
MongoDB是一個基於分布式文件存儲的資料庫。由C++語言編寫。旨在為WEB應用提供可擴展的高性能數據存儲解決方案。
MongoDB是一個介於關系資料庫和非關系資料庫之間的產品,是非關系資料庫當中功能最豐富,最像關系資料庫的。他支持的數據結構非常鬆散,是類似json的bson格式,因此可以存儲比較復雜的數據類型。Mongo最大的特點是他支持的查詢語言非常強大,其語法有點類似於面向對象的查詢語言,幾乎可以實現類似關系資料庫單表查詢的絕大部分功能,而且還支持對數據建立索引。
它的特點是高性能、易部署、易使用,存儲數據非常方便。
Ⅵ Linux裡面raid和lvm區別是什麼
LVM:主要側重動態磁碟擴容
全稱邏輯卷管理,是一個動態擴展磁碟分區容量的功能性工具,對於測試環境,可以用來管理磁分區滿了,擴容,但是在大規模環境性能低下,盡量不要使用它。
RAID:主要側重磁碟性能和數據安全
磁碟陣列可以把多個磁碟驅動器通過不同的連接方式連接在一起協同工作,大大提高了讀取速度,同時把磁碟系統的可靠性提高到接近無錯的境界,使其可靠性極高。
用RAID最直接的好處是:
1)提升數據安全性。2)提升數據讀寫性能。3)提供更大的單一邏輯磁碟數據容量存儲。
Ⅶ 詳解Linux系統內存知識及調優方案
內存是計算機中重要的部件之一,它是與CPU進行溝通的橋梁。計算機中所有程序的運行都是在內存中進行的,因此內存的性能對計算機的影響非常大。內存作用是用於暫時存放CPU中的運算數據,以及與硬碟等外部存儲器交換的數據。只要計算機在運行中,CPU就會把需要運算的數據調到內存中進行運算,當運算完成後CPU再將結果傳送出來,內存的運行也決定了計算機的穩定運行。對於整個操作系統來說,內存可能是最麻煩的的設備。而其性能的好壞直接影響著整個操作系統。
我們知道CPU是不能與硬碟打交道的,只有數據被載入到內存中才可以被CPU調用。cpu在訪問內存的時候需要先像內存監控程序請求,由監控程序控制和分配內存的讀寫請求,這個監控程序叫做MMU(內存管理單元)。下面以32位系統來說明內存的訪問過程:
32位的系統上每一個進程在訪問內存的時候,每一個進程都當做自己有4個G的內存空間可用,這叫虛擬內存(地址),虛擬內存轉化成物理內存是通過MMU來完成的。為了能夠從線性地址轉換成物理地址,需要page table(頁表)的內存空間,page table要載入到MMU上。為了完成線性地址到物理地址的映射,如果按照1個位元組1個位元組映射的話,需要一張非常大的表,這種轉換關系會非常的復雜。因此把內存空間又劃分成了另外一種存儲單元格式,通常為4K。在不同的硬體平台上,它們的大小一般是不一樣的,像x86 32位的有4k的頁;而64位的有4k頁,2M頁,4M頁,8M頁等等,默認都是4k的。每一個進程一般而言都有自己的頁路徑和頁表映射機制,不管那一個頁表都是由內核載入的。每一個進程只能看到自己的線性地址空間,想要增加新的內存的時候,只能在自己的線性地址空間中申請,並且申請後一定是通過操作系統的內核映射到物理地址空間中去找那麼一段空間,並且告訴線性地址空間准備好了,可以訪問,並且在page table中增加一條映射關系,於是就可以訪問物理內存了,這種叫做內存分配。但是新的申請一定是通過操作的內核到物理內存中去找那麼一段空間,並且告訴線性地址空間好了,可以建設映射關系,最終page table建立映射關系。
這反映了上述描述過程的大體情況。可以看到每一個用戶程序都會有自己的頁表,並且映射到對應的主存儲器上去。
根據上述文字和圖表的描述可以發現2個問題:
1.每個進程如果需要訪問內存的時候都需要去查找page table的話,勢必會造成伺服器的性能底下
2.如果主存儲器的內存滿了以後,應用程序還需要調用內存的時候怎麼辦
對於第一個問題,我們就需要藉助TLB(Translation Lookaside Buffer)翻譯後備緩沖器。TLB是一個內存管理單元,它可以用於改進虛擬地址到物理地址轉換速度的緩存。這樣每次在查找page table的時候就可以先去TLB中查找相應的頁表數據,如果有就直接返回,沒有再去查找page table,並把查找到的結果緩存中TLB中。TLB雖然解決了緩存的功能,但是在那麼page table中查找映射關系仍然很慢,所以又有了page table的分級目錄。page table可以分為1級目錄,2級目錄和偏移量
但是一個進程在運行的時候要頻繁的打開文件,關閉文件。這就意味著要頻繁的申請內存和釋放內存。有些能夠在內存中緩存數據的那些進程,他們對內存的分配和回收更多,那麼每一次分配都會在頁表中建立一個對應項。所以,就算內存的速度很快,大量頻繁的同一時間分配和釋放內存,依然會降低伺服器的整體性能。當然內存空間不夠用的時候,我們稱為oom(out of memory,內存耗盡)。當內存耗盡的時候,,整個操作系統掛了。這種情況下我們可以考慮交換分區,交換分區畢竟是由硬碟虛擬出來的內存,所以其性能與真正的內存相比,差了很多,所以要盡力避免使用交換分區。有物理內存空間的時候盡量保證全部使用物理內存。cpu無論如何是不能給交換內存打交道的,它也只能給物理內存打交道,能定址的空間也只能是物理內存。所以當真正物理內存空間不夠用的時候,會通過LRU演算法把其中最近最少使用的內存放到交換內存中去,這樣物理內存中的那段空間就可以供新的程序使用了。但是這樣會引發另外的一個問題,即原來的進程通過page table尋找的時候,那一段空間的數據已經不屬於它了。所以此刻cpu發送通知或者異常告訴這個程序,這個地址空間已不屬於它,這個時候可能會出現2種情況:
1.物理內存有可用的空間可用:這個時候cpu會根據以前的轉換策略會把交換分區中的那段內存重新送到物理內存中去,但是轉換過來的空間地址不一定會是以前的那一段空間地址,因為以前的那一段空間地址可能已經被別人使用了。
2.物理內存沒有可用的空間可用:這個時候依然會使用LRU算發把當前物理地址空間上最近最少使用的空間地址轉換到交換內存中去,並把當前進程需要的這斷在交換空間中的內存送到物理內存空間中去,並且重新建立映射關系。
上述通知或者異常出現的情況,通常叫做缺頁異常。缺頁異常也分為大異常和小異常兩種。大異常就是訪問的數據內存中沒有,不的不去硬碟上載入,無論是從交換內存中還是直接從磁碟的某個文件系統上,反正需要從硬碟上去載入,這種異常載入需要很長時間。小異常就是進程之間通過共享內存,第二個進程訪問的時候,查看本地的內存映射表沒有,但是其它進程已經擁有了這個內存頁,所以可以直接映射,這種異常載入需要的時間一般很短。
在操作系統開機的時候,每一個io設備都會像cpu申請一些列的隨機埠,這種埠叫做io埠。在IBM PC體系結構中,I/O地址空間一共提供了65,536個8位的I/O埠。正是這些io埠的存在,cpu可以與io設備進行讀寫交互的過程。在執行讀寫操作時,CPU使用地址匯流排選擇所請求的I/O埠,使用數據匯流排在CPU寄存器和埠之間傳送數據。I/O埠還可以被映射到物理地址空間:因此,處理器和I/O設備之間的通信就可以直接使用對內存進行操作的匯編語言指令(例如,mov、and、or等等)。現代的硬體設備更傾向於映射I/O,因為這樣處理的速度較快,並可以和DMA結合起來使用。這樣io在和內存傳數據的時候就不需要通過cpu,cpu把匯流排的控制權交給DMA,每次io傳數據的時候就調用DMA一次,就把cpu給解放了出來。當數據傳輸完了以後,DMA通知給cpu中斷一次。DMA在運行的時候對整個匯流排有控制許可權,當cpu發現有其它進程需要使用匯流排的時候,二者就會產生爭用。這個時候,在匯流排控制權的使用上,CPU和DMA具有相等的許可權。只要CPU委託給了DMA,就不能隨意的收回這個委託,就要等待DMA的用完。
如果沒有其它進程可以運行,或者其它進程運行的時間非常短,這個時候CPU發現我們的IO仍然沒有完成,那就意味著,CPU只能等待IO了。CPU在時間分配裡面有個iowait的值,就是CPU在等待IO花費的時間。有些是在同步調用過程中,CPU必須要等待IO的完成;否者CPU可以釋放IO的傳輸在背後自動完成,CPU自己去處理其它的事情。等硬碟數據傳輸完成以後,硬碟只需要像CPU發起一個通知即可。CPU外圍有一種設備,這個設備叫做可編程中斷控制器。每一個硬體設備為了給CPU通信,在剛開機的時候,在BIOS實現檢測的時候,這個設備就要到可編程中斷控制器上去注冊一個所謂的中斷號。那麼這個號碼就歸這個硬體使用了。當前主機上可能有多個硬體,每一個硬體都有自己的號碼,CPU在收到中斷號以後,就能夠通過中斷相量表查找到那個硬體設備進行中斷。並且就由對應的IO埠過來處理了。
CPU正在運行其它進程,當一個中斷請求發過來的時候,CPU會立即終止當前正在處理的進程,而去處理中斷。當前CPU掛起當前正在處理的進程,轉而去執行中斷的過程,也叫做中斷切換。只不過,這種切換在量級別上比進程切換要低一些,而且任何中斷的優先順序通常比任何進程也要高,因為我們指的是硬體中斷。中斷還分為上半部和下半部,一般而言,上半部就是CPU在處理的時候,把它接進來,放到內存中,如果這個事情不是特別緊急(CPU或者內核會自己判斷),因此在這種情況下,CPU回到現場繼續執行剛才掛起的進程,當這個進程處理完了,再回過頭來執行中斷的下半部分。
在32位系統中,我們的內存(線性地址)地址空間中,一般而言,低地址空間有一個G是給內核使用的,上面3個G是給進程使用的。但是應該明白,其實在內核內存當中,再往下,不是直接這樣劃分的。32位系統和64位系統可能不一樣(物理地址),在32位系統中,最低端有那麼10多M的空間是給DMA使用的。DNA的匯流排寬度是很小的,可能只有幾位,所以定址能力很有限,訪問的內存空間也就很有限。如果DMA需要復制數據,而且自己能夠定址物理內存,還可以把數據直接壯哉進內存中去,那麼就必須保證DMA能夠定址那段內存才行。定址的前提就是把最低地址斷M,DA的定址范圍內的那一段給了DMA。所以站在這個角度來說,我們的內存管理是分區域的。
在32位系統上,16M的內存空間給了ZONE_DMA(DMA使用的物理地址空間);從16M到896M給了ZONE_NORMAL(正常物理地址空間),對於Linux操作系統來說,是內核可以直接訪問的地址空間;從896M到1G這斷空間叫做"Reserved"(預留的物理地址空間);從1G到4G的這段物理地址空間中,我們的內核是不能直接訪問的,要想訪問必須把其中的一段內容映射到Reserved來,在Reserved中保留出那一段內存的地址編碼,我們內核才能上去訪問,所以內核不直接訪問大於1G的物理地址空間。所以在32位系統上,它訪問內存當中的數據,中間是需要一個額外步驟的。
在64位系統上,ZONE_DAM給了低端的1G地址空間,這個時候DMA的定址能力被大大加強了;ZONE_DAM32可以使用4G的空間;而大於1G以上給劃分了ZONE_NORMAL,這段空間都可以被內核直接訪問。所以在64位上,內核訪問大於1G的內存地址,就不需要額外的步驟了,效率和性能上也大大增加,這也就是為什麼要使用64位系統的原因。
在現在的PC架構上,AMD,INTER都支持一種機制,叫做PEA(物理地址擴展)。所謂PAE。指的是在32位系統的地址匯流排上,又擴展了4位,使得32位系統上的地址空間可以達到64G。當然在32為系統上,不管你的物理內存有多大,單個進程所使用的空間是無法擴展的。因為在32位的系統上,線性地址空間只有4個G,而單個進程能夠識別的訪問也只有3個G。
linux的虛擬內存子系統包含了以下幾個功能模塊:
slab allocator,zoned buddy allocator,MMU,kswapd,bdflush
slab allocator叫做slab分配器
buddy allocator又叫做buddy system,叫做夥伴系統,也是一種內存分配器
buddy system是工作在MMU之上的,而slab allocator又是工作在buddy system之上的。
設置為小於等於1G,在資料庫伺服器應該勁量避免使用交換內存
3.在應用伺服器上,可以設置為RAM*0.5,當然這個是理論值
如果不的不使用交換內存,應該把交換內存放到最靠外的磁軌分區上,因為最外邊的磁碟的訪問速度最快。所以如果有多塊硬碟,可以把每塊硬碟的最外層的磁軌拿一小部分出來作為交換分區。交換分區可以定義優先順序,因此把這些硬碟的交換內存的優先順序設置為一樣,可以實現負載均衡的效果。定義交換分區優先順序的方法為編輯/etc/fstab:
/dev/sda1 swap swap pri=5 0 0
/dev/sdb1 swap swap pri=5 0 0
/dev/sdc1 swap swap pri=5 0 0
/dev/sdd1 swap swap pri=5 0 0
四.內存耗盡時候的相關調優參數
當Linux內存耗盡的時候,它會殺死那些佔用內存最多的進程,以下三種情況會殺死進程:
1.所有的進程都是活動進程,這個時候想交換出去都沒有空閑的進程
2.沒有可用的page頁在ZONE_NORMAL中
3.有其它新進程啟動,申請內存空間的時候,要找一個空閑內存給做映射,但是這個時候找不到了
一旦內存耗盡的時候,操作系統就會啟用oom-kill機制。
在/proc/PID/目錄下有一個文件叫做oom_score,就是用來指定oom的評分的,就是壞蛋指數。
如果要手動啟用oom-kill機制的話,只需要執行echo f>/proc/sysrq-trigger即可,它會自動殺掉我們指定的壞蛋指數評分最高的那個進程
可以通過echo n > /proc/PID/oom_adj來調整一個進程的壞蛋評分指數。最終的評分指數就是2的oom_adj的值的N次方。假如我們的一個進程的oom_adj的值是5,那麼它的壞蛋評分指數就是2的5次方。
如果想禁止oom-kill功能的使用可以使用vm.panic_on_oom=1即可。
五.與容量有關的內存調優參數:
overcommit_memory,可用參數有3個,規定是否能夠過量使用內存:
0:默認設置,內核執行啟發式的過量使用處理
1:內核執行無內存的過量使用處理。使用這個值會增大內存超載的可能性
2:內存的使用量等於swap的大小+RAM*overcommit_ratio的值。如果希望減小內存的過度使用,這個值是最安全的
overcommit_ratio:將overcommit_memory指定為2時候,提供的物理RAM比例,默認為50
六.與通信相關的調優參數
常見在同一個主機中進行進程間通信的方式:
1.通過消息message;2.通過signal信號量進行通信;3.通過共享內存進行通信,跨主機常見的通信方式是rpc
以消息的方式實現進程通信的調優方案:
msgmax:以位元組為單位規定消息隊列中任意消息的最大允許大小。這個值一定不能超過該隊列的大小(msgmnb),默認值為65536
msgmnb:以位元組為單位規定單一消息隊列的最大值(最大長度)。默認為65536位元組
msgmni:規定消息隊列識別符的最大數量(及隊列的最大數量)。64位架構機器的默認值為1985;32位架構機器的默認值為1736
以共享內存方式實現進程通信的調優方案:
shmall:以位元組為單位規定一次在該系統中可以使用的共享內存總量(單次申請的上限)
shmmax:以位元組為單位規定每一個共享內存片段的最大大小
shmmni:規定系統范圍內最大共享內存片段。在64和32位的系統上默認值都是4096
七.與容量相關的文件系統可調優參數:
file-max:列出內核分配的文件句柄的最大值
dirty_ratio:規定百分比值,當臟數據達到系統內存總數的這個百分比值後開始執行pdflush,默認為20
dirty_background_ratio:規定百分比值,當某一個進程自己所佔用的臟頁比例達到系統內存總數的這個百分比值後開始在後台執行pdflush,默認為10
dirty_expire_centisecs:pdlush每隔百分之一秒的時間開啟起來刷新臟頁,默認值為3000,所以每隔30秒起來開始刷新臟頁
dirty_writeback_centisecs:每隔百分之一秒開始刷新單個臟頁。默認值為500,所以一個臟頁的存在時間達到了5秒,就開始刷新臟
八.linux內存常用的觀察指標命令:
Memory activity
vmstat [interval] [count]
sar -r [interval] [count]
Rate of change in memory
sar -R [interval] [count]
frmpg/s:每秒釋放或者分配的內存頁,如果為正數,則為釋放的內存頁;如果為負數,則為分配的內存頁
bufpg/s:每秒buffer中獲得或者釋放的內存頁。如果為正數則為獲得的內存頁,為負數。則為釋放的內存頁
campg/s:每秒cache中獲得或者釋放的內存頁。如果為正數則為獲得的內存頁,為負數。則為釋放的內存頁
Swap activity
sar -W [interval] [count]
ALL IO
sar -B [interval] [count]
pgpgin/s:每秒從磁碟寫入到內核的塊數量
pgpgout/s:每秒從內核寫入到磁碟的塊數量
fault/s:每秒鍾出現的缺頁異常的個數
majflt/s:每秒鍾出現的大頁異常的個數
pgfree/s:每秒回收回來的頁面個數
Ⅷ 如何自己在linux上搭建類似雲盤的分布式雲存儲
我們常用的系統大多數是Windows和Mac,但是相比較來說在Linux上部署雲盤更穩定。樓主的想要的是如何從0到1,一步步開發、搭建雲存儲,但相對於大眾來說,難度系數太高,畢竟不是人人都有IT技術,也不是每個公司都有IT人員能夠完成開發、搭建、部署、運維的。
樓上已經有答案說到開發的層面,那我就來說說更適合大眾的搭建方式,那就是拿成熟的雲盤產品直接搭建。
現在雲盒子企業私有雲盤的官網上提供了雲盒子Linux伺服器安裝包,大家有伺服器或者閑置電腦的話,可以直接進入下載板塊下載適用,為方便大家搭建,雲盒子還附上了使用幫助,根據提示輕松部署。
Linux搭建雲存儲
關於運維也不用擔心,雲盒子配備了實施工程師,排查、解決、更新都不用你操心。
有興趣的朋友可以試試