您好,登錄后才能下訂單哦!
撰寫日期:2017年6月13日
作者:翟江恒
一般情況下不會采用手動的方式安裝HPC,而是采用集成自動化方案來部署hpc,但是這些集成方案都是集成了指定的操作系統發行版本,比如常見的HPC集成自動化方案rockets,到目前為止集成centos 6.6,如果需要把HPC安裝其他linux發行版本環境里面,就不能使用集成自動化方案,必須使用手動安裝方法,這篇博客就是敘述如何手動搭建HPC的。敬請往下看。
1. HPC簡介
2. HPC架構
3. ssh無密碼訪問
4. 安裝配置NFS
5. 安裝配置NIS
6. 安裝tentakel
7. 安裝openmpi
8. 安裝torque
9. 安裝ganglia
1. HPC簡介
高性能計算(Highperformance computing,縮寫HPC) 指通常使用很多處理器(作為單個機器的一部分)或者某一集群中組織的幾臺計算機(作為單個計算資源操作)的計算系統和環境。有許多類型的HPC 系統,其范圍從標準計算機的大型集群,到高度專用的硬件。大多數基于集群的HPC系統使用高性能網絡互連,比如那些來自 InfiniBand 或 Myrinet 的網絡互連。基本的網絡拓撲和組織可以使用一個簡單的總線拓撲,在性能很高的環境中,網狀網絡系統在主機之間提供較短的潛伏期,所以可改善總體網絡性能和傳輸速率。
2. hpc架構
HPC網絡架構如圖所示
上圖顯示了一網狀 HPC 系統。在網狀網絡拓撲中,該結構支持通過縮短網絡節點之間的物理和邏輯距離來加快跨主機的通信。
盡管網絡拓撲、硬件和處理硬件在 HPC 系統中很重要,但是使系統如此有效的核心功能是由操作系統和應用軟件提供的。
HPC 系統使用的是專門的操作系統,這些操作系統被設計為看起來像是單個計算資源。正如從圖1和圖2中可以看到的,其中有一個控制節點,該節點形成了 HPC 系統和客戶機之間的接口。該控制節點還管理著計算節點的工作分配。
對于典型 HPC 環境中的任務執行,有兩個模型:單指令/多數據(SIMD) 和多指令/多數據 (MIMD)。SIMD在跨多個處理器的同時執行相同的計算指令和操作,但對于不同數據范圍,它允許系統同時使用許多變量計算相同的表達式。MIMD允許HPC 系統在同一時間使用不同的變量執行不同的計算,使整個系統看起來并不只是一個沒有任何特點的計算資源(盡管它功能強大),可以同時執行許多計算。
不管是使用 SIMD 還是 MIMD,典型HPC 的基本原理仍然是相同的:整個HPC 單元的操作和行為像是單個計算資源,它將實際請求的加載展開到各個節點。HPC 解決方案也是專用的單元,被專門設計和部署為能夠充當(并且只充當)大型計算資源。
3.SSH無密碼訪問
建立腳本目錄
mkdir –p /root/rootUser
mkdir –p /home/普通用戶目錄
例如: mkdir –p /home/hpc (hpc就是一個普通用戶)
編寫如下三個腳本:
Setp1.exp
內容如下:
#!/bin/bash
rm -fr/root/.ssh
/usr/bin/expect<<EOF
setforce_conservative 0 ;# set to 1 toforce conservative mode even if
;# script wasn't run conservativelyoriginally
if{\$force_conservative} {
set send_slow {1 .1}
proc send {ignore arg} {
sleep .1
exp_send -s -- \$arg
}
}
settimeout -1
spawnssh-keygen -t dsa
match_max100000
expect-exact "Enter file in which to save the key (/root/.ssh/id_dsa): "
send --"\r"
expect-exact "Enter passphrase (empty for no passphrase): "
send --"\r"
expect-exact "Enter same passphrase again: "
send --"\r"
expecteof
EOF
cd/root/.ssh
catid_dsa.pub >> authorized_keys
chmod 600authorized_keys
step2.exp
內容如下:
#!/bin/bash
if [ $#-ne 1 ]
then
{
echo 'usage: step1.exp root_password'
exit
}
fi;
ROOTPASSWD=$1
rm -fr/root/.ssh/known_hosts
#for((node=1;node<=10;node++))
for nodein $(cat hostfile)
do
/usr/bin/expect<<EOF
# set to1 to force conservative mode even if
setforce_conservative 0 ;
;# script wasn't run conservativelyoriginally
if{\$force_conservative} {
set send_slow {1 .1}
proc send {ignore arg} {
sleep .1
exp_send -s -- \$arg
}
}
settimeout -1
spawn ssh${node} hostname
match_max100000
expect-exact "Are you sure you want to continue connecting (yes/no)? "
send --"yes\r"
expect-exact "${node}'s password: "
send --"${ROOTPASSWD}\r"
expecteof
EOF
done;
step3.exp
內容如下:
#!/bin/bash
if [ $#-ne 1 ]
then
{
echo 'usage : step3.exp root_password';
exit 1;
}
fi;
ROOTPASSWORD=$1
#for((node=1;node<=10;node++))
for nodein $(cat hostfile)
do
/usr/bin/expect<<EOF
setforce_conservative 0 ;# set to 1 toforce conservative mode even if
;# script wasn't run conservativelyoriginally
if{\$force_conservative} {
set send_slow {1 .1}
proc send {ignore arg} {
sleep .1
exp_send -s -- \$arg
}
}
settimeout -1
spawn scp-rp /root/.ssh ${node}:/root
match_max100000
expect-exact "root@${node}'s password: "
send --"${ROOTPASSWORD}\r"
expecteof
EOF
Done
執行命令:touch hostfile
編輯hostfile文件,加入說有主機名,一行一個。
例如:
node136
node137
node138
hpc-test
執行如下命令:
cp setp1.exp setp2.exp setp3.exp hostfile /root/rootUser/
cp setp1.exp setp2.exp hostfile /home/普通用戶目錄
chmod 755 –R /root/rootUser/
chmod 755 –R /home/普通用戶目錄
chown root:root –R /root/rootUser/
chown 普通用戶:普通用戶組 –R /home/普通用戶目錄/
以下實現各服務器之間root用戶之間ssh無密碼訪問。
修改hostfile文件內容,把所有主機名稱添加進去。
先使用root用戶順序執行目錄/root/rootuser里面的腳本:
sh step1.exp
sh step2.exp root 密碼
sh step3.exp root 密碼
以下實現各服務器之間普通用戶之間ssh無密碼訪問。
先在所有主機上建立相同的用戶,執行命令:
Useradd 用戶名
Paswd 用戶名
修改hostfile文件內容,同上。
執行順序目錄/home/normalUser下面的腳本
sh step2.exp 普通用戶密碼
sh step3.exp 普通用戶名 密碼
以上腳本執行完成后使用root和普通用戶使用ssh命令測試各服務器之間是否可以無密碼訪問。
4. NFS配置
在管理節點上設置共享目錄:
touch /etc/exports
echo ‘/home *(rw,insecure,no_root_squash,sync)’>>/etc/exports
echo ‘/hpc *(rw,insecure,no_root_squash,sync)’>> /etc/exports
啟動nfs服務器
systemctl start nfs.service
查看nfs服務狀態
systemctl status nfs.service
設置nfs開機自啟動
systemctl enable nfs.service
在計算節點上執行mount命令把/home和/opt掛載到本地:
mount -t nfs -o vers=3 hpc:/opt /opt
mount -t nfs -o vers=3 hpc:/home /home
5.安裝配置NIS服務
NIS的作用是讓整個系統里的機器的賬戶能統一管理。
yum install –y ypbind yp-tools ypser rpcbind protmap
NIS的配置如下:
1)server端的配置
1、開啟兩個服務:
[root@admin ~]# /sbin/chkconfig yppasswdd on
[root@admin ~]# /sbin/chkconfig ypserv on
[root@admin ~]# /sbin/service yppasswdd restart
[root@admin ~]# /sbin/service ypserv restart
2、配置NIS域名
[root@admin ~]# nisdomainname TS10K
(必需將nisdomainname TS10K加入到nis服務器的/etc/rc.d/rc.local文件里面或者把NISDOMAIN=TS10K加入到/etc/sysconfig/netwok文件里)
echo “/bin/nisdomainnamehpc”>>/etc/rc.d/rc.local
echo“NISDOMAIN=hpc”>>/etc/sysconfig/network
可以使用rpcinfo–u 本機名 ypserv 察看ypserv是否啟動,若成功啟動會看到:
program 100004 version 1 ready and waiting
program 100004 version 2 ready and waiting
若沒看到,則把ypserv重新啟動一下即可。
3、數據初始化
[root@admin ~]# cd /usr/lib/yp
[root@admin yp]#./ypinit –m 或者/usr/lib64/yp/ypinit -m
ctl+d(切記)來結束這個命令,再打入回車
回車后會顯示類似內容:admin has been set up as a NISserver ,now you can run ypinit –s admin on all slave server.
在server端重新建立新用戶后,需要到/var/yp 目錄下make一下(當nis map有任何修改必須重新make一下),這樣client端才能使用新用戶登錄。
2)client端的配置
1、設定NIS client
setup→authentication configuration→[*]use NIS
填寫:Domain:TS10K (NIS的域名)
Server: admin (server端的名稱或者ip)
2、開啟服務
[root@cu001 ~]# /sbin/chkconfig ypbind on
[root@cu001 ~]# /sbin/service ypbind restart
也可以直接修改/etc/yp.conf文件來設定nis client端
修改完畢后,serviceypbind restart重啟服務即可
新增用戶時,需要更新nis賬戶和資料庫:
cd /var/yp make
6.安裝tentakel
解壓軟件包pip-1.1.tar
進入目錄:pip-1.1
cd pip-1.1
執行:python setup.py install
解壓軟件包:sfermigier-tentakel-1564958.zip
unzipsfermigier-tentakel-1564958.zip
cdsfermigier-tentakel-1564958
執行如下命令進行安裝:
pip install . (.是表示當前目錄)
拷貝配置文件到/etc
cp tentakel.conf /etc
測試tentakel是否生效
執行命令:tentakel –g all “uptime”
7.安裝openmpi
安裝所需依賴包:
yum install –ygcc-gfortran gcc gcc-c++ *aclocal
解壓openmpi-1.6.4.tar
tar –zxvf openmpi-1.6.4.tar
cd openmpi-1.6.4
下面開始編譯安裝:
生成安裝配置信息
./configure --prefix=/hpc/openmpi CC=gcc CXX=g++F77=gfortran FC=gfortran
編譯安裝
make && make install(必須要make命令編譯成功才執行makeinstall開始安裝)
編輯文件/etc/ ld.so.conf, 文件末尾加入openmpi的lib目錄路徑。
vim /etc/ ld.so.conf
執行ldconfig命令
編輯/etc/profile文件和用戶目錄下面的.bashrc文件,.bashrc是隱藏文件需要使用ls–al命令才可以看到。
加入如下內容:
export OPENMPI_HOME=/hpc/openmpi
export OPENMPI_PATH=$OPENMPI_HOME/bin
export TORQUE_HOME=/var/spool/torque
exportLD_LIBRARY_PATH=$OPENMPI_PATH:$OPENMPI_HOME/lib:$TORQUE_HOME:$LD_LIBRARY_PATH
export PATH=$PATH:$LD_LIBRARY_PATH
再執行:
source/etc/profile
Source /home/用戶/.bashrc
測試openmpi
8.安裝torque
Torque在整個集群里面充當任務調度的角色。
以下步驟在管理節點操作
安裝torque之前需要先安裝依賴包。
yum update
yum install -ylibxml2-devel openssl-devel
上傳安裝包
解壓安裝包
tar -zxvf torque-4.2.10.tar.gz
cd torque-4.2.10/
生成安裝信息,如果加了—perfix指定了安裝目錄,就會安裝到指定目錄,如果不加會安裝到默認目錄/usr/local,我這里不指定目錄,安裝默認目錄下。
執行 ./configure
生成安裝配置信息后執行如下命令進行編譯安裝:
make && make install
拷貝服務啟動程序到/etc/init.d/
cp torque/contrib/init.d/trqauthd/etc/init.d/
cp torque/contrib/init.d/pbs_server/etc/init.d/
cp torque/contrib/init.d/pbs_sched}/etc/init.d/
添加trqauth到服務列表
設置以上服務開機自啟:
chkconfig pbs_server on
chkconfig pbs_sched on
chkconfig trqauthd on
執行如下命令:
echo /usr/local/lib > /etc/ld.so.conf.d/torque.conf
ldconfig
echo <pbs_server's_hostname> >/var/spool/torque/server_name
添加TORQUE_HOMEH環境變量
vim /etc/profile
執行命令: source /etc/profile
在安裝包目錄下面執行:
執行:pbs_server –u
touch /var/spool/torque/server_priv/nodes
vim /var/spool/torque/server_priv/nodes 加入所有計算機節點。
安裝計算節點:
在管理節點的torque安裝包目錄下執行:makepackages
生成了幾個shell腳本:
在管理節點上執行:
cp torque-package-mom-linux*.sh /shared_storage/ ----/shared_storage 指的是共享存儲目錄
cp torque-package-clients-linux*.sh /shared_storage/
在所有計算節點上執行:
cd 到共享目錄
執行torque-package-clients-linux-x86_64.sh和torque-package-mom-linux-x86_64.sh
把管理節點上的安裝包目錄里的contrib/init.d/pbs_mom拷貝到所有計算節點的/etc/init.d/目錄。
把pbs_mom加入服務列表
chkconfig--add pbs_mom
設置pbs_mom服務開機自啟動
chkconfigpbs_mom on
在管理節點編寫腳本:
startpbs_server.sh和shutpbs_server.sh
startpbs_server.sh用來啟動所有pbs服務,內容如下:
#!/bin/bash
for iin pbs_server pbs_mom pbs_sched trqauthd;
do
/etc/init.d/$istart
done
shutpbs_server.sh用來停止所有pbs服務,內容如下:
#!/bin/bash
for iin pbs_server pbs_mom pbs_sched trqauthd;
do
/etc/init.d/$istop
done
添加執行權限:
chmod+x startpbs_server.sh
chmod+x shutpbs_server.sh
執行:shstartpbs_server.sh啟動所有服務。
在計算節點的編輯/etc/profile文件加入TORQUE_HOME環境變量
source/etc/profile
在計算節點執行:
#echo /usr/local/lib> /etc/ld.so.conf.d/torque.conf
#ldconfig
啟動pbs_server
/etc/init.d/pbs_momstart
在管理節點執行命令:qnodes
狀態為free就是正常的,為down就是計算節點的pbs_mom服務掛了。
編寫測試腳本:
test.pbs內容如下:
#PBS-l nodes=1
##PBS-N test_1
#PBS-S /bin/bash
mpiexec–H localhost,node136,node137 -np 30 /home/hpc/a.out > /home/hpc/cu1111.log2>&1
su – 普通用戶
提交作業:
qsub test.pbs
查看作業隊列:
qstat
狀態為C表示作業執行完成,為E表示作業執行完成正在退出。
9.安裝ganglia監控
Ganglia由gmond、gmetad和gweb三部分組成
gmond(GangliaMonitoring Daemon)是一種輕量級服務,安裝在每臺需要收集指標數據的節點主機上。gmond在每臺主機上完成實際意義上的指標數據收集工作,并通過偵聽/通告協議和集群內其他節點共享數據。使用gmond,你可以很容易收集很多系統指標數據,如CPU、內存、磁盤、網絡和活躍進程的數據等。
gmetad(GangliaMeta Daemon)是一種從其他gmetad或gmond源收集指標數據,并將其以RRD格式存儲至磁盤的服務。gmetad為從主機組收集的特定指標信息提供了簡單的查詢機制,并支持分級授權,使得創建聯合監測域成為可能。
gweb(GangliaWeb)gweb是一種利用瀏覽器顯示gmetad所存儲數據的PHP前端。在Web界面中以圖表方式展現集群的運行狀態下收集的多種不同指標數據。
管理節點需要安裝的組件:
gmetad
http
php
gweb
計算節點需要安裝的組件:
gmond
在所有節點執行下面的操作:
安裝軟件源:wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm –ivh epel-release-6-8.noarch.rpm
執行如下命令:
yum clean all
yum makecach
yum update –y
yum search ganglia-gmetad ganglia-gmond
如果yum search命令可以找到ganglia軟件包在開始安裝管理節點和計算節點。
安裝管理節點:
安裝gmetad
執行:
yum installganglia-gmetad -y
安裝ganglia-web
在安裝ganglia-web之前需要先安裝httpd和php
執行:
yum install httpd php
建立ganglia的web目錄:
mkdir /var/www/html/ganglia
把ganglia-web下面的所有文件拷貝到/var/www/html/ganglia
配置管理節點:
配置gmetad
修改gmetad服務的配置配文件:
vim /etc/ganglia/gmetad.conf
修改data_source參數
格式為:data_source “集群名稱” host1:port,host2:port,.. hostN:port
如果不指定端口會使用默認端口:8649
配置ganglia-web
Ganglia的web監控界面是基于PHP的,因此需要安裝PHP環境,PHP環境的安裝不在介紹,可以在http://sourceforge.net/projects/ganglia/files/下載ganglia-web,然后放到web根目錄即可。
配置ganglia的web界面比較簡單,只需要修改幾個php文件即可,首先第一個是conf_default.php,可以將conf_default.php重命名為conf.php,也可以保持不變,ganglia的web默認先找conf.php,找不到會繼續找conf_default.php,需要修改的內容如下:
$conf['gmetad_root'] ="/var/www/html/ganglia/"; # ganglia web根目錄
$conf['rrds'] ="${conf['gmetad_root']}/rrds"; #ganglia web讀取rrds數據庫的路徑
$conf['dwoo_compiled_dir'] ="${conf['gmetad_root']}/dwoo/compiled"; #需要777權限
$conf['dwoo_cache_dir'] ="${conf['gmetad_root']}/dwoo/cache"; #需要777權限
$conf['rrdtool'] ="/usr/bin/rrdtool"; #指定rrdtool的路徑
$conf['graphdir']= $conf['gweb_root'] .'/graph.d'; #生成圖形模板目錄
$conf['ganglia_ip'] ="127.0.0.1"; #gmetad服務器的地址
$conf['ganglia_port'] = 8652; #gmetad服務器的交互式提供監控數據端口發布
執行如下命令:
chmod 777 -R /var/www/html/ganglia/dwoo/cache/
配置計算節點gmond服務
在所有計算節點執行如下命令:
yum install ganglia-gmond –y
gmond服務配置
gmond服務配置文件是/etc/ganglia/gmond.conf
部分配置說明如下:
globals {
daemonize = yes #以后臺的方式運行
setuid = yes
user = nobody #運行gmond的用戶
debug_level = 0 #調試級別
max_udp_msg_len = 1472
mute = no #本節點將不會再廣播任何自己收集到的數據到網絡上
deaf = no #本節點將不再接收任何其他節點廣播的數據包
allow_extra_data = yes
host_dmax = 0 /*secs */
cleanup_threshold = 300 /*secs */
gexec = no #是否使用gexec
send_metadata_interval = 0
}
cluster {
name = "Cluster1" #本節點屬于哪個cluster
owner = "junfeng" #指定該節點的所有者
latlong = "unspecified" #在地球上的坐標,經度、緯度
url = "unspecified"
}
host {
location = "unspecified"
}
udp_send_channel { #udp包的發送通道
mcast_join = 239.2.11.71 #多播模式,工作在239.2.11.71通道下。如果使用單播模式,則要 寫成host = host1,單播模式下也可以配置多個udp_send_channel
port = 8649 #監聽端口
ttl = 1
}
udp_recv_channel { #接收udp包配置
mcast_join = 239.2.11.71 #同樣工作在239.2.11.71通道下
port = 8649 #監聽端口
bind = 239.2.11.71 #綁定
}
tcp_accept_channel {
port = 8649 #通過tcp協議監聽的端口,遠端可以通過鏈接8649端口得到監控數據
}
在此文檔中我們只需要修改cluser{…….}部分如下:
name字段需要和管理節點一致。
在管理節點執行:
systemctl enablegmetad.service
systemctl startgmetad.service
systemctl enablehttpd.service
systemctl enablehttpd.service
在計算節點執行:
systemctl enablegmond.service
systemctl start gmond.service
下面是見證奇跡的時刻。
在瀏覽器地址欄里面輸入:
http://apache-hosot/ganglia
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。