1. 【微服务】- SpringBoot Admin
目录:
Spring Boot Admin 用于管理和监控一个或者多个Spring Boot应用, Spring Boot Admin 分为Server端和Client端,Client通过http向Server端注册, 也可以结合Spring Cloud 的服务注册组件Eureka 进行注册。
SpringAdmin 的监测详细信息有如下:
本文的所有工程的Spring Boot版本为2.2.2.RELEASE,SpringBootAdmin版本为2.2.1。
这样Admin Server就创建好了。
到此,SpringBoot-Admin-Client 工程创建完成。
启动Admin-Server,Admin-Client两个工程,在浏览器上输入localhost:8769 ,浏览器显示的界面如下:
查看wallboard:
更多监控信息,自己体验。
eureka-server搭建完毕。
到此admin-server 搭建完成。
到此,Eureka-Server,Admin-Server-Eureka-Client,Admin-Client-Eureka-Cleint 三个工程搭建完成
启动三个工程,在浏览器上访问localhost:8769,浏览器会显示和上一小节一样的界面。
在2.1.0版本中去掉了hystrix dashboard,登录界面默认集成到了spring security模块,只要加上spring security就集成了登录模块。
重启启动工程,在浏览器上访问: http://localhost:8769/ ,会被重定向到登录界面,登录的用户名和密码为配置文件中配置的,分别为admin和admin,界面显示如下:
源码: https://github.com/lbshold/springboot/tree/master/Spring-Boot-Admin-Demo
2. 基于DNS搭建高可用Eureka注册中心
按Alt + 回车键,将会生成eureka-server.zip,解压缩后得到一个maven 项目,将该项目录入IDE。
我们首先来看一下pom文件,可以看出项目中引用了spring-cloud-starter-netflix-eureka-server, 并且springboot 的版本号为:2.1.2.RELEASE, Spring Cloud的版本号为:Greenwich.RC2RC2 表示还没有正式发布,只是第二个Release Candidate。
接下来我们只需要两个步骤,
a、修改EurekaServerApplication, 在@SpringBootApplication的注解上面,加入一个新的注解:@EnableEurekaServer
b、在resources 目录中加入application.yml 文件, 并配置以下信息:
一个简单的Eureka 注册中心就已经可以使用了,我们运行一下这个spring boot 应用,找开浏览器:localhost:8761,即可看到我们的注册中心就已经运行启来了。并且EUREKA-SERVER也注册到自己的注册中心了。
单节点的注册中心已经搭建完毕,但单节点的注册中心存在单点故障的可能,不能用于生产环境。生产环境的Eureka一般采用集群方式进行部署。
通过client.serviceUrl.defaultZone配置多个peer节点,因为是在单机上测试,所以修改了host文件,并且使用不同的端口号来启动注册中心。正式的生产环境请根据自己的实际情况进行配置,比如:第一台Eureka的IP地址为:192.168.0.100,则defaultZone配置其他三台注册中心http://192.168.0.101:8761/eureka/,http://192.168.0.102:8761/eureka/,http://192.168.0.103:8761/eureka/
依次启动4台注册中心,打开网页:http://localhost:8764
可以看到其它三台注册中心已经出现在已注册的replicas和可用的replicas列表里边。
如上图所示,4台注册中心,每台注册中心需要配置其他三台服务器,以Eureka 1为例,其配置如下:
注册中心是本应该是无状态的,可以横向扩展。但由于每台注册中心的配置都不一样,所以扩展起来比较麻烦,需要修改配置文件,这样就无法做到快速的扩容。
微服务客户端需要配置注册中心的地址,使用的是如下的配置:
由于配置的是固定的IP地址,如果我们要扩容注册中心,增加新的注册中心节点,那我们就需要修改微服务客户端的配置文件,将新的注册中心节点进入的服务器列表中。试想一下,如果有几十个微服务,每个微服务有4个节点,那将会要修改上百个配置文件。很显然这种方式不太可取,从软件设计角度来说,违反了开闭原则。
其实Eureka 注册中心还有另一种高可用配置方式,基于DNS。Eureka天生就可以部署在像AWS这样的公有云上,并且可以跨Region,跨Available Zone部署。虽然我们不用部署在云端,依然可以利用这一特性,我们可以把Region看作我们数据中心的机房,Avaiable Zone 看作是机房中的网络区域,结合内部DNS服务来实现高可用的注册中心。
画重点:
a. region: default,配置地区
b. useDnsForFetchingServiceUrls,表示基于DNS获取服务信息
c. eurekaServerDNSName: eureka.txzq.com.cn,配置域名服务器名称
键:txt.default.eureka.txzq.com.cn 值:shenzhen.eureka.txzq.com.cn
键:txt.shenzhen.eureka.txzq.com.cn 值:172.18.10.1 172.18.10.2 172.18.10.3 172.18.10.4
第一条记录表示,default 区域,包含了哪些可用区,我们用shenzhen表示是深圳机房,txt记录的值就设置为:shenzhen.eureka.txzq.com.cn
第二第记录表示 , shenzhen机房有哪些服务器,多台服务器使用空格格开。
如果在本地测试,需要搭建一台自己的DNS服务器,可以参考我的另一篇文章: 基于Docker快速搭建DNS Server
Client View是指DNS服务应用到哪一个网段,比如:172.18.10.0/24网段的IP连接到BIND服务器,才会解析指定的域名。
在添加域名的时候,需要指定Client View,这里我们选择我们刚刚创建的View_172.18.10.0,指的是只有在这个网段的IP访问这台DNS服务器,才能解析。
添加完一级域名后我们刷一下这个ZONE,然后设置一下本地DNS服务器
DNS域名服务器验证通过后,我们接下来就可以在为这个域名添加我们所需要的txt 记录了。
到这里我们的准备工作就已经基本完成了。使用Maven将注册中心编译成,输出jar包。新建一个Eureka的docker镜像,并启动4个容器。基于DNS的注册中心就搭建完毕了。
你只需要对DNS记录进行变更,就可以实现动态的、快速扩容/缩容了。
关于如何将Eureka部署到Docker,请参考另一篇文章:
3. SpringCloud 集成 Eureka服务 部署阿里云服务器
将SpringCloud集成Eureka服务部署在阿里云服务器。
项目在上一篇博客讲过在本地测试SpringCloud集成Eureka服务,博客地址:
https://www.jianshu.com/p/78e8797ea804 ,现在将3个项目部署在阿里云服务器,环境是CentOS7,Tomcat 9。
在pom.xml文件里设置打包方式:
在启动Application类添加:
在application.properties配置文件修改:
直接把项目lean下,再package:
打包后的war包在target目录下:
修改pom.xml依赖:
程序入口application类修改:
消费者的api请求路径修改:
application.properties修改
直接对项目lean,再package:
3.Eureka Client项目demo打包跟1类似,这就不重复写了;
3个项目打包好的包名:springcloud-eureka.war,springcloud-eureka-client-one.war,springcloud-eureka-client-one.war:
4.将3个war部署阿里云服务器
登录阿里云的白塔控制面板,将3个包上传到Tomcat的webapps文件夹下:
或者通过xftp工具上传也可以;
上传完后,重启Tomcat,等一会,就可以在浏览器里访问:
相关链接:
成功截图: