企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持知识库和私有化部署方案 广告
## 一 、再看部署架构图 ![](https://img.kancloud.cn/07/92/0792e8a5ec1d26ce738f4c50f1b5c679_770x601.png) 在上一节中,我们将apollo portal的配置中心web管理界面安装成功,如上图中的红色部分。portal用来管理多个运行环境,比如:生产环境、测试环境、开发环境等。 本节我们就以DEV(开发环境)来为大家介绍apollo服务端其他组件的部署,也就是config-service和adminservice(上图中的蓝色部分)。为了更贴近实际,并且保障高可用(开发环境也可以是高可用,避免服务不可用导致的开发效率问题),我们将config-service和adminservice分别部署启动3个实例。 > 上图中蓝色部分并没有体现出DEV环境的config-service和adminservice高可用分布式部署,只体现了单实例。这点我们不同。 下图是我们以DEV(开发环境)为例的部署图。以后我们每增加一套环境,就要完成本节所讲内容的安装与配置。 ![](https://img.kancloud.cn/ec/cc/eccc4a3f5cdbe285673baa2251546b7d_1212x624.png) ## 二、准备工作 与上一节中安装Apollo Portal的要求是一样的,需要准备好java环境(1.8+),MysQL环境(5.6.5+)。并且将apollo-configservice-1.6.1-github.zip和apollo-adminservice-1.6.1-github.zip上传到如下的主机。 | 环境 | 主机 | ConfigService端口规划 | AdmingService端口规划 | | --- | --- | --- | --- | | DEV | 192.168.161.3 | 9431 | 9432 | | DEV | 192.168.161.4 | 9431 | 9432 | | DEV | 192.168.161.5 | 9431 | 9432 | ## 三、安装ConfigService和AdminService ### 3.1.创建ApolloConfigDB数据库 ConfigService 和 AdminServie都需要操作数据库`ApolloConfigDB`,官方把数据库、表的创建和样例数据都分别准备了sql文件,只需要导入数据库即可。 * 管理员账号执行初始化SQL:[sql/apolloconfigdb.sql](https://github.com/nobodyiam/apollo-build-scripts/blob/master/sql/apolloconfigdb.sql),包含建库、建表及示例数据 ~~~ # 用管理员账号登录mysql之后执行命令,创建数据库、建表及插入示例数据。 mysql > source 你的SQL所在的linux文件路径/apolloconfigdb.sql ~~~ 虽然我们用管理员账户创建数据库,但是我们一般不用管理员用户访问业务数据库,所以我建立了一个test用户,并对其进行赋权。 ~~~ CREATE USER 'test'@'%' IDENTIFIED BY '你的密码'; GRANT ALL ON ApolloConfigDB.* TO 'test'@'%' IDENTIFIED BY '你的密码'; //只有执行了这一句才可以远程登陆 FLUSH PRIVILEGES; ~~~ ### 3.2.修改ConfigService和AdminService数据库连接配置文件 apollo-configservice-1.6.1-github.zip和apollo-adminservice-1.6.1-github.zip解压之后,config目录下面也都有一个config/application-github.properties文件,修改其中的mysql ip地址、端口、用户名、密码信息,指向ApolloConfigDB所在的mysql数据库。 ~~~ # 创建目录,并解压到该目录 mkdir ./configservice && unzip apollo-configservice-1.6.1-github.zip -d ./configservice mkdir ./adminservice&& unzip apollo-adminservice-1.6.1-github.zip -d ./adminservice ~~~ > apollo-configservice-1.6.1-github.zip和apollo-adminservice-1.6.1-github.zip与portal解压之后的文件结构大同小异。如果有问题,可以看上一节内容。不同之处我会单独讲解。 * 根据你的数据库地址将localhost修改为ApolloConfigDB数据库主机ip * 根据你的ApolloConfigDB数据库修改用户名密码,我的用户名是test(上文新建的) ~~~ spring.datasource.url = jdbc:mysql://你的mysql所在主机ip:3306/ApolloConfigDB?characterEncoding=utf8 spring.datasource.username = test spring.datasource.password = 你的用户密码 ~~~ ### 3.3.修改Eureka服务注册中心连接配置 * ConfigService和AdminService是Spring Cloud微服务,所以二者需要向服务注册中心注册 * ConfigService包含eureka,所以实际上就是向ConfigService注册。我们规划的ConfigService接口是9431。 * ConfigService和AdminService都操作ApolloConfigDB,为了避免重复配置,所以官方将eureka连接配置放在了数据库里面。 在ApolloConfigDB中执行如下的SQL,配置eureka集群连接。 ~~~ UPDATE apolloconfigdb.ServerConfig SET ServerConfig.`Value`='http://192.168.161.3:9431/eureka/,http://192.168.161.4:9431/eureka/,http://192.168.161.5:9431/eureka/' WHERE `Key`='eureka.service.url'; ~~~ ## 四、ConfigService和AdminService服务启动 ### 4.1 先改端口 ConfigService和AdminService的默认端口是8080, 8090端口,按照我们的规划改成9431和9432。修改scripts/startup.sh脚本(三台服务器182.168.161.3,192.168.161.4,192.168.161.5都要改,所以可以将zip里面文件中端口改好之后再上传服务器): ![](https://img.kancloud.cn/93/85/9385ebd10bac3d3ec5cd1fd52cf1e836_408x120.png)![](https://img.kancloud.cn/6e/ef/6eef6deabe64196499f1e5acd53aa591_399x120.png) 同时要把这2个端口在防火墙上开放出来 ~~~ firewall-cmd --zone=public --add-port=9431/tcp --permanent; firewall-cmd --zone=public --add-port=9432/tcp --permanent; firewall-cmd --reload ~~~ ### 4.2.执行启动脚本 分别进入三台服务器182.168.161.3,192.168.161.4,192.168.161.5的configservice、adminservice目录下。脚本的启动顺序没有必然的先后(连接失败可以重试),但最好先启动configservice。执行startup.sh脚本(脚本的路径根据你自己的主机目录修改): ~~~ /root/apollo/configservice/scripts/startup.sh; #先在每台机器上执行这个,因为包含eureka。 /root/apollo/adminservice/scripts/startup.sh; #然后每台机器上执行这个 ~~~ ## 四、部署结果验证 * 验证eureka访问:[http://192.168.161.3:9431/](http://192.168.161.3:9431/),[http://192.168.161.4:9431/](http://192.168.161.4:9431/),[http://192.168.161.5:9431/](http://192.168.161.5:9431/),然后去检查所有实例是否启动成功。 ![](https://img.kancloud.cn/41/ca/41cabd807ef976fff87dc8725b5e42b2_1395x878.png) 按照上图中的红色标记检查部署结果。 ## 五、部署问题解决 ### 5.1.多网卡问题解决 之前我们讲过eureka的多网卡选择问题,eureka是一spring cloud(boot)服务,所以该解决方案适用于所有的spring cloud(boot)服务。也就适用于configService和adminservice。在二者的application-github.properties文件中加入网卡选择配置(参考eureka多网卡选择章节学习) ~~~ spring.cloud.inetutils.preferredNetworks=192.168 spring.cloud.inetutils.ignoredInterfaces[0]=enp0s3 spring.cloud.inetutils.ignoredInterfaces[1]=docker0 eureka.instance.hostname=peer1 eureka.instance.instance-id: ${spring.application.name}-${eureka.instance.hostname}:${server.port} ~~~ 将hostname为peer1、peer2、peer3分别应用于三台主机,配置修改完成之后,重启configservice、adminservice > 我们部署了configService,configService中默认包含了eureka,所以未来所有eureka遇到的问题都可以在configService应用中通过配置解决。 ## 六、修改Portal环境配置 因为我们新增了DEV开发环境,并且部署了ConfigService和AdminService,所以需要将其告知Apollo Portal。方法就是修改portal应用(上一节部署)的配置文件是config/apollo-env.properties。 ~~~ dev.meta=http://192.168.161.3:9431,http://192.168.161.4:9431,http://192.168.161.5:9431 ~~~ 将dev.meta的配置指向configService服务。Config service地址也可以填入IP,0.11.0版本之前只支持填入一个IP。从0.11.0版本开始支持填入以逗号分隔的多个地址。如上配置所示。 不过对于生产环境还是建议使用域名,通过SLB(Software Load Balancer:nginx or haproxy)做动态负载均衡,因为机器扩容、缩容等都可能导致IP列表的变化。 ![](https://img.kancloud.cn/e2/b3/e2b3218c9b6441662ec985ed0af1ef0b_1104x629.png) 因为我们修改了portal配置文件,所以portal也要重启。 ~~~ /root/apollo/portal/scripts/startup.sh; ~~~ ## 七、调整ApolloPortal配置 服务配置项统一存储在ApolloPortalDB.ServerConfig表中,可以通过`管理员工具 - 系统参数`页面进行配置:apollo.portal.envs - 可支持的环境列表 ![](https://img.kancloud.cn/ab/d4/abd484a76e6c96a6046760b58766806b_1145x377.png) 默认值是dev(开发环境),不用改。如果我们本节内容新增的是生产环境的配置,应该写上“dev,pro”,然后保存。查看管理员工具->系统信息,如下: ![](https://img.kancloud.cn/68/3e/683e7dd84b91fb6bef02803b1ae915e8_1534x621.png)