- 构建SpringBoot项目(nginx-slb : https://gitee.com/liamgmy/nginx-slb)
- 项目动态变量配置文件(ArticleConfiguration)
package club.limeyu.ngixnslb.conf; import lombok.Getter; import lombok.Setter; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; /** * @Author liangmy * @Description: * @Create: 2021/1/22 下午1:19 */ @Getter @Setter @Component @ConfigurationProperties(prefix = "article") public class ArticleConfiguration { private String whoIam; }
- 项目动态变量配置文件(application.properties)
server.port=8080 article.who-iam=I am Coke
- 识别服务接口(HelloController)
package club.limeyu.ngixnslb.controller; import club.limeyu.ngixnslb.conf.ArticleConfiguration; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * @Author liangmy * @Description: * @Create: 2021/1/22 下午1:16 */ @RestController @RequestMapping(value = "/hello") public class HelloController { @Autowired private ArticleConfiguration articleConfiguration; @GetMapping(value = "/whoIam") public String whoIam() { return articleConfiguration.getWhoIam(); } }
- 测试项目
- 项目动态变量配置文件(ArticleConfiguration)
- 推送nginx-slb项目到git远程仓库
- 服务器环境配置
- 克隆nginx-slb项目到服务器
[www@10-255-20-89 ~]$ cd /home/www/src [www@10-255-20-89 src]$ git clone git@gitee.com:liamgmy/nginx-slb.git
- 配置线上环境 - 主服务 - 配置文件(application.properties)
[www@10-255-20-89 ~]$ cd /home/www/deploy_files/slbA [www@10-255-20-89 slbA]$ vim application.properties server.port=8080 server.context-path=/nginx/slb article.who-iam=I am Coke
- 配置线上环境 - 副服务 - 配置文件(application.properties)
[www@10-255-20-89 ~]$ cd /home/www/deploy_files/slbB [www@10-255-20-89 slbB]$ vim application.properties server.port=8081 server.context-path=/nginx/slb article.who-iam=I am Flower
- 配置线上环境 - 主服务 - 部署脚本
[www@10-255-20-89 ~]$ cd /home/www/script [www@10-255-20-89 script]$ vim deploy_slbA #!/bin/bash DEPLOY_DIR=/home/www/jars/slbA SRC_DIR=/home/www/src/nginx-slb PROPERTIES_FILE_DIR=/home/www/deploy_files SLB_RES_DIR=src/main/resources SLB_JAR=nginx-slb-1.0.0.jar JARS=($SLB_JAR) cd $SRC_DIR git reset --hard git pull printf "pull code from git complete ....................\n" git log -1 cp -fv $PROPERTIES_FILE_DIR/slbA/* $SLB_RES_DIR mvn clean package -Dmaven.test.skip=true cp -av target/$SLB_JAR $DEPLOY_DIR/ printf "copy jars complete ....................\n" cd $DEPLOY_DIR port=8080 while(($port<=8080)) do netstat -tlnp | awk -F '[ :/]' '$1=="tcp"&&$17=="'${port}'" {print $51}' | xargs kill -9 printf "kill %s process complete....................\n" ${port} let "port++" done for jar in ${JARS[@]} do nohup java -Duser.language=en -Duser.country=DE -jar $jar & done
- 配置线上环境 - 副服务 - 部署脚本
[www@10-255-20-89 ~]$ cd /home/www/script [www@10-255-20-89 script]$ vim deploy_slbB #!/bin/bash DEPLOY_DIR=/home/www/jars/slbB SRC_DIR=/home/www/src/nginx-slb PROPERTIES_FILE_DIR=/home/www/deploy_files SLB_RES_DIR=src/main/resources SLB_JAR=nginx-slb-1.0.0.jar JARS=($SLB_JAR) cd $SRC_DIR git reset --hard git pull printf "pull code from git complete ....................\n" git log -1 cp -fv $PROPERTIES_FILE_DIR/slbB/* $SLB_RES_DIR mvn clean package -Dmaven.test.skip=true cp -av target/$SLB_JAR $DEPLOY_DIR/ printf "copy jars complete ....................\n" cd $DEPLOY_DIR port=8081 while(($port<=8081)) do netstat -tlnp | awk -F '[ :/]' '$1=="tcp"&&$17=="'${port}'" {print $51}' | xargs kill -9 printf "kill %s process complete....................\n" ${port} let "port++" done for jar in ${JARS[@]} do nohup java -Duser.language=en -Duser.country=DE -jar $jar & done
- 配置线上环境 - 日志
[www@10-255-20-89 ~]$ cd /home/www/deploy_files/slbA [www@10-255-20-89 slbA] vim logback.xml [www@10-255-20-89 ~]$ cd /home/www/deploy_files/slbB [www@10-255-20-89 slbB] vim logback.xml <configuration> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>/home/www/log/das/nginx-slb.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>/home/www/log/das/nginx-slb-%d{yyyy-MM-dd}.log</fileNamePattern> <maxHistory>90</maxHistory> </rollingPolicy> <encoder> <pattern> %red(%d{HH:mm:ss.SSS}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger{5}) - %cyan(%msg%n)</pattern> </encoder> </appender> <root level="INFO"> <appender-ref ref="FILE"/> </root> </configuration>
- 克隆nginx-slb项目到服务器
- 配置Nginx负载均衡
www@10-255-20-89 ~]$ sudo vim /etc/nginx/nginx.conf user www; worker_processes auto; error_log /var/log/nginx/error.log; pid /run/nginx.pid; # Load dynamic modules. See /usr/share/doc/nginx/README.dynamic. include /usr/share/nginx/modules/*.conf; events { worker_connections 1024; } http { log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 3000; types_hash_max_size 2048; include /etc/nginx/mime.types; default_type application/octet-stream; charset utf-8; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # Load modular configuration files from the /etc/nginx/conf.d directory. # See http://nginx.org/en/docs/ngx_core_module.html#include # for more information. include /etc/nginx/conf.d/*.conf; # 启用OCSP订书机功能 ssl_stapling on; ssl_stapling_verify on; server { server_name nginxslb.autox3.cn; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; #后端平台管理系统接口 location ^~ /nginx/slb/ { proxy_pass http://127.0.0.1:8080/nginx/slb/; } listen 443 ssl; # managed by Certbot ssl_certificate /etc/letsencrypt/live/nginxslb.autox3.cn/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/nginxslb.autox3.cn/privkey.pem; # managed by Certbot include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot } server { if ($host = nginxslb.autox3.cn) { return 301 https://$host$request_uri; } # managed by Certbot server_name nginxslb.autox3.cn; listen 80; return 404; # managed by Certbot } }
- 轮询
- 默认轮询
upstream OrdinaryPolling { server 127.0.0.1:8080; server 127.0.0.1:8081; } server { server_name nginxslb.autox3.cn; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; #后端平台管理系统接口 location ^~ /nginx/slb/ { # proxy_pass http://127.0.0.1:8080/nginx/slb/; proxy_pass http://OrdinaryPolling } listen 443 ssl; # managed by Certbot ssl_certificate /etc/letsencrypt/live/nginxslb.autox3.cn/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/nginxslb.autox3.cn/privkey.pem; # managed by Certbot include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot }
- 权重轮询
upstream WeightPolling { server 127.0.0.1:8080 weight=2; server 127.0.0.1:8081 weight=1; } server { server_name nginxslb.autox3.cn; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; #后端平台管理系统接口 location ^~ /nginx/slb/ { # proxy_pass http://127.0.0.1:8080/nginx/slb/; proxy_pass http://WeightPolling; } listen 443 ssl; # managed by Certbot ssl_certificate /etc/letsencrypt/live/nginxslb.autox3.cn/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/nginxslb.autox3.cn/privkey.pem; # managed by Certbot include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot }
- 默认轮询
- hash
- ip_hash
upstream IpHashPolling { server 127.0.0.1:8080; server 127.0.0.1:8081; ip_hash; } server { server_name nginxslb.autox3.cn; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; #后端平台管理系统接口 location ^~ /nginx/slb/ { # proxy_pass http://127.0.0.1:8080/nginx/slb/; proxy_pass http://IpHashPolling; } listen 443 ssl; # managed by Certbot ssl_certificate /etc/letsencrypt/live/nginxslb.autox3.cn/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/nginxslb.autox3.cn/privkey.pem; # managed by Certbot include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot }
- url_hash
- ip_hash
- fair
- least_conn
- 其他
- 轮询
- upstream
- 语法
upstream upstream_name { server ip:port; server ip:port weight=2; server ip:port max_fails=3 fail_timeout=30s; server ip:port down; server ip:port backup; keepalive 32; } sever{ location match_regulation { proxy_pass http://upstream_name; } }
- 语法
- 定时任务
- 通过Redis做分布式锁,控制集群中定时任务多次执行
- 定时任务在集群中只启动一个
- JVM中的缓存替换为Redis缓存,避免主服务器宕机时JVM中的数据丢失。
- 啦啦啦
Nginx-负载均衡-不停机部署
最新推荐文章于 2024-07-30 14:30:36 发布