22 nginx配置與集群

2022-08-18 12:15:10 字數 3257 閱讀 7681

一:編譯nginx ,並配置

./configure

make && make install

cd nginx-1.2.7

安裝統計模組,便於觀察nginx的狀態

php 安裝配置

1 tar -xzvf  /path/』

2 cd /path/

3 .configure --prefix=/usr/local/php --

伺服器集群與負載均衡搭建完畢

1:問題  c-->a 的mysql連線很慢

解決: my.cnf中的[mysqld]節點中,新增

skip-name-resolve   // 這句話使mysql連線時忽略解析網域名稱,在制定mysql許可權時,只能根據ip限制,不能根據網域名稱限制.

2: 問題  當memcache中沒有相應的資料,從後台**資料時,

http的狀態碼是404,(雖然內容正常),這樣不利於seo

解決: nginx/conf/nginx.conf

error_page 404  =200 /callback.php;  // 這樣 404被改寫成200來響應中

壓力測試:

模擬 前0-10萬是熱資料,

10-20萬是冷門資料

請求熱資料 0-10,請求9次

請求准予資料 請求1次,     -----100萬次的請求.

優化思路:

nginx響應請求

1:建立socket連線

2: 開啟檔案,並沿socket返回.

排查問題,也要注意觀察這兩點,

主要從系統的dmesg ,和nginx的error.log來觀察

優化過程

1:判斷nginx的瓶頸

1.1: 首先把ab測試端的效能提高,使之能高併發的請求.

易出問題: too many open files

原因 :  ab在壓力測試時,開啟的socket過多

解決: ulimit -n 30000 (重啟失效)

觀察結果: nginx 不需要特殊優化的情況下, 5000個連線,1秒內響應.

滿足要求,但 wating狀態的連線過多.

1.2: 解決waiting程序過多的問題.

解決辦法: keepalive_timeout = 0; 

即: 請求結果後,不保留tcp連線.

在高併發的情況下, keepalive會佔據大量的socket連線.

結果: waiting狀態的連線明顯減少.

1.3: 解決服務端 too many open files

分析: nginx要響應,

1是要建立socket連線,

2 是要讀本地檔案

這兩個者限制.

由上圖可看出,nginx的問題容易出在2點上:

1: nginx接受的tcp連線多,能否建立起來?

2: nginx響應過程,要開啟許多檔案 ,能否開啟?啊啊

第1個問題: 在核心層面(見下)

第2個問題 (見下)

系統核心層面:

net.core.somaxconn = 4096 允許等待中的監聽

net.ipv4.tcp_tw_recycle = 1  tcp連線快速**

net.ipv4.tcp_tw_reuse = 1    tcp連線重用  

net.ipv4.tcp_syncookies = 0  不抵禦洪水攻擊

ulimit -n 30000

nginx層面:

解決: nginx.conf 下面: work_connection 加大

worker_connections  10240;

worker_rlimit_nofiles 10000;

keepalive_timeout 0;

nginx---->php-fpm之間的優化

如上圖,在很多個nginx來訪問fpm時, fpm的程序要是不夠用, 會生成子程序.

生成子程序需要核心來排程,比較耗時,

如果**併發比較大,

我們可以用靜態方式一次性生成若干子程序,保持在記憶體中.

方法 -- 修改php-fpm.conf

pm = static  讓fpm程序始終保持,不要動態生成

pm.max_children= 32  始終保持的子程序數量

php-mysql的優化

linux機器下 ,php 通過ip連線其他mysql伺服器時,容易出的問題

能ping能,但connect不到.

一般是由:mysql伺服器的防火牆影響的.

併發1萬連線,響應時間過長.

優化思路: 同上的nginx

1: 核心層面,加大連線數,並加快tcp**

2: mysql層面,增大連線數

3: php層面,用長連線,節省連線數

4: 用memcached快取,減輕mysql負擔

具體:1.1  , php伺服器增大 ulimint -n選項

1.2 mysql伺服器核心配置

新增或修改如下選項

net.ipv4.tcp_tw_recycle = 1

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_syncookies = 0

# syscttl -p 使修改立即生效

2.1  修改mysql.cnf

vi  /etc/my.conf

# service mysqld restart 重啟mysql

3.1 php層面 ,用長連線

mysql_connect ---> mysql_pconnect

注: pconnect 在php以apache模組的形式存在時,無效果.

nginx+phjp+mysql+nginx

在引入memcached後,效能提公升不明顯,甚至還略有下降

memcached使50%的請求變快了,但是一部分,反倒慢了.

原因在於--php->memcached也要建立tcp連線,代價挺高,

但快取了資料之後,就省去了mysql的查詢時間.

總結: memcached適合存複雜的sql,尤其是連線查詢/模糊查詢的sql結果

memcached伺服器的優化(集中在核心的ipv4設定上,不再重複)

nginx 配置nginx集群(7)

1.準備兩台伺服器 且都安裝nginx 和keepalived 安裝keepalived yum install keepalived y安裝好後linux 的etc 資料夾下面會有keepalived資料夾以及配置檔案 2.修改keepalived的配置問價 virtual ipaddress3....

nginx集群 配置高可用的Nginx集群

1 什麼是nginx高可用 1 需要兩台nginx伺服器 2 需要keepalived 3 需要虛擬ip 注 同乙個時刻,只有乙個nginx提供服務,它會將虛擬ip和這台提供服務的nginx進行繫結,如果這台nginx掛了,它會將虛擬ip和另外一台nginx服務進行繫結 2 配置高可用的準備工作 1...

nginx配置tomcat集群

1.輕量級,同樣起web 服務,比apache 占用更少的記憶體及資源 抗併發,nginx 處理請求是非同步非阻塞的,而 apache 則是阻塞型的,在高併發下nginx 能保持低資源低消耗高效能 nginx執行起來占用的資源cup非常少,對於啟動 重啟都非常快速,在低配電腦上也可以快速的執行。2....