主要是运行两台nexus 机器,通过nexus 的host 以及proxy 以及public 模型,结合nginx 的mirror 将对于host 的get 请求
mirror 到另一台机器proxy nexus 的仓库,变相的cache 需要的仓库代码。

参考架构图

  • 来自nexus 的一个分享

  • 说明
    我们需要做的就是将对于host 模型的repo 流量镜像到proxy 当前host repo 的机器

配置说明

使用openresty 以及docker-compose 运行

  • docker-compose 文件
version: "3"
services:
nginx:
image: openresty/openresty:alpine-fat
ports:
- "80:80"
volumes:
- "./nginx.conf:/usr/local/openresty/nginx/conf/nginx.conf"
nexus1:
image: sonatype/nexus3
ports:
- "8081:8081"
volumes:
- "./nexus-data1:/nexus-data"
- "./backup1/:/backup/"
nexus2:
image: sonatype/nexus3
ports:
- "8082:8081"
volumes:
- "./nexus-data2:/nexus-data"
- "./backup2/:/backup/"
  • nginx 配置文件
worker_processes 1;
user root;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
lua_code_cache off;
lua_need_request_body on;
gzip on;
resolver 127.0.0.11 ipv6=off;
real_ip_header X-Forwarded-For;
real_ip_recursive on;
gzip_min_length 2k;
gzip_buffers 4 16k;
gzip_comp_level 4;
gzip_types text/plain text/css image/png application/javascript image/jpeg image/gif;
server {
listen 80;
server_name app;
charset utf-8;
default_type text/html;
location / {
client_max_body_size 1G;
mirror /mirror;
proxy_set_header Host nexus1;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host nexus1;
proxy_pass http://nexus1:8081;
}
location = /favicon.ico {
root /opt/app/static;
}
location = /mirror {
internal;
if ($request_method != GET) {
return 403;
}
proxy_connect_timeout 30;
proxy_set_header Host nexus2;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host nexus2;
proxy_pass http://nexus2:8081$request_uri;
}
location = /empty {
empty_gif;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
} }
}

启动&&测试

  • 启动
docker-compose up -d
  • 测试
    我们先在一台机器添加host 模型的rerpo,这个可以直接使用内置的,然后我们上传一个jar 包文件,如下


修改maven settings 文件,将对于maven 的地址指向我们的public。
另外一个机器配置proxy repo 指向上边host 模型的repo如下:

将proxy repo 添加到public 组(很重要,不然会查找不到)

编写一个简单的maven 项目,添加上传jar 包的引用,然后执行构建,不出意料,应用能看到有像nexus2 get 的请求,这样repo 就被cache 到
另外一个机器了,
通过nginx 以及nexus2 的日志也可以看出来,但是对于mirror 的log 需要单独配置,可以查看参考资料的连接

说明

原理实际上很简答,但是有几点需要注意,host 模型的repo 需要在两台机器都包含,同时proxy 模型的需要互相添加,如果对于基本变动很少
的repo 模型,使用这种方法进行一个简单nexus ha 的方案搭建还是很不错的,但是有一些几个缺点

  • 和上边说的一样,需要多机都需要添加同样模型的host repo(主要是url)
  • 如果真的故障发生了,仓库代码可能是分散在多处的,这个我们需要注意,但是基本问题不大,因为每台机器基本都包含了必须的repo
  • 对于每台机器的数据备份我们还是需要做的(要以出现事故了。。。)

参考资料

https://my.oschina.net/andChow/blog/2873870 
http://nginx.org/en/docs/http/ngx_http_mirror_module.html 
https://alex.dzyoba.com/blog/nginx-mirror/ 
https://github.com/rongfengliang/nginx-mirrorr-nexus-ha

 
 
 
 

使用nginx mirror 制作nexus 的简单ha的更多相关文章

  1. nginx证书制作以及配置https并设置访问http自动跳转https(反向代理转发jboss)

    nginx证书制作以及配置https并设置访问http自动跳转https 默认情况下ssl模块并未被安装,如果要使用该模块则需要在编译时指定–with-http_ssl_module参数,安装模块依赖 ...

  2. NGINX: 反向代理 Nexus

    Nginx 反向代理 nexus 的服务, 一直卡在 Initialize... 解决方式是添加一个 header X-Forwarded-Proto: proxy_set_header X-Forw ...

  3. vs2015制作一个超级简单的MVC项目

    使用vs2015制作一个超级简单的MVC项目   本文链接:https://blog.csdn.net/qq_40919762/article/details/100705314 直奔主题一,创建一个 ...

  4. VS里的 代码片段(Code snippet)很有用,制作也很简单

    工欲善其事必先利其器,而 Visual Studio 就是我们的开发利器. 上一篇文章,介绍了一个很棒的快捷键,如果你还没用过这个快捷键,看完之后应该会豁然开朗.如果你已经熟练的应用它,也会温故而知新 ...

  5. nginx安装及配置为简单的文件服务器

    centos 6.5 直接yum安装即可 yum install nginx -y 配置文件位于:/etc/nginx/nginx.conf,里面可以修改处理器数量.日志路径.pid文件路径等,默认的 ...

  6. Nginx反向代理+负载均衡简单实现(http方式)

    1)nginx的反向代理:proxy_pass2)nginx的负载均衡:upstream 下面是nginx的反向代理和负载均衡的实例: 负载机:A机器:103.110.186.8/192.168.1. ...

  7. 转:nginx防DDOS攻击的简单配置

    文章来自于: 近期由于工作需要,做了些防DDOS攻击的研究,发现nginx本身就有这方面的模块ngx_http_limit_req_module和ngx_http_limit_conn_module. ...

  8. nginx+php+mysql+wordpress搭建简单站点 安装及配置过程

    环境 阿里云ECS云服务器 CPU:1核 内存:2G 操作系统:Centos 7.3 x64 地域:华北 2(华北 2 可用区 A) 系统盘:40G 安装及配置 主要使用 nginx . php 和 ...

  9. Nginx实现负载均衡的简单案例

    七层负载均衡的实现(Nginx): 基于URL等应用层信息的负载均衡,一般使用Nginx来实现 Nginx的proxy是它一个很强大的功能,实现了7层负载均衡 功能强大.性能卓越.运行稳定 配置简单灵 ...

随机推荐

  1. “ORA-12154: TNS: 无法解析指定的连接标识符”错误解决办法

    某政府项目中用.Net网站连接Oracle数据库,web.config使用的连接字符串如下: <add key="connstring_ora" value="Us ...

  2. JS的作用域链与原型链

    来一波,好记性不如烂笔头. 这两条链子可是很重要的. 作用域链 当执行一段JS代码(全局代码或函数)时,JS引擎会创建为其创建一个作用域又称为执行上下文(Execution Context),在页面加 ...

  3. js事件、事件流以及target、currentTarget、this那些事

    你是如此简单我却将你给遗忘   前面面试被问到js的事件机制  target.currentTarget.碰巧今天有时间来拔一拔,顺便记下.

  4. css实现标题左右横线

    最近用到了记录一下 页面 <div class="subtitle"> 马上邀请好友得奖励 </div> 样式 .subtitle { position: ...

  5. opencv3.1+cmake3.7.2+cuda9.1+vs2015+opencv-contrib+win10x64

    下载cuda https://developer.nvidia.com/cuda-downloads?target_os=Windows&target_arch=x86_64&targ ...

  6. tensorFlow入门实践(一)

    首先应用TensorFlow完成一个线性回归,了解TensorFlow的数据类型和运行机制. import tensorflow as tf import numpy as np import mat ...

  7. vs2017激活码

    Visual Studio 2017(VS2017) 企业版 Enterprise 注册码:NJVYC-BMHX2-G77MM-4XJMR-6Q8QF Visual Studio 2017(VS201 ...

  8. 如何使用idea给系统平台添加子应用和应用的模块

    1.添加模块smartcity-portal,由于模块是在smartcity-framework工程下的,所以按照图片所示添加 2.smartcity-portal模块添加完成后,由于portal-d ...

  9. Linux学习第一天————了解root用户和基本的shell命令

    一.了解Linux中的root用户  1.1root用户 使用过MySQL的同学都知道MySQL中有一个变态的存在叫做超级管理员,他可以从操作任何一个数据库,那么在Linux中也有这么一个变态的存在他 ...

  10. the evolution of Lua 全文翻译

    终于赶在春节前将论文全文翻译完,以后有时间将前面三章重新翻译一次,因为刚开始的时候没打算全文翻译的..第一次每天花25分钟完成这么长的一篇翻译,证明滴水可以穿石,哈哈哈 中文地址:Lua的演进 祝各位 ...