FATE实战:如何在开发环境中进行集群部署?这个“坑”别踩

引言:如何快速了解FATE?通过部署实操是一个极佳的选择,通过部署过程,可以快速了解FATE框架程序结构、配置参数位置等等。这篇内容将与大家共同探讨,在开发环境中进行集群部署可能会出现的问题,以及解决办法。想要尝试部署FATE的朋友,可以作为良好参考。

1. 背景

前期已在MAC中单机部署了MAC,就尝试在公司开发环境中进行集群部署,以下就是对部署过程的简要记录,虽然过程中一波三折,出现了各种问题,但是通过部署过程,基本上摸清了FATE框架大体程序结构、配置参数的位置等等方面,也算是大有收获。

2. 环境

因为暂时没有空闲机器申请,故目前使用的两台机器为复用了其他项目的机器,两台机器系统中均已部署了Mysql,且无法停止服务(两台机器中的Mysql安装方式还不同)。

其中一台机器还已经安装运行了Redis。所以FATE框架中Mysql、Redis均需要单独配置。

至于为啥没有用Kubernetes,因为开发及后续的生产目前没有引入这个东西~~

以上环境算是很乱了…

(这也是最后总结的就一句话:尽量别这么干…)

2.1 系统版本信息:

Linux version 3.10.0-514.26.2.el7.x86_64
(gcc version 4.8.5 20150623 (Red Hat 4.8.5-11) (GCC) )

3. 部署过程遇到的问题及解决方法

部署过程参考GIT中的Fate-V1.1部署指南(install)即可,这里只是对部署过程及解决方案还有一点建议进行说明。

3.1 一定按着指南一步一步的做!先检查服务器配置

检查服务器配置一定要做,刚开始眼瞎没有仔细看,跑了一遍部署之后才发现缺少依赖库。除了指南中写的依赖库外,也可以执行下面的脚本进行检查。

/FATE/cluster-deploy/scripts/deploy/fate_base/env.sh

3.2 Fate-flow部署失败

Fate-flow模块部署失败。

手工单独部署的时候,按照service.sh一步一步执行,执行fate-flow-server.py启动模块的时候提示导入模块失败。

解决方案:
在/date/projects/fate/python/fate_flow/service.sh中的环境变量信息未能在venv中生效导致此错误,通过在service.sh增加export语句强制环境变量在venv中初始化。
在这里插入图片描述

目前猜测python版本或者是操作系统环境有关系。

3.3 一定要使用app用户,不要手贱切换到root中玩!!

遇到问题:提示各种目录无权限。。。部署及后续执行过程中,生成的文件都是644权限,如果之前使用root用户执行过操作,会导致app用户再执行时出现Permission Denied的情况。

一定使用app用户执行所有操作,除非向mysql这种需要root用户单独启动设置的!!

这时一定检查下各种文件及文件夹的属性,比如Logs文件夹可以如果是root,建议直接把logs文件夹rm -rf不要手软,不要chmod 777,以防后患。

特别检查/data/projects/fate/eggroll目录下的egg、meta-service、roll、storage-service-cxx四个服务中*_pid文件的权限~~

3.4 Mysql和Redis配置

按照常规一台机器起多个Mysql和Redis的配置来配置即可。但除了Mysql和Redis自身的配置,还要修改FATE所有涉及到Mysql和Redis的配置,特别是用户、密码、端口。

其中如果Redis未配置,会在日志中会提示类似队列初始化失败的提示:init redis queue fail。
比较注意的几个点:

my.cnf的权限要是644。
Mysql视情况要在配置文件中加上:lower_case_table_names=1的配置;
Mysql、Redis可能要先手工启动下哦~~
这里可能涉及到更改的配置文件包括:
/data/projects/fate/common/mysql/mysql-8.0.13/conf/my.cnf
/date/projects/fate/common/redis/redis-5.0.2/redis.conf
/date/projects/fate/fateboard/conf/application.properties:更改mysql的端口
/date/projects/fate/python/fate_flow/settings.py:mysql、redis端口

3.5 未稳定之前多手工杀杀后台进程,多删删文件

部署过程中可能会多次停止、启动进程,或者执行各种测试,由于配置上的问题,可能会导致后台出现僵尸进程。

建议在每次停止服务之后,ps -ef | grep fate看下后台进程情况,保证除了mysql、redis之外的所有进程都杀干净。

手工杀进程后,顺带着将/data/projects/fate/eggroll目录下的egg、meta-service、roll、storage-service-cxx四个服务中*_pid文件删除~~

4. 总结

两台机器相关服务均启动正常,八个框架服务外加mysql和redis。

Stand-alone Test执行成功。

比较遗憾的是,最小化测试由于环境中已部署的其他应用资源占用过多,目前还没进行完整测试(比自己笔记本单机跑的都慢。。。),后续会再做进一步的测试。

千言万语一句话,找一个完全干净的环境来做部署…谁还找不到两个新的环境呢~~

——————————————————————————————

蒋明润-山东城商行联盟-数据分析师,微信号:dust_ryan,FATE社区特邀作者。长期关注AI科技与联邦学习应用领域,欢迎添加微信交流合作。

本文原创发布于FATE社区,未经许可,禁止转载。

发布了21 篇原创文章 · 获赞 3 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_45439861/article/details/103703929