Sonatype Nexus3

sonatype/nexus3

Sonatype Nexus Repository ManagerOSS 3.12.1-01,OSS:对象存储服务。
Maven项目默认都是直接使用Maven提供的Central Repository,还可以创建一个私有的Repository(Internal Repository),所有项目都只和这个专属的Repository打交道,包括下载依赖,部署等,专属Repository有以下好处:
代理外部Repository(比如Maven Central Repository),可以对外部Repository做各种各样的过滤操作,比如可以限制只使用Spring的某个版本。
通过代理,专属Repository还可以起到缓存的作用,这样公司的每个开发者只需要从局域网的专属Repository下载依赖,而不用消耗对外网络资源。
发布公司自己的项目,如果开发的项目需要被公司的其他团队使用,而又不能发布到公司外部的Repository中,那么专属Repository是正中下怀的选择。
发布一些购买的第三方软件产品以供公司所有人使用,比如Oracle的数据库Driver。
存在多种专属Repository,比如NexusArtifactory等,甚至可以用一个FTP服务器作为一个专属Repository。下面通过docker启动一个nexus私有仓库:
持久目录 needs to be writable by the Nexus process, which runs as UID 200。启动完成后,在浏览器中访问 http://ip:8081/。

$ mkdir /alidata/docker_work/maven/repository && chown -R 200 /alidata/docker_work/maven/repository
$ docker run -d -p 8081:8081 --name nexus1 -v /alidata/docker_work/maven/repository:/nexus-data sonatype/nexus3

参考
https://hub.docker.com/r/sonatype/nexus3/#running
https://blog.csdn.net/wanghuan1191/article/details/79104303
https://www.cnblogs.com/helong/articles/2254446.html
Nexus Repository 3的性质
https://blog.csdn.net/liumiaocn/article/details/62050525
sonatype Nexus3 用户操作界面和设置
https://www.jianshu.com/p/6139ede291d2
maven的setting配置文件中mirror和repository的区别
https://www.jianshu.com/p/274c363ffd7c

在模块pom中指明要部署到的目的Repository

配置snapshot和release两种发布版本对应的Repository:
<distributionManagement>
<repository>
<id>nexus</id>
<name>Internal Release Repository</name>
<url>http://ip:8081/repository/maven-releases</url>
</repository>
<snapshotRepository>
<id>nexus</id>
<name>Internal Snapshot Repository</name>
<url>http://ip:8081/repository/maven-snapshots</url>
</snapshotRepository>
</distributionManagement>

nexus中会为同一个版本的每次deploy生成一个时间戳,业务端去仓库下载时会下载到最后的一次提交。

直接在pom中设置仓库

在业务项目中配置一个远程仓库。
<repositories>
<repository>
<id>nexus1</id>
<name>nexus1</name>
<layout>default</layout>
<!– 此为仓库地址,应用 group 类型可以相当于同时添加多个仓库地址 –>
<url>http://ip:8081/repository/maven-snapshots/</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>

在.m2/settings.xml中设置远程仓库

在settings.xml中设置的远程仓库会被所有项目使用。如果此远程仓库不能连接访问,在maven构建时会到中央仓库去查找。
<profiles>
<profile>
<id>NexusRepo</id>
<repositories>
<repository>
<id>nexus</id>
<name>Nexus3 Repository</name>
<url>http://xxxx:8081/repository/maven-snapshots/</url>
<releases>
<enabled>true</enabled>
</releases>
<!– snapshots默认是关闭的,需要手动开启 –>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
</profile>
</profiles>
<!– 只有激活后才生效,此代码为激活代码 –>
<activeProfiles>
<activeProfile>NexusRepo</activeProfile>
</activeProfiles>

在.m2/settings.xml中设置仓库的镜像

mirrorOf中的仓库被访问时会自动找镜像,如果此镜像无法访问就不会再去中央工厂。
镜像对应的仓库不必在repositories中配置。

<mirror>
<id>nexusMirror</id>
<!– *号代表所有仓库,central代表中中央仓库,此处也可以单独设置,以逗号隔开 –>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<!–这个url从仓库列表中maven-central行中拷贝–>
<url>http:// xxxx:8081/repository/maven-central/</url>
</mirror>

Rancher

2017年Kubernetes在容器编排领域一统江湖,伴随着Kubernetes的发展壮大,及其CNCF基金会的生态发展,对整个云计算领域的发展必将产生深远的影响。有了Kubernetes的强力加持,云计算中长期不被看好和重视的PAAS层,也正逐渐发挥威力。很多厂商开始基于Kubernetes开发自己的PAAS平台,这其中感觉比较有代表性的有Openshift和Rancher。

OpenShift

1、集群需要一个可解析的主机名:
sudo vim /etc/hosts
添加下面内容到hosts文件
127.0.0.1 openshift.example.com
hostnamectl set-hostname openshift.example.com

搭建Openshift环境
https://blog.csdn.net/shaoyangdd/article/details/79859807

failed to run Kubelet: failed to create kubelet: misconfiguration: kubelet cgroup driver: “systemd” is different from docker cgroup driver: “cgroupfs”
https://blog.csdn.net/engchina/article/details/78823347

Rancher

Rancher

Rancher中的概念
Rancher默认采用Cattle编排方式。
环境:每个环境具有自己独立的基础设施资源及服务,并由一个或多个用户、团队或组织管理。例如,你可以创建独立的“开发”、“测试”及“生产”环境以确保环境之间的安全隔离,将“开发”环境的访问权限赋予全部人员,但限制“生产”环境的访问权限给一个小的团队。
所有主机和Rahcner资源, 比如容器, 基础设施服务等, 都在环境中被创建, 并且属于一个环境。
主机:主机是调度资源的基本单位(直观的理解就是所发生的操作最终都会落到某台主机上),它可以是虚拟的或者物理的Linux服务器。
应用:应用是将服务组合在一起的便捷方式。
服务:服务定义为从同一Docker镜像创建的一个或多个容器。

Rancher2.0中使用外置NFS存储部署Nginx实验
https://www.cnblogs.com/rancher-maomao/p/9188873.html

Linux 性能监测

free

free命令可以用来查看系统内存使用情况。
命令参数:
–help 帮助
-h show human-readable output
-b  以Byte为单位显示内存使用情况。
-k  以KB为单位显示内存使用情况。
-m  以MB为单位显示内存使用情况。
-g 以GB为单位显示内存使用情况。
-o  不显示缓冲区调节列。
-s<间隔秒数>  持续观察内存使用状况。
-t  显示内存总和列。
-V  显示版本信息。
显示列:
total:总的物理内存
used:使用中的内存
free:完全空闲的内存

top

top命令用来监控linux的系统状况,比如cpu、内存的使用。
显示解释:
第一行内容有:当前系统时间、系统运行时长、当前登录系统用户数、1分钟、5分钟、15分钟的负载情况。
load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5就表明系统在超负荷运转。

top命令是Linux上进行系统监控的首选命令,但top命令的监控最小单位是进程,所以看不到程序的线程数和客户连接数,通常可以ps和netstate两个命令来补充top的不足。

CentOS详解top命令各个数据的含义
https://www.cnblogs.com/ronli/p/centos-top.html

top交互命令

在top命令执行过程中可以使用的一些交互命令。这些命令都是单字母的,如果在命令行中使用了-s选项, 其中一些命令可能会被屏蔽。

h:显示帮助画面,给出一些简短的命令总结说明;
k:终止一个进程;
i:忽略闲置和僵死进程,这是一个开关式命令;
q:退出程序;
r:重新安排一个进程的优先级别;
S:切换到累计模式;
s:改变两次刷新之间的延迟时间(单位为s),如果有小数,就换算成ms。输入0值则系统将不断刷新,默认值是5s;
f或者F:从当前显示中添加或者删除项目;
o或者O:改变显示项目的顺序;
l:切换显示平均负载和启动时间信息;
m:切换显示内存信息;
t:切换显示进程和CPU状态信息;
c:切换显示命令名称和完整命令行;
M:根据驻留内存大小进行排序;
P:根据CPU使用百分比大小进行排序;
T:根据时间/累计时间进行排序;
w:将当前设置写入~/.toprc文件中。
shift+m: 按内存占用比排序

top显示结果字段含义

列名 含义
PID 进程ID
USER 进程所有者的用户名
PR 任务优先级
NI nice值,数值越小表示优先级越高。
VIRT 进程使用的虚拟内存总量。单位:kb,VIRT=SWAP+RES。
RES 进程使用的、未被换出的物理内存大小。单位:kb,RES=CODE+DATA。
SHR 共享内存大小。单位:kb。
S 进程状态,表示如下:
D= 不可中断的睡眠状态
R= 运行
S= 睡眠
T= 跟踪 / 停止
Z= 僵尸进程
%CPU 上次更新到现在的 CPU 时间占用百分比。
TIME+ 进程使用的 CPU 时间总计,精确到 1/100 秒
COMMAND 命令名 / 命令行

测试工具

《Linux就该这么学》 https://www.linuxprobe.com/chapter-00.html

siege用于压测
VisualVm用于监测

性能检测工具:
vmstat命令可以输出cpu、内存采样,例如每秒采样一次: vmstat 1。
iostat命令可以输出磁盘的信息,比如使用率、IOPS和数据吞吐量等。

时序数据库

influxdb

measurement和tags共同称为key,如果在tag value中的空格,应以“\”加上空格表示。
tag中的值必须是string类型,其实是起到索引的作用。

field中的值可以为Integer、float、Boolean、string类型。若为Integer类型,则值后必须加“i”,否则该值为float类型,Boolean类型的值的表示方式有很多,直接写成:t、T、true、TRUE, 和 f、F、false、FALSE。
插入数据时,时间戳部分如果被省略,则默认将当前时间的时间戳插入数据库,否则按照用户输入的时间戳插入。

influxDB属于时序数据库,没有提供修改和删除数据的方法。但是删除可以通过InfluxDB的数据保存策略(Retention Policies)来实现。
测试发现,重写同一条记录可覆盖上一条记录,可以做到修改这条记录。
另外分析,从系统整体上来看,updateTime并没有使用到,因为实时数据并不再从数据库中查询获得,而是使用内存中的最新采集数据。查询统计时使用的时间是createTime。
如果不记录updateTime,并且如果最新采集数据一直没有特征变化,最终数据库中存储的可能是较早期采集插入的数据。
如果不记录updateTime,并且如果要存储最后一次采集时间,可额外记录。一般情况下,当前时间即是最新一条记录的修改时间,下一条数据的创建时间减去采集周期是上一条数据的最后修改时间。

wget https://dl.influxdata.com/influxdb/releases/influxdb-1.5.2.x86_64.rpm
sudo yum localinstall influxdb-1.5.2.x86_64.rpm
service influxdb start

#命令行连接
influx -precision rfc3339
drop database mydb1
CREATE DATABASE mydb1
SHOW DATABASES 
USE mydb1
SHOW MEASUREMENTS
drop measurement measurement1

#增加数据采用insert的方式,表名与数据之间用逗号(,)分隔,tag和field之间用 空格分隔,多个tag或者多个field之间用逗号(,)分隔。
INSERT measurement1,field1=serverA,field1=us_west field3=0.64

select * from "measurement1"
select * from measurement1 limit 1
select * from "measurement1" where "value">0.9  

#series表示表里面的数据,series主要通过tags排列组合算出来。
show series from measurement1

InfluxDB简明手册
https://legacy.gitbook.com/book/xtutu/influxdb-handbook/details

使用influxdb和grafana快速开发监控系统
http://0x0010.com/2017/07/monitor-system-based-on-influxdb-grafana/
https://github.com/miwurster/spring-data-influxdb
https://docs.influxdata.com/influxdb/v1.5/guides/writing_data/
https://docs.influxdata.com/influxdb/v1.5/tools/api_client_libraries/
一篇文章告诉你,为什么时序数据库会成为新趋势?
http://www.tuicool.com/articles/r6R3aaY
http://flacro.me/influxdb/
Grafana的安装(CentOS )- 千月带你美化监控数据 grafana(1)
https://blog.csdn.net/syshzbtt/article/details/71574204
### NOT starting grafana-server by default on bootup, please execute
sudo /sbin/chkconfig –add grafana-server
### In order to start grafana-server, execute
sudo service grafana-server start

InfluxDB系列学习教程目录
https://www.linuxdaxue.com/influxdb-study-series-manual.html
使用 InfluxDB 有感
https://toutiao.io/posts/viqzdg/preview
https://www.jianshu.com/p/d71646c08317
https://www.jianshu.com/p/a1344ca86e9b

Spring Boot 应用属性配置

变量名引用

在application.properties文件中,使用${变量名}引用变量。例如:
db.name=db1
spring.data.mongodb.uri=mongodb://${db.username}:${db.password}@${db.url}:${db.port}/${db.name}
还可以自定义 application.properties 进行外部配置。
https://blog.csdn.net/fanhenghui/article/details/77447918

配置日志

#debug=true
logging.file=yirui_clock_server.log
logging.level.com.yirui.clock.server=INFO
logging.level.root=INFO
logging.level.org.springframework.data.mongodb=INFO

配置ssl

server.ssl.key-store:/etc/letsencrypt/live/xxxx/keystore.p12
server.ssl.key-store-password: jsqc
server.ssl.keyStoreType: PKCS12
server.ssl.keyAlias: tomcat

容器配置

Spring Boot 内置的容器有三个分别是Undertow、Jetty、Tomcat。Spring Boot 对这三个容器分别进行了实现,它们上层接口都是EmbeddedServletContainerFactory。

对于内置容器的定制与优化主要有两种方式:第一种方式是通过配置文件来配置,另外一种是通过码代码的方式。
配置的核心内容参考org.springframework.boot.autoconfigure.web.ServerProperties这个服务属性类。

spring boot 限制初始值大小及参数中文详解 https://www.jianshu.com/p/552e49571893