使用nginx mirror 制作nexus 的简单ha
主要是运行两台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的更多相关文章
- nginx证书制作以及配置https并设置访问http自动跳转https(反向代理转发jboss)
nginx证书制作以及配置https并设置访问http自动跳转https 默认情况下ssl模块并未被安装,如果要使用该模块则需要在编译时指定–with-http_ssl_module参数,安装模块依赖 ...
- NGINX: 反向代理 Nexus
Nginx 反向代理 nexus 的服务, 一直卡在 Initialize... 解决方式是添加一个 header X-Forwarded-Proto: proxy_set_header X-Forw ...
- vs2015制作一个超级简单的MVC项目
使用vs2015制作一个超级简单的MVC项目 本文链接:https://blog.csdn.net/qq_40919762/article/details/100705314 直奔主题一,创建一个 ...
- VS里的 代码片段(Code snippet)很有用,制作也很简单
工欲善其事必先利其器,而 Visual Studio 就是我们的开发利器. 上一篇文章,介绍了一个很棒的快捷键,如果你还没用过这个快捷键,看完之后应该会豁然开朗.如果你已经熟练的应用它,也会温故而知新 ...
- nginx安装及配置为简单的文件服务器
centos 6.5 直接yum安装即可 yum install nginx -y 配置文件位于:/etc/nginx/nginx.conf,里面可以修改处理器数量.日志路径.pid文件路径等,默认的 ...
- Nginx反向代理+负载均衡简单实现(http方式)
1)nginx的反向代理:proxy_pass2)nginx的负载均衡:upstream 下面是nginx的反向代理和负载均衡的实例: 负载机:A机器:103.110.186.8/192.168.1. ...
- 转:nginx防DDOS攻击的简单配置
文章来自于: 近期由于工作需要,做了些防DDOS攻击的研究,发现nginx本身就有这方面的模块ngx_http_limit_req_module和ngx_http_limit_conn_module. ...
- nginx+php+mysql+wordpress搭建简单站点 安装及配置过程
环境 阿里云ECS云服务器 CPU:1核 内存:2G 操作系统:Centos 7.3 x64 地域:华北 2(华北 2 可用区 A) 系统盘:40G 安装及配置 主要使用 nginx . php 和 ...
- Nginx实现负载均衡的简单案例
七层负载均衡的实现(Nginx): 基于URL等应用层信息的负载均衡,一般使用Nginx来实现 Nginx的proxy是它一个很强大的功能,实现了7层负载均衡 功能强大.性能卓越.运行稳定 配置简单灵 ...
随机推荐
- DateTime类使用二:常用时间段操作(经典)
//大家在做报表或查询的时候都会有给用户预设一些可选的日期范围(如上图) //如本年度销售额.本季度利润.本月新增客户 //C#里内置的Da ...
- wifi探针的使用说明.
我使用的是四博智联提供的WIFI探针 DT-06产品 点击打开链接 1. 数据读取 可以直接通过串口即可读取数据,串口波特率设置为 115200,其它选项默认. 如果需要PC机测试,请使用杜邦线转接到 ...
- image-to-image translation with conditional adversarial networks文献笔记
Image-to-Image Translation with Conditional Adversarial Networks (基于条件gan的图像转图像) 作者:Phillip Isola, J ...
- List<T>.ForEach 调用异步方法的意外
有这么个异步方法 private static async Task<int> Compute(int s) { return await Task<int>.Run(() = ...
- C++中的tolower()函数与toupper()函数
https://blog.csdn.net/weixin_41053564/article/details/81349353 在C++语言中tolower()函数是把字符串都转化为小写字母 toupp ...
- Java - Java入门(2-1am)
第一讲.Java入门 1. 计算机语言是人和计算机进行交互的一种工具,人们通过使用计算机语言编写程序来向计算机施令,计算机则执行程序,并把结果输出给用户. 2. 机器语言:由0.1序列构成的指令码组成 ...
- Android使用Fiddler模拟弱网络环境测试
原文:https://blog.csdn.net/u010618194/article/details/76652513 1.设置fiddler 顶部Tools-->Connections,把p ...
- 关于shell命令的一些用法和技巧
#!/bin/bash #第一种写法 #date=`date "+%Y-%m-%d %H:%M:%S"` #第二种写法 date=$(date "+%Y-%m-%d %H ...
- 工具类:mybatis中使用Threadlocal开启session及关闭session
1.线程容器,给线程绑定一个Object 内容,后只要线程不变,可以随时取出. 1.1 改变线程,无法取出内容. final ThreadLocal threadLocal = new ThreadL ...
- 关于使用 myeclipse连接MySql的问题
配置Hibernate.cfg.xml测试连接Mysql数据库时老是报错,如下图: 想想这样配置也没有错啊,可是一直测试连接不上.后面上查了一下,需要在连接字符串后面加上?serverTimezone ...