环境说明
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 mirror模块主要用于镜像客户请求到一组后端服务器。这意味着每个传入的请求不仅会被传递到主要后端,还会被复制并发送到一个或多个额外的后端。
所以,我们可以充分利用nginx镜像模块的这一特点来实现nexus的高可用。
一 搭建nexus3
略
二 配置nexus3
注意:两台nexus配置要保持一致,否则无法使用nginx镜像模块实现数据同步。
1 创建存储
2 创建Proxy Repository[代理资源库]
创建页面出来之后,页面上有三个是必填的:
3 创建Releases repository 托管资源库
Hosted有三种方式,Releases、SNAPSHOT、Mixed
Releases: 一般是已经发布的Jar包
Snapshot: 未发布的版本
Mixed:混合的
4 创建snapshot repository 托管资源库
5 创建group repository 组资源库
三 maven安装配置
1 安装maven
略
2 配置maven
为了测试搭建的这台nexus是否能正常提供服务,我们nexus本机配置settings.xml指定本机的nexus
1 192.168.3.200配置如下
(1)修改mavne本地缓存目录
<localRepository>/export/servers/maven_repositories/</localRepository>
(2)配置nexus用户名和密码
(3)配置仓库信息
先登陆nexus获取具体仓库url
然后,将获取的仓库url配置到maven配置文件settings.xml
2 192.168.3.201配置如下
(1)修改mavne本地缓存目录
和 192.168.3.200保持一致
(2)配置nexus用户名和密码
和 192.168.3.200保持一致
(3)配置仓库信息
先登陆nexus获取具体仓库url
然后,将获取的仓库url配置到maven配置文件settings.xml
3 测试nexus是否能正常使用
1 192.168.3.200
(1)获取lelease具体url
(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)确认是否上传成功
2 192.168.3.201
(1)获取lelease具体url
(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)确认是否上传成功
注意: 测试搭建的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中配置的地址、
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控制台,发现已经上传成功了
扩展
利用dns解析,添加2个A 记录轮询到nginx,两台nginx配置互为流量镜像到彼此的nexus,到此,基本上实现了nexus高可用