一:編譯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....