集羣| 負載均衡| 高併發——————
LVS
LVS是Linux Virtual Server的簡寫,意即Linux虛擬服務器,是一個虛擬的服務器集羣系統。
HAProxy
提供高可用性、負載均衡以及基於TCP和HTTP應用的代理,支持虛擬主機,它是免費、快速並且可靠的一種解決方案。HAProxy特別適用於那些負載特大的web站點,這些站點通常又需要會話保持或七層處理。HAProxy運行在當前的硬件上,完全可以支持數以萬計的併發連接。並且它的運行模式使得它可以很簡單安全的整合進您當前的架構中, 同時可以保護你的web服務器不被暴露到網絡上。
HAProxy可以作爲MySQL、郵件或其它的非web的負載均衡,我們常用於它作爲MySQL(讀)負載均衡;
Keepalived
http://www.cnblogs.com/dkblog/archive/2011/07/06/2098949.html(可細緻地參考)
1.1 可提供vrrp以及health-check功能,可以只用它提供雙機浮動的vip(vrrp虛擬路由功能),這樣可以簡單實現一個雙機熱備高可用功能。
keepalived是一個類似於layer3, 4 & 5交換機制的軟件,也就是我們平時說的第3層、第4層和第5層交換。Keepalived的作用是檢測web 服務器的狀態。 Layer3,4&5工作在IP/TCP協議棧的IP層,TCP層,及應用層,原理分別如下:
Layer3:Keepalived使用Layer3的方式工作式時,Keepalived會定期向服務器羣中的服務器發送一個ICMP的數據包(既我們平時用的Ping程序),如果發現某臺服務的IP地址沒有激活,Keepalived便報告這臺服務器失效,並將它從服務器羣中剔除,這種情況的典型例子是某臺服務器被非法關機。Layer3的方式是以服務器的IP地址是否有效作爲服務器工作正常與否的標準。在本文中將採用這種方式。
Layer4:如果您理解了Layer3的方式,Layer4就容易了。Layer4主要以TCP端口的狀態來決定服務器工作正常與否。如web server的服務端口一般是80,如果Keepalived檢測到80端口沒有啓動,則Keepalived將把這臺服務器從服務器羣中剔除。
Layer5:Layer5就是工作在具體的應用層了,比Layer3,Layer4要複雜一點,在網絡上佔用的帶寬也要大一些。Keepalived將根據用戶的設定檢查服務器程序的運行是否正常,如果與用戶的設定不相符,則Keepalived將把服務器從服務器羣中剔除。
vip即虛擬ip,是附在主機網卡上的,即對主機網卡進行虛擬,此IP仍然是佔用了此網段的某個IP。
隨着你的網站業務量的增長你網站的服務器壓力越來越大?需要負載均衡方案!商業的硬件如F5又太貴,你們又是創業型互聯公司如何有效節約成本,節省不必要的浪費?同時實現商業硬件一樣的高性能高可用的功能?有什麼好的負載均衡可伸張可擴展的方案嗎?答案是肯定的!有!我們利用 LVS+Keepalived基於完整開源軟件的架構可以爲你提供一個負載均衡及高可用的服務器。
1.2 LVS+Keepalived 介紹
LVS是Linux Virtual Server的簡寫,意即Linux虛擬服務器,是一個虛擬的服務器集羣系統。本項目在1998年5月由章文嵩博士成立,是中國國內最早出現的自由軟件項目之一.目前有三種IP負載均衡技術(VS/NAT、VS/TUN和VS/DR)八種調度算法(rr,wrr,lc,wlc,lblc,lblcr,dh,sh)。
Keepalived在這裏主要用作RealServer的健康狀態檢查以及LoadBalance主機和BackUP主機之間failover的實現。keepalived簡介 keepalived是一個類似於layer3, 4 & 5交換機制的軟件,也就是我們平時說的第3層、第4層和第5層交換。Keepalived的作用是檢測web服務器的狀態,如果有一臺web服務器死機,或工作出現故障,Keepalived將檢測到,並將有故障的web服務器從系統中剔除,當web服務器工作正常後Keepalived自動將web服務器加入到服務器羣中,這些工作全部自動完成,不需要人工干涉,需要人工做的只是修復故障的web服務器。
自動化管理工具——————
Ansible
是新出現的自動化運維工具,基於Python開發,集合了衆多運維工具(puppet、cfengine、chef、func、fabric)的優點,實現了批量系統配置、批量程序部署、批量運行命令等功能。
ansible是基於模塊工作的,本身沒有批量部署的能力。真正具有批量部署的是ansible所運行的模塊,ansible只是提供一種框架。主要包括:
(1)、連接插件connection plugins:負責和被監控端實現通信;
(2)、host inventory:指定操作的主機,是一個配置文件裏面定義監控的主機;
(3)、各種模塊核心模塊、command模塊、自定義模塊;
(4)、藉助於插件完成記錄日誌郵件等功能;
(5)、playbook:劇本執行多個任務時,非必需可以讓節點一次性運行多個任務。
Saltstack
是一個具備puppet 與func 功能爲一身的集中化管理平臺,saltstack 基於python實現,功能十分強大,各模塊融合度及複用性極高,官方極力推薦作爲雲計算平臺的基礎架構。
PXE+Kickstart無人值守安裝操作系統
Kickstart+HTTP+DHCP+TFTP全自動批量安裝部署Linux系統
http://www.osyunwei.com/archives/7577.html(實踐可參考)
http://www.cnblogs.com/mchina/p/centos-pxe-kickstart-auto-install-os.html(可詳參)
PXE,Pre-boot Execution Environment,預啓動執行環境)是由Intel公司開發的最新技術,工作於Client/Server的網絡模式,支持工作站通過網絡從遠端服務器下載映像,並由此支持通過網絡啓動操作系統,在啓動過程中,終端要求服務器分配IP地址,再用TFTP(trivial file transfer protocol)或MTFTP(multicast trivial file transfer protocol)協議下載一個啓動軟件包到本機內存中執行,由這個啓動軟件包完成終端基本軟件設置,從而引導預先安裝在服務器中的終端操作系統。
嚴格來說,PXE 並不是一種安裝方式,而是一種引導方式。進行 PXE 安裝的必要條件是在要安裝的計算機中必須包含一個 PXE 支持的網卡(NIC),即網卡中必須要有 PXE Client。PXE 協議可以使計算機通過網絡啓動。此協議分爲 Client端和 Server 端,而PXE Client則在網卡的 ROM 中。當計算機引導時,BIOS 把 PXE Client 調入內存中執行,然後由 PXE Client 將放置在遠端的文件通過網絡下載到本地運行。運行 PXE 協議需要設置 DHCP 服務器和 TFTP 服務器。DHCP 服務器會給 PXE Client(將要安裝系統的主機)分配一個 IP 地址,由於是給 PXE Client 分配 IP 地址,所以在配置 DHCP 服務器時需要增加相應的 PXE 設置。此外,在 PXE Client 的 ROM 中,已經存在了 TFTP Client,那麼它就可以通過 TFTP 協議到 TFTP Server 上下載所需的文件了。
Kickstart,是一種無人值守的安裝方式。它的工作原理是在安裝過程中記錄典型的需要人工干預填寫的各種參數,並生成一個名爲ks.cfg的文件。如果在安裝過程中(不只侷限於生成Kickstart安裝文件的機器)出現要填寫參數的情況,安裝程序首先會去查找Kickstart生成的文件,如果找到合適的參數,就採用所找到的參數;如果沒有找到合適的參數,便需要安裝者手工干預了。所以,如果Kickstart文件涵蓋了安裝過程中可能出現的所有需要填寫的參數,那麼安裝者完全可以只告訴安裝程序從何處取ks.cfg文件,然後就去忙自己的事情。等安裝完畢,安裝程序會根據ks.cfg中的設置重啓系統,並結束安裝。
虛擬化技術——————
KVM
Kernel-based Virtual Machine的簡稱,是一個開源的系統虛擬化模塊
(1) Kernel-based Virtual Machine的簡稱,是一個開源的系統虛擬化模塊,自Linux 2.6.20之後集成在Linux的各個主要發行版本中。它使用Linux自身的調度器進行管理,所以相對於Xen,其核心源碼很少。KVM目前已成爲學術界的主流VMM之一。
KVM的虛擬化需要硬件支持(如Intel VT技術或者AMD V技術)。是基於硬件的完全虛擬化。而Xen早期則是基於軟件模擬的Para-Virtualization,新版本則是基於硬件支持的完全虛擬化。但Xen本身有自己的進程調度器,存儲管理模塊等,所以代碼較爲龐大。廣爲流傳的商業系統虛擬化軟件VMware ESX系列是基於軟件模擬的Full-Virtualization。
在x86服務器虛擬化方法上主要有三種技術:Para-Virtualization, Full-Virtualization和Hardware-Assisted-Virtualization。
(1.1)完全以軟件模擬硬件的形式雖然功能強大,但是性能難以滿足用戶的需要。模擬出的硬件的性能和物理硬件的性能相比,必然會大打折扣。爲了提高虛擬機軟件的性能,開發者們各顯神通。其中,最常用的辦法就是在主操作系統中通過內核模塊開一個洞,通過這個洞將虛擬機中的操作直接映射到物理硬件上,從而提高虛擬機中運行的操作系統的性能。
其中KVM就是這種加速模式的典型代表。在社區中,大家常把KVM和Xen相提並論,但是它們其實完全不一樣。從上圖可以看出,使用內核模塊加速這種模式,主操作系統仍然占主導地位,內核模塊只是在主操作系統中開一個洞,用來連接虛擬機和物理硬件,給虛擬機加速,但是虛擬機中的客戶操作系統仍然受到很大的限制。這種模式比較適合桌面用戶使用,主操作系統仍然是他們的主戰場,不管是辦公還是打遊戲,都通過主操作系統完成,客戶操作系統只是按需使用。至於Xen,則完全使用不同的理念,比較適合企業級用戶使用,桌面用戶就不要輕易去碰了,具體內容下一篇我再講。
其實VirtualBox也是採取的這種內核模塊加速的模式。我之所以這麼說,是因爲在安裝VirtualBox時,它會要求安裝DKMS。
http://blog.chinaunix.net/uid-12306154-id-2239335.html
(2) KVM是一個全虛擬化的解決方案。可以在x86架構的計算機上實現虛擬化功能。但KVM需要CPU中虛擬化功能的支持,只可在具有虛擬化支持的CPU上運行,即具有VT功能的Intel CPU和具有AMD-V功能的AMD CPU。
Xen與KVM的比較
Xen是Linux下的一個虛擬化解決方案,但由於被Citrix收購後,變成了和紅帽企業版一樣了,賣服務收取費用,Redhat從rhel6.0開始已經從內核中把XEN踢出去了,全心投入開發免費的KVM,雖然市場上老用戶還在用Xen,但相信kvm會逐步佔領大面積的市場,必竟有redhat做爲強大支持源。
Xen的實現方法是運行支持Xen功能的kernel,這個kernel是工作在Xen的控制之下,叫做Domain0,使用這個kernel啓動機器後,你可以在這個機器上使用qemu軟件,虛擬出多個系統。Xen的缺點是如果你需要更新Xen的版本,你需要重新編譯整個內核,而且,稍有設置不慎,系統就無法啓動。
相比較,KVM就簡化的多了。它不需要重新編譯內核,也不需要對當前kernel做任何修改,它只是幾個可以動態加載的.ko模塊。它結構更加精簡、代碼量更小。所以,出錯的可能性更小。並且在某些方面,性能比Xen更勝一籌。
http://hazt1011.blog.51cto.com/1072107/1102327/
(3) Para-Virtualization(Citrix的Xen和Microsoft的Hyper-V爲典型代表)直譯成中文是“在旁邊的虛擬化”:形象地說就是在虛擬化軟體hypervisor上面跑着的諸多客戶虛擬機(下稱guest VMs或guest OSes,客戶作業系統),在它們“旁邊”還跑着一個特別OS,叫做“管理OS”或“管理VM”(the Administrative OS/VM,用Citrix Xen的術語叫做Dom0,用Microsoft Hyper-V的術語:the Parent Partition)。 這個“管理VM”是讓系統管理員用來管理hypervisor的。 客戶所使用的是那些在它旁邊跑的guest VMs(Citrix Xen叫做DomU,Microsoft Hyper-V叫做Child Partitions)。 另外這個“管理OS”還採用native OS的方法管理整個硬體平臺上的所有輸入輸出設備驅動器(IO device drivers),它裏面包含了平臺上所有輸入輸出設備驅動器。 也就是說Para-Virtualization方法在hypervisor裏不對設備驅動器做虛擬(emulation),而僅對CPU和內存做虛擬,所以Para-Virtualization又被翻譯作“半虛擬化”。 Para-Virtualization還有一個叫法:OS-Assisted-Virtualization,就是因爲guest VMs需要“管理OS”協助。 這可以形象地看作是guest OS自身不帶有設備驅動器而“向旁尋找”幫助。 另外guest OS還會發出一小部分由於硬體不支援而無法被虛擬化的OS指令。 在虛擬化理論中,這種不能被虛擬化的guest OS指令屬於“低特權態部件發出的敏感指令”:處於低特權態(用戶態)的guest OS如果對硬體發出這樣的指令,則處於高特權態(內核態)的hypervisor必須先對這些指令進行檢查作“無害化”處理後方能交給硬體機器做計算或處理服務。 由於以前x86硬體設計上存在缺陷,這一類指令不能自動被hypervisor截獲(trap)。 對於這些不能自動被hypervisor截獲的指令,Para-Virtualization技術採用了在guest OS中人爲植入hypercalls的方法使程式流程主動進入hypervisor以獲得“無害化”處理。 由於需要在guest OS中植入這些hypercalls, 所以Para-Virtualization技術需要對guest OS內核作修改後方能使用於VM內。 這一點被認爲是Para-Virtualization技術的一個缺點:比如對於非開放源代碼OS(如Windows 2000/XP)那就只有OS廠商才能製做guest OS。
Full-Virtualization(VMware的ESX)全虛擬化:對於前面提到的guest OS作爲“低特權態部件發出的敏感指令”,VMware找到了一個“可執行代碼翻譯”(binary translation)方法將這些指令的可執行代碼轉變爲一系列新的指令順序,翻譯得到的新指令順序不僅與原指令具有等價的語義,而且可以得到硬體虛擬化支援。 這樣一來就無需再人爲在guest OS中植入hypercalls了,所以未經修改的guest OS內核可以直接跑在VM裏面。 而且guest OS更本無法分辨出自己到底是直接跑在機器硬體上還是在一個虛擬硬體的hypervisor上。 作爲一個全虛擬化的hypervisor,ESX將硬體平臺上的所有的輸入輸出設備也都虛擬化了,所以ESX裏面含有所有這些設備驅動器,guest OS無須從一個“管理OS”來獲得設備驅動器服務。 ESX仍然有“管理OS”,叫做the Management Console,其作用是讓系統管理員管理ESX hypervisor,僅此而已。
Hardware-Assisted-Virtualization硬體協助的虛擬化:Intel VT-x與AMD-V。 這兩家x86處理器廠商最近對處理器硬體作了修改,使前面提到的guest OS“低特權態部件發出的敏感指令”能夠自動被hypervisor截獲。 所以在這種新機器上,Para-Virtualization就沒有必要再對guest OS內核作修改,Full-Virtualization也無必要對guest OS做可執行代碼翻譯。 所以我們也可以說,如果不考慮Para-Virtualization與Full-Virtualization在IO設備處理上還有不同之處,那麼硬體協助的虛擬化技術已經取消了前兩種虛擬化技術之間的差別:兩者都可以被看作是全虛擬化技術。
Intel和AMD在對X86伺服器硬體協助的虛擬化技術上還做了如下重要工作:統一管理了平臺上輸入輸出設備對內存的直接訪問(Direct Memory Access, DMA)。 這改變了以前機器上輸入輸出設備可以自由任意對內存進行直接訪問,這種“無政府主義”的危險狀態(非常危險!)。 用硬體協助的虛擬化技術對DMA作統一管理,這對於x86平臺伺服器虛擬化技術運用到雲計算加強雲計算安全方面有很重要的意義。 前面我們提到硬體協助的虛擬化技術取消了Para-Virtualization與Full-Virtualization之間的差別,這樣的說法沒有考慮到兩者在IO設備管理上的不同之處。 其實正是在對IO設備DMA的統一管理方面,Citrix Xen或MS Hyper-V與VMware ESX有很不同的性質,在系統服務安全上有明顯的差異。
OTHERS——————
Docker
https://www.zhihu.com/question/22969309(知乎)
http://www.docker.org.cn/book/docker/what-is-docker-16.html
Docker是一個開源的引擎,可以輕鬆的爲任何應用創建一個輕量級的、可移植的、自給自足的容器。開發者在筆記本上編譯測試通過的容器可以批量地在生產環境中部署,包括VMs(虛擬機)、bare metal、OpenStack 集羣和其他的基礎應用平臺。
Docker通常用於如下場景:
•web應用的自動化打包和發佈;
•自動化測試和持續集成、發佈;
•在服務型環境中部署和調整數據庫或其他的後臺應用;
•從頭編譯或者擴展現有的OpenShift或Cloud Foundry平臺來搭建自己的PaaS環境。
github
https://www.zhihu.com/question/20070065
說白了就是一個公網在線「版本控制工具」
Redis
是一個key-value存儲系統。和Memcached類似,它支持存儲的value類型相對更多,包括string(字符串)、list(鏈表)、set(集合)、zset(sorted set --有序集合)和hash(哈希類型)。這些數據類型都支持push/pop、add/remove及取交集並集和差集及更豐富的操作,而且這些操作都是原子性的。在此基礎上,redis支持各種不同方式的排序。與memcached一樣,爲了保證效率,數據都是緩存在內存中。區別的是redis會週期性的把更新的數據寫入磁盤或者把修改操作寫入追加的記錄文件,並且在此基礎上實現了master-slave(主從)同步。
Redis 是一個高性能的key-value數據庫。 redis的出現,很大程度補償了memcached這類key/value存儲的不足,在部 分場合可以對關係數據庫起到很好的補充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客戶端,使用很方便。
AWS
Amazon Web Services - Cloud Computing Services,Amazon Web Services offers reliable, scalable, and inexpensive cloud computing services.
AWK
是一個優良的文本處理工具,Linux及Unix環境中現有的功能最強大的數據處理引擎之一。
Hadoop
是一個能夠對大量數據進行分佈式處理的軟件框架。 Hadoop 以一種可靠、高效、可伸縮的方式進行數據處理。