Nginx + consul + upsync 完成動(dòng)態(tài)負(fù)載均衡的方法詳解
前置知識(shí)
DNS域名解析過(guò)程
- 在瀏覽器輸入域名,訪問(wèn)后
- 在瀏覽器緩存中查找是否有對(duì)應(yīng)的ip和端口,如果有直接訪問(wèn)對(duì)應(yīng)ip和端口
- 瀏覽器緩存中沒(méi)有則在本地host文件中查找是否有對(duì)應(yīng)的~~
- 本地host文件中沒(méi)有則去DSN服務(wù)器上查找
外網(wǎng)映射
顧名思義,就是將本地的ip地址,映射出一個(gè)公網(wǎng)ip,可以供所有主機(jī)(連接到互聯(lián)網(wǎng)的計(jì)算機(jī))訪問(wèn)
- 疑問(wèn):為什么需要使用外網(wǎng)映射
例如做微信支付時(shí)的第三方接口回調(diào),微信回調(diào)你的接口必須是一個(gè)公網(wǎng)ip地址,不然他根本無(wú)法給你回調(diào),導(dǎo)致你本地?zé)o法測(cè)試。這個(gè)時(shí)候你就需要外網(wǎng)映射來(lái)將自己的ip地址映射成一個(gè)公網(wǎng)(可供主機(jī)訪問(wèn)的網(wǎng)絡(luò))
- 疑問(wèn):如何實(shí)現(xiàn)外網(wǎng)映射?
通過(guò)第三方工具完成外網(wǎng)映射,例如natapp,ngrok,具體如何使用自行進(jìn)入官網(wǎng)觀看,
ngrok官網(wǎng).
natapp官網(wǎng).(推薦)
nginx 核心知識(shí)
什么是nginx
nginx是一款輕量級(jí)的web服務(wù)器/反向代理服務(wù)器,很小并且支持非常高的并發(fā)量
應(yīng)用場(chǎng)景
http服務(wù)器 :做靜態(tài)服務(wù)器、圖片服務(wù)器
虛擬主機(jī)配置 :將一臺(tái)服務(wù)器、拆分成多個(gè)網(wǎng)站部署。(可以通過(guò)配置不同的域名映射或者不同的端口來(lái)完成虛擬主機(jī)的配置)
反向代理: 使用反向代理隱藏真實(shí)ip地址
反向代理應(yīng)用場(chǎng)景:
你有3臺(tái)服務(wù)器分別提供不同的服務(wù),這個(gè)時(shí)候使用nginx來(lái)配置通過(guò)域名映射來(lái)完成不同三臺(tái)服務(wù)器的訪問(wèn),或者通過(guò)端口也可以。可以隱藏3臺(tái)提供服務(wù)器的真實(shí)ip地址,nginx通過(guò)內(nèi)部轉(zhuǎn)發(fā)到不同的服務(wù)器,抓包工具也只能獲取到nginx服務(wù)器的ip地址(沒(méi)有基點(diǎn))。
負(fù)載均衡
安全配置
使用Nginx搭建API接口網(wǎng)關(guān),解決網(wǎng)站跨域問(wèn)題
實(shí)現(xiàn)網(wǎng)站靜態(tài)資源和動(dòng)態(tài)資源分離
實(shí)現(xiàn)防止DDOS(流量攻擊)
名詞解釋
四層負(fù)載均衡
運(yùn)行在運(yùn)輸層,常使用TCP協(xié)議
七層負(fù)載均衡
運(yùn)行在應(yīng)用層,常使用Http協(xié)議
負(fù)載均衡
作用: 能夠減輕單臺(tái)服務(wù)器的壓力,故障轉(zhuǎn)移(重試機(jī)制)如果一臺(tái)服務(wù)器宕機(jī)了,直接輪詢到下一臺(tái)服務(wù)器、健康檢查,在nginx中使用upstream配置上游服務(wù)器,nginx中
故障轉(zhuǎn)移
如果訪問(wèn)其中一臺(tái)服務(wù)器,發(fā)現(xiàn)服務(wù)宕機(jī)了,或者有延遲,可以配置故障轉(zhuǎn)移直接切換到另一臺(tái)服務(wù)器
### 連接到上游服務(wù)器的時(shí)間 proxy_connect_timeout 1s; ### 發(fā)送請(qǐng)求超時(shí)時(shí)間 proxy_send_timeout 1s; ### 接受相應(yīng)超時(shí)時(shí)間 proxy_read_timeout 1s;
動(dòng)態(tài)負(fù)載均衡
在upstream中的配置不再是靜態(tài)的,而是在注冊(cè)中心上動(dòng)態(tài)拉取配置,達(dá)到動(dòng)態(tài)負(fù)載均衡的功能。
Nginx + consul + upsync 完成動(dòng)態(tài)負(fù)載均衡
1、安裝centos7的基礎(chǔ)環(huán)境
# 基礎(chǔ)命令 # 安裝netstat命令 yum install netstat # 查看所有tcp端口使用情況 netstat -ntlp # 查看當(dāng)前服務(wù)進(jìn)程 ps -ef 可選:[ | grep nginx] # 強(qiáng)制殺死端口對(duì)應(yīng)的程序 kill -9 pid進(jìn)程號(hào) # 配置yum源 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum update yum install -y yum-utils device-mapper-persistent-data lvm2 # 安裝基本環(huán)境 yum install gcc-c++ yum install -y pcre pcre-devel yum install -y zlib zlib-devel yum install -y openssl openssl-devel yum install wget yum install unzip
2、安裝consul (服務(wù)注冊(cè)與發(fā)現(xiàn))
# 下載它的安裝包,wget -c 中的 -c 表示斷點(diǎn)續(xù)傳 wget -c https://releases.hashicorp.com/consul/1.8.5/consul_1.8.5_linux_amd64.zip # 解壓壓縮包 upzip unzip consul_1.8.5_linux_amd64.zip # 執(zhí)行./consul命令,執(zhí)行后出現(xiàn) Usage: consul [--version] [--help] <command> [<args>] 這一行以及下面的一些參數(shù)則代表這個(gè)consul沒(méi)問(wèn)題 ./consul # 關(guān)閉防火墻 systemctl stop firewalld # 啟動(dòng)consul,這個(gè)ip填寫自己計(jì)算機(jī)的ip,如果是虛擬機(jī)就填虛擬機(jī)的ip,centos查看ip地址可以用ip addr,window查看ip用 ipconfig ./consul agent -dev -ui -node=consul-dev -client=192.168.254.134 # 當(dāng)然,也可以使用后臺(tái)運(yùn)行的方式,這樣子輸出的日志回到同級(jí)的nohup.out文件中 nohup ./consul agent -dev -ui -node=consul-dev -client=192.168.254.134 & # 訪問(wèn)consul 的web頁(yè)面 192.168.254.134:8500 # 查看并關(guān)閉consul的后臺(tái)進(jìn)程,我這里寫的19854是jobs -l查詢到的進(jìn)程pid jobs -l kill -9 19854
3、安裝nginx 并且為其添加upsync模塊
# 下載upsync模塊并且將其解壓
wget -c https://github.com/weibocom/nginx-upsync-module/archive/master.zip
unzip nginx-upsync-module-master.zip
# 下載nginx
wget -c http://nginx.org/download/nginx-1.9.9.tar.gz
# 解壓到當(dāng)前目錄
tar -zxvf nginx-1.9.9.tar.gz
# 配置一個(gè)nginx的用戶以及用戶組,-s /sbin/nologin nginx代表該用戶是無(wú)法登錄到主機(jī)的
groupadd nginx
useradd -g nginx -s /sbin/nologin nginx
# 這兩個(gè)文件夾會(huì)在編譯nginx時(shí)指定
mkdir -p /var/tmp/nginx/client/
mkdir -p /usr/local/nginx
# 進(jìn)入到nginx的解壓后文件夾的目錄下
cd nginx-1.9.9
# 編譯 nginx ,--prefix 代表nginx安裝的目錄。其中指定了用戶和用戶組,以及上面創(chuàng)建的文件夾并且添加了upsync模塊,由于upsync解壓在nginx同級(jí)目錄下,所以這里使用..來(lái)指定到它
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_flv_module --with-http_stub_status_module --with-http_gzip_static_module --with-http_realip_module --http-client-body-temp-path=/var/tmp/nginx/client/ --http-proxy-temp-path=/var/tmp/nginx/proxy/ --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi --http-scgi-temp-path=/var/tmp/nginx/scgi --with-pcre --add-module=../nginx-upsync-module-master
make && make install
## 進(jìn)入到剛剛nginx安裝的目錄,也就是/usr/local/nginx目錄中,進(jìn)入conf目錄中編輯conf目錄的文件內(nèi)容
upstream myserver {
server 127.0.0.1:11111;# 這個(gè)固定的,不用理
# springbootserver : key的值,upsync_timeout 超時(shí)時(shí)間3秒,upsync_interval 間隔時(shí)間 ,upsync_type 類型consul,strong_dependency 增強(qiáng)依賴
upsync 192.168.254.134:8500/v1/kv/upstreams/springbootserver upsync_timeout=3000ms upsync_interval=500ms upsync_type=consul strong_dependency=off;
# 將拉取下來(lái)的配置文件放在以下配置的目錄中
upsync_dump_path /usr/local/nginx-1.9.9/conf/upsync_dump.conf;
}
# 將server中的location指定為剛剛創(chuàng)建的upstream(上游服務(wù)器)
location / {
proxy_pass http://myserver;
index index.html index.htm;
}
# 進(jìn)入到sbin目錄下,啟動(dòng)nginx
./nginx
4、進(jìn)行測(cè)試
- 本機(jī)啟動(dòng)2個(gè)服務(wù),分別為8080和8081,ip地址為192.168.0.116
- 使用linux命令為consul指定2個(gè)key value,192.168.254.134是consul的ip地址
# 使用curl 請(qǐng)求,一定要是put請(qǐng)求 curl -X PUT http://192.168.254.134:8500/v1/kv/upstreams/springbootserver/192.168.0.116:8080 curl -X PUT http://192.168.254.134:8500/v1/kv/upstreams/springbootserver/192.168.0.116:8081 #或者使用postman調(diào)用consul提供的api來(lái)添加key,value http://192.168.254.134:8500/v1/kv/upstreams/springbootserver/192.168.0.116:8081 # 甚至可以圖形化界面進(jìn)行操作,手動(dòng)添加key value,手動(dòng)添加時(shí)注意如果是創(chuàng)建文件夾需要在最后加一個(gè)正斜杠 : /
5、在consul圖形化頁(yè)面添加key對(duì)應(yīng)的value來(lái)指定負(fù)載均衡的算法
{"weight":1, "max_fails":2, "fail_timeout":10, "down":0}

然后由于wget下載的速度有時(shí)候比較慢,這邊上傳了文件
到此這篇關(guān)于Nginx + consul + upsync 完成動(dòng)態(tài)負(fù)載均衡的文章就介紹到這了,更多相關(guān)Nginx + consul + upsync 動(dòng)態(tài)負(fù)載均衡內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
ngin配置301重定向設(shè)置方法和nginx子目錄301重定向
這篇文章主要介紹了ngin配置301重定向設(shè)置方法和nginx子目錄301重定向,需要的朋友可以參考下2014-04-04
在Nginx中阻止來(lái)自特定的IP地址訪問(wèn)的操作指南
在網(wǎng)絡(luò)安全方面,有時(shí)你可能需要限制特定國(guó)家或地區(qū)的訪問(wèn)權(quán)限,本文將介紹如何使用?Nginx?配置文件來(lái)阻止來(lái)自特定國(guó)家或地區(qū)的?IP?地址訪問(wèn)你的網(wǎng)站,需要的朋友可以參考下2024-07-07
nginx實(shí)現(xiàn)動(dòng)靜分離實(shí)例講解
在本篇文章里小編給大家整理的是關(guān)于nginx實(shí)現(xiàn)動(dòng)靜分離實(shí)例講解,需要的朋友們可以參考下。2020-03-03
Nginx實(shí)現(xiàn)404頁(yè)面的幾種方法(三種)
一個(gè)網(wǎng)站項(xiàng)目,肯定是避免不了404頁(yè)面的,通常使用Nginx作為Web服務(wù)器時(shí),有些相關(guān)配置方法,下面小編給大家?guī)?lái)了Nginx實(shí)現(xiàn)404頁(yè)面的幾種方法,感興趣的朋友一起看看吧2018-08-08
Nginx四層負(fù)載均衡的實(shí)現(xiàn)示例
Nginx?不支持傳統(tǒng)的四層負(fù)載均衡,但可以通過(guò)stream模塊配合TCP實(shí)現(xiàn)類似的功能,本文主要介紹了Nginx四層負(fù)載均衡的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下2024-04-04
Nginx服務(wù)LNMP之WordPress部署流程步驟
這篇文章主要為大家介紹了Nginx服務(wù)LNMP之WordPress部署流程步驟,本實(shí)驗(yàn)意在部署過(guò)程,使用單機(jī)版部署,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2022-03-03
nginx 代理服務(wù)器配置雙向證書驗(yàn)證的方法
這篇文章主要介紹了nginx 代理服務(wù)器配置雙向證書驗(yàn)證的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-02-02
Nginx動(dòng)態(tài)IP黑名單的實(shí)現(xiàn)步驟
為了封禁某些爬蟲或者惡意用戶對(duì)服務(wù)器的請(qǐng)求,我們需要建立一個(gè)動(dòng)態(tài)的?IP?黑名單,本文主要介紹了Nginx動(dòng)態(tài)IP黑名單的實(shí)現(xiàn)步驟,具有一定的參考價(jià)值,感興趣的可以了解一下2025-02-02
Nginx中配置HTTP/2協(xié)議的詳細(xì)指南
HTTP/2 是 HTTP 協(xié)議的下一代版本,旨在提高性能、減少延遲并優(yōu)化現(xiàn)代網(wǎng)絡(luò)環(huán)境中的通信效率,本文將為大家介紹Nginx配置HTTP/2協(xié)議想詳細(xì)步驟,需要的可以參考下2025-04-04

