nginx四層負載nginx七層負載,nginx基於nginx-sticky會話保持.

1. nginx負載均衡實戰

nginx提供了 4 7層負載均衡. 可根據業務需求選擇不一樣負載均衡策略.php

1.1.1 nginx四層負載均衡[網絡層TCP負載]

不支持動靜分離,但支持 http mysql redis這些.html

實驗環境:node

服務器IP 服務器用途
10.0.0.64 redis服務器
10.0.0.65 nginx反向代理服務器
10.0.0.66 測試經過nginx訪問redis

TCP負載均衡請求流程:mysql

請求過程: 用戶 --> 負載均衡 --> 真實服務器
響應過程: 真實服務器 --> 負載均衡 --> 用戶nginx

1.1.2 10.0.0.64 redis安裝配置

## 安裝服務器: 10.0.0.64:

經過redis+nginx來測試4層負載:
mkdir /server/tools -p
cd /server/tools
echo 'PATH=/usr/local/redis/src:$PATH' >>/etc/profile
wget http://download.redis.io/releases/redis-3.2.12.tar.gz
tar xf redis-3.2.12.tar.gz -C /usr/local/
\mv /usr/local/redis-3.2.12 /usr/local/redis
rm -f redis-3.2.12.tar.gz
cd /usr/local/redis
make
source /etc/profile
echo never > /sys/kernel/mm/transparent_hugepage/enabled
redis-server &


#非必要操做: 拷貝可執行文件到其餘服務器進行鏈接測試:
scp -r   /usr/local/redis/src/redis-cli root@10.0.0.65:/usr/sbin/redis-cli
scp -r   /usr/local/redis/src/redis-cli root@10.0.0.66:/usr/sbin/redis-cli
1. redis容許遠程訪問: vim /usr/local/redis/redis.conf
bind 127.0.0.1   #<--------- 這裏添加容許訪問的IP
#命令修改:
sed -i "s#^bind 127.0.0.1#bind 10.0.0.65 10.0.0.66#g" /usr/local/redis/redis.conf

2. 設置密碼訪問:
鏈接到redis後執行:
config set requirepass 123456   #密碼設置爲123456
AUTH '123456'  # redis-cli進入後輸入密碼驗證
config get requirepass #查看設置的密碼

本地機器和 客戶端鏈接:
redis-cli -h 10.0.0.64 -a 123456   #直接帶密碼鏈接
redis-cli -h 10.0.0.64   #進入後輸入 auth 123456 鏈接.

可用性測試:
服務端添加一個參數:
[root@k8s-master2]# redis-cli -a 123456
127.0.0.1:6379> set a b
OK
127.0.0.1:6379> get a
"b"

客戶端取值:
主機1[10.0.0.65]:
[root@k8s-node2]# redis-cli -h 10.0.0.64 -a 123456
10.0.0.64:6379> get a
"b"

主機2[10.0.0.66]:
[root@k8s-node1]# redis-cli -h 10.0.0.64 -a 123456
10.0.0.64:6379> get a
"b"
驗證配置無誤.


3.啓動redis:
redis-server &

密碼設置完畢,如今須要經過負載均衡來訪問這個redis.

1.1.3 TCP負載均衡配置[須要添加 --with-stream 四層負載均衡模塊]

10.0.0.66服務器作TCP代理10.0.0.64的redis,經過10.0.0.66訪問10.0.0.65來獲取10.0.0.64redis數據git

### 1. 配置nginx[10.0.0.66]:

# 添加upstream模塊:
cd /server/tools/
git clone https://github.com/gnosek/nginx-upstream-fair.git
mv /server/tools/nginx-upstream-fair /server/tools/upstream
yum install -y pcre pcre-devel openssl openssl-devel gd-devel  zlib-devel gcc
wget https://www.chenleilei.net/soft/nginx-1.16.1.tar.gz
tar xf nginx-1.16.1.tar.gz
cd nginx-1.16.1/
[編譯須要拿上次辯詞參數進行 nginx -V 而後添加 --with-stream 添加TCP負載模塊]
./configure --prefix=/application/nginx-1.16 --user=nginx --group=nginx --with-http_image_filter_module --with-http_ssl_module --with-http_v2_module --with-http_stub_status_module --with-stream

#全新安裝這樣作,若是是更新nginx make後不要執行mske install 把nginx二進制文件拷貝到sbin目錄
make && make install  
echo 'PATH=/application/nginx-1.16/sbin:$PATH' >>/etc/profile
source /etc/profile
mkdir /root/.vim -p
\cp -r contrib/vim/* ~/.vim/
egrep -v "#|^$" /application/nginx/conf/nginx.conf.default >/application/nginx-1.16/conf/nginx.conf


內容修改成如下:
#-----------------------------------------
worker_processes  1;
events {
    worker_connections  1024;
}
stream {
        log_format leilei '$remote_addr - [$time_local]'
                   '"$protocol" $status $bytes_sent $bytes_received'
                   '"$session_time" - "$upstream_addr"';
        access_log logs/access.log leilei;
        upstream web {
                server 10.0.0.64:6379 weight=1;
        }
        server {
                listen     6381;
                proxy_pass web;
                access_log logs/access.log leilei;
 }
}
#-----------------------------------------


這段配置是將 10.0.0.64:6379端口代理爲 10.0.0.66的6381端口.

1.1.4 測試TCP負載均衡

配置完畢後經過鏈接redis測試:[10.0.0.64 10.0.0.65 10.0.0.66 測試鏈接10.0.0.66的redis 6381端口]github

10.0.0.64添加數據:
[root@k8s-master2 redis]# redis-cli -a 123456
127.0.0.1:6379> set a b
OK
127.0.0.1:6379> get a
"b"


1. 10.0.0.66測試鏈接代理服務器[10.0.0.66] 訪問到10.0.0.64redis服務:
[root@k8s-node2 html]# /root/redis-cli -h 10.0.0.66 -p 6381
10.0.0.66:6381> AUTH 123456
OK
10.0.0.66:6381> get a
"b"

2. 10.0.0.65測試鏈接代理服務器[10.0.0.66] 訪問到10.0.0.64redis服務:
[root@k8s-node1 html]#  /root/redis-cli -h 10.0.0.66 -p 6381
10.0.0.64:6381> auth 123456
OK

3. 10.0.0.64測試鏈接代理服務器[10.0.0.66] 訪問到10.0.0.64的redis服務:
[root@k8s-master2 redis]# redis-cli -h 10.0.0.66 -p 6381
10.0.0.66:6381> AUTH 123456
OK
10.0.0.66:6381> get a
"b"

4. 10.0.0.64測試鏈接本地服務器[127.0.0.1 redis服務:
[root@k8s-master2 redis]# redis-cli -h 10.0.0.64 -p 6381
10.0.0.64:6379> AUTH 123456
OK
10.0.0.64:6379> get a
"b"

5. 使用本地IP訪問:
[root@k8s-master2 redis]# redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> AUTH 123456
OK
127.0.0.1:6379> get a
"b"



那這樣配置就達到了 任意服務器經過 10.0.0.66 來訪問 10.0.0.64 redis服務的負載訪問了.
本地服務器 直接訪問本地6379可以獲取到數據, 走TCP鏈接到10.0.0.64也能夠獲取到數據.
這也就說明.咱們TCP四層反向代理 就成功實現了,他是基於TCP鏈接實現的反向代理.

主要配置在: upstream 區塊.

1.2 http負載均衡 nginx七層負載均衡[應用層 http協議.]

七層反向代理支持nginx+php動靜分離.web

http {
...
...
upstream web {
	server 10.0.0.10:80;
	server 10.0.0.20:80;
}
server {
	listen 80;
	location / {
		proxy_pass http://web;
	}
}
...
...
}

--------------------------------------
支持的參數:
weight        權重
max_fails     失敗次數後中止該服務器
fail_timeout  踢出後從新檢測時間.
backup        備用服務器
max_conns     容許最大鏈接數
slow_start    節點恢復後不理解加入到集羣.


參數配置案例:
1. weight (輪詢,權重):
    upstream leilei{
        server 127.0.0.1:8081 weight=2;
        server 127.0.0.1:8082 weight=4;
        server 127.0.0.1:8083 weight=6;
    }
    
   額外可選參數 : 
   max_conns   最大鏈接數,如:   server 127.0.0.1:8081 weight=2 max_conns=100;
   max_fails   失敗重試次數,如:  server 127.0.0.1:8081 weight=2 max_conns=100 max_fails=1;
   fail_timeout 多久內達到其餘條件 如10秒內請求失敗2次,則等待10秒: 
               server 127.0.0.1:8081 weight=2 max_conns=100 max_fails=1 fail_timeout=10;

2.  max_conns 限制最大鏈接數限制爲100
    upstream leilei{
        server 127.0.0.1:8081 weight=2 max_conns=100;
        server 127.0.0.1:8082 weight=4;
        server 127.0.0.1:8083 weight=6;
    }

3. max_fails 失敗1次後中止該服務器
    upstream leilei{
        server 127.0.0.1:8081 weight=2 max_fails=1;
        server 127.0.0.1:8082 weight=4;
        server 127.0.0.1:8083 weight=6;
    }
    
4. backup 備份服務器,在其餘服務器都掛了的狀況下啓用備份服務器.
    upstream leilei{
        server 127.0.0.1:8081 weight=2;
        server 127.0.0.1:8082 weight=4 backup;
        server 127.0.0.1:8083 weight=6;
    }
    
5.slow_start 節點恢復後不理解加入到集羣.

1.3 會話保持nginx-sticky-module模塊[基於cookie的會話保持]

wget https://www.chenleilei.net/soft/nginx-sticky-module.zip
unzip nginx-sticky-module.zip
cd /server/tools/nginx-1.16.1
./configure --prefix=/application/nginx-1.16 --user=nginx --group=nginx --with-http_image_filter_module --with-http_ssl_module --with-http_v2_module --with-http_stub_status_module --with-stream --add-module=/server/tools/nginx-goodies-nginx-sticky-module-ng-08a395c66e42
make
cp -af objs/nginx /application/nginx-1.16/sbin/nginx
kill -USR2 `cat /application/nginx/logs/nginx.pid`
kill -WINCH `cat /application/nginx/logs/nginx.pid`
kill -QUIT `cat /application/nginx/logs/nginx.pid`



#配置nginx-sticky:
參考配置參數:https://www.cnblogs.com/tssc/p/7481885.html#_label0
-----------------------------------------------------------------------------
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    upstream web {
        sticky expires=1h domain=chenleilei.net;
        server 10.0.0.65:80;
        server 10.0.0.66:80;
        }
    server {
        listen       88;
        server_name  localhost;
        index index.html;
        set $proxy_pass web;
        location / {
                proxy_pass http://web;
                add_header Cache-Control no-store;
                }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}
-----------------------------------------------------------------------------
相關文章
相關標籤/搜索