nginx提供了 4 7層負載均衡. 可根據業務需求選擇不一樣負載均衡策略.php
不支持動靜分離,但支持 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
## 安裝服務器: 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.
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端口.
配置完畢後經過鏈接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 區塊.
七層反向代理支持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 節點恢復後不理解加入到集羣.
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; } } } -----------------------------------------------------------------------------