Linux下搭建mpi集群(ubuntu下用虛擬機測試)


一 建立SSH連接(無密碼登陸)

1 SSH連接的簡單介紹

SSH 為 Secure Shell 的縮寫,中文翻譯為安全外殼協議,建立在應用層,是一種遠程連接安全協議。傳統的telnet,pop,ftp都能夠實現類似的功能,但是安全性上來說不足,因為他們都是明文傳輸,而SSH是密文傳輸,能夠有效防止DNS欺騙,網絡信息的攔截等等。

2 為什么要建立SSH連接

      因為我建立集群的目的就是為了高性能的計算,這里我用了MPI,采用的是計算機之間的相互通信,所以必然涉及到計算機的訪問登陸問題,所以我們建立集群計算機之間的SSH連接讓他們能夠無密碼登陸,保證通信的快速性。

3具體的建立SSH連接步驟(都在虛擬機中操作)

1配置網卡

在ubuntu上可以通過圖形界面進行設置,也可以通過指令來修改,大致模式如下:

sudo vi /etc/network/interfaces

auto eth0

iface eth0 inet static

address 192.168.1.100

netmask 255.255.255.0

gateway 192.168.1.1

sudo /etc/init.d/networking restart//重啟服務

就是簡單的修改配置文件來修改參數,最后一定要重啟網絡服務。按照此方式多配置幾台虛擬機,然后測試通信。你可以通過自動獲取的方式獲取物理機在虛擬區域的IP,然后用作其他虛擬機的默認網關。接下來就是修改主機名

sudo vi /etc/hostname //修改本機的主機名

sudo vi /etc/hosts //地址解析,其實就是集群中所有主機的主機名與IP地址的對應

例如  node0 192.168.1.100

        node1 192.168.1.101

host中的內容模式(主機名:端口 IP)SSH的默認端口是22

 

 

2創建互信的SSH連接

1)安裝SSH,指令如下

sudo apt-get install ssh

2)首先理解下SSH的無密碼連接機制,其實就是利用公鑰和密鑰來實現互相的無密碼訪問,所以接下來就是對公鑰密鑰的配置。

第一步 ssh-keygen -t rsa -P ' '//首先生成公鑰和密鑰對,這里的' '表示密碼為空,這樣就在你的個人用戶目錄下生成了.SSH文件夾,里面有id_rsa和id_rsa.pub,分別是公鑰和密鑰。

第二步 接下來就是關鍵的一步,就是公鑰的傳送。公鑰需要給另一個能讓你訪問的機器下,因為公鑰能夠識別用戶是誰。復制方法采用的是scp復制,這是一種遠程復制方法需要密碼的輔助。

    scp .ssh/id_rsa.pub  目標主機名:/home/chenlb/id_rsa.pub解釋下為什么是機器名,因為你在hosts文件中已經定義了目標主機名與ip的對應關系,所以可以運用主機名,這是遠程傳輸,自然開始需要密碼。

        第三步 目標主機把從本機復制的id_rsa.pub(公鑰)添加到.ssh/authorzied_keys文件里(所有的目標機器都必須裝SSH協議),指令如下所示:cat id_rsa.pub >> .ssh/authorized_keys(這是目標機上的)。然后需要設置authorized_keys的權限,因為這個驗證文件也需要給訪問的機器權限才能完成之后的驗證:chmod 600 .ssh/authorized_keys。

    這樣就完成對目標主機的無密碼訪問,但是互相訪問就需要在調換一下位置再設置一下,步驟重復。

 

再次我說下對稱加密解密的使用原理以及機制(RSA),我們就簡單的用A主機和B主機來描述。A主機將公鑰給了B主機,這就意味着A主機用自己的密鑰訪問B主機時,B主機可以用A主機的公鑰來解密,從而知道是A訪問自己,所以允許A訪問。

二 創建NFS(網絡文件系統)

由於mpi需要在每個機器中都安裝,如果每個機器都裝一次那樣就太麻煩了,所以我們創建一個共享的網絡文件系統,這樣就可以修改一次全局修改,非常方便的使用。

1 安裝NFS sudo apt-get install nfs-kernel-server nfs-common

2 在用戶主目錄下創建共享文件夾 mkdir sharedarea

3 修改sharedarea的所屬權限,剛開始屬於root,所以需要改為用戶的

  sudo chown 用戶名:用戶名 / home/用戶名/sharedarea

4 設置下能訪問的網段,即編輯/etc/exports文件。

  sudo vi /etc/exports

  添加/home/abc/cluster *(rw,sync,no_root_squash)

5 重啟服務

  sudo /etc/init.d/rpcbind restart

  sudo /etc/init.d/nfs-kernel-server restart

6 其他機器掛載

  首先其他機器得先安裝NFS,和第一步一樣,然后創建相同的文件夾,掛載命令如下:sudo mount -t nfs 第一個的主機名:/home/用戶名/sharedarea sharedarea

 

切記,如果系統重啟后則需要重新掛載否則產生變化就無法同步了,切記切記

三 安裝MPI

1 首先來一個 sudo apt-get install mpich,不管啥都有了。然后去http://www.mpich.org/download下載一個穩定的linux版本的mpich,解壓到共享文件夾。(tar xfz mpich-3.2.tar.gz 生成mpich-3.2文件夾)

2 由於默認安裝在/usr/local/bin,所以需要改變一下安裝目錄

1)./configure  --prefix=/home/love/cluster/mpich3.1 --disable-f77 --disable-fc

2)make

3)make install

3修改環境變量

這里肯定修改的是用戶的環境變量

sudo vi .bashrc

•在.bashrc

文件的末尾添加:

PATH=/home/用戶名/sharedarea/mpich3.2/bin:$PATH

export PATH 

然后source .bashrc 重新刷新環境變量

這樣MPI就在集群上完美安裝。

四 編譯運行


到了最后一步了,其實也是檢驗你是否成功的一步了,這里我們用到兩個命令,mpicc和mpiexec,其實很簡單

mpicc -g xx.c -o xx

mpiexec -np x(這是線程數) -f y(這是和hosts類似的文件,里面放着集群的文件名,注意所有的文件地址)  ./目標文件名

接下來就大功告成了,享受一下集群的樂趣吧!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM