通过docker部署zipkin+rabbitmq+mysql

一、说明
目前正在基于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-release
2、yum -y install python-pip
3、pip install --upgrade pip
4、pip install docker-compose
5、检查是否安装成功: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依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-zipkin</artifactId>
    <version>2.2.5.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework.amqp</groupId>
    <artifactId>spring-rabbit</artifactId>
    <version>2.2.7.RELEASE</version>
</dependency>
就这两个包就行,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!!!!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiao_pa_cai0800

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值