前面我們已經瞭解了負載均衡的基本概念,我們可以畫個圖來看看,從互聯網進來的所有請求,都會先由Nginx負載均衡接收,然後再根據指定的策略來分發給後端的衆多服務器,至於是哪些策略,後文會進行介紹,具體如下圖所示
現在大部分的業務都以B/S結構的網站方式存在,接下來我們來試試做一個網站的負載均衡,我們要實現的目標:
1、後端有兩臺服務器,每臺都可以對外提供服務,且同時對外提供;
2、後端的其中一臺服務器故障時,不會中斷用戶訪問;
通過這個實驗,我們的網站將具備高可用性,因爲只要不是後端服務器全部損壞,用戶就始終可以訪問到服務器,在訪問量畢竟大時,Nginx將會把訪問量分發到不同的服務器上進行承載,不會受限於單臺服務器性能不足導致用戶體驗不佳的問題。
HTTP 負載均衡
目標: 通過Nginx來實現後端兩臺服務器的負載均衡,且以輪詢的方式將請求分發到不同的服務器上
角色 | 機器名 | IP地址 |
Nginx | Host1 | 192.168.30.130 |
Web Server | Host2 | 192.168.30.131 |
Web Server | Host3 | 192.168.30.132 |
新建一個http.conf的配置文件,我們將用這些文件來實現此實驗目標
vim /etc/nginx/conf.d/http.conf
將以下內容複製粘貼到配置文件中
upstream httptest {
server 192.168.30.131:80 weight=1;
server 192.168.30.132:80 weight=1;
}
server {
listen 80;
server_name www.example.com;
access_log /var/log/nginx/httptest;
error_log /var/log/nginx/errortest;
location / {
index index.html;
proxy_pass http://httptest;
}
}
具體配置文件效果如下
測試一下配置文件是否有問題
nginx -t
啓動nginx服務並開啓防火牆
systemctl restart nginx
firewall-cmd --add-port=80/tcp
firewall-cmd --add-port=80/tcp --permanent
配置文件上第一行的upstream 是一個反向代理模塊,httptest是字符串,下方的server 192這兩行是真實的服務器地址,真正的網站是由他們提供的,我們來測試一下,根據server_name這一行來看,將會響應這個請求頭,我們需要在Host2,Host3服務器上做以下操作,生成網站內容,稍後看效果
Host2上執行以下命令
yum install httpd -y
echo lixiaohui > /var/www/html/index.html
systemctl restart httpd
firewall-cmd --add-port=80/tcp
firewall-cmd --add-port=80/tcp --permanent
Host3上執行以下命令
yum install httpd -y
echo lixiaohui222222222 > /var/www/html/index.html
systemctl restart httpd
firewall-cmd --add-port=80/tcp
firewall-cmd --add-port=80/tcp --permanent
以上命令是在兩臺服務器上安裝了apache,並生成了不同的頁面內容,我們快來試試通過nginx來訪問吧~,大家要注意哦,如果想要用windows來訪問,需要在Windows上加本地hosts文件
通過實驗我們可以看到,隨着用戶的訪問,Nginx將我們的請求分別在兩臺服務器上進行處理,大大提升了服務器的的負載能力,也屏蔽了單臺服務器故障給用戶帶來的訪問中斷問題,提升負載能力的同時,還降低了訪問中斷的現象。
我們下一篇開始研究TCP 和UDP 的負載均衡做法,敬請期待哦~