首页 > 编程知识 正文

jmeter分布式部署详解,分布式部署的优点

时间:2023-05-04 05:23:11 阅读:214285 作者:2709

使用分布式方法搭建OpenDevOps时,是根据官网的指导文档https://docs.opendevops.cn/zh/guide/install/distribute/ 来搭建的,最后还是报502的错,用了大半天的时间各种找问题后终于解决了,现在记录一下。具体解决过程如下

报错

搭建完前端和后台后,在部署网关前使用命令检查了一下各服务的是否健康,发现都返回200,就直接进入下一步。

部署完网关之后用命令测试

[root@localhost api-gateway]# curl -I -X GET -m 10 -o /dev/null -s -w %{http_code} http://gw.opendevops.cn:8888/api/accounts/are_you_ok/

显示502错误

转到文档的FAQ部分,发现有关于502报错的解决思路

既然502是网关配置错误,要我们检查网关配置和DNS配置,那我就从这两个方面再看看吧。

DNS检查

DNS是严格按照文档内容部署的,而且之前检查各服务健康的时候也显示200了,ping所有域名的时候都能ping通,按理来说域名是没有问题的。但是以防万一,还是要检查一下配置文件。

检查/etc/resolv.conf 文件

[root@localhost api-gateway]# vim /etc/resolv.conf

文件内容如下:

其中192.168.134.156是内部DNS的IP地址,确实放在了第一条,没有问题。

检查/etc/resolv.dnsmasq文件

[root@localhost api-gateway]# vim /etc/resolv.dnsmasq

文件内容如下:

搭建文档中说这个文件用来设置上游DNS,但是我之前测试过,我使用代理上网,如果配置了这个DNS就ping不通OpenDevOps的域名了,所以我注释掉了。
这里也没有问题

检查/etc/dnsmasqhosts文件

[root@localhost api-gateway]# vim /etc/dnsmasqhosts

文件内容如下:

我是单机部署所有模块,所有域名都指向同一个IP,解析出来也是解析到同一个IP上,所以这里仔细看了一下,也没问题。
后来想了一下DNS监听端口是53/udp端口,是不是docker中的服务通过dns配置去查dns服务器的时候无法连接到该端口导致拿不到IP才导致的502报错,我在其他服务器上telnet了一下这个端口,发现确实不通,于是在防火墙上开通了53端口:

[root@localhost api-gateway]# firewall-cmd --zone=public --add-port=53/udp --permanent

重载防火墙规则

[root@localhost api-gateway]# firewall-cmd --reload

然后发现,依然不可以。502错误依然存在。

但是53端口确实是要开放的,因为后来我的502问题解决了之后尝试关闭53端口之后发现确实会出现502报错,日志中显示

至此,dns检查完毕,最后不死心把dns重启了一遍,发现结果依然不行,所有域名dig都能解析,但是网关还是报502。
只能继续下一步了

网关检查

网关检查其实就是顺着之前搭建网关的步骤重新再看一遍。
检查nginx.conf文件

[root@localhost api-gateway]# vim /opt/codo/api-gateway/conf/nginx.conf

文件内容如下:
nginx.conf中只修改了resolver的dns地址,也确实是本地dns的地址,没有问题。

检查gw.conf文件

[root@localhost api-gateway]# vim /opt/codo/api-gateway/conf/conf.d/gw.conf

文件内容如下:

仔细看了又看,觉得这个部分就保持默认就好,我之前也没修改,也没必要修改。这部分没问题。

检查configs.lua文件

[root@localhost api-gateway]# vim /opt/codo/api-gateway/lua/configs.lua

文件内容如下:

上半部分是主要关注redis配置和tocker_sercret、rewrite_cache_tocken和管理后台的配置文件/opt/codo/codo-admin/settings.py中的token_secret、secret_key是否一致。这里仔细对比之后没问题

后半部分主要是检查rui和域名端口是否匹配,这里没有修改,保持默认的,仔细对比后发现没有问题。
检查Dockerfile文件

[root@localhost api-gateway]# vim /opt/codo/api-gateway/docker-compose.yml

文件内容如下:

Dockerfile文件其实就是直接从文档中复制粘贴过来的,完全不用修改,只要再查看下是否和文档中一致就好。 我检查了一下,没有问题。
至此,网关文件检查完毕。
总觉得不应该这样,每一个步骤都是按照文档来的,最后还会报错。我就重新下载源码、导入镜像、修改配置然后编译启动docker。最后满怀希望检查了一下。还是报502。

查看网关日志-端口开放

顺着官网的排错思路没找到问题,这时候突然想到看网关日志(应该一开始就看网关日志的,但是当时想着先照着官网的方式走就没留意)

网关的错误日志为:/usr/local/openresty/nginx/logs/error.log。官方说明文档中没有特别标注,但是可以从配置文件中找到。

日志中看到有一个报错

日志当时没保留清了,这是后期模拟的

显示no route to host,妥妥的端口没开放啊。于是在防火墙上开放了以下端口

[root@localhost supervisor]# firewall-cmd --zone=public --add-port=8010/tcp --permanent[root@localhost supervisor]# firewall-cmd --zone=public --add-port=8020/tcp --permanent[root@localhost supervisor]# firewall-cmd --zone=public --add-port=8030/tcp --permanent[root@localhost supervisor]# firewall-cmd --zone=public --add-port=8040/tcp --permanent[root@localhost supervisor]# firewall-cmd --zone=public --add-port=8050/tcp --permanent[root@localhost supervisor]# firewall-cmd --zone=public --add-port=8060/tcp --permanent[root@localhost supervisor]# firewall-cmd --zone=public --add-port=8080/tcp --permanent[root@localhost supervisor]# firewall-cmd --zone=public --add-port=8888/tcp --permanent[root@localhost supervisor]# firewall-cmd --zone=public --add-port=9900/tcp --permanent[root@localhost supervisor]# firewall-cmd --reload

然后查看网关日志,果然不报no route to host错误了,开始报(5: Operation refused)了

这个refused表明后台各模块域名是通的,但是拒绝连接,我就开始怀疑有的模块可能是没有正常启动,于是我又去检查了后台各模块的问题。

查看各模块日志

前端
前端的日志路径在/var/log/nginx下,总共有6个日志文件,其中error.log是错误日志。主要看error.log是否有报错。

[root@localhost api-gateway]# vim /var/log/nginx/error.log


只有一开始部署的时候域名不通的错,因为我这台测试机是内网的,不能直接上网,用的是代理连接外网,设置了代理之后前端nginx找不到域名就会报错,取消代理之后重启前端就可以了。

后台
后台的所有日志都在/var/log/supervisor/下

其中:

cmdb_cron.log和cmdb.log是资产管理模块的日志codo_dns是域名管理模块的日志cron_jobs.log和cron.log是定时任务模块的日志exec_task.log、task_cron_app.log、task_other.log和task_scheduler.log是任务系统模块的日志kerrigan.log是配置中心模块的日志tools.log是运维工具模块的日志mg.log是管理后端的日志。

日志中可能会出现mysql、redis、mq等连不上的报错信息,如下所示:
5672端口是RabbitMQ的默认端口,这里报错信息显示连不上RabbitMQ,检查一下发现是mq的IP配置错误。如果这些日志中有报错,主要检查一下相关模块的配置即可。如果配置确认没有问题还是报错,那就有可能是端口没有在防火墙上开放。使用以下命令开放5672端口(redis和mysql的默认端口最好也开放)

[root@localhost supervisor]# firewall-cmd --zone=public --add-port=5672/tcp --permanent

重载防火墙规则

[root@localhost supervisor]# firewall-cmd --reload

重启模块后再看日志就没有报错了。
通过以上方法将所以模块都检查了一遍,然后重启网关,测试发现还是报502……502错误其实本来就和后台服务是否健康没有关系,因为如果服务没有正常启动的话,浏览器上会报500的错,但是检查一下更好。
再去查看网关的日志

[root@localhost supervisor]# vim /usr/local/openresty/nginx/logs/error.log

发现仍然报(5: Operation refused)

查看网关日志–问题解决

我能想到会出错的地方都看过了,问题还是没有解决。最后决定还是从日志入手,开始百度。百度搜索内容为"5: operation refused nginx",一个个翻下来找到了这个链接:

NGINX resolver 配置中的 “坑”

其中有一段说
于是我进入docker容器中查看了一下我的nginx的版本

[root@localhost supervisor]# docker exec -it api-gateway_gateway_1 bash[root@84229c61f571 sbin]# cd /usr/local/openresty/nginx/sbin/ && ./nginx -v

看到版本为openresty/1.15.8.1 ,果然比1.11.5版本高。

于是我在容器内修改nginx的配置文件,加上了ipv6=off这个参数。

[root@84229c61f571 sbin]# vi /usr/local/openresty/nginx/conf/nginx.conf

重启网关容器后再检查就发现报正常200了。

[root@localhost api-gateway]# curl -I -X GET -m 10 -o /dev/null -s -w %{http_code} http://gw.opendevops.cn:8888/api/accounts/are_you_ok/


然后浏览器访问–>输入账密–>成功登录

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。