-
-
Notifications
You must be signed in to change notification settings - Fork 10.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
如何简化Apollo的分布式部署流程? #1424
Comments
在目前的架构下,我们先来看单机布署一个环境要做哪些事情: 1,构建后发布。构建时选自己的 profile 加上 github 即可,原封不动官方配置。我们是自己拉代码下来自己构建的,所以有构建这一步。 2,修改配置。
为了方便修改,数据库配置我们写到 config/application-github.properteis,portal 的注册中心配到 config/apollo-env.properteis
3,客户端 一个环境差不多要做就是这些。大家一般都是下载 release 版不用自己构建。配置部分的细节确实有点繁琐。对于 config 和 admin 服务,我的理解是配置文件类其实仅修改日志路径,和数据库配置即可,其他可以不改。portal 服务配一个好记的 http 访问端口。 好,以上说完单机单环境,现在看分布式或集群下的部署有没有优化空间。 分布式部署的话,portal 的话一般一个即可,但我觉得大部分公司还是要求生产和开发、测试分离的 , 所以上面的步骤好像免不了都要走一遍: 1,构建看不同公司的需求,一般可以省略,直接发布应用即可。我们是因为增加了导出,所以合并做了构建,不知是否可以提个 PR ? 2,configdb,不同环境肯定是要新建立的。portaldb 要增加 env meta(这里假设 portal 不用重新部署) 总体下来感觉要优化的话可以从怎么优化 修改配置和数据库的细节入手。我觉得可以优化几点,总体的思路是配置集中化管理,可以配到数据库就配到数据库(这样方便扩展去界面管理): 1,portal 应用,把 portal 连注册中心的地址配到 portaldb。这个时候对于 env 可以根据注册中心来增加,比如 dev.meta 就增加 dev,fat.meta 就增加 fat 这样的化 config 和 admin 的配置就简化了。 以上抛砖引玉,欢迎讨论。顺便感谢宋大侠对社区的时刻关心,及时雨啊。感谢 @nobodyiam |
单机版: ./demo.sh start,portal一直无法执行到,是不是有bug? 把脚步portal启动部分独立开来就可以启动。 |
@jiangshubian 开个新的issue描述你的问题吧,估计是下载的时候少了conf文件?比如apollo-service.conf |
@nobodyiam 宋大神,想请教一下,Eureka和Meta server引入的目的是做config/admin server的服务发现吗?既然SLB(nginx)可以找到Meta server, 为什么不直接用域名绑SLB,SLB去LB config server,client 直接访问SLB->config server?这样就可以取消Eureka和Meta server的必要性了。 |
client需要长连config service的(http long polling),如果走slb的话,对slb的压力太大。 |
@nobodyiam 谢谢。那如果域名绑定多个SLB,即SLB集群,是不是就可以了呢?我们自己使用AWS环境,有NLB组件,单个NLB的性能就相当不错,可以认为是网络设备而不是SLB(nginx)。 |
如果性能OK的话,倒也无所谓的,不过走LB也是有点浪费,因为内网其实完全可以直连的。 另外,直连规模也要考虑一下的,比如如果内网有6位数的机器,就会有6位数的长连,势必会增加不少LB的成本吧。。 另外一点就是走LB的话,需要在LB上调整超时时间的,目前apollo的http long polling最长会保持60秒。 |
@nobodyiam 明白这个考量点了,谢谢 。对于6位数的时候,config server的节点经验上需要部署多少个呢?假设4核16G的机器。 |
一台4核8G的config service服务10000以内的节点数是没问题的,留一些余量的话,建议一台服务6000 - 7000个节点吧 |
个人感觉,可以将config service和admin service集成在一起;即作为各个env下的client服务,又为总的管理后台portal服务 |
我看到文档中写到如果需要使用单独的eureka注册中心的话,除了修改数据库中的url外,还需要修改源码将@EnableEurekaServer改成@EnableEurekaClient,然后重新打包编译源码。
打包的时候-Dapollo_profile=github,EurekaClient来激活配置 |
部署文档可以以三台机器模拟的三个不同的环境为例,一步步写下如何部署的以便参考.与部署不相关的"注1" "注2" 等信息可以另写一篇参考文档, 分布式部署文档内容分支太多, 也繁琐, 不干净不流畅. |
@lawrencewu 很好的建议,后续分布式部署文档增加一个实际部署案例 |
linux suse 版本下会报错start-stop-daemon unrecognized option '--chuid' |
@jimmy401 这个貌似是spring boot脚本的问题,详见 #spring-projects/spring-boot#4772 和 Customizing the Start Script when It Is Written,可以试一下,如果OK的话,后续我们在文档中更新一下~ |
视频为主,文档为辅,事半功倍。 |
当前项目是使用springCloud+docker+k8s技术,生产环境和预生产环境是的各自独立k8s集群,开发测试是在单个服务器通过docker部署springCloud,当前项目架构下,打算接入apollo,遇到一些问题想请教一下 |
|
1、通过修改启动脚本 startup.sh 增加 JAVA_OPTIONS 部署 Portal 启动脚本
ConfigService 启动脚本
AdminService 启动脚本
|
@thinkerFenglm 现在分布式部署方案是通过修改config目录下的application-github.properties和apollo-env.properties来实现的,你的建议是都放在JAVA_OPTS里面? |
@nobodyiam 是的,读取配置的是有优先级的,通过在启动脚本里设置 JAVA_OPTS 可以最简单的解决需要打不同包的,而且易于一些配置的修改,只用修改完重启就行不用打包重新部署。 |
现在都不用打包的,下载官网上打好的包,修改配置的文件中内容就可以了。你说的这个只是在哪里配置的问题,从配置文件转移到脚本文件了而已。 |
我看数据库和负载均衡都是单点,就想问问如果数据库挂了,负载均衡挂了,貌似没办法高可用了吧。 |
数据库挂了,需要切库,负载均衡挂了,也是需要切的,都有成熟方案的。 |
疑问:为什么会采用http长轮询?tcp通讯是否可以? |
@xiaoxing598 用http长轮询的原因是简单、可靠、够用,用tcp当然也是可以的,只是在配置下发的场景没有很大的必要性,而且对多语言接入会增加门槛。 |
搞成springboot jar 我们可以引用jar 最好,类似springboot config 升级也方便!现在部署麻烦,升级更加! |
还有一个地方可以入手,就像前面 @happymatt 提到的 spring cloud config 模式,支持“多租户”模式。 |
我给的建议是: 上面纯属我自己的意淫,如果觉得不对,尽管拍砖把我拍醒。 |
宋老板早点出一个官方的 helm-chart 吧 |
这个有点像wordpress初始化 |
1.6.1版本启用了秘钥后直接curl访问的时候报401,启用秘钥的要怎么使用了?我是运维(看源码有点困难)需要curl访问获取配置,怎么秘钥curl访问 |
#3055 尝试使用原生的k8s服务发现来简化部署和运维的复杂度,同时支持了 helm chart 部署,大家可以体验一下 |
我通过文档部署了,反馈几点意见
总体还算流畅 👍👍 |
|
多谢,
|
这两天尝试写一个ansible playbook来部署 |
https://helm.sh/docs/howto/charts_tips_and_tricks/#automatically-roll-deployments |
@hulucc good idea,是否能提交个 PR? |
这个分布式部署指南感觉写的太杂乱了。 实际上能够直接用命令 + 步骤说明的方式 让刚接触的人部署完毕、成功跑起来就够了。 至于参数解释、以及更进阶的说明完全可以放入其他的文档。 |
宋老师,我想知道你说的切库是设么概念,数据库挂了,切库只能修改配置重启服务,这算是高可用吗?(可能我理解的比较浅薄,多谢指正) |
|
请问参照Docker部署,如何替换默认的“eureka”为“Consul”? |
Docker 部署简而言之就是把配置参数通过 -e 传入即可。
|
看到了文档里的“注5”,谢邀:) 非技术向: 技术向: // 10.0.3.10是config的SLB
apollo-adm create config-service --bind 10.0.3.11:8080 --jdbc apollo:[email protected]:3306
apollo-adm create config-service --bind 10.0.3.12:8080 --jdbc apollo:[email protected]:3306
// 10.0.2.10是admin的SLB
// 创建admin-service,并指向config-service的SLB
apollo-adm create admin-service --bind 10.0.2.11:8090 --config-service 10.0.3.10:8080 --jdbc apollo:[email protected]:3306
apollo-adm create admin-service --bind 10.0.2.12:8090 --config-service 10.0.3.10:8080 --jdbc apollo:[email protected]:3306
// 10.0.1.10是portal的SLB
// 创建potal,并指向admin-service的SLB
apollo-adm create portal-service --bind 10.0.1.11:8080 --admin-service 10.0.2.10:8090 --jdbc apollo:[email protected]:3306
apollo-adm create portal-service --bind 10.0.1.12:8080 --admin-service 10.0.2.10:8090 --jdbc apollo:[email protected]:3306 |
@Alceatraz 感谢建议,通过声明式的方式来部署确实能极大地简化部署的难度。目前 Apollo 是提供了 Helm Chart 部署方式,可以看下是否达到了类似的效果~ |
文档显得乱,是因为 重复的太多了,细节也很多,像是想在一篇文档里写完所有的步骤。 细节的配置项,在第一次部署时是不会考虑,只想按最简的默认值启动服务。 所以 可以把java_opts 这类的配置项 放在“高级配置” 的文档里。 可以写一个脚本,只要修改 数据库的 信息, 就可以自动用默认值 安装启动3个服务。 其他细节,等启动成功后,才有兴趣去了解。 也可以使用 ansible 部署,不过也有门槛。 |
【小白求助】 部署apollo出现问题:【系统出错,请重试或联系系统负责人】 数据库在虚拟机中 192.xxx,3个服务在本地运行(localhost,同时与数据库ip不同)。
请问应该怎么配置呀?搞了好久没弄明白。。。。 顺道提个建议: |
@Lilliu1 可以看下管理员工具 - 系统信息页面 |
我们公司服务器都是windows,如果本身项目不是那么庞大,不需要分布式来部署apollo,是否可以使用官方的Quick Start?本地用起来没什么问题,也方便,但是文档又提示不要用在生产环境。 |
Quick Start 没有经历过真实的生产环境考验,所以默认不推荐。如果规模不大,对可用性要求也不是特别高的话应该可以使用。 |
目前Apollo的一个痛点就是分布式部署有点太复杂了,虽然文档写得很细,不过乍看一下,细节非常多,如果用户没有耐心读完文档就开始部署的话,一般都会遇到这样那样的问题,影响体验。
所以还想请大家一起看看是否有啥办法能够简化Apollo的分布式部署流程,欢迎大家献计献策!
The text was updated successfully, but these errors were encountered: