萬字整理,全網(wǎng)最詳細Fate集群配置總結(jié)
一、準備
1、硬件
準備一臺至少12核CPU、24G內(nèi)存、1T硬盤(最好SSD)和一個不低于10MB能上互聯(lián)網(wǎng)的網(wǎng)絡。(最好能滿足上面的條件,要不然即使安裝的沒有問題,也可能跑不起來)。
2????軟件
Xshell 、VMware Workstation 16 Pro,這兩款軟件的-: 百度網(wǎng)盤 請輸入提取碼 ?提取碼:52bv
Centos,-:
http://vault.centos.org/7.5.1804/isos/x86_64/CentOS-7-x86_64-DVD-1804.iso
二、安裝?VMWare虛擬機安裝
從我給的網(wǎng)盤地址將VMWare軟件下載下來安裝即可,自行激活,如果有問題問度娘。
安裝完成后,點擊“編輯→虛擬網(wǎng)絡編輯器”,如下圖:
查找網(wǎng)關
選擇VMnet8,然后點擊NAT設置。
在這里找到網(wǎng)關:192.168.65.2 記住這個網(wǎng)關,后面配置網(wǎng)絡的時候要用到。
三、CentOS安裝
打開vwmare軟件,點擊創(chuàng)建新的虛擬機
選擇“典型(推薦)“,然后選擇”下一步“。
選擇“下一步“
如下圖,選擇“Linux“、”Centos7 64位“、然后選擇”下一步“
給虛擬機命名,第一臺命名為“fate01”,第二臺虛擬機命名為“fate02”。
然后選擇安裝路徑,安裝在空間較大的盤符。然后選擇“下一步”
最大磁盤大小設置為“500G”,選擇“將磁盤拆分成多個文件”,然后選擇“下一步”.
選擇“自定義硬件”,如下圖:
然后設置內(nèi)存為8G,處理器數(shù)量設置為1,每個處理器的內(nèi)核數(shù)量設置為4,在“新CD/DCD(IDE)”選項中設置“CentOS-7-x86_64-DVD-1804.iso”文件的路徑,完成上面的設置后選擇關閉。
然后我們就能看到虛擬機的配置,如果沒有問題,則選擇”完成”,等待虛擬機安裝結(jié)束。
出現(xiàn)下圖則說明安裝完成,選擇“開啟此虛擬機”,你就可以看到Centos7的安裝頁面。
選擇“Install CentOS 7”,然后按“Enter”鍵。
出下面如下畫面,選擇“中文”,在右側(cè)選擇“簡體中文(中國)”,然后選擇“繼續(xù)”。
選擇“鍵盤”,點擊“+”,選擇“英語(英國)”,然后點擊“添加”,再選擇“完成”。
接下來,點擊“軟件選擇”。在左側(cè)選擇“最小安裝”,在右側(cè)選擇“調(diào)試工具”和”系統(tǒng)管理工具”。然后選擇“完成”。
設置“安裝位置”,然后選擇“我要配置分區(qū)”,選擇“完成”。
然后出現(xiàn)如下畫面,選擇“點這里自動創(chuàng)建他們”
選擇“home”,設置期望容量為100GiB,然后點擊“+”
添加新的掛載點“/data”,容量為“341.12GiB”,然后點擊“添加掛載點”。
然后點擊“完成”,選擇“接受更改”
點擊“網(wǎng)路和主機名”
以太網(wǎng),選擇“打開”,設置主機名為“fate01”,點擊“應用”,然后選擇“配置”。
點擊“IPv4設置”,方法設置為“手動”,點擊“Add”,增加IP地址,如下圖,ip地址為“192.168.65.161”,另一臺的ip地址設置為192.168.65.162,子網(wǎng)掩碼和網(wǎng)關相同都,分別設置為“24”和“192.168.65.2”(這個網(wǎng)關我們在前面提到過)。DNS服務器設置為“192.168.65.2”,勾選“需要IPv4地址完成這個連接”。
點擊”IPv6設置”,方法選擇“忽略”。然后選擇“保存”。
然后觀察IP設置是否正確,如果沒有問題則選擇“完成”。
完成上面的設置后,選擇“開始安裝”。然后設置root密碼。
將密碼設置為“123456”,然后點擊“完成”,等待安裝完成。
安裝完成后,點擊“重啟”。
重啟之后,出現(xiàn)如下畫面,輸入“root”,密碼“123456”登錄root賬戶。
另一臺虛擬機的安裝步驟和第一臺一樣只是名字是“fate02”,IP地址為“192.168.65.162”。
安裝完成后,安裝Xshell,用Xshell登錄。個人認為用xshell執(zhí)行命令方便一些。
四、Fate AllinOne部署集群
1.集群規(guī)劃
party
主機名
IP地址
操作系統(tǒng)
安裝軟件
服務
PartyA
VM_0_1_centos
192.168.65.161
CentOS 7.2/
fate,eggroll,mysql
fate_flow,fateboard,clustermanager,nodemanager,rollsite,mysql
PartyB
VM_0_2_centos
192.168.65.162
CentOS 7.2
fate,eggroll,mysql
fate_flow,fateboard,clustermanager,nodemanager,rollsite,m
2.架構(gòu)圖
3.組件說明
軟件產(chǎn)品
組件
端口
說明
fate
fate_flow
9360;9380
聯(lián)合學習任務流水線管理模塊
fate
fateboard
8080
聯(lián)合學習過程可視化模塊
eggroll
clustermanager
4670
cluster manager管理集群
eggroll
nodemanager
4671
node manager管理每臺機器資源
eggroll
rollsite
9370
跨站點或者說跨party通訊組件,相當于以前版本的proxy+federation
mysql
mysql
3306
數(shù)據(jù)存儲,clustermanager和fateflow依賴
4、環(huán)境配置
4.1 hostname配置
1)修改主機名
在192.168.65.161 root用戶下執(zhí)行:
hostnamectl set-hostname VM_0_1_centos
在192.168.65.162 root用戶下執(zhí)行:
hostnamectl set-hostname VM_0_2_centos
2)加入主機映射
在目標服務器(192.168.65.161 192.168.65.162)root用戶下執(zhí)行:
vi /etc/hosts
添加內(nèi)容
192.168.0.1 VM_0_1_centos 192.168.0.2 VM_0_2_centos
添加完成后,執(zhí)行"su root"命令重新登錄。
4.2 關閉selinux
在目標服務器(192.168.65.161 192.168.65.162)root用戶下執(zhí)行:
確認是否已安裝selinux
centos系統(tǒng)執(zhí)行:rpm -qa | grep selinux
ubuntu系統(tǒng)執(zhí)行:apt list --installed | grep selinux
如果已安裝了selinux就執(zhí)行:setenforce 0
4.3 配置yum倉庫
在目標服務器(192.168.65.161 192.168.65.162)root用戶下執(zhí)行:
1)備份CentOS-Base.repo文件
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
2)修改yum倉庫配置
vi /etc/yum.repos.d/CentOS-Base.repo
添加內(nèi)容:
# CentOS-Base.repo # # The mirror system uses the connecting IP address of the client and the # update status of each mirror to pick mirrors that are updated to and # geographically close to the client. You should use this for CentOS updates # unless you are manually picking other mirrors. # # If the mirrorlist= does not work for you, as a fall back you can try the # remarked out baseurl= line instead. # # [base] name=CentOS-$releasever - Base baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/os/$basearch/ #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 #released updates [updates] name=CentOS-$releasever - Updates baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/updates/$basearch/ #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 #additional packages that may be useful [extras] name=CentOS-$releasever - Extras baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/extras/$basearch/ #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 #additional packages that extend functionality of existing packages [centosplus] name=CentOS-$releasever - Plus baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/centosplus/$basearch/ #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus gpgcheck=1 enabled=0 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
3)使新倉庫配置生效
yum clean all yum makecache
4.4 修改Linux系統(tǒng)參數(shù)
在目標服務器(192.168.65.161 192.168.65.162)root用戶下執(zhí)行:
1)清理20-nproc.conf文件
cd /etc/security/limits.d ls -lrt 20-nproc.conf
存在則:
mv 20-nproc.conf 20-nproc.conf_bak
2)修改limits.conf文件
vi /etc/security/limits.conf
添加下面的信息:
* soft nofile 65535 * hard nofile 65535 * soft nproc 65535 * hard nproc 65535
重新登陸,ulimit -a查看是否生效
4.5?修改系統(tǒng)mysql配置
mv /etc/my.cnf /etc/my.cnf_bak
4.6 關閉防火墻(可選)
在目標服務器(192.168.65.161 192.168.65.162)root用戶下執(zhí)行
systemctl disable firewalld.service systemctl stop firewalld.service systemctl status firewalld.service
4.7 創(chuàng)建APP用戶
在目標服務器(192.168.65.161 192.168.65.162)root用戶下執(zhí)行
groupadd -g 6000 apps useradd -s /bin/bash -g apps -d /home/app app passwd app
如果存在app用戶
usermod -s /bin/bash -g apps -d /home/app app passwd app
app初識密碼設置為123456
4.8? 給APP用戶配置sudo
在目標服務器(192.168.65.161 192.168.65.162)root用戶下執(zhí)行
vi /etc/sudoers.d/app
添加內(nèi)容:
app ALL=(ALL) ALL app ALL=(ALL) NOPASSWD: ALL Defaults !env_reset
給文件sudoers文件增加寫入權限
chmod u+w /etc/sudoers
編輯?sudoers文件
vi /etc/sudoers
在root ? ?ALL=(ALL) ? ? ? ALL下面追加:
root ALL=(ALL) NOPASSWD: ALL app ALL=(ALL) ALL app ALL=(ALL) NOPASSWD: ALL
給文件sudoers文件刪除寫入權限
chmod u-w /etc/sudoers
4.9?增加虛擬內(nèi)存
在目標服務器(192.168.65.161 192.168.65.162)root用戶下執(zhí)行
生產(chǎn)環(huán)境使用時,因內(nèi)存計算需要增加128G虛擬內(nèi)存,執(zhí)行前需檢查存儲空間是否足夠。
手工創(chuàng)建,root用戶執(zhí)行:
cd /data dd if=/dev/zero of=/data/swapfile128G bs=1024 count=134217728 mkswap /data/swapfile128G swapon /data/swapfile128G cat /proc/swaps echo '/data/swapfile128G swap swap defaults 0 0' >> /etc/fstab
4.10??設置projects目錄
在目標服務器(192.168.65.161 192.168.65.162)root用戶下執(zhí)行
cd /data mkdir projects chown app:apps projects ls -l chown -R app /data
4.11 配置ssh無密登錄
1)配置自身免密
在目標服務器(192.168.65.161 192.168.65.162)app用戶下執(zhí)行
在虛擬機VM_0_1_centos 上以app用戶身份在home目錄下執(zhí)行
su app ssh-keygen -t rsa cat ~/.ssh/id_rsa.pub >>/home/app/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys
使用ssh 192.168.65.161命令測試,第一次需要確認yes ,之后應可以不需密碼登錄為成功。
在VM_0_2_centos 上執(zhí)行相同步驟配置VM_0_2_centos 的自身免密登錄。
2)配置VM_0_1_centos 免密登錄VM_0_2_centos
在VM_0_1_centos ?app用戶下執(zhí)行
scp ~/.ssh/authorized_keys app@192.168.65.162:/home/app/.ssh
輸入VM_0_2_centos的app密碼
在VM_0_2_centos?app用戶下執(zhí)行
cat ~/.ssh/id_rsa.pub >> /home/app/.ssh/authorized_keys scp ~/.ssh/authorized_keys app@192.168.65.161:/home/app/.ssh
輸入VM_0_1_centos?的app密碼完成文件傳輸。
在VM_0_1_centos?app用戶下執(zhí)行
ssh 192.168.65.162
應不需要密碼即可登錄fate02機。
到這里我們已經(jīng)完成環(huán)境的配置了。
五.項目部署
5.1 獲取項目
在目標服務器(192.168.65.161 具備外網(wǎng)環(huán)境)app用戶下執(zhí)行
進入執(zhí)行節(jié)點的/data/projects/目錄,執(zhí)行:
cd /data/projects/ wget https://webank-ai-1251170195.cos.ap-guangzhou.myqcloud.com/fate_cluster_install_1.6.0_release-c7-u18.tar.gz tar xzf fate_cluster_install_1.6.0_release-c7-u18.tar.gz
5.2 部署前檢查
在目標服務器(192.168.65.161 192.168.65.162 )app用戶下執(zhí)行
把檢查腳本fate-cluster-install/tools-install/check.sh從192.168.65.161拷貝到192.168.65.162
#在192.168.0.1和192.168.0.2服務器上分別執(zhí)行檢查腳本 sh ./check.sh #確認app用戶已配置sudo #虛擬內(nèi)存,size不低于128G,如不滿足需參考4.6章節(jié)重新設置 #文件句柄數(shù),不低于65535,如不滿足需參考4.3章節(jié)重新設置 #用戶進程數(shù),不低于64000,如不滿足需參考4.3章節(jié)重新設置 #確認部署前沒有fate進程和端口沖突 #確認/etc/my.cnf是否存在,存在需要mv;確認是否存在/data/projects/fate目錄,存在需把fate目錄mv備份。
5.3 配置文件修改和示例
在目標服務器(192.168.65.161)app用戶下執(zhí)行
修改配置文件fate-cluster-install/allInone/conf/setup.conf.
vi fate-cluster-install/allInone/conf/setup.conf
配置文件setup.conf說明:
1)兩臺主機partyA+partyB同時部署
#to install role roles=( "host" "guest" ) version="1.6.0" #project base pbase="/data/projects" #log directory lbase="/data/logs" #user who connects dest machine by ssh ssh_user="app" ssh_group="apps" #ssh port ssh_port=22 #eggroll_db name eggroll_dbname="eggroll_meta" #fate_flow_db name fate_flow_dbname="fate_flow" #mysql init root password mysql_admin_pass="fate_dev" #redis passwd redis_pass="" #mysql user mysql_user="fate" #mysql port mysql_port="3306" #host party id host_id="10000" #host ip host_ip="192.168.65.161" #host mysql ip host_mysql_ip="${host_ip}" host_mysql_pass="fate_deV2999" #guest party id guest_id="9999" #guest ip guest_ip="192.168.65.162" #guest mysql ip guest_mysql_ip="${guest_ip}" guest_mysql_pass="fate_deV2999" #db module lists dbmodules=( "mysql" ) #base module lists basemodules=( "tools" "base" "java" "python" "eggroll" "fate" ) fateflow_grpc_port=9360 fateflow_http_port=9380 fateboard_port=8080 rollsite_port=9370 clustermanager_port=4670 nodemanager_port=4671
2)只部署一個party
#to install role roles=( "host" ) version="1.6.0" #project base pbase="/data/projects" #log directory lbase="/data/logs" #user who connects dest machine by ssh ssh_user="app" ssh_group="apps" #ssh port ssh_port=22 #eggroll_db name eggroll_dbname="eggroll_meta" #fate_flow_db name fate_flow_dbname="fate_flow" #mysql init root password mysql_admin_pass="fate_dev" #redis passwd redis_pass="" #mysql user mysql_user="fate" #mysql port mysql_port="3306" #host party id host_id="10000" #host ip host_ip="192.168.65.161" #host mysql ip host_mysql_ip="${host_ip}" host_mysql_pass="fate_deV2999" #guest party id guest_id="" #guest ip guest_ip="" #guest mysql ip guest_mysql_ip="${guest_ip}" guest_mysql_pass="" #db module lists dbmodules=( "mysql" ) #base module lists basemodules=( "tools" "base" "java" "python" "eggroll" "fate" ) fateflow_grpc_port=9360 fateflow_http_port=9380 fateboard_port=8080 rollsite_port=9370 clustermanager_port=4670 nodemanager_port=4671
5.4 部署
按照上述配置含義修改setup.conf文件對應的配置項后,然后在fate-cluster-install/allInone目錄下執(zhí)行部署腳本:
cd fate-cluster-install/allInone nohup sh ./deploy.sh > logs/boot.log 2>&1 &
部署日志輸出在fate-cluster-install/allInone/logs目錄下,實時查看是否有報錯:
tail -f ./logs/deploy.log (部署結(jié)束,查看一下即可) tail -f ./logs/deploy-guest.log (實時打印GUEST端的部署情況) tail -f ./logs/deploy-mysql-guest.log (實時打印GUEST端mysql的部署情況) tail -f ./logs/deploy-host.log (實時打印HOST端的部署情況) tail -f ./logs/deploy-mysql-host.log (實時打印HOST端mysql的部署情況)
deploy.log出現(xiàn)以下內(nèi)容說明安裝完成
init over
deploy guest mysql ?172.16.132.190 ?over
deploy guest 172.16.132.190 ?over
deploy host mysql 172.16.132.189 ?over
deploy host 172.16.132.189 ?over
5.5 問題定位
1)eggroll日志
/data/projects/fate/eggroll/logs/eggroll/bootstrap.clustermanager.err
/data/projects/fate/eggroll/logs/eggroll/clustermanager.jvm.err.log
/data/projects/fate/eggroll/logs/eggroll/nodemanager.jvm.err.log
/data/projects/fate/eggroll/logs/eggroll/bootstrap.nodemanager.err
/data/projects/fate/eggroll/logs/eggroll/bootstrap.rollsite.err
/data/projects/fate/eggroll/logs/eggroll/rollsite.jvm.err.log
2)fateflow日志
/data/projects/fate/python/logs/fate_flow/
3)fateboard日志
/data/projects/fate/fateboard/logs
6.測試
6.1 Toy_example部署驗證
此測試您需要設置3個參數(shù):guest_partyid,host_partyid,work_mode。
6.1.1 單邊測試
1)192.168.65.161上執(zhí)行,guest_partyid和host_partyid都設為10000:
source /data/projects/fate/bin/init_env.sh cd /data/projects/fate/examples/toy_example/ python run_toy_example.py 10000 10000 1
注:執(zhí)行source /data/projects/fate/bin/init_env.sh命令時,會進入一個虛擬環(huán)境,但是很多人不知道怎么退出,退出的命令是:
deactivate
類似如下結(jié)果表示成功:
"2020-04-28 18:26:20,789 - secure_add_guest.py[line:126] - INFO: success to calculate secure_sum, it is 1999.9999999999998"
提示:如出現(xiàn)max cores per job is 1, please modify job parameters報錯提示,需要修改當前目錄下文件toy_example_conf.json中參數(shù)task_cores為1.
2)192.168.65.162上執(zhí)行,guest_partyid和host_partyid都設為9999:
source /data/projects/fate/bin/init_env.sh cd /data/projects/fate/examples/toy_example/ python run_toy_example.py 9999 9999 1
類似如下結(jié)果表示成功:
"2020-04-28 18:26:20,789 - secure_add_guest.py[line:126] - INFO: success to calculate secure_sum, it is 1999.9999999999998"
6.1.2 雙邊測試
選定9999為guest方,在192.168.65.162上執(zhí)行:
source /data/projects/fate/bin/init_env.sh cd /data/projects/fate/examples/toy_example/ python run_toy_example.py 9999 10000 1
類似如下結(jié)果表示成功:
"2020-04-28 18:26:20,789 - secure_add_guest.py[line:126] - INFO: success to calculate secure_sum, it is 1999.9999999999998"
6.2 最小化測試
6.2.1 上傳預設數(shù)據(jù):
分別在192.168.65.161和192.168.65.162上執(zhí)行:
source /data/projects/fate/bin/init_env.sh cd /data/projects/fate/examples/scripts/ python upload_default_data.py -m 1
6.2.2 快速模式:
請確保guest和host兩方均已分別通過給定腳本上傳了預設數(shù)據(jù)。
快速模式下,最小化測試腳本將使用一個相對較小的數(shù)據(jù)集,即包含了569條數(shù)據(jù)的breast數(shù)據(jù)集。
選定9999為guest方,在192.168.65.162上執(zhí)行:
source /data/projects/fate/bin/init_env.sh cd /data/projects/fate/examples/min_test_task/ #單邊測試 python run_task.py -m 1 -gid 9999 -hid 9999 -aid 9999 -f fast #雙邊測試 python run_task.py -m 1 -gid 9999 -hid 10000 -aid 10000 -f fast
其他一些可能有用的參數(shù)包括:
-f: 使用的文件類型. "fast" 代表 breast數(shù)據(jù)集, "normal" 代表 default credit 數(shù)據(jù)集.
--add_sbt: 如果被設置為1, 將在運行完lr以后,啟動secureboost任務,設置為0則不啟動secureboost任務,不設置此參數(shù)系統(tǒng)默認為1。
若數(shù)分鐘后在結(jié)果中顯示了“success”字樣則表明該操作已經(jīng)運行成功了。若出現(xiàn)“FAILED”或者程序卡住,則意味著測試失敗。
6.2.3 正常模式:
只需在命令中將“fast”替換為“normal”,其余部分與快速模式相同。
6.3 Fateboard testing
Fateboard是一項Web服務。如果成功啟動了fateboard服務,則可以通過訪問 http://192.168.65.161:8080 和 http://192.168.65.162:8080 來查看任務信息,如果有防火墻需開通。
7.系統(tǒng)運維
7.1 服務管理
在目標服務器(192.168.65.161 192.168.65.162)app用戶下執(zhí)行
7.1.1 Eggroll服務管理
source /data/projects/fate/bin/init_env.sh cd /data/projects/fate/eggroll
啟動/關閉/查看/重啟所有:
sh ./bin/eggroll.sh all start/stop/status/restart
啟動/關閉/查看/重啟單個模塊(可選:clustermanager,nodemanager,rollsite):
sh ./bin/eggroll.sh clustermanager start/stop/status/restart
7.1.2 Mysql服務管理
啟動/關閉/查看/重啟mysql服務
cd /data/projects/fate/common/mysql/mysql-8.0.13 sh ./service.sh start|stop|status|restart
7.1.3 Fate服務管理
1) 啟動/關閉/查看/重啟fate_flow服務
source /data/projects/fate/bin/init_env.sh cd /data/projects/fate/python/fate_flow sh service.sh start|stop|status|restart
如果逐個模塊啟動,需要先啟動eggroll和mysql再啟動fateflow,fateflow依賴eggroll的啟動。
2) 啟動/關閉/重啟fateboard服務
cd /data/projects/fate/fateboard sh service.sh start|stop|status|restart
7.2 查看進程和端口
在目標服務器(192.168.65.161 192.168.65.162 )app用戶下執(zhí)行
7.2.1 查看進程
#根據(jù)部署規(guī)劃查看進程是否啟動 ps -ef | grep -i clustermanager ps -ef | grep -i nodemanager ps -ef | grep -i rollsite ps -ef | grep -i fate_flow_server.py ps -ef | grep -i fateboard
7.2.2 查看進程端口
#根據(jù)部署規(guī)劃查看進程端口是否存在 #clustermanager netstat -tlnp | grep 4670 #nodemanager netstat -tlnp | grep 4671 #rollsite netstat -tlnp | grep 9370 #fate_flow_server netstat -tlnp | grep 9360 #fateboard netstat -tlnp | grep 8080
7.3 服務日志
8. 附錄
CentOS Linux
版權聲明:本文內(nèi)容由網(wǎng)絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權內(nèi)容。