发布方式介绍及maven私服搭建

发布方式介绍及maven私服搭建目录 一 平滑发布与灰度发布 1 什么叫平滑 2 什么叫灰度 3 单台服务器的平滑发布模式 4 多台服务器平滑发布模式 二 蓝绿发布 灰度发布和滚动发布 1 蓝绿发布 2 灰度发布 3 滚动发布 三 Nexus3 搭建 maven 私服 1 Nexus3 简介 2 安装 maven 1 下载 maven 2

大家好,我是讯享网,很高兴认识大家。

目录

一、平滑发布与灰度发布

1、 什么叫平滑

2、什么叫灰度

3、单台服务器的平滑发布模式

4、多台服务器平滑发布模式

二、蓝绿发布、灰度发布和滚动发布

1.蓝绿发布

2.灰度发布

3.滚动发布

三、Nexus3 搭建 maven 私服

1.Nexus3 简介

2.安装 maven

1、下载 maven

2、解压安装

3、安装 java 环境

4、添加环境变量

5、验证 java 和 maven 安装

3.安装 nexus3

1、下载

2、解压

3、启动

4、仓库介绍​编辑

5、向 nexus3 私服上传 jar 包


一、平滑发布与灰度发布

1、 什么叫平滑

在发布的过程中不影响用户的使用,系统不会因发布而暂停对外服务,不会造成用户短暂性无法访问;

2、什么叫灰度

发布后让部分用户使用新版本,其它用户使用旧版本,逐步扩大影响范围,最终达到全部更新的发布方式 ;

灰度发布与平滑发布其实是关联的。当服务器的数量只有一台的时候,不存在灰度发布,一旦发布了就是所有用户都更新了,所以这个时候只有平滑发布。当服务器数量大于一台的时候,只要每台服务器都能达到平滑发布的方式,然后设定好需要发布的服务器占比数量,就可以实现灰度发布了。

3、单台服务器的平滑发布模式

单机状态下,应用的持续服务主要依靠Nginx的负载均衡及自动切换功能;为了能够切换应用,需要在服务器中创建两个相同的独立应用,分配两个不同的端口,例如:

app1,端口 801 app2,端口 802 在 Nginx 中,将 app1,app2 作为负载均衡加载: upstream myapp{           server 127.0.0.1:801; # app1           server 127.0.0.1:802; # app2     }    # 然后设置代理超时为1秒,以便在某个应用停止时及时切换到另一个应用: server {    listen 80;     server_name localhost;     location /{     proxy_pass http://myapp;     proxy_set_header Host $host;     proxy_set_header X-Real-IP $remote_addr;     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;     proxy_connect_timeout       1;     proxy_read_timeout          1;     proxy_send_timeout          1;     } }     # 以上内容写在单独的配置文件中:/vhost/pub/pub_app.conf     # 在nginx.conf里包含进去:     # include /vhost/*.conf; 现在系统会均衡地分配用户访问 app1 与 app2

讯享网

接下来我们进行平滑发布,我们先把app1停止,然后将新版本发布到app1中

1、 准备发布 app1 配置文件

讯享网# 新做一个配置文件 pub_app1_down.conf,内容中把 app1 停止掉:     upstream myapp{           server 127.0.0.1:801 down; //app1           server 127.0.0.1:802; //app2     } # 将这个文件内容覆盖掉在原有的pub_app.conf [ ~]# cp -f /vhost/pub/pub_app1_down.conf /vhost/pub_app.conf

2、停止 app1 应用

# 平滑重新加载一下 nginx: [ ~]# service nginx reload     或者: [ ~]# /usr/local/nginx/sbin/nginx -s reload # 此时所有的请求都转到了app2了;

3、更新 app1

# 现在可以通过各种方式来更新应用了,例如:压缩包方式:

讯享网[ ~]# wget http://version.my.com/appudate/myapp/myapp-v3.2.32.tar [ ~]# unzip -o -d /home/wwwroot/app1/ myapp-v3.2.32.tar # 其中:-o:不提示的情况下覆盖文件;-d:指定解压目录 # 步骤3.5 内部测试 # 如果需要的话,可以在这一步对 app1 进行内部测试,以确保应用的正确性;

4、准备发布 app2 配置文件

# 此时app1已经是最新版本的文件了,可以切换到app1来对外, # 创建一个新的nginx配置文件:pub_app2_down.conf,设置为app1对外,app2停止即可:        upstream myapp{           server 127.0.0.1:801;      # app1           server 127.0.0.1:802 down; # app2     } # 将这个文件内容覆盖掉在原有的 pub_app.conf [ ~]# cp -f /vhost/pub/pub_app2_down.conf /vhost/pub_app.conf

5、切换到 app1 新版本应用

讯享网# 平滑重启一下nginx: [ ~]# service nginx reload  或者: [ ~]# /usr/local/nginx/sbin/nginx -s reload # 此时所有的请求都转到了app1了,新版本开始运行;

6、更新 app2

7、恢复 app1,app2 同时对外

[ ~]# cp -f /vhost/pub/pub_app.conf /vhost/pub_app.conf # 平滑重新一下nginx: [ ~]# service nginx reload     或者: [ ~]# /usr/local/nginx/sbin/nginx -s reload 至此,整个应用都已经更新

8、 将各步骤中的脚本汇总如下

讯享网[pub.sh] #============ 平滑发布 v1.0 =============== #step 1 cp -f /vhost/pub/pub_app1_down.conf /vhost/pub_app.conf #step 2 systemctl reload nginx #step 3 wget http://version.my.com/appudate/myapp/myapp-v3.2.32.tar unzip -o -d /home/wwwroot/app1/ myapp-v3.2.32.tar #step 4 cp -f /vhost/pub/pub_app2_down.conf /vhost/pub_app.conf #step 5 systemctl reload nginx #step 6 unzip -o -d /home/wwwroot/app2/ myapp-v3.2.32.tar #step 7 cp -f /vhost/pub/pub_app.conf /vhost/pub_app.conf service nginx reload #============ 平滑发布 v1.0 =============== # 备注:也可以充分利用 nginx 的宕机检测,省去步骤1,2,4,5,7; # 简化后的脚本如下: [pub_mini.sh] #======== 简化版脚本 ============= wget http://version.my.com/appudate/myapp/myapp-v3.2.32.tar unzip -o -d /home/wwwroot/app1/ myapp-v3.2.32.tar unzip -o -d /home/wwwroot/app2/ myapp-v3.2.32.tar #========= over =========== 

4、多台服务器平滑发布模式

有了单台平滑发布模式的基础,多台服务器就简单了。

每台服务器当作应用进行发布就可以了,由于nginx有宕机自动检测功能

只需要在每台服务器上先停止发布,然后更新文件,再启动就可以了

如果选择部分的服务器进行更新,那就是灰度了。

二、蓝绿发布、灰度发布和滚动发布

1.蓝绿发布

项目逻辑上分为AB组,在项目系统时,首先把A组从负载均衡中摘除,进行新版本的部署。B组仍然继续提供服务。  
讯享网

当A组升级完毕,负载均衡重新接入A组,再把B组从负载列表中摘除,进行新版本的部署。A组重新提供服务。  

 最后,B组也升级完成,负载均衡重新接入B组,此时,AB组版本都已经升级完成,并且都对外提供服务。

特点

  1. 如果出问题,影响范围较大;
  2. 发布策略简单;
  3. 用户无感知,平滑过渡;
  4. 升级/回滚速度快。

缺点

  1. 需要准备正常业务使用资源的两倍以上服务器,防止升级期间单组无法承载业务突发;
  2. 短时间内浪费一定资源成本;
  3. 基础设施无改动,增大升级稳定性。

2.灰度发布

灰度发布只升级部分服务,即让一部分用户继续用老版本,一部分用户开始用新版本,如果用户对新版本没什么意见,那么逐步扩大范围,把所有用户都迁移到新版本上面来。

特点

  1. 保证整体系统稳定性,在初始灰度的时候就可以发现、调整问题,影响范围可控;
  2. 新功能逐步评估性能,稳定性和健康状况,如果出问题影响范围很小,相对用户体验也少;
  3. 用户无感知,平滑过渡。

缺点

  1. 自动化要求高

部署过程

  1. 从LB摘掉灰度服务器,升级成功后再加入LB;
  2. 少量用户流量到新版本;
  3. 如果灰度服务器测试成功,升级剩余服务器。

灰度发布是通过切换线上并存版本之间的路由权重,逐步从一个版本切换为另一个版本的过程。

3.滚动发布

滚动发布是指每次只升级一个或多个服务,升级完成后加入生产环境,不断执行这个过程,直到集群中的全部旧版本升级新版本。 

 红色:正在更新的实例

蓝色:更新完成并加入集群的实例

绿色:正在运行的实例

特点

  1. 用户无感知,平滑过渡;
  2. 节约资源。

缺点

  1. 部署时间慢,取决于每阶段更新时间;
  2. 发布策略较复杂;
  3. 无法确定OK的环境,不易回滚。

部署过程

  1. 先升级1个副本,主要做部署验证;
  2. 每次升级副本,自动从LB上摘掉,升级成功后自动加入集群;
  3. 事先需要有自动更新策略,分为若干次,每次数量/百分比可配置;
  4. 回滚是发布的逆过程,先从LB摘掉新版本,再升级老版本,这个过程一般时间比较长;
  5. 自动化要求高。

注意:

三种方式均可以做到平滑式升级,在升级过程中服务仍然保持服务的连续性,升级对外界是无感知的。那生产上选择哪种部署方法最合适呢?这取决于哪种方法最适合你的业务和技术需求。如果你们运维自动化能力储备不够,肯定是越简单越好,建议蓝绿发布,如果业务对用户依赖很强,建议灰度发布。如果是K8S平台,滚动更新是现成的方案,建议先直接使用。

蓝绿发布:两套环境交替升级,旧版本保留一定时间便于回滚。

灰度发布:根据比例将老版本升级,例如80%用户访问是老版本,20%用户访问是新版本。

滚动发布:按批次停止老版本实例,启动新版本实例。

三、Nexus3 搭建 maven 私服

1.Nexus3 简介

Maven是一个采用纯Java编写的开源项目管理工具

Maven采用了一种被称之为Project Object Model(POM)概念来管理项目,所有的项目配置信息都被定义在一个叫做POM.xml的文件中,。

通过该文件Maven可以管理项目的整个生命周期,包括清除、编译,测试,报告、打包、部署等等。

目前Apache下绝大多数项目都已经采用Maven进行管理. 而Maven本身还支持多种插件, 可以方便更灵活的控制项目, 开发人员的主要任务应该是关注商业逻辑并去实现它, 而不是把时间浪费在学习如何在不同的环境中去依赖jar包,项目部署等。

maven和ant都是软件构建工具(软件管理工具),maven比ant更加强大,已经取代了ant,jar包的声明式依赖描述,maven有jar包的仓库。

Nexus3私服是架设在局域网的一种特殊的远程仓库,目的是代理远程仓库及部署第三方构件。有了私服之后,当 Maven 需要下载构件时,直接请求私服,私服上存在则下载到本地仓库;否则,私服请求外部的远程仓库,将构件下载到私服,再提供给本地仓库下载。

2.安装 maven

1、下载 maven

[ ~]# wget http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz

2、解压安装

讯享网[ ~]# tar xf apache-maven-3.6.3-bin.tar.gz -C /usr/local/ [ ~]# cd /usr/local/ [ ~]# ln -s apache-maven-3.6.3/ maven

3、安装 java 环境

[ ~]# tar xf jdk-8u201-linux-x64.tar.gz -C /usr/local/ [ ~]# cd /usr/local/ [ ~]# ln -s jdk1.8.0_251/ java

4、添加环境变量

讯享网[ ~]# vim /etc/profile 在文件下方添加如下内容(这里的MAVEN_HOME需要改为你自己的maven解压目录) export JAVA_HOME=/usr/local/java export MAVEN_HOME=/usr/local/maven export JRE_HOME=/usr/local/java/jre export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$MAVEN_HOME/bin:$PATH 重载环境变量 [ ~]# source /etc/profile

5、验证 java 和 maven 安装

[root@localhost ~]# java -version java version "1.8.0_191" Java(TM) SE Runtime Environment (build 1.8.0_191-b12) Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode) [root@localhost ~]# mvn -v Apache Maven 3.6.3 (ceceddd0abb50b32b541b8a6ba2883f) Maven home: /usr/local/maven Java version: 9.0.1, vendor: Oracle Corporation, runtime: /usr/local/java Default locale: en_US, platform encoding: UTF-8 OS name: "linux", version: "3.10.0-693.el7.x86_64", arch: "amd64", family: "unix"

3.安装 nexus3

1、下载

由于专业版的nexus是收费的,所以我下载的是开源版 Nexus OSS,下载地址为 :

Download Archives - Repository Manager 3

讯享网[root@localhost ~]# cd /opt/ [root@localhost opt]# wget http://download.sonatype.com/nexus/3/nexus-3.24.0-02-unix.tar.gz

2、解压

[ ~]# tar -zxf nexus-3.24.0-02-unix.tar.gz -C /usr/local 解压后会多出两个目录,nexus-3.24.0-02和sonatype-work

3、启动

讯享网[ ~]# cd nexus-3.24.0-02/bin/ [ ~]# ./nexus start

看到如图所示内容表明我们已经启动成功了,游览器输入http://localhost:8081即可访问。

注意:

启动后如果你立即访问可能发现什么都没有,不要急这个启动需要一定时间,30秒后到1分钟后再尝试访问,这个开始我以为出问题了

 注意 :

点击右上角的sign in登录,新版首次登录需要

cat /usr/local/sonatype-work/nexus3/admin.password

获取密码。

4、仓库介绍

 按图中标识顺序点击,就可以看到有这些仓库,现在分别介绍它们,分为三种类型:

proxy:是远程仓库的代理。比如说在nexus中配置了一个central        repository的proxy,当用户向这个proxy请求一个artifact,这个proxy就会先在本地查找,如果找不到的话,就会从远程仓库下载,然后返回给用户,相当于起到一个中转的作用。    

Hosted:是宿主仓库,用户可以把自己的一些构件,deploy到hosted中,也可以手工上传构件到hosted里。比如说oracle的驱动程序,ojdbc6.jar,在central repository是获取不到的,就需要手工上传到hosted里,一般用来存放公司自己的jar包;

Group:是仓库组,在maven里没有这个概念,是nexus特有的。目的是将上述多个仓库聚合,对用户暴露统一的地址,这样用户就不需要在pom中配置多个地址,只要统一配置group的地址就可以了右边那个Repository Path可以点击进去,看到仓库中artifact列表。不过要注意浏览器缓存,当你的项目希望在多个repository使用资源时就不需要多次引用了,只需要引用一个group即可。

maven-public:maven-central、maven-release和maven-snapshot三个库的合集。

maven-release:用来存放release版本的jar包。

maven-snapshot:用来存放snapshot版本的jar包。

5、向 nexus3 私服上传 jar 包

1、准备环境

1、创建3rd_part库

 点击左侧的 repository\repositories 后,在右侧点击 create repository

 然后选择maven2(hosted),填写如下

 跳到首页后选择maven-public

将3rd_part移到member中,即将3rd_part由maven-public管理,点击save

 至此,创建仓库完成

2、创建 3rd_part 管理用户

创建用户: 用户名/密码-dev/dev123

 2、直接浏览器

使用dev/dev123登陆,点击upload

 填写上传jar包的信息后,点击upload

 

 可以看到已经上传成功

小讯
上一篇 2025-02-06 23:48
下一篇 2025-01-08 15:19

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/64545.html