---------------------------------------Linux 下的Cluster 實現---------------------------------------------------------html
*Cluster( 集羣) 是指由一批具有相同或相似功能的物品組成的,提供更大、更強、更穩定功能的這樣一種組合;node
集羣一般能夠定義爲兩臺或兩臺以上相互獨立的計算機,對外表現爲一個總體系統;就是一組計算機在一塊兒合做爲用戶提供一組網絡資源,而集羣組中c++
的單一的計算機就被稱爲「節點(node)」web
集羣分類能夠分爲:數據庫
●(1)High Available Cluster(高可用性集羣)編程
●(2)High Performance Cluster(高性能集羣)vim
●(3)Load Balancing CLuster(負載均衡集羣)瀏覽器
計算機系統的可用性(availability)是經過系統的可靠性(reliability)和可維護性(maintainability)來度量的;工程中一般用平均無端障時間安全
(MTTF)來度量系統的可靠性而平均維修時間(MTTR)來度量系統的可維護性;bash
HA 集羣的主要目的是爲了用戶提供不間斷的服務;當使用了HA 集羣時若是由其中一個node出現了問題,自動會有集羣中其餘節點接替問題節點對外
提供服務;
高性能集羣
●實現高性能集羣主要目的是將多臺計算機的計算能力合併到一塊兒從而實現一個超越單臺計算機計算能力的強力系統;
●在Linux 平臺中實現高性能集羣的軟件是:Beowulf 及MPI
負載均衡(LB)
●LB 與HA 或高性能有些相似也有必定的區別。
●負載均衡不只僅考慮的內容與高可用同樣,同時也須要爲用戶提供不間斷的服務,但LB 還要保證服務的質量;
在Linux 中要實現LB 集羣可採用LVS 、MOSIX等軟件
-----------------------------------------------------------Linux 中實現HPC 集羣技術-----------------------------------------------
傳統計算方式---- 串行計算
是指在單個計算機( 擁有單箇中央中立單元) 上執行軟件寫操做。CPU 逐個使用一系列指令解決問題;
並行計算(Parallel Computing)
指同時使用多種計算機資源解決計算問題的過程
並行計算的主要目的:用於解決大型且複雜的計算問題
並行計算還能夠利用非本地資源,可使用多臺計算機集合在一塊兒共同處理、計算機來取代昂貴的大型計算機或大型服務器
並行計算表明— Messages Passing Interface
它僅僅是一個規格很嚴密的通信標準,其主要功能是在處理並行運算之間節點的資料交換;或者說MPI 屬於並行計算語言的函數庫
MPI 的主要三個方面
(1)MPI 做爲一個庫存在,而非一種軟件或開發語言
(2)MPI 是一種規範或標準的表明,全部的並行計算機制造商均可提供對MPI 的支持
(3)MPI 是一種消息傳遞編程模型,併成爲消息傳遞編程模型的表明
高性能集羣
實現高性能集羣主要目的是將多臺計算機的計算能力合併到一塊兒, 使用並行計算軟件(MPICH)實現並行計算從而實現一個超越單臺計算機計算能力的強
力系統;
實際上MPICH 就是符合MPI 標準通信協議的一套軟件
↑圖中信息與試驗不符需修改
試驗環境:
ck01.yht.com 192.168.131.147 hpcserver(服務器)
ck01.yht.com 192.168.131.142 node1(節點1)
ck03.yht.com 192.168.131.143 node2(節點2)
(1)便於MPICH 配置或調試,對名稱節點名稱進行定義→三臺機器都要編寫
#vim /etc/hosts
ck01.yht.com 192.168.131.147 hpcserver
ck01.yht.com 192.168.131.142 node1
ck03.yht.com 192.168.131.143 node2
(2)定義MPICH安全通訊,用於控制其餘節點或與其餘節點交互信息時確保安全→在服務器操做
#cd ~
#ssh-keygen -t rsa
// 一路回車,以不使用口令方式鏈接才能完成MPICH
#ssh-copy-id node1
#ssh-copy-id node2
測試ssh ,確認不須要口令就可成功連入
#ssh node1
#ssh node2
(4)在每一個節點上安裝編譯MPICH 所須要的工具
#yum install gcc gcc-gfortran gcc-c++
(5)在每一個節點上解壓軟件包
#tar xvfz mpich-3.2.tar.gz
(6)在每一個節點上進入MPICH 目錄
#cd mpich
(7)在每一個節點上編譯並安裝mipch
#./configure
#make
#make install
(8)在每一個節點上建立HPC所須的主機
#vim ~/hpcnode
hpcserver
node1
node2
(9)在hpcsrv 端進行測試MPICH
# mpiexec -n 6 -machinefile ~/hpcnode ~/mpich-3.2/examples/cpi
-n: 處理6 次
-machinefile: 指定節點文件
---------------------------------------------------實現Linux 下的 HA----------------------------------------------------------
*雙機技術的實現不須要特定的硬件環境或者是操做系統Kernel的特定支持,所以僅須要雙機/集羣軟件就能夠實現;
*雙機軟件經過專用的信號傳輸通道,可讓兩臺服務器相互檢測對方的狀態,經過檢測可得知對方如何,如對方出現問題可在第一時間做出反應;
HA 容錯運做過程
Auto-Detect(自動檢測)
經過兩臺主機所鏈接的線纜,通過負載的監聽程序進行相互檢測;其檢測的內容有許多:
(1) 主機硬件
(2) 主機網絡
(3) 主機操做系統
(4) 數據庫引擎及其餘應用程序
(5) 主機與磁盤整列鏈接線纜等
Auto-Switch( 自動切換)
Auto-Recover( 自動恢復)
HA 的工做方式分爲三種
(1) 主從方式
(2) 雙機雙工方式
(3) 集羣工做方式
LHA 的目的就是提供一整套基於Linux 的高可用性集羣,其目標爲(RAS) 即:
Reliability( 可靠性)
Availability( 可用性)
Serviceablity( 可服務性)
Keepalived,保持存活,在網絡裏面就是保持在線,所謂的高可用或熱備,用來防止單點故障,keepalived 實現基礎是VRRP 協議;
Keepalived 原理
keepalived 也是模塊化設計,不一樣模塊負責不一樣的功能;
keepalived 的組件:core check vrrp libipfwc libipvs-2.4 libipvs-2.6
core :是keepalived 的核心,複雜主進程的啓動和維護,全局配置文件的加載解析等
check :負責healthchecker( 健康檢查) ,包括了各類健康檢查方式,以及對應的配置的解析包括LVS 的配置解析
VRRP協議,就是網絡在設計的時候必須考慮到冗餘容災,包括線路冗餘,設備冗餘等,防止網絡存在單點故障;
vrrp : VRRPD 子進程, VRRPD 子進程就是來實現VRRP 協議的
libipfwc :iptables(ipchains)庫,配置LVS 會用到
libipvs* :配置LVS 會用到
注意,keepalived和LVS徹底是兩碼事,只使它們相互配合;
keepalived 啓動後會有三個進程:
父進程:內存管理,子進程管理等等
子進程:VRRP子進程
子進程:healthchecker 子進程
healthchecker子進程檢查到MASTER上服務不可用了,就會通知本機上的兄弟VRRP子進程,讓他刪除通告,而且去掉虛擬IP,轉換爲BACKUP狀態;
↑圖中信息與試驗不符需修改
目的:http 提供HA( 高可用性)
試驗環境:
server1 192.168.131.147 ck01.yht.com
server2 192.168.131.142 ck02.yht.com
client 192.168.131.143 ck03.yht.com
VIP:192.168.131.252→虛擬IP
ck01.yht.com 192.168.131.147 hpcserver→hosts文件沒變
ck01.yht.com 192.168.131.142 node1
ck03.yht.com 192.168.131.143 node2
獲取keepalived
在安裝以前請確保系統已經安裝了Python 程序
Debian/Ubuntu-→不一樣系統、版本安裝不一樣
#apt-get install keepalived
RedHat/CentOS
#yun install keepalived
實驗基礎要求
(1) 配置各自設備的IP 地址
服務器端配置完成httpd 服務
(2) S1 的index.html 內容爲」 This is web1 server」
S2 的index.html 內容爲」 This is web2 server」
(3) 客戶端能夠成功訪問S1與S2的http 服務並可以顯示相關的信息
配置keepalived
ck01.yht.com 上配置keepalived
#cd /etc/keepalived
#cp keepalived.conf keepalived.conf.bak
#vim keepalived.conf
!Configuration File for keepalived
global_defs { <- 定義全局配置
notification_email {
root@localhost //* 指定接收通知的郵箱
}
notification_email_from root@localhost //* 設置發送的源地址爲誰
smtp_server 127.0.0.1 //* 表示發送email 時使用的smtp服務器地址,可用本地的sendmail來實現
smtp_connect_timeout 30 //* 指定smtp連接超時時間
router_id ck01.yht.com //* 表示設備名稱
} <- 結束全局配置
vrrp_instance VI_1 {
state MASTER //* 設定本機爲MASTER( 主)
interface eno16777736 //* 指定實例所須要綁定的網卡,以便於VIP使用
virtual_router_id 51 //* 設定VRID,相同的VRID爲一個組,同組的VRID將決定多播的MAC地址→兩臺服務器所設組要一致
priority 100 //* 設定優先級,數字越高越優先
advert_int 1 //* 設定心跳廣播間隔(秒)
authentication { //* 認證方式爲密碼認證→兩臺服務器所設密碼要一致
auth_type PASS
auth_pass 1234
}
virtual_ipaddress { //* 設定VIP
192.168.131.252
}
}
客戶端測試:#links 192.168.131.252
ck02.yht.com 配置keepalived
ck02.yht.com 上配置keepalived
#cd /etc/keepalived
#cp keepalived.conf keepalived.conf.bak
#vim keepalived.conf
!Configuration File for keepalived
global_defs { <- 定義全局配置
notification_email {
root@localhost //* 指定接收通知的郵箱
}
notification_email_from root@localhost //* 設置發送的源地址爲誰
smtp_server 127.0.0.1 //* 表示發送email 時使用的smtp服務器地址,可用本地的sendmail來實現
smtp_connect_timeout 1 //* 指定smtp連接超時時間
router_id ck02.yht.com //* 表示設備名稱
} <- 結束全局配置
vrrp_instance VI_1 {
state BACKUP //* 設定本機爲MASTER( 主)
interface eno16777736 //* 指定實例所須要綁定的網卡,以便於VIP使用
virtual_router_id 51 //* 設定VRID,相同的VRID爲一個組,同組的VRID將決定多播的MAC地址→兩臺服務器所設組要一致
priority 50 //* 設定優先級,數字越高越優先
advert_int 1 //* 設定心跳廣播間隔(秒)
authentication { //* 認證方式爲密碼認證→兩臺服務器所設密碼要一致
auth_type PASS
auth_pass 1234
}
virtual_ipaddress { //* 設定VIP
192.168.131.252
}
}
啓動keepalived 服務(web1 與web2)
#systemctl enabled keepalived
#systemctl start keepalived
查看VIP 已經做用在web1.niliu.edu 上(web1 與web2)
#tail -f /var/log/messages
客戶端測試
客戶端用瀏覽器訪問VIP, 可看到ck01上的內容;中止ck01的keepalived,能夠看到ck02的內容;再將ck01啓動將看到ck01內容;
------------------------------------------實現Linux 下的 HA LVS+Keepalived-----------------------------------
圖片信息具體依照下面爲準
實驗環境
lk1:192.168.131.143 ck03.yht.com web1:192.168.131.147 ck01.yht.com
lk2:192.168.131.144 ck04.yht.com web2:192.168.131.142 ck02.yht.com
1.各自配置完成IP ,且能夠通訊
在WEB服務器上操做
安裝web1/web2 的httpd 服務器
定義web1/web2 的httpd 內容 /var/www/html/index.html
web1:ck01.yht.com "This is web1 server"
web2:ck02.yht.com "This is web2 server"
配置web1/web2
#ifconfig lo:0 192.168.0.254 netmask 255.255.255.255 up
#route add -host 192.168.0.254 dev lo:0
#echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
#echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
#systemctl restart httpd
在lk1/lk2 編寫LVS-DR 規則
【lk1操做】
#vim lvs-dr.sh
#! /bin/bash
ipvsadm -C
ipvsadm -A -t 192.168.0.254:80 -s rr
ipvsadm -a -t 192.168.0.254:80 -r 192.168.131.143:80 -g→指的是lk1 IP
ipvsadm -a -t 192.168.0.254:80 -r 192.168.131.147:80 -g→指的是web1 IP
配置keepalived
#cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost
}
notification_email_from root@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id ck03.yht.com
}
vrrp_instance VI_1 {
state MASTER
interface eno16777736
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1234
}
virtual_ipaddress {
192.168.131.252
}
}
【lk1操做】
#vim lvs-dr.sh
#! /bin/bash
ipvsadm -C
ipvsadm -A -t 192.168.0.254:80 -s rr
ipvsadm -a -t 192.168.0.254:80 -r 192.168.131.144:80 -g→指的是lk2 IP
ipvsadm -a -t 192.168.0.254:80 -r 192.168.131.142:80 -g→指的是web2 IP
配置keepalived
#cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id ck04.yht.com
}
vrrp_instance VI_1 {
state BACKUP
interface eno16777736
virtual_router_id 51
priority 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1234
}
virtual_ipaddress {
192.168.131.252
}
}
啓動lk1/lk2 關聯服務
#chmod 700 ~/lvs-dr.sh
#./lvs-dr.sh
#systemctl start keepalived
#systemctl start httpd
觀察lk1/lk2 下keepalived 信息
#tail -f /var/log/messages
客戶端測試:http://192.168.131.252
實驗結果:當客戶端訪問lk1,lk1會將訪問請求分配給web1,若是在lk上也提供httpd服務的狀況下,客戶端訪問lk會顯示lk1的服務,請求過多時分
配給web1;當lk1中止keepalived服務時,lk2和web2會頂替lk1和web1.