Skip to content

部署常见问题

paulbaogang edited this page Mar 16, 2020 · 14 revisions

1. 部署FATE,CentOS是必须吗 可以用Debian之类的其他linux发行版吗

当前发布版本包括代码以及部署脚本针对centos做了比较完备的测试,不过系统没有要求特定的发行版特性,理论上其他发行版也可以运行,可能需要定制修改依赖包以及部署脚本,还可以使用Docker版本.

2. cluster 部署,服务器要求:16core/32G memory,这是建议配置,还是最低配置呢?

建议生产配置,根据数据量决定,如果只是简单小数据量测试,4核8G就够,如果实际使用,建议尽量保持16核32G.

3. 部署完后,按文档说明进行测试的时候出了"'encoding' is an invalid keyword argument for this function"?

python版本不对,请安装官网要求的python版本

4. 单方,多方之间部署,需要ssh免密、mysql访问授权、以及关闭防火墙吗?

单方和多方的部署都需要这些操作的,执行机器到待部署节点需要做免密,mysql需要授权给fateflow,roll所在服务器的访问权限

5. 如果我不想用默认的app用户,以及相应的目录,只用改这个allinone_cluster_configurations.sh配置文件就可以了吧?我用自己的用户做免密,且这个用户有sudo权限,然后改allinone_cluster_configurations.sh配置文件就可以了是吧?

是的,改这个allinone_cluster_configurations.sh配置文件即可

同时部署前做免密是和这个非app用户做免密,这个用户要有sudo权限

6. toy测试显示任务处于waiting状态,问题可能如下:

- 检查redis是否是否启动或者配置是否有问题,如果redis有问题,fateflow的日志里会有报错。

- Fateflow最多支持5个任务同时在跑,可以按如下方法把任务杀掉:

python fate_flow_client.py -f query_job -s waiting | grep f_job_id | awk '{print $2}' | awk -F '"' '{print $2}' | xargs -n1 python fate_flow_client.py -f stop_job -j

- 重启fateflow

7. C++编译报错(storage-service-cxx多次启动失败)

执行以下命令:

wget https://webank-ai-1251170195.cos.ap-guangzhou.myqcloud.com/third_party_source.tar.gz

mv third_party_source.tar.gz eggroll/storage/storage-service-cxx

rm -rf third_party

tar -xzf third_party_source.tar.gz

cd third_party

sh make.sh

cd ../

make

8. processor没有成功启动

排查方法:

- 检查egg.properties的配置;

- 检查用户有没有修改过services.sh,因为有一个配置应该是需要修改的。

- 在eggroll-egg.log中找到start cmd,设置好PYTHONPATH后,单独拎出来运行看有没有问题。

9. 如果重新部署,本机除了fate没有其他服务,可以把所有服务都kill掉,以免残留进程影响:

ps -ef|grep java | awk '{print $2}'|xargs kill -9

ps -ef|grep python |awk '{print $2}'|xargs kill -9

ps -ef|grep process |awk '{print $2}'|xargs kill -9

ps -ef|grep redis |awk '{print $2}'|xargs kill -9

ps -ef|grep storage-serv |awk '{print $2}'|xargs kill -9

ps -ef|grep mysqld |awk '{print $2}

10. toy测试报错: TypeError: must be real number, not NoneType

原因可能是,guest拿host的结果为None,host的eggrol存在问题。

11. FATE离线模块端口介绍

federation联邦通讯(9394),proxy通讯转发(9370),fateboard可视化展示(8080),roll作业提交和数据汇总模块(8011),meta-service元数据存储模块(8590),storage-service-cxx节点存储模块(7778),egg用户自定义模块(7888),fate_flow任务管理模块(任务训练/上传下载数据,发布模型)-9360/9380。

12. FATE离线服务管理

a.根据配置,对应IP主机启动、停止、重启、查看对应的服务

b.根据实际情况执行cd /data/projects/fate && sh services moudle_name start | stop | restart | status

moudle_name参考11.介绍

c.启动服务和查看端口监听状态

storage-service-cxx服务:

cd /data/projects/fate/storage-service-cxx && sh service.sh restart && netstat -antp | grep -i "listen" | grep 7778

egg服务:

cd /data/projects/fate/egg && sh service.sh restart && netstat -antp | grep -i "listen" | grep 7888

roll服务:

cd /data/projects/fate/roll && sh service.sh restart && netstat -antp | grep -i "listen" | grep 8011

meta-service服务:

cd /data/projects/fate/meta-service && sh service.sh restart && netstat -antp | grep -i "listen" | grep 8590

federation服务:

cd /data/projects/fate/federation && sh service.sh restart && netstat -antp | grep -i "listen" | grep 9394

fateboard服务:

cd /data/projects/fate/fateboard && sh service.sh restart && netstat -antp | grep -i "listen" | grep 8080

proxy服务:

cd /data/projects/fate/proxy && sh service.sh restart && netstat -antp | grep -i "listen" | grep 9370

fate_flow服务:

cd /data/projects/fate/python/fate_flow && && sh service.sh restart && netstat -antp | grep -i "listen" | grep 9380

13. toy测试排查思路

先测对端:python /data/projects/fate/python/examples/toy_example/run_toy_example.py 9999 10000 1

如果不通,再分别测试自己

a.guest端执行:python /data/projects/fate/python/examples/toy_example/run_toy_example.py 9999 9999 1

b.host端执行:python /data/projects/fate/python/examples/toy_example/run_toy_example.py 10000 10000 1

哪端不通就哪端有问题,检查下federation(9394)/fateboard(8080)/proxy(9370)/egg(7888)/

roll(7778)/meta-service(8590)/storage-service-cxx(7778)/fate_flow(9360/9380)是否正常

如果两端都通,检查下proxy服务以及路由配置(/data/projects/fate/proxy/conf/route_table.json)是否正确

14. Permission denied

权限不够,请检查当前用户是否拥有FATE的目录权限

参考命令:chmod -R app. /data/projects/fate

15. No space left on device

磁盘空间不足,请检查部署各个主机磁盘

参考命令:df -TH

16. 端口不通

如测试端口:telnet 192.168.0.1 8080

如果不通 请检查下防火墙策略

17. Connection refused

提示服务拒绝连接,请检查日志是否报错和服务是否已启动。

18. fateflow服务起不来

cd /data/projects/fate/python/fate_flow && python fate_flow_server.py

如出现连接不了mysql,先到目标主机确认mysql服务是否已经启动:lsof -i:3306,ps -ef | grep mysql

如没有就启动cd /data/projects/fate/common/mysql/mysql-8.0.13执行sh service.sh start

检查下/data/projects/fate/python/fate_flow/settings.py中的DATABASE连接信息是否正确

检查下各个redis mysql egg roll storage-service-cxx meta-service服务是否启动

(fate_flow依赖于MySQL redis egg roll storage-service-cxx meta-service,只有这些模块启动成功,fate_flow才会正常运行)

19. 日志提示8011 7888-java.lang.reflect……

修改eggroll/egg/egg.properties中的eggroll.computing.processor.session.max.count=16的值修改成不大于该机器CPU个数,重启egg服务。

20. proxy修改路由不更新

修改路由配置信息 重启proxy服务

21. 使用新数据库不使用fate自带的mysql

第一步执行部署:

git clone https://github.com/FederatedAI/FATE.git

cd FATE/cluster-deploy/scripts

bash packaging.sh

bash deploy_cluster_multinode.sh build all

第二步执行停止mysql服务:

cd /data/projects/fate/common/mysql/mysql-8.0.13

sh service.sh stop

kill -9 `lsof -i:3306 | grep -i "LISTEN" | awk '{print $2}'`

第三步改配置文件:

1)修改/data/projects/fate/fateboard/conf/application.properties中"spring.datasource.url"-IP地址、端口、数据库名

"spring.datasource.username"-用户名、"spring.datasource.password"-密码

2)修改/data/projects/fate/python/fate_flow/settings.py中的DATABASE连接信息的IP地址、端口、数据库名、用户名密码

3)根据实际修改,如果不能建库,请修数据库名改为实际数据库

第四步引入其他mysql服务:

1)用户名和密码与上面保持一致,可以不用有建库权限,但必须要有create insert table权限

2)拷贝创建数据库表文件、执行插入语句:

cd FATE/eggroll/framework/meta-service/src/main/resources

把create-meta-service.sql拷贝到mysql主机上

如果不能建库,但是要有对应的数据库,需要修改create-meta-service.sql中的数据库名

修改eggroll_meta为对应自己的数据库:如sed -i 's/eggroll_meta/实际数据库/g' create-meta-service.sql

mysql -hip地址 -u用户名 -p进入mysql执行source create-meta-service.sql

use 实际数据库;

INSERT INTO node (ip, port, type, status) values ('roll服务所在IP', '8011', 'ROLL', 'HEALTHY');

INSERT INTO node (ip, port, type, status) values ('proxy服务所在IP', '9370', 'PROXY', 'HEALTHY');

以下可能有多个,需要根据实际配置插入数据库表

INSERT INTO node (ip, port, type, status) values ('egg服务所在IP', '7888', 'EGG', 'HEALTHY');

INSERT INTO node (ip, port, type, status) values ('storage-service-cxx服务所在IP', '7778', 'STORAGE', 'HEALTHY')

第五步重启服务

cd /data/projects/fate && sh services.sh all restart

注意:忽略终端显示的mysql启动错误

22. 集群版服务管理注意事项

a.根据部署配置,对应机器启对应服务,不要执行all。

b.什么用户发布就什么用户启动服务,使用root发布就使用root启动服务,非root用户把进程kill -9干掉,如果是僵尸进程,找到对应的父进程kill掉,然后重启。

c.涉及权限的问题,改属主,建议chown -R app. /data/projects。

d.如何查看端口监听,建议netstat -antp | grep -i "listen" | grep 上述端口。

e.启动服务建议不要执行all,参考3.一个个启动,不要图省事。

f.每个服务启动过程,都会有日志记录,见模块下logs。

e.fate_flow依赖于MySQL redis egg roll storage-service-cxx meta-service,只有这些模块启动成功,fate_flow才会正常运行。

23. 单机docker install模式部署

1.注意事项

环境条件:docker和docker-compose环境要安装好

部署用户:root或者具有sudo权限的普通用户,普通用户需要加入到docker组

端口监听:fateboard-8080 fateflow-9360/9380 查看是否监听参考netstat -antp | grep 端口号

2.部署发布

2.1 按照官方GitHub文档进行发布

#获取安装包

wget https://webank-ai-1251170195.cos.ap-guangzhou.myqcloud.com/docker_standalone-fate-1.3.0.tar.gz

tar -xvf docker_standalone-fate-1.3.0.tar.gz

#执行部署

cd docker_standalone-fate-1.3.0

root用户执行:bash install_standalone_docker.sh

普通用户执行:bash install_standalone_docker.sh

2.2 执行docker-compose发布

cd docker_standalone-fate-1.3.0

docker load < python.tar

docker load < fateboard.tar

mkdir -p fate/data

mkdir -p fate/log

tar xvf data.tar.gz -C fate

启动:nohup docker-compose -f docker_standalone.yml up &

停止: docker-compose -f docker_standalone.yml down

2.3 单机版使用docker发布

前提条件:镜像已经导入成功

docker run -it -p 8080:8080 --name docker_fateboard docker_fateboard

docker run -it -p 9360:9360 -p 9380:9380 --name docker_python docker_python

24. 执行脚本乱码

安装dos2unix插件

如:执行下dos2unix test.sh

25. 检查IP配置

a.检查操作系统环境:/etc/hosts文件、主机名、域名

b.检查数据库

/data/projects/fate/common/mysql/mysql-8.0.13/bin/mysql -hip地址 -ufate_dev -p -S /data/projects/fate/common/mysql/mysql-8.0.13/mysql.sock

输入密码后执行

select from eggroll_meta.node;看是否有ip端口信息

如果没有执行

INSERT INTO node (ip, port, type, status) values ('roll服务所在IP', '8011', 'ROLL', 'HEALTHY');

INSERT INTO node (ip, port, type, status) values ('proxy服务所在IP', '9370', 'PROXY', 'HEALTHY');

以下可能有多个,需要根据实际配置插入数据库表

INSERT INTO node (ip, port, type, status) values ('egg服务所在IP', '7888', 'EGG', 'HEALTHY');

INSERT INTO node (ip, port, type, status) values ('storage-service-cxx服务所在IP', '7778', 'STORAGE', 'HEALTHY')

c.检查配置文件(IP地址和端口)

/data/projects/fate/eggroll/python/eggroll/conf/server_conf.json

/data/projects/fate/python/arch/conf/server_conf.json

d.检查下路由表

/data/projects/fate/proxy/conf/route_table.json

e.检查fateflow

/data/projects/fate/python/fate_flow/settings.py中的DATABASE信息

Clone this wiki locally