1. consul?安裝
wget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
sudo apt update && sudo apt install consul
使用以上命令可直接安裝consul。
網上找好了好多方法都安裝不了,該方法在consul官網上找到
1.1. 測試consul
nohup consul agent -server -bootstrap-expect 1 -data-dir /data/consul -node=ali_1 -ui -client=0.0.0.0 -bind=0.0.0.0 &
執行代碼運行consul,參數說明如下,
nohup consul agent -dev -ui -node=consul-dev -client=xxx.xxx.xxx.xx &用來啟動Consul代理,命令各部分的含義如下:
nohup: 當用戶退出終端時,使用nohup啟動的程序仍會繼續在后臺運行。
consul agent: 啟動Consul的代理進程,它是Consul服務的核心組件,負責服務發現、健康檢查以及集群內部的通信和管理。
-dev: 標志表明 Consul 代理將以開發者模式啟動。在該模式下,Consul將會在單節點內創建一個完整的Consul集群,數據存儲在內存中,重啟后數據將丟失,適用于快速測試和開發環境。
-ui: 開啟內置的Web用戶界面,這樣可以通過瀏覽器訪問Consul提供的管理界面,默認監聽在本地8500端口的 /ui 路徑下。
-node=consul-dev: 設置當前Consul代理節點的名稱為consul-dev,用于標識集群中的唯一節點。
-client=xxx.xxx.xxx.xxx: 指定Consul代理監聽客戶端請求的IP地址為xxx.xxx.xxx.xxx,這意味著其他服務或者工具需要通過這個IP地址與Consul代理進行交互,比如注冊服務、查詢服務等。
&: 在命令末尾加上&符號表示讓命令在后臺運行,即以守護進程的方式啟動Consul代理,不會阻塞
注意,需要重新開個終端驗證
檢測防火墻開放8500端口(本人這里使用阿里云,只需要云后臺配置即可,網友可以自已百度)
使用以下命令測試服務是否有返回
curl http://ip:8500/v1/catalog/nodes
正常情況下有如下退回
2.?編釋及安裝nginx
nginx-upsync 是一個開源的 Nginx 擴展模塊,用于實現動態的負載均衡和自動發現后端服務器。該模塊的源碼和相關文件可以在以下 GitHub 地址找到:https://github.com/weibocom/nginx-upsync。
2.1?下載nginx-upsync????????
wget https://github.com/weibocom/nginx-upsync-module/archive/v2.1.0.tar.gz
tar -zxvf v2.1.0.tar.gz
下載upsync并解壓到當前目錄
2.2?下載nginx源碼
wget http://nginx.org/download/nginx-1.20.1.tar.gz
tar -zxvf nginx-1.20.1.tar.gz
從nginx官網下載nginx源碼并解壓
2.3?安裝編釋所屬的依賴
sudo apt update
sudo apt install build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev
2.4?配置nginx編釋環境并將upsync模塊增加到配置中
# 配置編譯選項,添加nginx-upsync-module
./configure --add-module=/path/to/nginx-upsync-module
2.5?編譯并安裝 Nginx
?
make
sudo make install
安裝完成后,nginx默認安裝位置是 /usr/local/nginx
3.?測試站點
3.1?配置2個測試站點
分別創建兩個目錄(/var/www/web1,/var/www/web2)并在目錄里放入index.html文件
文件內容可以自已定義,只要能區分是那個站即可,以下是本人的文件內容
<html>
<body>
hello word 111111
<body>
</html>
另一個文件內容是222222?請自行修改
3.2?修改nginx配置
#user nobody;
worker_processes 1;events {worker_connections 1024;
}http {include mime.types;default_type application/octet-stream;sendfile on;keepalive_timeout 65;upstream demo {ip_hash;server 192.168.100.3:80; #upsync 需要獲取的consul地址upsync 127.0.0.1:8500/v1/kv/upstreams/skuprice upsync_timeout=6m upsync_interval=500ms upsync_type=consul strong_dependency=off;#獲取后生成的文件名upsync_dump_path /var/www/server/servers_skuprice.conf;#引用生成的配置文件include /var/www/server/servers_skuprice.conf;}server {listen 8081;location / {proxy_pass http://demo ; }}server {listen 8000;root /var/www/web1;index index.php;location / {try_files $uri $uri/ /index.php?$args;}location ~ \.php$ {include fastcgi.conf;fastcgi_pass unix:/run/php/php8.2-fpm.sock;fastcgi_buffers 16 16k;fastcgi_buffer_size 32k;}}server {listen 8001;root /var/www/web2;index index.php;location / {try_files $uri $uri/ /index.php?$args;}location ~ \.php$ {include fastcgi.conf;fastcgi_pass unix:/run/php/php8.2-fpm.sock;fastcgi_buffers 16 16k;fastcgi_buffer_size 32k;}}}
配置文件中增加了2個測試站點,和一個代理站點,其中測試站點端口為:8000,8001。代理站點端口:8010。
nginx啟動里會提示找不到文件?/var/www/server/servers_skuprice.conf
所以需要事先創建一個空的文件到指定的目錄下
3.3?配置consul數據
curl -X PUT -d '{"weight":1, "max_fails":2, "fail_timeout":10}' http://127.0.0.1:8500/v1/kv/upstreams/skuprice/127.0.0.1:8000
curl -X PUT -d '{"weight":1, "max_fails":2, "fail_timeout":10}' http://127.0.0.1:8500/v1/kv/upstreams/skuprice/127.0.0.1:8001
使用 curl命令,初始化兩個KV信息。將設置服務器權重為1
3.3?啟動nginx
sudo /usr/local/nginx/sbin/nginx
3.4?測試效果
訪問ip:8010站點可以看到
3.5 遷換站點:
#遷換8001
curl -X PUT -d '{"weight":1, "max_fails":2, "fail_timeout":10}' http://127.0.0.1:8500/v1/kv/upstreams/skuprice/127.0.0.1:8000
curl -X PUT -d '{"weight":100, "max_fails":2, "fail_timeout":10}' http://127.0.0.1:8500/v1/kv/upstreams/skuprice/127.0.0.1:8001
通過更新站點的重權調整訪問站點。
4. 總結:
? ? ? ? 將方案適合對有穩定要求,不方便斷線更新站點非常合適,配合DevOps工具,可以做到無感更新,最對于比較舊的應用,像使用session技術的應用,可能會出現丟失登陸狀態等情況。