1.什么是負(fù)載均衡?
將任務(wù)分?jǐn)偟蕉鄠€(gè)操作單元上進(jìn)行執(zhí)行
2.為什么需要使用負(fù)載均衡?
3.負(fù)載均衡實(shí)現(xiàn)的場(chǎng)景? 四層負(fù)載均衡
四層負(fù)載均衡: 轉(zhuǎn)發(fā) 改寫數(shù)據(jù)包 源IP 源端口 目標(biāo)IP 目標(biāo)端口 真實(shí)的目標(biāo)IP 目標(biāo)端口
七層負(fù)載均衡: 代理 代為辦理
4.七層負(fù)載均衡與四層負(fù)載均衡區(qū)別?
七層負(fù)載均衡效率沒有四負(fù)載均衡高
四層負(fù)載均衡沒有七層負(fù)載均衡支持的功能多,比如 url匹配 設(shè)置頭部信息
負(fù)載均衡是基于代理實(shí)現(xiàn)的一種形式
5.七層負(fù)載均衡配置示例?
[root@lb01 conf.d]# cat proxy_web.oldxu.com.conf
upstream web {
server 172.16.1.7:80;
server 172.16.1.8:80;
}
server {
listen 80;
server_name web.oldxu.com;
location / {
proxy_pass http://web;
include proxy_params;
}
}
[root@lb01 conf.d]# cat /etc/nginx/proxy_params
proxy_http_version 1.1; 向后端請(qǐng)求走h(yuǎn)ttp1.1--------
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr; 透?jìng)鱥p(多臺(tái)代理其中的一臺(tái))----
proxy_set_header X-Forwarded-For **透?jìng)髡鎸?shí)ip
$proxy_add_x_forwarded_for;
proxy_connect_timeout 30; 連接超時(shí)時(shí)間
proxy_send_timeout 60; 發(fā)送超時(shí)時(shí)間
proxy_read_timeout 60; 讀取超時(shí)時(shí)間
proxy_buffering on;
proxy_buffer_size 32k;
proxy_buffers 4 128k;
后端web配置 (為了區(qū)分,將兩臺(tái)web的站點(diǎn)配置的不一樣,以便測(cè)試效果)
[root@web01 conf.d]# cat web.oldxu.com.conf
server {
listen 80;
server_name web.oldxu.com;
location / {
root /html;
index index.html;
}
}
6.七層負(fù)載均衡調(diào)度算法续室、后端狀態(tài)
輪詢 按時(shí)間順序逐一分配到不同的后端服務(wù)器(默認(rèn))
機(jī)器的配置一致 (web集群 硬件環(huán)境 一致)
weight 加權(quán)輪詢,weight值越大,分配到的訪問幾率越高
機(jī)器硬件不一致的情況下使用 (硬件 pc機(jī))
ip_hash
每個(gè)請(qǐng)求按訪問IP的hash結(jié)果分配,這樣來自同一IP的固定訪問一個(gè)后端服務(wù)器
解決問題: 能解決會(huì)話保持的問題
帶來新的問題: 會(huì)造成后端負(fù)載不均衡
url_hash
按照訪問URL的hash結(jié)果來分配請(qǐng)求,是每個(gè)URL定向到同一個(gè)后端服務(wù)器
least_conn 最少鏈接數(shù),那個(gè)機(jī)器鏈接數(shù)少 就分發(fā)
7.七層負(fù)載均衡后端狀態(tài)
狀態(tài) 概述
down 當(dāng)前的server暫時(shí)不參與負(fù)載均衡
backup 預(yù)留的備份服務(wù)器
max_fails 允許請(qǐng)求失敗的次數(shù)
fail_timeout 經(jīng)過max_fails失敗后, 服務(wù)暫停時(shí)間
max_conns 限制最大的接收連接數(shù)
a max_fails=2 fail_timeout=10s 運(yùn)維
b max_fails=2 fail_timeout=10s 運(yùn)維
c backup; 開發(fā) 運(yùn)維
d down; 離職
8.七層負(fù)載均衡實(shí)現(xiàn)Redis會(huì)話共享
1、粘性session
粘性session是指Ngnix每次都將同一用戶的所有請(qǐng)求轉(zhuǎn)發(fā)至同一臺(tái)服務(wù)器上谒养,及Nginx的 IP_hash挺狰。
2、session復(fù)制
即每次session發(fā)生變化時(shí),創(chuàng)建或者修改丰泊,就廣播給集群中的服務(wù)器薯定,使所有的服務(wù)器上的session相同。
3瞳购、session持久化 ( 慢 )
將session存儲(chǔ)至數(shù)據(jù)庫(kù)中沉唠,像操作數(shù)據(jù)一樣操作session。
4苛败、session共享
緩存session至內(nèi)存數(shù)據(jù)庫(kù)中,使用redis ( 內(nèi)存-->刷到磁盤 )径簿,memcached (內(nèi)存數(shù)據(jù)庫(kù))罢屈。
思路:
1.在 172.16.1.8 和 172.16.1.7 安裝 phpmyadmin fenb (分別測(cè)試登錄)
2.配置phpmyadmin連接遠(yuǎn)程的數(shù)據(jù)庫(kù)
3.接入負(fù)載均衡 ---> 代理至后端2臺(tái)主機(jī)
4.發(fā)現(xiàn)無法正常登陸
5.瀏覽器測(cè)試
解決接入負(fù)載均衡后無法連接問題
1.在負(fù)載均衡上配置 ip_hash 會(huì)話保持 (造成用戶僅訪問后端的某一臺(tái)主機(jī)壓力過高)
2.既希望能夠?qū)崿F(xiàn)流量的均攤,又希望會(huì)話的問題得以保持, 所以引入了redis
redis配置
1.修改php存儲(chǔ)session至redis中
[root@db01 ~]# vim /etc/php.ini
session.save_handler = redis
session.save_path = "tcp://172.16.1.51:6379?weight=1"
2.修改php-fpm 注釋默認(rèn)存儲(chǔ)session的位置
[root@web01 ~]# vim /etc/php-fpm.d/www.conf
;php_value[session.save_handler] = files
;php_value[session.save_path] = /var/lib/php/session
3.將修改后的配置文件,推送至172.16.1.8
[root@web01 ~]# scp /etc/php.ini root@172.16.1.8:/etc/
[root@web01 ~]# scp /etc/php-fpm.d/www.conf root@172.16.1.8:/etc/php-fpm.d/www.conf
4.重啟172.16.1.7 172.16.1.8兩臺(tái)服務(wù)器的php-fpm
[root@web02 conf.d]# systemctl restart php-fpm