(一)云计算技术学习--基础概念
目錄
Linux的用戶管理
Yum 命令
Python
SELinux
vsftpd
etcd
Session、Cookie、Token
LNMP
VMware
Docker
Kubernetes(K8S)
Centos
CentOS(Community Enterprise Operating System,中文意思是社區(qū)企業(yè)操作系統(tǒng))是Linux發(fā)行版之一,它是來自于Red Hat Enterprise Linux依照開放源代碼規(guī)定釋出的源代碼所編譯而成。由于出自同樣的源代碼,因此有些要求高度穩(wěn)定性的服務(wù)器以CentOS替代商業(yè)版的Red Hat Enterprise Linux使用。兩者的不同,在于CentOS完全開源。
我本地是在VM里安裝的Centos,安裝的時候最常用的有三種安裝方式的選擇,最小化安裝是不帶有任何界面的,但是可以選擇配套安裝的軟件。對于GUI和GNOME,貌似只選擇父目錄是沒什么區(qū)別,但是每個父目錄下的子目錄程序是不一樣的。我選擇是僅GNOME安裝。
最小化安裝
?最小化安裝了,開機啟動是命令行模式,也沒關(guān)系,可以做如下修改:
1.在命令行下輸入下面的命令來安裝 Gnome 包
sudo??yum groupinstall?"GNOME Desktop"?"Graphical Administration Tools"?2.更新系統(tǒng)的運行級別
自動進入圖形界面,那么我們需要更改系統(tǒng)的運行級別,輸入下面的命令來啟用圖形界面。
sudo?ln?-sf?/lib/systemd/system/runlevel5.target?/etc/systemd/system/default.target3.重啟系統(tǒng)
當系統(tǒng)再次啟動的時候,就會默認進入圖形界面
這里注意:如果是最小化安裝,那么默認登陸的時候直接可以選擇是root登錄還是非root登錄,只要輸入賬號就行,但是帶有圖形化界面的安裝,默認登錄用戶是非root,所以需要切換賬號。切換方法:輸入英文 su -以及root的密碼即可切換為root用戶
?Server with GUI
?GNOME
CentOS獨有的yum命令支持在線升級,可以即時更新系統(tǒng),我安裝的是CentOS-7-x86_64-DVD-1804,CentOS在在線安裝VM Tools的時候遇到一些問題:
1.首先是在現(xiàn)在下,通過虛擬光驅(qū)找到VMTools的iso文件位置,雙擊打開后可以看到
2.將這個壓縮包有xftp工具拷貝到虛擬機中的某個目錄下,然后運行tar,命令解壓
3.如果進入到解壓后的路徑中,直接運行./vmware-install.pl會遇到各種問題:
bash:./vmware-install.pl :/usr/bin/perl:bad interpreter:No such file or directory
解決辦法安裝perl
yum -y install perlWhat is the location of the “ifconfig” program on your machine?
解決辦法,請安裝ifconfig,重新執(zhí)行vmware-install.pl
The path “” is not a valid path to the 3.10.0-957.el7.x86_64 kernel headers.
Would you like to change it? [yes]
INPUT: [yes] default
運行以下兩條命令
VMware的網(wǎng)絡(luò)連接模式有三種:
1、僅主機模式:也就是host_only,這種模式僅僅只讓虛擬機與本地物理機通信,不可以上網(wǎng);
2、NAT模式:這種模式保留僅主機模式的功能下,還能讓虛擬機上網(wǎng);
虛擬機在物理機的一個子網(wǎng)中,虛擬機的地址是內(nèi)網(wǎng)地址,虛擬機所有上網(wǎng)都是借助物理機NAT功能把內(nèi)網(wǎng)IP轉(zhuǎn)換成外網(wǎng)IP,因此對外面網(wǎng)絡(luò)上花花綠綠的機器來說,看到的永遠只是外網(wǎng)IP。
類似于我現(xiàn)在一個筆記本、一個手機都是通過家用路由器上網(wǎng),一個192.168.1.2,一個192.168.1.3,但是對百度來說,它所看到的源IP絕對不是這個,而是經(jīng)過路由器轉(zhuǎn)換后的電信提供的公網(wǎng)IP。百度無法從這一個IP判斷是我的筆記本還是手機在上網(wǎng)。
NAT模式下注意問題:
- 虛擬機和電腦主機是可以互相ping通的,如果電腦主機可以ping通虛擬機,但是虛擬機不可以ping通電腦主機,那么多數(shù)情況是電腦主機的防火墻打開了,進行關(guān)閉即可。
- 虛擬機不能ping通互聯(lián)網(wǎng)外網(wǎng)的ip。
設(shè)置虛擬NAT網(wǎng)卡的網(wǎng)關(guān)地址和本機虛擬網(wǎng)卡的網(wǎng)關(guān)地址一樣,設(shè)置虛擬機的網(wǎng)絡(luò)配置
?
- 可以ping通外網(wǎng)的ip但是ping不通域名
在/etc/resolv.conf文件里追加以下內(nèi)容:
3、橋接模式:直接讓虛擬機使用本地主機的網(wǎng)卡上網(wǎng)。
虛擬機和物理機同等地位,相當于你同事和你的電腦,物理機上虛擬網(wǎng)卡VM0相當于交換機(集線器),一頭連到了家用路由器,另外N頭接所有需要上網(wǎng)的電腦。所以虛擬機的網(wǎng)絡(luò)配置和物理機保持一模一樣。
Linux的用戶管理
配置文件:
用戶信息文件:/etc/passwd
密碼文件:/etc/shadow
用戶組文件:/etc/group
用戶組密碼文件:/etc/gshadow
/etc/passwd? ?文件格式解析(7個字段)
root:x:0:0:root:/root:/bin/bash
用戶名:密碼位:UID(用戶標識號):GID(缺省組標識號):描述信息:宿主目錄:命令解釋器(使用的 shell,默認為bash)
Linux用戶的分類:
- 超級用戶:(root,UID=0)
- 普通用戶:(UID在500到60000)
- 偽用戶:(UID在1到499)
偽用戶:
1、偽用戶與系統(tǒng)和程序服務(wù)相關(guān)
? ? bin、daemon、shutdown、halt等,任何Linux系統(tǒng)默認都有這些偽用戶
? ? mail、news、games、apache、ftp、mysql及sshd等,與Linux 系統(tǒng)的進程相關(guān)
2、偽用戶通常不需要或無法登錄系統(tǒng)
3、可以沒有宿主目錄
/etc/group 文件格式??共4個字段
root:x:0:root
sys:x:3:root,bin,adm
組名:組密碼位:GID:組成員(組內(nèi)所有用戶列表,用逗號隔開)
用戶和組管理的命令詳解
RPM命令
在 Linux 操作系統(tǒng)下,幾乎所有的軟件均通過RPM 進行安裝、卸載及管理等操作。RPM 的全稱為Redhat Package Manager ,是由Redhat 公司提出的,用于管理Linux 下軟件包的軟件。Linux 安裝時,除了幾個核心模塊以外,其余幾乎所有的模塊均通過RPM 完成安裝。RPM 有五種操作模式,分別為:安裝、卸載、升級、查詢和驗證。
rpm -qa | grep tomcat4 查看 tomcat4 是否被安裝; rpm -i example.rpm 安裝 example.rpm 包;rpm -e 需要卸載的安裝包 在卸載之前,通常需要使用rpm -q …命令查出需要卸載的安裝包名稱。 舉例如下: rpm -e tomcat4 卸載 tomcat4 軟件包Yum 命令
yum( Yellow dog Updater, Modified)是一個在 Fedora 和 RedHat 以及 SUSE 中的 Shell 前端軟件包管理器。基于 RPM ( Red-Hat Package Manager 紅帽軟件包管理器 )包管理,能夠從指定的服務(wù)器自動下載 RPM 包并且安裝,可以自動處理依賴性關(guān)系,并且一次安裝所有依賴的軟件包,無須繁瑣地一次次下載、安裝,可以是在線版,也可以是本地版。
yum 提供了查找、安裝、刪除某一個、一組甚至全部軟件包的命令,而且命令簡潔而又好記。
yum 語法
yum [options] [command] [package ...]- options:可選,選項包括-h(幫助),-y(當安裝過程提示選擇全部為 "yes"),-q(不顯示安裝的過程)等等。
- command:要進行的操作。
- package:安裝的包名。
Python
Linux下源碼的安裝一般由3個步驟組成:配置(configure)、編譯(make)、安裝(make install),具體的安裝方法一般都會給出文檔,這里主要討論配置(configure)。Configure是一個可執(zhí)行腳本,它有很多選項,在源碼路徑下使用命令./configure –help輸出詳細的選項列表,如下:
很多的選項,你可以忽略其他的一切,但請把--prefix加上。這里以安裝python3為例,我們打算把它安裝到目錄/usr/local/python3,于是在python3目錄執(zhí)行帶選項的腳本./configure --prefix=/usr/local/python3執(zhí)行成功后再編譯、安裝(make,make install);安裝完成將自動生成目錄python3而且該軟件所有的文件都被復(fù)制到這個目錄。
為什么要指定這個安裝目錄?是為了以后的維護方便,如果沒有用這個選項,安裝過程結(jié)束后,該軟件所需的軟件被復(fù)制到不同的系統(tǒng)目錄下,很難弄清楚到底復(fù)制了那些文件、都復(fù)制到哪里去了—基本上是一塌糊涂。
用了--prefix選項的另一個好處是卸載軟件或移植軟件。當某個安裝的軟件不再需要時,只須簡單的刪除該安裝目錄,就可以把軟件卸載得干干凈凈;移植軟件只需拷貝整個目錄到另外一個機器即可(相同的操作系統(tǒng))。
SELinux
安全增強型 Linux(Security-Enhanced Linux)簡稱 SELinux,它是一個 Linux 內(nèi)核模塊,也是 Linux 的一個安全子系統(tǒng) 。SELinux 主要作用就是最大限度地減小系統(tǒng)中服務(wù)進程可訪問的資源(最小權(quán)限原則)。可以看看這篇文章介紹:一文徹底明白linux中的selinux到底是什么
vsftpd
vsftpd 是“very secure FTP daemon”的縮寫,如果你只想搭建一個性質(zhì)簡單的FTP,——尤其是匿名下載FTP——我認為是vsftpd是Linux平臺下最好的選擇。安全性是vsftpd的一個最大的特點它可以運行在諸如 Linux、BSD、Solaris、 HP-UNIX 等系統(tǒng)上面,是一個完全免費的、開放源代碼的 ftp 服務(wù)器軟件,支持很多其他的FTP 服務(wù)器所不支持的特征。
etcd
在云計算時代,如何讓服務(wù)快速透明地接入到計算集群中,如何讓共享配置信息快速被集群中的所有機器發(fā)現(xiàn),更為重要的是,如何構(gòu)建這樣一套高可用、安全、易于部署以及響應(yīng)快速的服務(wù)集群,已經(jīng)成為了迫切需要解決的問題。etcd為解決這類問題帶來了福音。
etcd是一個高可用的鍵值存儲系統(tǒng),使用一致性哈希算法(Raft)在分布式環(huán)境下的 key/value 存儲服務(wù),主要用于共享配置和服務(wù)發(fā)現(xiàn)。具有以下特點:
- 簡單:基于HTTP+JSON的API讓你用curl就可以輕松使用。
- 安全:可選SSL客戶認證機制。
- 快速:每個實例每秒支持一千次寫操作。
- 可信:使用Raft算法充分實現(xiàn)了分布式。
Session、Cookie、Token
很久很久以前,Web 基本上就是文檔的瀏覽而已, 既然是瀏覽,作為服務(wù)器, 不需要記錄誰在某一段時間里都瀏覽了什么文檔,每次請求都是一個新的HTTP協(xié)議, 就是請求加響應(yīng), 尤其是我不用記住是誰剛剛發(fā)了HTTP請求, 每個請求對我來說都是全新的。這段時間很嗨皮。
但是隨著交互式Web應(yīng)用的興起,像在線購物網(wǎng)站,需要登錄的網(wǎng)站等等,馬上就面臨一個問題,那就是要管理會話,必須記住哪些人登錄系統(tǒng), 哪些人往自己的購物車中放商品, 也就是說我必須把每個人區(qū)分開,這就是一個不小的挑戰(zhàn),因為HTTP請求是無狀態(tài)的,所以想出的辦法就是給大家發(fā)一個會話標識(session id), 說白了就是一個隨機的字串,每個人收到的都不一樣, 每次大家向我發(fā)起HTTP請求的時候,把這個字符串給一并捎過來, 這樣我就能區(qū)分開誰是誰了!
當用戶第一次通過瀏覽器使用用戶名和密碼訪問服務(wù)器時,服務(wù)器會驗證用戶數(shù)據(jù),驗證成功后在服務(wù)器端寫入session數(shù)據(jù),向客戶端瀏覽器返回sessionid,瀏覽器將sessionid保存在cookie中,當用戶再次訪問服務(wù)器時,會攜帶sessionid,服務(wù)器會拿著sessionid從服務(wù)器獲取session數(shù)據(jù),然后進行用戶信息查詢,查詢到,就會將查詢到的用戶信息返回,從而實現(xiàn)狀態(tài)保持。
?這樣大家很嗨皮了,可是服務(wù)器就不嗨皮了,每個人只需要保存自己的session id,而服務(wù)器要保存所有人的session id !如果訪問服務(wù)器多了, 就得由成千上萬,甚至幾十萬個,這對服務(wù)器說是一個巨大的開銷 , 嚴重的限制了服務(wù)器擴展能力, 比如說我用兩個機器組成了一個集群, 小F通過機器A登錄了系統(tǒng), 那session id會保存在機器A上, 假設(shè)小F的下一次請求被轉(zhuǎn)發(fā)到機器B怎么辦?機器B可沒有小F的 session id啊。
有時候會采用一點小伎倆: session sticky , 就是讓小F的請求一直粘連在機器A上, 但是這也不管用, 要是機器A掛掉了, 還得轉(zhuǎn)到機器B去。那只好做session 的復(fù)制了, 把session id 在兩個機器之間搬來搬去, 快累死了。
后來有個叫Memcached的支了招:把session id 集中存儲到一個地方,也就是cookie中, 所有的機器都來訪問這個地方的數(shù)據(jù), 這樣一來,就不用復(fù)制了, 但是增加了單點失敗的可能性, 要是那個負責(zé)session 的機器掛了, 所有人都得重新登錄一遍, 估計得被人罵死!
也嘗試把這個單點的機器也搞出集群,增加可靠性, 但不管如何, 這小小的session 對我來說是一個沉重的負擔(dān),于是有人就一直在思考, 我為什么要保存這可惡的session呢, 只讓每個客戶端去保存該多好?
可是如果不保存這些session id , 怎么驗證客戶端發(fā)給我的session id 的確是我生成的呢? 如果不去驗證,我們都不知道他們是不是合法登錄的用戶, 那些不懷好意的家伙們就可以偽造session id , 為所欲為了。
嗯,對了,關(guān)鍵點就是驗證 !
比如說, 小F已經(jīng)登錄了系統(tǒng), 我給他發(fā)一個令牌(token), 里邊包含了小F的 user id, 下一次小F 再次通過Http 請求訪問我的時候, 把這個token 通過Http header 帶過來不就可以了。不過這和session id沒有本質(zhì)區(qū)別啊, 任何人都可以可以偽造, 所以我得想點兒辦法, 讓別人偽造不了。
那就對數(shù)據(jù)做一個簽名吧, 比如說我用HMAC-SHA256 算法,加上一個只有我才知道的密鑰, 對數(shù)據(jù)做一個簽名, 把這個簽名和數(shù)據(jù)一起作為token , 由于密鑰別人不知道, 就無法偽造token了。
這個token 我不保存, 當小F把這個token 給我發(fā)過來的時候,我再用同樣的HMAC-SHA256 算法和同樣的密鑰,對數(shù)據(jù)再計算一次簽名, 和token 中的簽名做個比較, 如果相同, 我就知道小F已經(jīng)登錄過了,并且可以直接取到小F的user id , 如果不相同, 數(shù)據(jù)部分肯定被人篡改過, 我就告訴發(fā)送者:對不起,沒有認證。
Token 中的數(shù)據(jù)是明文保存的(雖然我會用Base64做下編碼, 但那不是加密), 還是可以被別人看到的, 所以我不能在其中保存像密碼這樣的敏感信息。當然, 如果一個人的token 被別人偷走了, 那我也沒辦法, 我也會認為小偷就是合法用戶, 這其實和一個人的session id 被別人偷走是一樣的。
這樣一來, 我就不保存session id 了, 我只是生成token , 然后驗證token , 我用我的CPU計算時間獲取了我的session 存儲空間 !解除了session id這個負擔(dān), 可以說是無事一身輕, 我的機器集群現(xiàn)在可以輕松地做水平擴展, 用戶訪問量增大, 直接加機器就行。這種無狀態(tài)的感覺實在是太好了!
基于Token的身份驗證的過程如下:
每一次請求都需要token。token應(yīng)該在HTTP的頭部發(fā)送從而保證了Http請求無狀態(tài)。我們同樣通過設(shè)置服務(wù)器屬性Access-Control-Allow-Origin:* ,讓服務(wù)器能接受到來自所有域的請求。
Cookie
cookie 是一個非常具體的東西,指的就是瀏覽器里面能永久存儲的一種數(shù)據(jù),僅僅是瀏覽器實現(xiàn)的一種數(shù)據(jù)存儲功能。cookie由服務(wù)器生成,發(fā)送給瀏覽器,瀏覽器把cookie以kv形式保存到某個目錄下的文本文件內(nèi),下一次請求同一網(wǎng)站時會把該cookie發(fā)送給服務(wù)器。由于cookie是存在客戶端上的,所以瀏覽器加入了一些限制確保cookie不會被惡意使用,同時不會占據(jù)太多磁盤空間,所以每個域的cookie數(shù)量是有限的。
?
LNMP
Linux+Nginx+Mysql/MariaDB+Perl/PHP/Python一組常用來搭建動態(tài)網(wǎng)站或者服務(wù)器的開源軟件,本身都是各自獨立的程序,但是因為常被放在一起使用,擁有了越來越高的兼容度,共同組成了一個強大的Web應(yīng)用程序平臺。
LNMP是一個CS架構(gòu)的平臺(Client/Server架構(gòu), 即客戶端/服務(wù)器架構(gòu)),web客戶端基于TCP/IP通過http協(xié)議發(fā)起傳送這個請求可能是動態(tài)的也可能是靜態(tài)的,所有的服務(wù)器通過發(fā)起請求的后綴來判斷,如果是靜態(tài)的就由web服務(wù)器自己處理,然后將資源發(fā)給客戶端。如果請求是動態(tài)的這時web服務(wù)器會通過FastCGI協(xié)議發(fā)給php,通過php模塊去MySQL拿數(shù)據(jù)在通過Nginx交給客戶端。
WordPress是使用PHP語言開發(fā)的內(nèi)容管理系統(tǒng)
- 內(nèi)容管理系統(tǒng),英文叫做 Content Management System(CMS)。
- WordPress是全球最多人使用的,免費開源的建站程序。
VMware
VMware Workstation是基于OS的虛擬OS資源的虛擬化工具,它能將OS閑置的資源加以充分利用,如果你的這臺OS機器性能足夠好,可以通過VMware Workstation創(chuàng)建DNS,DHCP,Apache等許多服務(wù)器,一個機子運行多個服務(wù),節(jié)省了許多開支,這個作用是虛擬化所共有的特點。
因為生活中我們常常用它來虛擬實驗環(huán)境,我們大多數(shù)的人就把它當做一種用于玩操作系統(tǒng)的工具,這么理解是有偏差的。
VMware vSphere則是一種虛擬化方案包括很多東西,其核心是ESXi,ESXi獨立安裝在裸機上的操作系統(tǒng)(注意它不基于任何OS,它本身就是OS),通過它物理機的硬件資源被虛擬化為虛擬資源,之后再通過vCenter就能將安裝了ESXi操作系統(tǒng)的物理機的資源進行整合,化為一個總的資源池,在這個資源池里面我們?yōu)楦鱾€部門劃分不同大小的資源池方便其使用。
準確來說這兩個不屬于一個概念
VMware Workstation是一個基于OS的軟件,而VMware vSphere則是根據(jù)企業(yè)的實際情況設(shè)計的一個虛擬化方案,它設(shè)計的軟件,技術(shù)和要考慮的問題都要比VMware Workstation要多,要詳細,要具體。
簡單來說
VMware Workstation是一款基于OS的虛擬化軟件
VMware vSphere則是一個具體的虛擬化方案
總結(jié)
以上是生活随笔為你收集整理的(一)云计算技术学习--基础概念的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Vue使用ElementUi进行模糊搜索
- 下一篇: 满足中二魂却没啥用的 5 款开发者工具