理論:
首先,區分負載均衡與代理的不同,因為,高可用是在負載均衡的基礎上實作的,
代理:把連接請求直接轉發到后臺某個固定web節點;代理一對一
負載均衡:把請求使用某種調度演算法分散發布給后臺所有web節點(不固定);負載均衡一對多
負載均衡的軟體主要有三種:本節只講Nginx,它的調度演算法主要有:
1)輪詢(默認)
每個請求按時間順序逐一分配到不同的后端服務,如果后端某臺服務器死機,自動剔除故障系統,使用戶訪問不受影響,
2)weight(輪詢權值)
weight的值越大分配到的訪問概率越高,主要用于后端每臺服務器性能不均衡的情況下,或者僅僅為在主從的情況下設定不同的權值,達到合理有效的地利用主機資源,
upstream bakend { server 192.168.0.14 weight=10; server 192.168.0.15 weight=10; }
3)ip_hash
每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個后端服務器,可以解決session的問題,
upstream bakend { ip_hash; server 192.168.0.14:88; server 192.168.0.15:80; }
4)fair
按后端服務器的回應時間來分配請求,回應時間短的優先分配,與weight分配策略類似,
{ server server1; server server2; fair; }
5)url_hash
按訪問url的hash結果來分配請求,使每個url定向到同一個后端服務器,后端服務器為快取時比較有效,
案例
| 主機名 | IP | 安裝軟體 |
|---|---|---|
| lb1 | 172.16.0.10 | nginx1.18、keepalived-1.3.5、ansible-2.9.25 |
| lb2 | 172.16.0.20 | nginx1.18、keepalived-1.3.5 |
| web1 | 172.16.0.30 | nginx1.18 |
| web2 | 172.16.0.40 | nginx1.18 |
提示:ansible是為了更省時省力的完成部署任務,也可以手動一個個安裝
步驟:
1、 搭建 環境
lb1做管理主機安裝ansible,并實作免密登錄其他被管理主機
創建免密腳本
[root@lb1 ~]# vim connections.sh
#!/usr/bin/env bash
#ssh secret free
secret_free() {
echo " = = = = = = = = = = = = = = = = 免密互動 = = = = = = = = = = = = = = = = "
yum -y install expect
if [ ! -f /root/.ssh/id_rsa ];then
ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa
mv /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys
echo "id_rsa創建成功"
else
mv /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys
echo "id_rsa已存在"
fi
while read line
do
user=`echo $line | cut -d " " -f 2`
ip=`echo $line | cut -d " " -f 1`
passwd=`echo $line | cut -d " " -f 3`
expect <<EOF
set timeout 10
spawn scp -r /root/.ssh $ip:/root
expect {
"yes/no" { send "yes\n";exp_continue }
"password" { send "$passwd\n" }
}
expect eof
EOF
done < /root/hosts
}
secret_free
執行腳本:成功可免密登錄其他主機,
拷貝Nginx的rpm包到被管理端(提前下載好)

2、 安裝Nginx
使用file與shell模塊,思考為什么不用yum模塊?很簡單,yum是直接從互聯網鏡像站下載,默認會下載最新版本,可能是1.20;我們為了保持穩定版本,提前下載好所需要的版本,使用shell
1)防止程式被鎖死,先呼叫file模塊(可以解決之下yum命令出現下圖情況)


2)呼叫shell模塊執行本地安裝rpm包

3)呼叫service模塊啟動服務
先創建默認首頁檔案
cd /usr/share/nginx/html
echo “web1:記條Nginx優化引數worker_connections 65535”> index.html
管理主機執行,啟動服務命令:

訪問Nginx首頁:不支持中文,訪問到首頁證明實驗是成功的

3、 配置負載均衡
lb1操作:
[root@lb1 ~]# cd /etc/nginx/conf.d/
洗掉或為默認組態檔改名
mv default.conf default.conf.bak
創建新檔案:
負載均衡組態檔
vim lb1.conf
upstream web_cluster {
server 172.16.0.30:80;
server 172.16.0.40:80;
}
server {
listen 80;
server_name blog.connect.com;
location / {
proxy_pass http://web_cluster;
include nginx_params;
}
}
添加優化Nginx組態檔params
[root@lb1 nginx]# vim /etc/nginx/nginx_params
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 30;
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_buffering on;
proxy_buffer_size 32k;
proxy_buffers 4 128k;
啟動Nginx服務
systemctl start nginx
驗證:

lb1使用ansible操作:
洗掉默認組態檔:
ansible 172.16.0.20 -m file -a ‘path=/etc/nginx/conf.d/default.conf state=absent’
拷貝組態檔到配置目錄:

ansible 172.16.0.20 -m copy -a ‘src=/etc/nginx/conf.d/lb1.conf dest=/etc/nginx/conf.d’
重啟Nginx服務:

驗證:訪問172.16.0.20效果和訪問lb1地址一樣
4、 兩臺lb分別安裝keepalived

lb1配置:
vim /etc/keepalived/keepalived.conf

lb2配置:
vim /etc/keepalived/keepalived.conf


啟動服務:
ansible 172.16.0.20 -m service -a “name=keepalived state=started”
驗證:
1)主備同時存活情況,虛擬ip在master上

2) Windows11訪問,正常

模擬主宕機情況:
在master上操作:

backup查看虛擬Ip:

客戶端訪問:依然正常

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/386528.html
標籤:其他
