網(wǎng)站開發(fā)技術(shù)是seo關(guān)鍵詞搜索和優(yōu)化
第一章
大數(shù)據(jù)的概念:海量數(shù)據(jù)的規(guī)模巨大到無(wú)法通過目前主流的計(jì)算機(jī)系統(tǒng)在合理時(shí)間內(nèi)獲取、存儲(chǔ)、管理、處理并提煉以幫助使用者決策
大數(shù)據(jù)的特點(diǎn):①數(shù)據(jù)量大,存儲(chǔ)的數(shù)據(jù)量巨大,PB級(jí)別是常態(tài);②多樣,數(shù)據(jù)的來源及格式多樣,數(shù)據(jù)格式除了傳統(tǒng)的結(jié)構(gòu)化數(shù)據(jù)外,還包括半結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù);③快速,數(shù)據(jù)的增長(zhǎng)速度快,而且越新的數(shù)據(jù)價(jià)值要求對(duì)數(shù)據(jù)的處理也要快;④價(jià)值密度低,要求設(shè)計(jì)一種在成本可接受的條件下,快速采集,發(fā)現(xiàn)和分析,從大量多種類別的數(shù)據(jù)提取價(jià)值的體系架構(gòu);⑤復(fù)雜度,對(duì)數(shù)據(jù)分析處理的難度大
云計(jì)算的概念:云計(jì)算是一種商業(yè)計(jì)算模型,將計(jì)算任務(wù)分布在大量計(jì)算機(jī)構(gòu)成的資源池上,使各種應(yīng)用系統(tǒng)能夠根據(jù)需要獲取計(jì)算力,存儲(chǔ)空間等服務(wù)
短定義:云計(jì)算是通過網(wǎng)絡(luò)按需提供可動(dòng)態(tài)伸縮的廉價(jià)計(jì)算服務(wù)
云計(jì)算的特點(diǎn):①超大規(guī)模②虛擬化,支持用戶在任意位置在各種終端獲取服務(wù),但實(shí)際上不需要了解應(yīng)用運(yùn)行的具體位置③高可靠性,采用數(shù)據(jù)多副本容錯(cuò),節(jié)點(diǎn)同構(gòu)可互換的措施來保障服務(wù)的高可靠性④通用性,云的特殊容錯(cuò)措施使得可以采用及其廉價(jià)的節(jié)點(diǎn)來構(gòu)成云⑤高可伸縮,云的規(guī)模可以伸縮⑥按需服務(wù)⑥極其廉價(jià),云的特殊容錯(cuò)措施可以使得用極其廉價(jià)的節(jié)點(diǎn)來構(gòu)成云
云計(jì)算的分類:
按照服務(wù)類型分類:
①將基礎(chǔ)設(shè)施作為服務(wù)IaaS,給用戶提供對(duì)所有設(shè)施的利用服務(wù),彈性云計(jì)算ECS、AWS
②將平臺(tái)作為服務(wù)PaaS,將軟件研發(fā)的平臺(tái)作為一種服務(wù),百度BAE,新浪SAE,阿里ACE,京東JAE
③將軟件作為服務(wù)SaaS,協(xié)同OA,CRM,財(cái)務(wù)系統(tǒng),企業(yè)智能系統(tǒng)和企業(yè)郵箱
按照部署模式分類:
①公有云,向公眾開放,任何人都能夠租賃
②私有云,只向一個(gè)企業(yè)或單位內(nèi)的人員使用;分為本地私有云(部署在企業(yè)內(nèi)部,適合運(yùn)行關(guān)鍵和機(jī)密業(yè)務(wù)),托管私有云(托管在第三方機(jī)房)
③混合云,只供兩個(gè)或以上的特定企業(yè)或者單位內(nèi)的人員使用,其他人無(wú)權(quán)租賃和使用
④社區(qū)云,由兩個(gè)或者以上不同類型的云組成,但用戶使用感覺是一個(gè)云端資源
第二章
NAT | 虛擬機(jī)可以訪問外網(wǎng),外網(wǎng)不能訪問虛擬機(jī),網(wǎng)段不可以調(diào)整 |
NAT Network | 虛擬機(jī)可以訪問外網(wǎng),外網(wǎng)不能訪問虛擬機(jī),網(wǎng)段可調(diào)整 |
Bridged | 虛擬機(jī)可以訪問外網(wǎng),外網(wǎng)可以訪問虛擬機(jī),網(wǎng)段和主機(jī)相同 |
Host-Only | 虛擬機(jī)不可以訪問外網(wǎng),外網(wǎng)不可以訪問虛擬機(jī),網(wǎng)段和主機(jī)相同 |
系統(tǒng)環(huán)境配置的步驟:①下載安裝VirtualBox,下載系統(tǒng)鏡像
②最小化安裝CentOS,出現(xiàn)安裝引導(dǎo)頁(yè)面時(shí)點(diǎn)擊Tab鍵,打開kernel啟動(dòng)選項(xiàng),增加選項(xiàng):net.ifnames=0 biosdevname=0,進(jìn)入后網(wǎng)卡名會(huì)按照eth0,eth1的規(guī)則命名,同時(shí)進(jìn)入安裝頁(yè)面之后選擇最小化安裝
③配置虛擬網(wǎng)絡(luò),①設(shè)置Nat Network網(wǎng)段(192.168.56.0/24)和 Host-only網(wǎng)段(10.0.0.0/24),網(wǎng)卡一用于Nat網(wǎng)段,網(wǎng)卡二用于Host-only網(wǎng)段。②在/etc/sysconfig/network-script/中設(shè)置主機(jī)網(wǎng)絡(luò),自舉協(xié)議為static,啟動(dòng)開機(jī)自啟,設(shè)置IPADDR、NETMASK、GATEWAY、DNS1和DNS2;③/etc/hostname修改本主機(jī)名稱;/etc/hosts修改其他主機(jī)名稱解析,然后測(cè)試網(wǎng)絡(luò)連接
④禁用防火墻和SELinux,關(guān)閉防火墻(臨時(shí)關(guān)閉)systemctl stop firewalld ,防止自動(dòng)啟動(dòng)systemctl disable firewalld ;關(guān)閉SELinux:修改配置文件/etc/sysconfig/selinux,設(shè)置SELINUX=disabled,檢查關(guān)閉是否成功(systemctl status firewalld)
⑤配置EPEL,安裝wget,然后使用淘寶等鏡像源
⑥安裝基礎(chǔ)軟件,安裝工具軟件包,服務(wù)器軟件包,和開發(fā)工具(JAVA、node.js、gcc)
⑦創(chuàng)建快照并克隆虛擬機(jī),克隆完成后需要進(jìn)行網(wǎng)絡(luò)連通性測(cè)試,隨后對(duì)宿主機(jī)配置對(duì)所有虛擬機(jī)的免密登錄
第三章
集群:一組相互獨(dú)立的,通過高速網(wǎng)絡(luò)互聯(lián)的計(jì)算機(jī),構(gòu)成了一個(gè)組,并以單一系統(tǒng)的模式進(jìn)行管理
集群的特性:一個(gè)用戶與集群相互作用時(shí),集群就像是一個(gè)獨(dú)立的服務(wù)器
使用集群的目的:①提高性能;②降低成本;③提高可擴(kuò)展性;④增強(qiáng)可靠性
集群的組織方式:①主從結(jié)構(gòu),將備份服務(wù)器連接到主服務(wù)器上,備份服務(wù)器一般不主動(dòng)提供服務(wù)
②多級(jí)結(jié)構(gòu),多個(gè)服務(wù)器組成的集群服務(wù)器,對(duì)外都有一個(gè)統(tǒng)一的地址,每個(gè)集群服務(wù)器上都裝有相同的應(yīng)用程序
常用的命令:
取消開機(jī)啟動(dòng)systemctl disable nginx;
重啟systemctl restart nginx ;
檢查nginx進(jìn)程ps aux | grep nginx;
檢查端口netstat intp | grep 80或netstat intp | grep nginx
負(fù)載均衡的配置搭建
????????
?常見的負(fù)載均衡方案,分為硬件方案和軟件方案;硬件方案采用F5等設(shè)備,但是比較貴。軟件方案采用在四層使用LVS和在七層使用NginX實(shí)現(xiàn)負(fù)載均衡
Nginx僅僅是作為Nginx Proxy反向代理使用的,但我們稱這個(gè)反向代理表現(xiàn)的效果是負(fù)載均衡的效果。所以可以稱之為負(fù)載均衡;真正的負(fù)載均衡是轉(zhuǎn)發(fā)用戶請(qǐng)求的數(shù)據(jù)包,真正負(fù)載均衡是轉(zhuǎn)發(fā)用戶請(qǐng)求的數(shù)據(jù)包,而NginX反向代理是接收用戶的請(qǐng)求然后重新發(fā)起請(qǐng)求去請(qǐng)求其后面的節(jié)點(diǎn)。
三個(gè)虛擬機(jī)都打開nginx服務(wù),并檢查nginx的狀態(tài)
在第三臺(tái)虛擬機(jī)中(NginX服務(wù)器)中需要在/etc/nginx/nginx.conf文件中進(jìn)行配置,在upstream模塊中需要添加模塊配置
upstream www_servers_pool{server 192.168.0.11;#可以設(shè)置weight=10或20來增加訪問節(jié)點(diǎn)的權(quán)重server 192.168.0.12;
}
在server段中配置
server{...location / {proxy_pass http://www_servers_pool;}
}
重啟第三臺(tái)虛擬機(jī)的NginX服務(wù),訪問10.0.0.13測(cè)試,是否能夠把流量分布到節(jié)點(diǎn)1和節(jié)點(diǎn)2中
高可用技術(shù)
高可用方案:Keepalived,Heartbeat
VRRP通過競(jìng)選機(jī)制來將路由的任務(wù)交給某臺(tái)VRRP路由器,工作時(shí)主節(jié)點(diǎn)發(fā)包,備節(jié)點(diǎn)接包。當(dāng)備節(jié)點(diǎn)接收不到主節(jié)點(diǎn)發(fā)送的數(shù)據(jù)包的時(shí)候,就啟動(dòng)接管程序接管主節(jié)點(diǎn)中的資源
Keepalived高可用對(duì)之間通過VRRP進(jìn)行通信,在Keepalived服務(wù)對(duì)之間,只有作為主服務(wù)器的一方會(huì)一直發(fā)送VRRP廣播包。
①打開每臺(tái)虛擬機(jī)的NginX服務(wù)
②開啟第四臺(tái)虛擬機(jī)的NginX服務(wù),配置第四臺(tái)虛擬主機(jī)的/etc/nginx/nginx.conf中的server字段和upstream字段,然后驗(yàn)證訪問10.0.0.14是否能夠?qū)⒘髁糠峙涞焦?jié)點(diǎn)1和節(jié)點(diǎn)2中
③設(shè)置第三個(gè)虛擬機(jī)/etc/keepalived/keepalived.conf,添加郵箱,router_id,優(yōu)先級(jí),以及vrrp的虛擬IP地址
notification_defs {rainsa@163.com···}priority 101router_id lb01vrrp_instance VI_1 {virtual_ipaddress {10.0.0.200/8 dev eth1}}
systemctl start keepalived開啟keepalived服務(wù),驗(yàn)證訪問10.0.0.200時(shí)能否將流量分配至節(jié)點(diǎn)1和節(jié)點(diǎn)2中
④同理在第四個(gè)交換機(jī)中配置keepalived,只需要修改優(yōu)先級(jí)為99,并且state為BACKUP即可
如何驗(yàn)證節(jié)點(diǎn)3和節(jié)點(diǎn)4之間keepalived是否配置成功:在虛擬機(jī)3中關(guān)閉keepalived服務(wù),然后檢查虛擬機(jī)的eth1中是否會(huì)出現(xiàn)10.0.0.200這個(gè)網(wǎng)段,且能負(fù)載分擔(dān);節(jié)點(diǎn)三關(guān)機(jī)后,訪問10.0.0.200仍然能實(shí)現(xiàn)負(fù)載分擔(dān);節(jié)點(diǎn)三重新開機(jī)后又能成為主設(shè)備實(shí)現(xiàn)負(fù)載分擔(dān)
NginX即使失效,Keepalived仍然有效,虛擬IP地址并不會(huì)自動(dòng)遷移。只有當(dāng)Keepalived服務(wù)關(guān)閉后遷移虛擬IP地址。
#!/bin/bash
if [ `netstat -lntp | grep nginx | wc -l` -lt 1 ];
thensystemctl stop keepalived
fi#賦予權(quán)限chmod 777 check_status.sh
#./check_status.sh
但是存在一定的問題,當(dāng)NginX恢復(fù)時(shí),Keepalived并不會(huì)自動(dòng)恢復(fù)。Keepalived可以根據(jù)返回的狀態(tài)修改服務(wù)狀態(tài),例如降低實(shí)例的優(yōu)先級(jí)
#check_nginx.sh#!/bin/bash
if [ `netstat -lntp | grep nginx | wc -l` -lt 1 ];
then exit 2#代表非正常退出
else exit 0
fi
vrrp_script check_nginx { script "/root/bin/check_nginx.sh"interval 2 #執(zhí)行時(shí)間間隔weight -50 #設(shè)置腳本的權(quán)重為-50fall 3 #連續(xù)執(zhí)行失敗的閾值次數(shù)為3,連續(xù)三次執(zhí)行中,執(zhí)行失敗就返回失敗rise 3 #連續(xù)三次執(zhí)行中,執(zhí)行成功就返回成功timeout 2 #超時(shí)內(nèi)沒有得到執(zhí)行結(jié)果就返回執(zhí)行失敗
}vrrp_instance VI_1 {...track_script {check_nginx#跟蹤腳本的執(zhí)行狀態(tài)}
}
?網(wǎng)站動(dòng)靜分離
動(dòng)靜分離的拓?fù)?#xff1a;動(dòng)態(tài)網(wǎng)站+靜態(tài)網(wǎng)站+負(fù)載均衡器,采用NginX實(shí)現(xiàn)
動(dòng)態(tài)網(wǎng)站:配置開發(fā)環(huán)境(Eclipse/IDEA,Gradle/Maven),建立springBoot項(xiàng)目,springBoot項(xiàng)目打包,jar包部署,為網(wǎng)站建立服務(wù),開機(jī)自動(dòng)啟動(dòng)
注意:NginX默認(rèn)的負(fù)載均衡機(jī)制無(wú)法支持動(dòng)態(tài)網(wǎng)站,必須修改請(qǐng)求頭的內(nèi)容才能在動(dòng)態(tài)網(wǎng)站之間進(jìn)行負(fù)載均衡
server{···location / {proxy_pass http://www.servers_pool;proxy_set_header Host $host;proxy_set_header X-Forward-For $remote_addr}}
靜態(tài)網(wǎng)站:Html、css、js文件;靜態(tài)網(wǎng)站與動(dòng)態(tài)網(wǎng)站之間通過Ajax技術(shù)或WebSocket技術(shù)相互通信完成前后端對(duì)接
最后,在NginX處實(shí)現(xiàn)動(dòng)態(tài)網(wǎng)站和靜態(tài)網(wǎng)站的分離,主要依靠配置不同的路徑對(duì)應(yīng)的網(wǎng)址。首先為動(dòng)態(tài)和靜態(tài)部分配置不同的uptream
upstream static_servers_pool {server 192.16.56.14;
}
upstream dynamic_servers_pool {server 192.168.56.11server 192.168.56.12
}
然后為不同的路徑配置不同的upstream:
location /static/ {proxy_passs http://static_servers_pool;
}
location / {proxy_pass http://dynamic_servers_pool;
}
session保持
session問題的出現(xiàn)是由于負(fù)載均衡會(huì)將同一個(gè)用戶的請(qǐng)求往不同的服務(wù)器轉(zhuǎn)發(fā),而服務(wù)器之間無(wú)法共享其他服務(wù)器的session數(shù)據(jù)
主要的解決方案:①服務(wù)器之間共享session②使用session集群③使得同一個(gè)用戶的請(qǐng)求永遠(yuǎn)轉(zhuǎn)發(fā)到同一個(gè)服務(wù)器
ip-hash的原理:根據(jù)用戶請(qǐng)求包中的五元組來判斷是不是同一個(gè)用戶的請(qǐng)求
文件上傳
文件上傳只能上傳到單個(gè)服務(wù)器,不同的用戶將負(fù)載均衡器分配到不同的服務(wù)器節(jié)點(diǎn),則訪問的文件可能完全不同
解決的策略:設(shè)置一個(gè)(或多個(gè))文件共享節(jié)點(diǎn),然后用戶的文件主要上傳到這些共享文件節(jié)點(diǎn),不同的用戶都能從這個(gè)共享文件節(jié)點(diǎn)獲取;常用的技術(shù)是NFS
磁盤陣列
RAID0 | 使用條帶化,適用于不需要容錯(cuò)環(huán)境中的大型文件 |
RAID1 | 使用鏡像,寫入到一個(gè)硬盤的數(shù)據(jù)同時(shí)寫入到另一個(gè)硬盤 |
RAID5 | 在所有硬盤上使用硬盤條帶化和分布式奇偶校驗(yàn) |
RAID6 | 分布式奇偶校驗(yàn)(每個(gè)帶區(qū)有兩個(gè)獨(dú)立奇偶校驗(yàn)塊) |
條帶:將數(shù)據(jù)分割成離散的數(shù)據(jù)塊,并分布到硬盤陣列中的每個(gè)物理硬盤上
RAID0:提供高帶寬,但是不提供任何的冗余,硬盤發(fā)生故障會(huì)導(dǎo)致整個(gè)陣列數(shù)據(jù)丟失
RAID1:能提供雙倍的讀速度,一個(gè)硬件發(fā)生故障其它硬盤的內(nèi)容也能運(yùn)行系統(tǒng),硬盤要求最少2塊硬盤,且必須是偶數(shù);有效容量小,存儲(chǔ)空間利用率低
RAID5:適用于讀取請(qǐng)求率高但是寫入請(qǐng)求率低,需要數(shù)據(jù)冗余的情況。以最低的容量損失提供數(shù)據(jù)冗余,高性能讀取;缺點(diǎn)是不適合大量的寫入工作;最少需要三塊硬盤,允許陣列中的1塊硬盤發(fā)生故障
RAID6:適用于讀取請(qǐng)求率高但寫入率低,且需要較高的數(shù)據(jù)冗余的情況;較高的數(shù)據(jù)冗余和數(shù)據(jù)讀取率;缺點(diǎn)是雙奇偶校驗(yàn)會(huì)導(dǎo)致寫入性能下降,需要損失兩塊硬盤的容量來存放奇偶校驗(yàn)塊
RAID10:最多支持8個(gè)陣列跨接,有較高的讀取性能和數(shù)據(jù)冗余。缺點(diǎn)是有效容量小,且存儲(chǔ)空間利用率較低;每個(gè)RAID1陣列允許1塊硬盤發(fā)生故障
RAID50:最多支持8個(gè)陣列跨接每個(gè)RAID5陣列允許1個(gè)硬盤發(fā)生故障,適用于高可靠性,高速率,高速讀寫的中大型容量環(huán)境;需要浪費(fèi)部分存儲(chǔ)空間做奇偶校驗(yàn)
RAID60:每個(gè)RAID陣列允許2個(gè)硬盤發(fā)生錯(cuò)誤,最多支持8個(gè)硬盤陣列跨接;提供較高的讀取性能和數(shù)據(jù)冗余;不適合大量的寫入工作
第四章
分布式的概念:一組獨(dú)立的計(jì)算機(jī)展現(xiàn)給用戶的是一個(gè)系統(tǒng)來完成一個(gè)統(tǒng)一的工作,但是系統(tǒng)內(nèi)可以動(dòng)態(tài)地分配任務(wù)。分散的物理和邏輯資源通過計(jì)算機(jī)網(wǎng)絡(luò)實(shí)現(xiàn)信息的交換
分布式的特點(diǎn):計(jì)算速度加快,對(duì)等性(沒有主從之分)、并發(fā)性、缺乏全局時(shí)鐘、故障總會(huì)發(fā)生
分布式與集群的區(qū)別:①原理上,集群中每臺(tái)服務(wù)器執(zhí)行的任務(wù)都是一樣的。本質(zhì)上是將幾臺(tái)服務(wù)器集合到一起來實(shí)現(xiàn)同一業(yè)務(wù)。分布式是按照一定的算法將任務(wù)分配給多臺(tái)服務(wù)器,提高的是執(zhí)行任務(wù)的時(shí)間,業(yè)務(wù)被分配到不同的地方
②容錯(cuò)能力上,集群服務(wù)器中如果有故障的服務(wù)器,可以自動(dòng)隔離,問題解決后再自動(dòng)恢復(fù);而分布式服務(wù)器一旦出現(xiàn)問題,任務(wù)就無(wú)法正常執(zhí)行
Reidis的基本操作
Redis不區(qū)分命令大小寫,但是區(qū)分鍵名的大小寫
help @獲取組中的所有命令
help獲取命令幫助
quit退出
獲得符號(hào)規(guī)則的鍵名稱
keys 表達(dá)式 (?,*,[],\?)判斷一個(gè)鍵是否存在
exists key刪除鍵
del key
del key1 key2批量刪除
redis-cli del `redis-cli keys "key*"`
redis-cli keys "key*": 這是在 redis-cli內(nèi)部再次執(zhí)行keys 命令,以匹配所有以 "key" 開頭的鍵。keys` 命令用于獲取匹配指定模式的所有鍵的列表。獲得鍵值的數(shù)據(jù)類型
type key
返回的值可能是string,hash,list,set,zset
使用config set 可以動(dòng)態(tài)地設(shè)置參數(shù)信息,服務(wù)器重啟后就失效了
config set appendonly yes
config set save "90 1 30 10 60 100"
使用config get可以查看所有可以使用config set命令設(shè)置的參數(shù)
config get *
使用config rewrite命令對(duì)啟動(dòng)Redis服務(wù)器時(shí)所指定的redis.conf文件進(jìn)行改寫。該指令對(duì)文件的重寫是原子性的,并且是一致的。如果重寫失敗或出錯(cuò)那么這個(gè)文件就不會(huì)被修改
IP Hash實(shí)現(xiàn)session保持的缺點(diǎn)解決辦法:
①持續(xù)化session到數(shù)據(jù)庫(kù)
②使用Redis共享session
③使用memcache同步session
④通過腳本或守護(hù)進(jìn)程在多臺(tái)服務(wù)器之間同步session
⑤使用NFS共享session
⑥使用cookie共享session
HDFS
兩類節(jié)點(diǎn):①namnode,管理文件系統(tǒng)的命名空間,維護(hù)系統(tǒng)文件樹及整棵樹內(nèi)所有的文件和目錄關(guān)系
②datanode,以數(shù)據(jù)塊的形式存儲(chǔ)具體的數(shù)據(jù)
緩存與一致性哈希
緩存是存儲(chǔ)在計(jì)算機(jī)上的一個(gè)原始數(shù)據(jù)復(fù)制集,介于數(shù)據(jù)訪問者與數(shù)據(jù)源之間的一種高速存儲(chǔ)。當(dāng)數(shù)據(jù)讀取的時(shí)候,直接從高速存儲(chǔ)中獲取,如果可以獲取到結(jié)果就無(wú)需訪問數(shù)據(jù)庫(kù)直接返回緩存的內(nèi)容
如果緩存未命中,就從數(shù)據(jù)庫(kù)中獲取,一方面可以提高數(shù)據(jù)的讀取速度,另一方面還能降低數(shù)據(jù)庫(kù)的性能消耗。沒有緩存阻擋,大量的請(qǐng)求直接落到系統(tǒng)的底層,系統(tǒng)很難撐住高并發(fā)的沖擊
緩存穿透:查詢一個(gè)根本不存在的數(shù)據(jù),大量的緩存穿透直接落到存儲(chǔ)層,后端系統(tǒng)容易被壓垮
緩存雪崩:緩存層由于某些原因不等你提供服務(wù),導(dǎo)致所有的請(qǐng)求直接到達(dá)存儲(chǔ)層
預(yù)防和解決緩存穿透與緩存雪崩的方案:
①取模法,對(duì)鍵值取節(jié)點(diǎn)數(shù)的余。存在一定問題:擴(kuò)展能力差,容錯(cuò)能力不佳
②一致性哈希,首先構(gòu)建一個(gè)哈希環(huán),然后計(jì)算緩存集群中服務(wù)器的IP或主機(jī)名來計(jì)算得到Hash值,計(jì)算得到的Hash值就是服務(wù)節(jié)點(diǎn)在環(huán)上的位置
然后對(duì)每個(gè)需要存儲(chǔ)的數(shù)據(jù)key也同樣計(jì)算一次哈希值,計(jì)算之后的哈希值也映射到環(huán)上,然后沿著環(huán)的順時(shí)針方向?qū)ふ业降谝粋€(gè)服務(wù)器節(jié)點(diǎn),就是存儲(chǔ)節(jié)點(diǎn)
一致性哈希能把節(jié)點(diǎn)宕機(jī)造成的影響控制在順時(shí)針相鄰節(jié)點(diǎn)之間,避免對(duì)整個(gè)集群造成影響
一致性哈希存在的問題:當(dāng)服務(wù)器節(jié)點(diǎn)聚集在一起,容易造成數(shù)據(jù)傾斜問題,給單個(gè)節(jié)點(diǎn)造成很大的壓力。解決辦法是采用虛擬節(jié)點(diǎn),將虛擬節(jié)點(diǎn)分散在哈希環(huán)的各個(gè)部分,打在虛擬節(jié)點(diǎn)上的數(shù)據(jù)實(shí)際也是映射到物理節(jié)點(diǎn)上
虛擬化
虛擬機(jī)遷移:將虛擬機(jī)實(shí)例從原宿主機(jī)遷移到目標(biāo)宿主機(jī)中,并且在目標(biāo)宿主機(jī)上能夠?qū)⑻摂M機(jī)運(yùn)行狀態(tài)恢復(fù)到其在遷移之前相同的狀態(tài),以便繼續(xù)完成應(yīng)用程序的任務(wù)
虛擬機(jī)遷移的分類:①?gòu)脑春湍康慕嵌确?#xff1a;物理機(jī)到虛擬機(jī),虛擬機(jī)到物理機(jī),虛擬機(jī)到虛擬機(jī)
②按照遷移的狀態(tài):虛擬機(jī)停機(jī)遷移(冷遷移)、虛擬機(jī)在線遷移(熱遷移、實(shí)時(shí)遷移)
實(shí)時(shí)遷移的步驟:①預(yù)遷移;②預(yù)定資源;③預(yù)復(fù)制;④停機(jī)復(fù)制;⑤提交啟動(dòng)
虛擬機(jī)和虛擬化容器的區(qū)別
Docker
Docker是一個(gè)開源的應(yīng)用容器引擎,基于GO語(yǔ)言并可以讓開發(fā)者打包他們的應(yīng)用及依賴包到一個(gè)輕量級(jí),可移植的容器中,然后發(fā)行到任何流行的Linux機(jī)器上
Docker包含三個(gè)基本概念:鏡像(相當(dāng)于一個(gè)root文件系統(tǒng))、容器(鏡像運(yùn)行時(shí)的實(shí)體)、倉(cāng)庫(kù)(一個(gè)代碼中心,可以用來保存鏡像)
Docker使用客戶-服務(wù)器(C/S)的架構(gòu)模式,使用遠(yuǎn)程API來管理和創(chuàng)建Docker容器
常見命令:
在容器內(nèi)運(yùn)行應(yīng)用程序
docker run ubuntu:15.10 /bin/echo "Hello world"-t指定一個(gè)偽終端,-i允許對(duì)容器內(nèi)的輸入進(jìn)行交互
docker run -i -t ubuntu:15.10 /bin/bash以進(jìn)程的方式運(yùn)行容器
docker run -d ubuntu:15.10 /bin/sh -c "命令"查看運(yùn)行中的容器
docker ps查看容器內(nèi)的標(biāo)準(zhǔn)輸出
docker logs [容器ID或容器名]停止容器
docker stop [容器ID或容器名]從遠(yuǎn)程倉(cāng)庫(kù)載入ubuntu鏡像
docker pull ubuntu進(jìn)入交互模式
docker attach:退出會(huì)導(dǎo)致容器停止
docker exec:退出容器終端并不會(huì)導(dǎo)致容器停止刪除容器
docker rm -f [容器ID或容器名]
docker rmi [ID或鏡像名]查看網(wǎng)絡(luò)端口
docker ps
docker port [容器ID] 將內(nèi)部的TCP端口映射到外部端口 5000 tcp -> 0.0.0.0:5000查看容器內(nèi)部運(yùn)行的進(jìn)行
docker top列出本地主機(jī)上的鏡像
docker images搜索鏡像
docker search httpd提交容器副本
docker commit -m="has update" -a="鏡像作者" [容器ID] [創(chuàng)建的目標(biāo)鏡像名]鏡像標(biāo)簽
docker tag [鏡像ID] [用戶名字] [鏡像源名稱] [新的標(biāo)簽名]端口映射,讓外部也能訪問這些應(yīng)用
docker run -d -p 5000:5000 training/webapp python app.py //先是主機(jī)端口,再是容器端口
-p是容器內(nèi)部端口綁定到指定的主機(jī)端口
-P是內(nèi)部端口隨機(jī)映射到主機(jī)的高端口
OpenStack
OpenStack的核心服務(wù)(組件):①計(jì)算服務(wù)Nova;②存儲(chǔ)服務(wù)Swift;③鏡像服務(wù)Glance;
其余主要服務(wù)(組件):④身份認(rèn)證服務(wù)keystone;⑤網(wǎng)絡(luò)管理服務(wù)Quantum;⑥存儲(chǔ)管理服務(wù)Cinder;⑦儀表盤Horizon
計(jì)算服務(wù):Nova
是OpenStack云中的計(jì)算組織控制器,處理OpenStack云中實(shí)例生命周期內(nèi)的所有活動(dòng),不具備虛擬化能力
組件:API Server:向外提供與云基礎(chǔ)設(shè)施交互的接口
Message Queue:OpenStack節(jié)點(diǎn)之間通過消息隊(duì)列完成通信
computer worker:管理實(shí)例生命周期
Network Controller:處理主機(jī)的網(wǎng)絡(luò)配置
Volume Workers:管理基于LVM的實(shí)例卷
Scheduler:調(diào)度器作為一個(gè)守護(hù)進(jìn)程運(yùn)行,并通過恰當(dāng)?shù)恼{(diào)度算法從資源池獲得計(jì)算服務(wù)
LibVirt的主要支持功能:
①虛擬機(jī)管理
②遠(yuǎn)程機(jī)器支持
③存儲(chǔ)管理
④網(wǎng)絡(luò)接口管理
⑤虛擬NAT和基于路由的網(wǎng)絡(luò)
OpenStack的版本
采用順序命名法,用完了再回來重新命名
第五章
數(shù)據(jù)中心網(wǎng)絡(luò)與傳統(tǒng)Internet網(wǎng)絡(luò)的區(qū)別:高設(shè)備利用率,采用虛擬化技術(shù)進(jìn)行系統(tǒng)和數(shù)據(jù)中心整合,優(yōu)化資源利用率,簡(jiǎn)化管理
綠色節(jié)能,通過先進(jìn)的供電和散熱技術(shù),降低數(shù)據(jù)中心的能耗
高可用性,提供大量同質(zhì)化設(shè)備和替代恢復(fù)機(jī)制,確保資源的可用性和數(shù)據(jù)的持久性
自動(dòng)化管理
FatTree
相對(duì)于傳統(tǒng)層次結(jié)構(gòu)而言,FatTree的特點(diǎn):①消除了樹形結(jié)構(gòu)上層鏈路對(duì)吞吐量的限制,所有交換機(jī)配置均相同;②為內(nèi)部節(jié)點(diǎn)間通信提供多條并行鏈路;③橫向擴(kuò)展的嘗試降低了構(gòu)建數(shù)據(jù)中心網(wǎng)絡(luò)的成本;④與現(xiàn)有數(shù)據(jù)中心網(wǎng)絡(luò)使用的以太網(wǎng)結(jié)構(gòu)和IP配置的服務(wù)器兼容
FatTree的計(jì)算
核心層交換機(jī)有k個(gè)出口,能夠建立k個(gè)Pod嗎,每個(gè)pod有k個(gè)交換機(jī)。接入層與匯聚層有一半的端口是完全關(guān)聯(lián)的。
匯聚層交換機(jī)數(shù)目=接入層交換機(jī)數(shù) = (k/2)* k
核心層交換機(jī)數(shù)目 = (k/2) * (k/2) 因?yàn)橐粋€(gè)pod中一個(gè)匯聚層交換機(jī)向上有k/2個(gè)接口
主機(jī)數(shù) = (k/2) * (k/2) * k
從終端到接入層的網(wǎng)絡(luò)容量 = (k/2) * (k/2) * k
接入層到匯聚層的網(wǎng)絡(luò)流量 = (k/2) * k * (k/2)
匯聚層到核心層的網(wǎng)絡(luò)流量 = (k/2)*k*(k/2)
改進(jìn)型樹結(jié)構(gòu):采用VL2架構(gòu),將流量統(tǒng)一地分配到網(wǎng)絡(luò)路徑
遞歸層次數(shù)據(jù)中心:構(gòu)建高層次網(wǎng)絡(luò)時(shí),需要的低層網(wǎng)絡(luò)的個(gè)數(shù)等于每個(gè)低層網(wǎng)絡(luò)中的服務(wù)器個(gè)數(shù)加1
光交換數(shù)據(jù)中心
無(wú)線數(shù)據(jù)中心