欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

通过docker部署zipkin+rabbitmq+mysql

时间:2023-07-20
一、说明

目前正在基于springCloud(Hoxton.SR8)+spring-boot(2.3.1.RELEASE)+spring-cloud-alibaba(2.2.4.RELEASE)搭建微服务环境,本人玩微服务的时间算是比较长了,过去工作中由于上级要求的工期比较紧张,对于服务治理监控的组件一直没有过多接触,因此在项目规模大到一定程度之后,就吃了不重视微服务监控的亏,因此最近搭建的框架就比较注重这方面内容了,之所以写这边文档是因为在搭建zipkin+sleuth+mysql+rabbitmq的过程中浪费了我整整一天的时间,因为在部署类似中间件过程中,本人比较习惯使用docker,之所以习惯使用docker并不是自己对容器技术多么熟悉,主要是因为方便快捷,而且我特别讨厌在部署程序时配置一堆环境变量,因此部署啥玩意都喜欢用docker部署,但这次部署搞得我很郁闷,调试了很长时间。虽然网上资料不少,但要么是资料过老,要么就是胡乱copy,有用的资料不多,网上搭建zipkin过程中,往往不使用http方式,而是使用消息队列,因为http方式效率太低,但主流的配置一般都集成kafka,kafka是一个很优秀的消息队列框架,高并发还有高可用,但是kafka我很少使用,为什么,这玩意太重,而且它的API也少,我一直认为kafka更偏向于数据处理层面,像我这样偏应用侧开发的人,一般玩消息队列都使用rabbitmq,因为它API多,至于它比kafaka差的那点效率问题,我反正没多少感觉,之所以整理成文档,是因为虽然是搭建看似比较简单服务追踪组件,但在集成的过程中,适配了很久,如果不记录下来,后面就忘了,还有就是分享出来,让计划玩这块的兄弟们少走些弯路,废话不多说,开始搞................

二、Docker安装

docker安装比较简单,我不想多说,如果你连docker基本操作都不会,那还是老老实实的看别的资料把,我就把一些命令记录下来,环境是centos7,注意哈,一定要先把 SELINUX关闭,这玩意是搞centos7之前最先应该做的,不然后面会出一些乱起八糟的错误,还有就是防火墙,要么直接管了,要么记着将端口加进去,如3306、15672、5672、9411,总之别忘了!!!!

1、安装命令:

yum install -y docker

2、配置阿里容器加速器,去阿里注册,然后将链接copy下来就行,网上资料很多,我就不啰嗦了

vi /etc/docker/daemon.json{"registry-mirrors": ["这个地方填从阿里官网copy的链接"]}

3、重载阿里镜像加速器配置文件:

systemctl daemon-reload

4、重启下docker:

systemctl restart docker

三、安装RabbitMQ

1、拉取rabbitmq镜像:一定要拉取带有管理端的rabbitmq,千万别搞错

docker pull docker.io/macintoshplus/rabbitmq-management

2、启动容器

docker run -d --name rabbitmq -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -p 15672:15672 -p 5672:5672 3f92e6354d11(这是镜像id,使用“docker images”查查自己刚刚拉取的rabbitmq镜像ID)

3、打开rabbitmq管理端看看能进去吗? http://ip:15672/

三、安装mysql

我感觉zipkin对数据库的版本是有要求的,一开始配置时,我直接将zipkin与mysql和rabbitmq一块配置上了,就是不成功,开始以为是rabbitmq集成有问题,后来才发现是mysql版本的问题,我的mysql版本有点高,最后安装了mysql:5,7才搞定的,最可气的是,就算mysql版本不对,zipkin是能正常启动的,反正就是坑死我了

1、拉取mysql5.7镜像

docker pull mysql:5.7

2、启动容器

docker run -p 3306:3306 --name mysql -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

3、创建数据库,由于zipkin默认使用数据库实例名就是“zipkin”,我担心节外生枝,在创建数据库时直接就是用的这个名字,别的名字没试过,应该问题不大

4、创建数据库表,zipkin对数据库表我感觉也是需要匹配的,我担心这个问题,就从github上的源码里下载了一份

---- Copyright 2015-2019 The OpenZipkin Authors---- Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except-- in compliance with the License、You may obtain a copy of the License at---- http://www.apache.org/licenses/LICENSE-2.0---- Unless required by applicable law or agreed to in writing, software distributed under the License-- is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR ConDITIONS OF ANY KIND, either express-- or implied、See the License for the specific language governing permissions and limitations under-- the License.--​CREATE TABLE IF NOT EXISTS zipkin_spans (  `trace_id_high` BIGINT NOT NULL DEFAULT 0 COMMENT 'If non zero, this means the trace uses 128 bit traceIds instead of 64 bit',  `trace_id` BIGINT NOT NULL,  `id` BIGINT NOT NULL,  `name` VARCHAr(255) NOT NULL,  `remote_service_name` VARCHAr(255),  `parent_id` BIGINT,  `debug` BIT(1),  `start_ts` BIGINT COMMENT 'Span.timestamp(): epoch micros used for endTs query and to implement TTL',  `duration` BIGINT COMMENT 'Span.duration(): micros used for minDuration and maxDuration query',  PRIMARY KEY (`trace_id_high`, `trace_id`, `id`)) ENGINE=InnoDB ROW_FORMAT=COMPRESSED CHARACTER SET=utf8 COLLATE utf8_general_ci;​ALTER TABLE zipkin_spans ADD INDEX(`trace_id_high`, `trace_id`) COMMENT 'for getTracesByIds';ALTER TABLE zipkin_spans ADD INDEX(`name`) COMMENT 'for getTraces and getSpanNames';ALTER TABLE zipkin_spans ADD INDEX(`remote_service_name`) COMMENT 'for getTraces and getRemoteServiceNames';ALTER TABLE zipkin_spans ADD INDEX(`start_ts`) COMMENT 'for getTraces ordering and range';​CREATE TABLE IF NOT EXISTS zipkin_annotations (  `trace_id_high` BIGINT NOT NULL DEFAULT 0 COMMENT 'If non zero, this means the trace uses 128 bit traceIds instead of 64 bit',  `trace_id` BIGINT NOT NULL COMMENT 'coincides with zipkin_spans.trace_id',  `span_id` BIGINT NOT NULL COMMENT 'coincides with zipkin_spans.id',  `a_key` VARCHAr(255) NOT NULL COMMENT 'BinaryAnnotation.key or Annotation.value if type == -1',  `a_value` BLOB COMMENT 'BinaryAnnotation.value(), which must be smaller than 64KB',  `a_type` INT NOT NULL COMMENT 'BinaryAnnotation.type() or -1 if Annotation',  `a_timestamp` BIGINT COMMENT 'Used to implement TTL; Annotation.timestamp or zipkin_spans.timestamp',  `endpoint_ipv4` INT COMMENT 'Null when Binary/Annotation.endpoint is null',  `endpoint_ipv6` BINARY(16) COMMENT 'Null when Binary/Annotation.endpoint is null, or no IPv6 address',  `endpoint_port` SMALLINT COMMENT 'Null when Binary/Annotation.endpoint is null',  `endpoint_service_name` VARCHAr(255) COMMENT 'Null when Binary/Annotation.endpoint is null') ENGINE=InnoDB ROW_FORMAT=COMPRESSED CHARACTER SET=utf8 COLLATE utf8_general_ci;​ALTER TABLE zipkin_annotations ADD UNIQUE KEY(`trace_id_high`, `trace_id`, `span_id`, `a_key`, `a_timestamp`) COMMENT 'Ignore insert on duplicate';ALTER TABLE zipkin_annotations ADD INDEX(`trace_id_high`, `trace_id`, `span_id`) COMMENT 'for joining with zipkin_spans';ALTER TABLE zipkin_annotations ADD INDEX(`trace_id_high`, `trace_id`) COMMENT 'for getTraces/ByIds';ALTER TABLE zipkin_annotations ADD INDEX(`endpoint_service_name`) COMMENT 'for getTraces and getServiceNames';ALTER TABLE zipkin_annotations ADD INDEX(`a_type`) COMMENT 'for getTraces and autocomplete values';ALTER TABLE zipkin_annotations ADD INDEX(`a_key`) COMMENT 'for getTraces and autocomplete values';ALTER TABLE zipkin_annotations ADD INDEX(`trace_id`, `span_id`, `a_key`) COMMENT 'for dependencies job';​CREATE TABLE IF NOT EXISTS zipkin_dependencies (  `day` DATE NOT NULL,  `parent` VARCHAr(255) NOT NULL,  `child` VARCHAr(255) NOT NULL,  `call_count` BIGINT,  `error_count` BIGINT,  PRIMARY KEY (`day`, `parent`, `child`)) ENGINE=InnoDB ROW_FORMAT=COMPRESSED CHARACTER SET=utf8 COLLATE utf8_general_ci;​

四、安装zipkin

由于使用docker安装,但网上有很多使用下载jar安装,我嫌麻烦,还要配置jdk,我使用的是docker-compose安装的,但安装docker-compose也挺费事,如果你像按照这篇文档一步一步完成搭建,就按照此方法安装吧,别的方式我不保证不出错误哈

1、安装Docker-Compose

1、yum -y install epel-release2、yum -y install python-pip3、pip install --upgrade pip4、pip install docker-compose5、检查是否安装成功:docker-compose -version

2、创建docker-compose.yml,由于是yml文件,要求格式比较严谨,别多空格也别少空格,仔细检查检查

version: '2'services: zipkin:   container_name: zipkin # 这是容器启动之后的名称,不用改它   image: openzipkin/zipkin # 这是zipkin的镜像名称,别写错   environment:     - STORAGE_TYPE=mysql     - MYSQL_DB=zipkin #数据库名称     - MYSQL_USER=root     - MYSQL_PASS=123456     - MYSQL_HOST=192.168.0.112 # 部署数据库的服务器地址     - MYSQL_TCP_PORT=3306     - RABBIT_ADDRESSES=192.168.0.112:5672 #部署rabbitmq服务器地址,可以和数据库的地址一样也可以不一样     - RABBIT_USER=admin     - RABBIT_PASSWORD=admin   ports:     - 9411:9411

3、进入docker-compose.yml所在的目录,启动容器

docker-compose up -d

五、给每个需要监控的微服务配置maven和yml

这个环节也挺坑的,网上说的yml配置文件,我看到的版本就不下5种,我真是不明白这些文档真能配置成功吗!反正我没有配置成功

1、配置maven依赖

  org.springframework.cloud   spring-cloud-starter-zipkin   2.2.5.RELEASE   org.springframework.amqp   spring-rabbit   2.2.7.RELEASE

就这两个包就行,mysql的包我就不贴了,因为我用的是mysql+mysqlplus,自己写配置类挺复杂的,贴上去反而不好,反正你的微服务能连数据库就OK了,记住关于zipkin和rabbitmq的包就这两个,当然前提是你的springcloud和springboot环境我一样,至少得springBoot2.0以上吧

2、配置微服务yml文件,我直接在bootstrap.yml里配的,需要说明的是,zipkin和rabbitmq是同级别,都在spring下边,千万别配错,网上有些别的配法,我都试了,没成功

zipkin:   sender:     type: rabbit rabbitmq:   host: 192.168.0.112   port: 5672   username: admin   password: admin   listener:     direct:       retry:         enabled: true     simple:       retry:         enabled: true

over!!!!

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。