Linux系統運維與架構設計之Linux概述
Linux系統運維與架構設計
1.1 淺談計算機系統
1.1.1 計算機硬體系統
現代計算機是基于馮·諾依曼體系結構,由運算器、控制器、存儲器、輸入裝置、輸出裝置五大部分組成,如下圖所示
它們各司其職,完成了資料的計算、存儲、傳輸任務。
下面是它們各個元件的功能介紹:
CPU:也被稱為中央處理器,由運算器和控制器組成,其主要作用是資料計算(從記憶體中擷取指令并執行後将結果傳回給記憶體或者寫入到磁盤)和控制其他裝置(聲霸卡顯示卡,滑鼠鍵盤)協同工作。
記憶體:采用編址存儲,其主要作用是用來作為程式的工作區,程式運作時其資料和指令會被加載到記憶體,斷電後資料會丢失。
硬碟:其主要作用是永久性存儲海量資料(TB/PB級别),分為機械式硬碟和固态硬碟兩大類。
IO裝置:其主要作用是用來資料的輸入輸出,常見的輸入裝置包括滑鼠鍵盤,常見的輸出裝置包含聲霸卡,顯示卡,列印機等等。網卡主要是負責在網絡上的傳輸資料。
在後期運維排除故障時除了考慮程式本身的錯誤之外還要考慮計算機硬體故障(例如磁盤被寫滿,網絡不通)等問題。
1.1.2 計算機軟體系統
軟體出現的作用是實作了人和計算機更好的互動,它是由開發人員采用某種程式設計語言來編寫一系列的指令以及産生的資料組成。
不同平台的軟體有不同的互動方式:
伺服器端:運維開發人員基于指令行的字元界面實作人機互動。
PC桌面端:開發人員、普通使用者通常是基于圖形化界面實作人機互動。
移動端:使用者通常是通過語音,手勢觸控實作人機互動。
而軟體通常被分為系統軟體和應用軟體
系統軟體:系統軟體有作業系統、編譯器、資料庫等等。
應用軟體:應用軟體有淘寶、京東、微信、支付寶等等。
1.1.3 作業系統
作業系統(Operating System)是實作通用目的的程式,其核心(Kernel)負責和底層硬體互動,應用軟體運作在作業系統之上。是以作業系統起着承上啟下的作用,作業系統提供的功能如下
- 硬體驅動
- 程序管理
- 記憶體管理
- 網絡管理
- 安全管理
- 檔案管理
作業系統分類:
- 桌面:Windows10,macOS10.14,Ubuntu18.04
- 伺服器:CentOS7.6, RHEL,Ubuntu Server
- 移動裝置:Android,IOS
ABI(Application Binary Interface)描述了應用程式與OS之間的底層接口,允許編譯好的目标代碼在使用相容ABI的系統中無需改動就能運作
API(Application Programming Interface)定義了源代碼和庫之間的接口,是以同樣的源代碼可以在支援這個API的任何系統中編譯
開發人員在編寫應用程式時,通常都是借助API接口實作通用目的的功能,而應用程式編譯後,通過ABI接口編譯連結後運作。
1.1.4 計算機常用應用的軟硬體協作實作
計算機運作的功能流程如下圖所示
聊天:應用程式監聽鍵盤輸入的資料,放到記憶體,然後傳給網卡,通過網絡傳遞給另外一個網卡,再從網卡傳到記憶體,顯示在顯示器上。
聽音樂:應用程式将音樂資料加載到記憶體之後,然後寫到聲霸卡上。
看視訊:應用程式将視訊資料加載到記憶體,然後寫到顯示卡上。
讀文檔: 應用程式将磁盤中的文檔資料加載到記憶體後顯示到螢幕上。
寫文檔: 應用程式将記憶體中的資料寫入到磁盤上。
1.1.5 計算機資訊存儲
1.1.5.1 計算機常用存儲機關
在計算機最底層,資料都是以二進制(01010)的補碼方式存儲,而計算機中最小的存儲機關是位(bit),用來表示0或者1。
計算機中最基本的存儲機關是位元組(Byte),1個位元組對應8個位(bit)。
而日常應用中常使用的基本存儲機關包括KB,MB,GB,TB。它們之間都是以1024換算的,如下所示
1TB=1024GB
1GB=1024MB
1MB=1024KB
1KB=1024B
1B=8bit
1.1.5.2 計算機記憶體存儲
現在通常筆記本的記憶體通常是8G,16G,32G,64G等等,而運作在筆記本之上的作業系統普遍都是64位的,因為32位系統隻能使用4G記憶體,下面是4G的記憶體換算
4G=2^2 * 2^10 * 2^10 * 2^10 =4*1024*1024*1024=2^32
1.1.5.3 計算機網速換算
使用迅雷下載下傳某些資源時的網速就是KB或者MB,而網絡營運提供商(例如長城寬帶、移)聲稱的百兆帶寬實際上是100Mb(bit),但是網絡下載下傳速度是以位元組(KB)為機關的,是以真實的網速(下載下傳速度)理論上隻有100Mb/8=12.5MB
1.1.5.4 計算機磁盤容量換算
在購買記憶體或者買移動硬碟時,通常使用的存儲機關就是GB或者是TB,
但是在買4T的移動硬碟時,實際的可用容量卻隻有3T多,因為計算機的存儲機關是以2的10次方(即1024)換算,而硬碟廠商們是以1000為換算機關。
4T的硬碟換算成位如下所示
4T=4*1024GB*1024MB*1024KB*1024B*8bit
而硬碟廠商的實際容量
4T=1000*1000*1000*1000*8
是以實際的可用容量是
4*1000*1000*1000*1000/1024/1024/1024/1024≈3.63T
而在一些網際網路巨頭(例如國内的BAT,國外的亞馬遜、蘋果、微軟、谷歌,臉書)公司中,可能使用到比TB更大的海量資料,也就是PB或者EB,ZB,它們的換算機關如下所示。
1PB=1024TB
1EB=1024PB
1ZB=1024EB
1YB=1024ZB
1BB=1024YB
1NB=1024BB
1DB=1024NB
1.2 伺服器及其硬體概述
1.2.1常用伺服器介紹
DELL,HP和IBM是網際網路公司中使用最常用的伺服器品牌。
其中網際網路公司中使用最廣泛的品牌DELL常見的伺服器型号按照不同的用途分為2u的R730/R830和4U的R930,其中1U表示高度為4.45cm,其結構類型是機架式,如下圖所示。
1.2.2 伺服器硬體選型
伺服器中重要的元件包含電源(如果是單台伺服器通常都是雙路電源,叢集場景不需要使用雙路電源),主機闆(作用類似于人體的骨架),CPU,記憶體和磁盤,網卡(內建在主機闆上)等等。
而系統運維人員需要重點關注伺服器的CPU、記憶體、磁盤三大核心元件!
CPU :伺服器常用的CPU是基于X86指令集的英特爾至強Xeon( E3, E5, E7系類),根據用途不同伺服器的CPU通常是2-4顆,單顆CPU是4-8核,如果是做虛拟化主控端則需要4-8顆CPU,虛拟6-10個虛拟機。
記憶體:伺服器的記憶體區間通常是16-256G(32G-64G更多),如果是做虛拟化的主控端,記憶體總量一般是48-128G,用來虛拟6-10個虛拟機。
32位系統最多尋址2的32次方也就是4G個記憶體空間,64位系統最高尋址記憶體可以達到2的64次方也就是4G*4G記憶體空間,但是由于其他元件限制,實際使用不了那麼多,64位Linux支援記憶體為16EB。
磁盤:伺服器的磁盤接口類型通常分為SATA(轉速7200轉/分),SAS(轉速10000-15000轉/分),SSD三種。
通常不對外通路的業務(例如線下資料備份)采用SATA,STAT的特點是容量大,價格便宜但是速度比較慢。
而正常正式的工作場景選用SAS硬碟,機械磁盤轉速高的性能好。
高并發,小資料量(TB)時選用SSD。
考慮到經濟效益,網際網路公司通常根據不同的應用場景都是SATA,SAS和SSD混合使用。
每個計算機元件的IO性能也各不相同,核心元件(CPU,記憶體,磁盤)都遵循容量越大,IO性能越差,如下圖所示,彙總了它們的IO性能。
在後期系統優化和架構設計時,通常需要注意各個硬體元件的瓶頸,尤其是磁盤
1.3 初識Unix系統
1.3.1 Unix曆史
- 1969年,貝爾實驗室的Ken Thompson使用彙編語言和B語言開發和改進了UNICS
- 1973年,貝爾實驗室的Dennis Ritchie使用C語言重新編寫實作,并正式命名Unix
- 1977年,伯克利大學開發基于Unix的BSD系統,自此以後各大公司針對自身硬體架構開發了互不相容的各種版本的Uinx,例如SUN公司的Solaris,HP公司的HP UNIX以及IBM公司的AIX
- 1979年貝爾實驗室發表了System V架構 版權聲明,HP UNIX,IBM AIX宣布“不對學生提供源碼” 并且收回版權
- 1984年 Andrew S. Tanenbaum荷蘭阿姆斯特丹自由大學計算機科學的教授開發了可運作在x86 PC平台的Minix作業系統用于教學。
Unix的發展路線以及各個分支可以參考如下圖所示
1.3.2 Unix系統的特點
- 技術成熟、可靠性高:通常超大型銀行、金融公司等可靠性要求性極高的公司會采用Unix作為伺服器作業系統,但是Unix通常是随着硬體捆綁銷售的,例如IBM的小型機。
- 支援主流CPU的架構:Intel/AMD,PowerPC,UltraSPARC
- 支援主流的資料庫:Oracle,DB2,Informix
- 強大的開發功能:Unix促使C語言的誕生,而TCP/IP,XML,WWW都是誕生在Unix之上
1.3.3 GUN與開源軟體
GUN概述
由于Unix面臨商業化版權制約以及源碼面臨閉源的問題,1984年Ritchard Stallman發起了開發自由軟體的運動,并成立自由軟體基金會(Free Software Foundation)和GNU(GUN is Not Unix)項目以及GPL(GNU General Public License)協定,目标是編寫大量相容于Unix系統的自由軟體。GNU項目最終産出了Linux系統的重要元件,包括GCC編譯器,Emacs編輯器,bash指令解釋程式和程式設計語言以及gawk。
自由不代表免費,例如RedHat的RHEL是自由但是不免費的作業系統,提供的服務收費。
GPL是保證任何人有共享和修改自由軟體的自由,任何人有權擷取、修改、釋出自由軟體的源代碼的權利,但同時給出具體的修改的源碼。LGPL(Lesser General Public License)相對于GPL較為寬松,允許不公開全部源代碼。
開源軟體
開源指的是軟體和源碼提供給所有人,同時能夠自由分發軟體和源代碼,能夠自由的修改和建立其衍生品。
而目前軟體類型可以分為商業軟體,共享軟體以及自由軟體。
- 商業軟體就是使用收費,例如Window10企業版,Office2016,Edraw Max等等都是商業軟體,其特點就是收費并且不開放源代碼。
- 共享軟體就是免費,但是不開放源碼,功能會有所局限,相當于免費版
- 自由軟體是開放源碼,并且能夠自由修改、分發,但是自由不一定意味着免費,典型的RedHat公司發行的REHL就是自由,但是提供的服務是收費的。
目前世界上開源軟體有不同的開源許可證,常見的有Apache,MIT,LGPL等等。
- 其中Apache協定指的是他人修改源碼後能夠閉源,但是每一個修改過的檔案,必須要放置版權說明
- MIT協定在Apache協定的基礎之上,每個修改的檔案不需要放置版權說明,并且衍生軟體的廣告,還可以用你的名字促銷,應該是最寬松的開源許可協定。
- LGPL協定指的是他人修改軟體的源碼之後不能閉源,同時新增的代碼也不能采用同樣的許可證,但是修改源碼的地方不需要提供說明文檔,而Mozila協定是需要提供說明文檔。
CentOS系列都是遵守GPLV2協定,可以使用rpm -qi kernel指令檢視
CentOS6.10的版權聲明
[root@centOS6 ~]# rpm -qi kernel
Name : kernel Relocations: (not relocatable)
Version : 2.6.32 Vendor: CentOS
Release : 754.el6 Build Date: Wed 20 Jun 2018 05:43:27 AM CST
Install Date: Sat 26 Jan 2019 12:32:12 AM CST Build Host: x86-01.bsys.centos.org
Group : System Environment/Kernel Source RPM: kernel-2.6.32-754.el6.src.rpm
Size : 139595110 License: GPLv2
Signature : RSA/SHA1, Wed 20 Jun 2018 07:38:57 PM CST, Key ID 0946fca2c105b9de
Packager : CentOS BuildSystem <http://bugs.centos.org>
URL : http://www.kernel.org/
Summary : The Linux kernel
Description :
The kernel package contains the Linux kernel (vmlinuz), the core of any
Linux operating system. The kernel handles the basic functions
of the operating system: memory allocation, process allocation, device
input and output, etc.
CentOS7.6的版權聲明
[root@centos7 ~]# rpm -qi kernel
Name : kernel
Version : 3.10.0
Release : 957.el7
Architecture: x86_64
Install Date: Fri 25 Jan 2019 12:48:59 PM CST
Group : System Environment/Kernel
Size : 66192729
License : GPLv2
Signature : RSA/SHA256, Mon 12 Nov 2018 10:30:44 PM CST, Key ID 24c6a8a7f4a80eb5
Source RPM : kernel-3.10.0-957.el7.src.rpm
Build Date : Fri 09 Nov 2018 08:08:59 AM CST
Build Host : kbuilder.bsys.centos.org
Relocations : (not relocatable)
Packager : CentOS BuildSystem <http://bugs.centos.org>
Vendor : CentOS
URL : http://www.kernel.org/
Summary : The Linux kernel
Description :
The kernel package contains the Linux kernel (vmlinuz), the core of any
Linux operating system. The kernel handles the basic functions
of the operating system: memory allocation, process allocation, device
input and output, etc.
1.4 初識Linux
1.4.1 Linux概述
我們通常所說的Linux通常指的是核心(kernel),而如果隻有核心,就不是一個完整的作業系統,還需要許多能夠解決實際問題的應用程式。
而最早期的Linux核心是由Linus Torvalds在大學教授Andrew Tanenbaum開發的Minix基礎之上開發的,1991年年底釋出了Linux核心的0.02版本,自那以後全世界的開源愛好者們共同推進着Linux系統的發展,使其在伺服器端,嵌入式和PC桌面得到了廣泛的運用。
Linux系統=Linux核心+GNU項目元件+各種應用程式(Apache,Nginx,Zabbix)
完整的Linux系統架構圖如下圖所示
核心主要是實作系統記憶體管理,軟體程式管理,硬體裝置管理,檔案系統管理
GNU元件主要包含處理檔案(gawk)、操作文本、管理程序的工具以及shell,gcc等等
常見的應用程式包含不同的圖形化界面(KDE,GNOME,XFace),運作于桌面端的Firefox,Chrome和運作于服務端Nginx,Apache等等。
1.4.2 Linux系統的特點
Linux系統的特點(繼承Unix之外的)
- 開放源代碼、自由傳播的類Unix
- 基于Intel X86系列CPU
- 支援多任務、多線程、多CPU、多使用者
- 完善的圖形使用者界面:GNOME,KDE
- 完善的開發平台:Java/C/C++/Pythton
- 支援主流資料庫:MySQL,Oracle,PostgreSQL
- 完善的網絡服務:HTTP、WWW,SFTP,DNS,SSH等等
1.4.3 Linux主流發行版
為了便于Linux系統的安裝和使用,誕生了諸如RedHat公司的Linux發行商,将Linux核心和各種系統元件以及應用元件組合成一個完整的作業系統。
目前主流的Linux發行版主要由三個,分别是RedHat,Debian和Slackware,後續主流的RHEL,Ubuntu,Open SUSE都是基于前面三個分支演進而來的。
如下清單展示出了目前主流的Linux分支以及發行版本
- Debian
- Ubuntu
- Mint
- Slackware
- SUSE Linux Enterprise Server
- Open SUSE
- RedHat
- RHEL
- CentOS
關于RHEL和CentOS的關系:CentOS是基于RHEL源碼編譯而來,僅僅去除了RHEL源碼的商标以及非自由軟體部分。
面對如此多的發行版該如何選擇呢?
如果你想從事Linux系統運維與架構設計的工作,推薦使用CentOS6.10版本或者CentOS7.6。
如果是想嘗試下Linux的桌面版,推薦可以使用Open SUSE LEAP 42.3或者Ubuntu18.04。
如果以上的發行版無法滿足你的需求,可以通路下面的連接配接,擷取所有的Linux發行版資訊。
https://upload.wikimedia.org/wikipedia/commons/1/1b/Linux_Distribution_Timeline.svg
1.4.4 Linux系統的應用領域
經過20多年的發展,如今的Linux在伺服器領域、桌面領域、移動嵌入式領域和雲計算、大資料領域占據了廣闊的市場。
其中伺服器領域在全球占據了75%的市場佔有率
而Ubuntu也作為最流行的桌面版Linux,基本可以滿足日常辦公需要,但是普及遠遠不及Windows。
通過Linux系統架構圖可以得知手機作業系統Android的核心就是基于Linux修改而來的。
1.4.5 Unix/Linux哲學思想
- 一切皆檔案:普通的檔案,目錄、字元裝置、塊裝置、 套接字等在 Unix/Linux 中都是以檔案被對待;它們雖然類型不同,但是對其提供的卻是同一套操作界面。
- 小型,單一用途的程式:程式和可執行檔案不要太複雜,這樣才能保證了linux核心的高效運作。
- 連結程式,共同完成複雜的任務:複雜的任務可以通過連接配接多個簡單的程式實作複雜的功能。對于複雜的功能linux通過許多簡單程式的組合等方式實作,在保證簡單功能的高效性的同時,複雜的程式也必然是高效性的。
- 避免令人困惑的使用者界面:如Windows那樣出了問題一般人選擇的會是重新開機,實在是不行的話就是重新安裝系統了,因為對于Windows那樣不是開源的,并且使用者界面比較複雜作業系統出了問題,一般的人是根本沒有辦法解決的。但是linux就不一樣了,第一linux是開源的,無論什麼問題都可以通過簡潔的指令行實作排錯,修改系統的配置,一切都是簡潔明了為基礎。
- 配置資料存儲在文本中:linux所有的配置檔案都存放在文本配置檔案當中,無論什麼配置修改都隻需修改其配置檔案即可,配置檔案時文本形式的隻需任意一款文本編輯器修改即可而不是類似于Windows那樣将儲存在系統資料庫中,并且Windows的系統資料庫需要專門的二進制或十六進制的編輯器才可編輯,修改比較複雜。