在我們?nèi)粘J褂酶呖捎眉簳r(shí),都會使用到負(fù)載均衡工具對多個(gè)節(jié)點(diǎn)的負(fù)載進(jìn)行轉(zhuǎn)發(fā)磁携。這里就不得不提到我們常用的一個(gè)負(fù)載均衡工具Nginx枢赔,Nginx官方提供的免費(fèi)版本功能相對簡單,大部分情況下我們都是用其進(jìn)行負(fù)載均衡斗遏,對于應(yīng)用的狀態(tài)主要是依賴于其他的監(jiān)控工具。如果對于小型的團(tuán)隊(duì)來說鞋邑,部署專門的監(jiān)控工具還需要資源最易,使用Nginx對應(yīng)用進(jìn)行探活監(jiān)控可以節(jié)約這部分成本。
首先安裝Nginx
使用yum安裝nginx我這里使用的是1.16.1版本
yum install nginx
安裝完成后可以獲取源碼安裝命令
nginx?-V
安裝Nginx探活插件
下載源碼與探活插件
wget https://nginx.org/download/nginx-1.16.1.tar.gz
wget https://github.com/yaoweibin/nginx_upstream_check_module/archive/refs/heads/master.zip
Nginx使用源碼編譯安裝相關(guān)的依賴包
yum install pcre pcre-devel openssl openssl-devel gd gd-devel zlib patch libxml2-devel libxslt-devel perl-devel perl-ExtUtils-Embed perl zlib-devel patch
解壓源碼和插件包炫狱,我這里將兩個(gè)軟件包全部放到/opt下面進(jìn)行解壓
tar?zxvf nginx-1.16.1.tar.gz
unzip nginx_upstream_check_module.zip
patch探活插件到Nginx源碼中
cd /opt/nginx-1.16.1
patch -p1 < /opt/nginx_upstream_check_module-master/check_1.16.1+.patch
執(zhí)行源碼編譯安裝藻懒,添加http探活插件
./configure ?\
--prefix=/usr/share/nginx ?\
--sbin-path=/usr/sbin/nginx ?\
--modules-path=/usr/lib64/nginx/modules ?\
--conf-path=/etc/nginx/nginx.conf ?\
--error-log-path=/var/log/nginx/error.log ?\
--http-log-path=/var/log/nginx/access.log ?\
--http-client-body-temp-path=/var/lib/nginx/tmp/client_body ?\
--http-proxy-temp-path=/var/lib/nginx/tmp/proxy ?\
--http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi ?\
--http-uwsgi-temp-path=/var/lib/nginx/tmp/uwsgi ?\
--http-scgi-temp-path=/var/lib/nginx/tmp/scgi ?\
--pid-path=/run/nginx.pid ?\
--lock-path=/run/lock/subsys/nginx ?\
--user=nginx ?\
--group=nginx ?\
--with-file-aio ?\
--with-ipv6 ?\
--with-http_ssl_module ?\
--with-http_v2_module ?\
--with-http_realip_module ?\
--with-stream_ssl_preread_module ?\
--with-http_addition_module ?\
--with-http_xslt_module=dynamic ?\
--with-http_image_filter_module=dynamic ?\
--with-http_sub_module ?\
--with-http_dav_module ?\
--with-http_flv_module ?\
--with-http_mp4_module ?\
--with-http_gunzip_module ?\
--with-http_gzip_static_module ?\
--with-http_random_index_module ?\
--with-http_secure_link_module ?\
--with-http_degradation_module ?\
--with-http_slice_module ?\
--with-http_stub_status_module ?\
--with-http_perl_module=dynamic ?\
--with-http_auth_request_module ?\
--with-mail=dynamic ?\
--with-mail_ssl_module ?\
--with-pcre ?\
--with-pcre-jit ?\
--with-stream=dynamic ?\
--with-stream_ssl_module ?\
--with-debug ?\
--with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -m64 -mtune=generic' ?\
--with-ld-opt='-Wl,-z,relro -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -Wl,-E' \
--add-module=/opt/nginx_upstream_check_module-master/
使用Nginx負(fù)載Artifactory
Nginx可以作為Artifactory制品庫的負(fù)載均衡器,用來負(fù)載Artifactory多個(gè)節(jié)點(diǎn)間的請求视译,Artifactory也可以自動生成Nginx配置文件嬉荆,具體操作參考下圖
配置探活
生成配置文件后,使用探活插件的配置方法酷含,在Nginx的config 文件中進(jìn)行配置鄙早。具體樣例如下:
upstream artifactory {
server 192.168.1.2:8082;
server 192.168.1.3:8082;
????check interval=2000 rise=2 fall=2 timeout=1000 type=http;
????check_http_send "HEAD / HTTP/1.0\r\n\r\n";
????check_http_expect_alive http_2xx http_3xx
}
upstream artifactory-direct {
server 192.168.1.2:8081;
server 192.168.1.3:8081;
????check interval=2000 rise=2 fall=2 timeout=1000 type=http;
????check_http_send "HEAD / HTTP/1.0\r\n\r\n";
????check_http_expect_alive http_2xx http_3xx
}
server {
????listen 80 ;
????server_name artifactory.external.io;
????if ($http_x_forwarded_proto = '') {
????????set $http_x_forwarded_proto ?$scheme;
????}
????## Application specific logs
????## access_log /var/log/nginx/artifactory.external.io -access.log timing;
????## error_log /var/log/nginx/artifactory.external.io -error.log;
????rewrite ^/$ /ui/ redirect;
????rewrite ^/ui$ /ui/ redirect;
????chunked_transfer_encoding on;
????client_max_body_size 0;
????location / {
????????proxy_read_timeout ?2400s;
????????proxy_pass_header ??Server;
????????proxy_cookie_path ??~*^/.* /;
????????proxy_buffer_size 128k;
????????proxy_buffers 40 128k;
????????proxy_busy_buffers_size 128k;
????????proxy_pass ?????????http://artifactory;
????????proxy_set_header ???X-JFrog-Override-Base-Url $http_x_forwarded_proto://$host:$server_port;
????????proxy_set_header ???X-Forwarded-Port ?$server_port;
????????proxy_set_header ???X-Forwarded-Proto $http_x_forwarded_proto;
????????proxy_set_header ???Host ?????????????$http_host;
????????proxy_set_header ???X-Forwarded-For ??$proxy_add_x_forwarded_for;
????????location ~ ^/artifactory/ {
????????????proxy_pass ???http://artifactory-direct;
????????}
????}
????location /status {
????????check_status;
????????access_log ??off;
????}
}
探活配置成功之后訪問,預(yù)置的location可以看到當(dāng)前負(fù)載應(yīng)用節(jié)點(diǎn)的健康狀態(tài)
并且還支持json格式查看椅亚,方便我們進(jìn)行數(shù)據(jù)采集