环境说明

1 操作系统: centos7 64位操作系统

2 java版本: 1.8.0_292

3 nexus版本: 3.x

4 nginx版本:1.26.2

5 服务器IP

服务器IP 角色

192.168.3.200 nexus、nginx

192.168.3.201 nexus

需要说明的是两台nexus硬件配置要保持一致,如果镜像流量到的服务器配置较低,会影响正常流量的。


拓扑图

利用nginx流量镜像模块实现nexus 3x高可用_nexus


Nginx mirror模块主要用于镜像客户请求到一组后端服务器。这意味着每个传入的请求不仅会被传递到主要后端,还会被复制并发送到一个或多个额外的后端。

所以,我们可以充分利用nginx镜像模块的这一特点来实现nexus的高可用。

一 搭建nexus3


二 配置nexus3

注意:两台nexus配置要保持一致,否则无法使用nginx镜像模块实现数据同步。

1 创建存储

利用nginx流量镜像模块实现nexus 3x高可用_nginx_02


利用nginx流量镜像模块实现nexus 3x高可用_nexus_03


2 创建Proxy Repository[代理资源库]

利用nginx流量镜像模块实现nexus 3x高可用_nginx_04

利用nginx流量镜像模块实现nexus 3x高可用_nexus高可用_05

创建页面出来之后,页面上有三个是必填的:

利用nginx流量镜像模块实现nexus 3x高可用_nexus高可用_06

3 创建Releases repository 托管资源库

Hosted有三种方式,Releases、SNAPSHOT、Mixed

Releases: 一般是已经发布的Jar包

Snapshot: 未发布的版本

Mixed:混合的

利用nginx流量镜像模块实现nexus 3x高可用_nexus_07

利用nginx流量镜像模块实现nexus 3x高可用_nginx_08


4 创建snapshot repository 托管资源库

利用nginx流量镜像模块实现nexus 3x高可用_jar_09

利用nginx流量镜像模块实现nexus 3x高可用_maven_10


5 创建group repository  组资源库

利用nginx流量镜像模块实现nexus 3x高可用_maven_11

利用nginx流量镜像模块实现nexus 3x高可用_nginx_12


三 maven安装配置

1 安装maven


2 配置maven

为了测试搭建的这台nexus是否能正常提供服务,我们nexus本机配置settings.xml指定本机的nexus

1 192.168.3.200配置如下

(1)修改mavne本地缓存目录

<localRepository>/export/servers/maven_repositories/</localRepository>

利用nginx流量镜像模块实现nexus 3x高可用_nexus_13

(2)配置nexus用户名和密码

利用nginx流量镜像模块实现nexus 3x高可用_nexus_14


(3)配置仓库信息

先登陆nexus获取具体仓库url

利用nginx流量镜像模块实现nexus 3x高可用_nexus高可用_15

然后,将获取的仓库url配置到maven配置文件settings.xml

利用nginx流量镜像模块实现nexus 3x高可用_nexus高可用_16

2 192.168.3.201配置如下

(1)修改mavne本地缓存目录

和 192.168.3.200保持一致


(2)配置nexus用户名和密码

和 192.168.3.200保持一致


(3)配置仓库信息

先登陆nexus获取具体仓库url

利用nginx流量镜像模块实现nexus 3x高可用_nginx_17


然后,将获取的仓库url配置到maven配置文件settings.xml

利用nginx流量镜像模块实现nexus 3x高可用_nexus_18


3 测试nexus是否能正常使用

1 192.168.3.200

(1)获取lelease具体url

利用nginx流量镜像模块实现nexus 3x高可用_nexus_19


(2)测试

mvn deploy:deploy-file  \
   -Dfile=ueditor-1.1.2.jar \
   -DgroupId="com.baidu.ueditor" \
   -DartifactId="ueditor" \
   -Dversion="1.1.2" \
   -Dpackaging=jar \
   -DrepositoryId=nexus \
   -Durl=http://192.168.3.200:8081/repository/my-maven-release/

(3)确认是否上传成功

利用nginx流量镜像模块实现nexus 3x高可用_nexus高可用_20


2 192.168.3.201

(1)获取lelease具体url

利用nginx流量镜像模块实现nexus 3x高可用_jar_21


(2)测试

mvn deploy:deploy-file  \
   -Dfile=ueditor-1.1.2.jar \
   -DgroupId="com.baidu.ueditor" \
   -DartifactId="ueditor" \
   -Dversion="1.1.2" \
   -Dpackaging=jar \
   -DrepositoryId=nexus \
   -Durl=http://192.168.3.201:8081/repository/my-maven-release/

(3)确认是否上传成功

利用nginx流量镜像模块实现nexus 3x高可用_nexus高可用_22


注意: 测试搭建的nexus没问题后,需要收动删除上传的jar包,方便后续的测试

四 安装配置nginx

1 安装nginx

(1)创建安装目录

mkdir -pv /export/servers/ngnix
mkdir -pv /export/servers/ngnix/conf.d

(2)安装依赖包

yum install pcre pcre-devel -y
yum install zlib zlib-devel -y


(3)安装nginx

tar xvf nginx-1.26.2.tar.gz 
cd nginx-1.26.2
./configure --prefix=/export/servers/ngnix
make
make install


2 配置nginx

(1)修改nginx主配置文件

cat /export/servers/ngnix/conf/nginx.conf
#user  nobody;
worker_processes  auto;
error_log  logs/error.log;
pid        logs/nginx.pid;


events {
    worker_connections  65535;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    log_format main      '$http_host||$server_addr||$server_port||$remote_addr||$time_local||$request_method||$uri||$args'
                          '||$server_protocol||$status||$body_bytes_sent||$bytes_sent'
                          '||$request_time||$http_referer||$http_user_agent||$http_x_forwarded_for'
                          '||$upstream_addr||$upstream_status||$upstream_response_time||$upstream_cache_status';

    access_log  logs/access.log  main;

    server_names_hash_bucket_size   128;
    client_header_buffer_size       32k;
    large_client_header_buffers     4 32k;
     client_max_body_size           1G;
    client_body_buffer_size         1024k;

    sendfile                        on;
    tcp_nopush                      on;
    tcp_nodelay                     on;

    keepalive_timeout               60;

    server_tokens                   off;

    fastcgi_intercept_errors        on;

    proxy_connect_timeout           90;
    proxy_read_timeout              180;
    proxy_send_timeout              180;
    proxy_buffer_size               256k;
    proxy_buffers                   4 256k;
    proxy_busy_buffers_size         256k;
    proxy_temp_file_write_size      256k;
    proxy_intercept_errors          on;
    server_name_in_redirect         off;
    proxy_hide_header       X-Powered-By;
    
    gzip                            on;
    gzip_min_length                 100;
    gzip_buffers                    4 16k;
    gzip_http_version               1.0;
    gzip_comp_level                 9;
    gzip_types                      text/plain application/javascript application/x-javascript text/css application/xml image/jpeg image/png;
    gzip_vary                       on;

    include /export/servers/ngnix/conf.d/*.conf;


}


(2)配置nginx镜像模块实现复制流量到另一台nexus

cat /export/servers/ngnix/conf.d/nexus.conf
upstream nexus01 {
    server 192.168.3.200:8081 weight=1 max_fails=1 fail_timeout=10s;
}

upstream nexus02 {
    server 192.168.3.201:8081 weight=1 max_fails=1 fail_timeout=10s;
}

server {
        listen       80;
        server_name  nexus.lsattr.cn;

        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_set_header X-Forwarded-Host   $host;

        location / {
            mirror /mirror;
            proxy_pass http://nexus01; 

        }

        location = /mirror {
           internal;
           proxy_pass http://nexus02$request_uri;
        }
        access_log  logs/nexus_access.log  main;
   }


(3)配置systemctl管理nginx

vim  /lib/systemd/system/nginx.service
[Unit]
Description=Nginx Web Server
After=network.target
 
[Service]
Type=forking
ExecStart=/export/servers/ngnix/sbin/nginx
ExecReload=/export/servers/ngnix/sbin/nginx -s reload
ExecStop=/export/servers/ngnix/sbin/nginx -s stop
KillMode=process
Restart=on-failure
RestartSec=5s
 
[Install]
WantedBy=multi-user.target


(4)启动nginx服务

systemctl start nginx.service
systemctl enable nginx.service
systemctl status nginx.service


五 测试

1 maven配置文件

将192.168.3.200、192.168.3.201任意一台机器的maven配置文件settings.xml拷贝到测试服务器,修改地址为nginx中配置的地址、

利用nginx流量镜像模块实现nexus 3x高可用_nginx_23

2 使用mvn上传jar包

mvn deploy:deploy-file  \
   -Dfile=ueditor-1.1.2.jar \
   -DgroupId="com.baidu.ueditor" \
   -DartifactId="ueditor" \
   -Dversion="1.1.2" \
   -Dpackaging=jar \
   -DrepositoryId=nexus \
   -Durl=http://nexus.lsattr.cn/repository/my-maven-release/
注意:Durl要将nexus地址改为nginx中的域名


3 验证

分别登录两台nexus控制台,发现已经上传成功了

利用nginx流量镜像模块实现nexus 3x高可用_nexus_24


扩展

利用dns解析,添加2个A 记录轮询到nginx,两台nginx配置互为流量镜像到彼此的nexus,到此,基本上实现了nexus高可用

利用nginx流量镜像模块实现nexus 3x高可用_nginx_25