最近公司主力網站之一改版完成終於上線了,牽扯了我大半年的時間,如今終於有時間坐下來寫點東西,總結沉澱一下本身的技術心得。這次,根據服務器的數量和質量,我採用負載均衡高冗餘的架構,考慮單點故障,WEB也拋棄了apache,而使用的是nginx,數據庫仍是使用主、從架構。該架構目前承載80W的PV,沒有大的壓力。javascript
這裏簡單談一下web的選擇疑問,是使用nginx仍是apache,不少朋友在規劃網站的時候都出現難以選擇的問題,甚至有朋友在建設初用apache後期改爲nginx。接下來我說一下個人規劃選擇,WEB到底是使用Apache仍是nginx,我認爲二者各自之間優缺點很是明顯,最終決定是要根據你的網站自身狀況來肯定,如網頁的主要內容、網站類型(電商仍是門戶等等)。總之,在考慮過網站內容、類型等方面後仍是沒法選擇,這時,大併發量我就選擇nginx,而動態請求很是頻繁的且併發量不大的網站我就使用apache。而個人這個網站是門戶網站,內容基本都生成靜態頁,動態頁面很少而且過不了多長時間就會生成html,因此我選擇使用nginx作web。php
首先聲明,此架構適合場景:中小型網站場景,粗略預估100W PV左右。css
應用環境html
主nginx:192.168.1.158java
Web服務器一:192.168.1.163node
Web服務器二:192.168.1.162mysql
主數據庫服務器:192.168.1.159linux
從數據庫+備nginx:192.168.1.161nginx
Nginx虛擬IP:192.168.1.160web
操做系統:centos 6.4
1、YUM和編譯安裝軟件方式的小分享
編譯安裝仍是yum安裝軟件的爭議,如今這個時代了還有人去爭論。我認爲這個事情不必爭論,也不可能爭論出結果,徹底看我的的工做習慣,我想說YUM真的很節省時間,YUM安裝軟件簡單、快捷,還有點好處能夠培養新人的linux興趣。編譯安裝能夠很好訂製化,將不須要的功能關閉掉,減小安全隱患等。YUM安裝只要關閉不須要的功能結果和編譯安裝同樣的,而編譯安裝過程當中你很詳細的掌握了軟件的安裝路徑等,真是各有優缺點,不必這上面去浪費心思。而我是按照所需時間來選擇,基本上我是個沒時間的人,因此我大多數都使用yum 方式安裝軟件。
2、主、從mysql安裝及同步
挺簡單的配置,若是感興趣的朋友能夠參看我上篇文章《mysql linux下高可用架構的簡析及主、從複製的實戰(一)》
3、PHP安裝
在兩臺WEB上分別安裝PHP,安裝過程很是簡單。
一、 yum install php*
service php-fpm start 啓動php-fpm
二、 調整PHP時區
要注意先調整一下php的時區和時間,若是不調整會出現PHP與系統時間不對應的錯誤。在php.ini找到;Date.timezone = 並將;去掉,改爲下圖
3、安裝zend加速
必定要安裝,php加速確實能提升PHP的運行速度,不裝ZEND也至少裝一種加速軟件。
以前安裝過ZEND包,因此我直接拿來用,上傳後解壓在規定目錄內。
打開php.ini配置文件,在最後添加zend的配置代碼
重啓php生效,service php-fpm restart
4、web服務器的安裝
由於我是個時間緊張的人,因此我採用Yum安裝。Centos 6.4自己的yum源是沒有nginx安裝包的,因此我先換源換成atomic的源,再yum安裝。
wget http://www.atomicorp.com/installers/atomic,直接下載
1、換源
Sh ./atomic
默認安裝就能夠,裝完後會看到/etc/yum.repos.d/ 會有atomic.repo
爲讓更換源當即生效,輸入yum check-update 讓YUM本身check。
2、安裝nginx
Yum install nginx
安裝後nginx版本是1.6.2-23,正是我想裝的 1.6。
修改配置mv /etc/nginx/nginx.conf /etc/nginx/nginx.bak,創建虛擬主機目錄mkdir –p /etc/nginx/vhosts/
將這段調整好的代碼寫入新的nginx.conf
##############################################################
#
# This is the main Nginx configuration file.
#
# More information about the configuration options is available on
# * the English wiki - http://wiki.nginx.org/Main
# * the Russian documentation - http://sysoev.ru/nginx/
#
#######################################################################
#----------------------------------------------------------------------
# Main Module - directives that cover basic functionality
#
# http://wiki.nginx.org/NginxHttpMainModule
#
#----------------------------------------------------------------------
user root root;
worker_processes 8;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 65535;
events
{
use epoll;
worker_connections 65535;
}
http
{
include /etc/nginx/mime.types;
default_type application/octet-stream;
ssi on;
ssi_silent_errors on;
ssi_types test/shtml;
#charset gb2312;
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 8m;
sendfile on;
tcp_nopush on;
keepalive_timeout 60;
tcp_nodelay on;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
fastcgi_intercept_errors on;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
include /etc/nginx/vhosts/*.conf;
}
3、在/etc/nginx/vhosts/ 建立網站站點
Vi www.conf
server
{
listen 80;
server_name www.test.com;
index index.html index.php;
root /www/web_www;
location ~ .*\.(php|php5)?$
{
#fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
}
兩臺WEB服務器作同樣的配置。
5、負載均衡的實現
nginx作負載均衡仍是很穩定,甚至不須要腳原本監控nginx進程存活狀況,我維護的幾個站基本一年有不了1、兩次,因此沒有編寫也沒有采用別人寫的監控進程腳本,可是提醒各位朋友,因網站而異,沒有什麼該有什麼不應有,適合本身的就是最好、最穩定的。
一、負載均衡nginx的安裝及配置
兩臺nginx分別安裝nginx,過程簡單就再也不詳細說明,貼出配置文件供各位朋友參考。
user root root;
worker_processes 8;
pid /var/run/nginx.pid;
worker_rlimit_nofile 65535;
events
{
use epoll;
worker_connections 65535;
}
http{
include mime.types;
default_type application/octet-stream;
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 8m;
sendfile on;
tcp_nopush on;
keepalive_timeout 60;
tcp_nodelay on;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $http_x_forwarded_for';
access_log /var/log/nginx/access.log main;
upstream backend {
server 192.168.1.162;
server 192.168.1.163;
}
server {
listen 80;
server_name www.test.cn;
location / {
root /var/www ;
index index.htm index.html index.php index.shtml;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://backend;
}
}
}
2、yum 安裝keepalived
Yum install keepalived
3、主keepalived的配置
Vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state MASTER
interface eth1
virtual_router_id 51
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass test.cn
}
virtual_ipaddress {
192.168.1.160
}
}
Service keepalived start
後ip add 的結果以下,出現global ip 就成功了。
四、副keepalived的配置
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state BACKUP
interface eth1
virtual_router_id 51
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass test.cn
}
virtual_ipaddress {
192.168.1.160
}
}
測試過程以下:
一、分別重啓主nginx和備nginx服務器,觀察網站訪問狀況,也經過ping 虛擬IP地址192.168.1.160來觀察,看可否正常訪問網站。
經過ping是比較直觀的,只丟失1個包,網站是能正常打開。
二、分別重啓web1和web2服務器,觀察網站訪問狀況。
檢查個站點打開狀況,打開完整的。
結果:若是兩步測試結果都不影響網站的正常訪問,說明負載均衡架構是成功的,恭喜你,是否是有種建設成功後的小喜悅。
注意點:
1、兩臺web服務器的nginx都設置了worker_connections 65535; 必須優化centos的內核,不然是起不到做用的。
vi /etc/sysctl.conf
在sysctl.conf代碼的最後面加入
# Add
net.ipv4.tcp_max_syn_backlog = 65536
net.core.netdev_max_backlog = 32768
net.core.somaxconn = 32768
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2
net.ipv4.tcp_tw_recycle = 1
#net.ipv4.tcp_tw_len = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_max_orphans = 3276800
net.ipv4.ip_local_port_range = 1024 65535
重啓服務器或/sbin/sysctl –p
2、nginx日誌切分,要是你使用個人nginx日誌部分的配置,就不用再去更改,每晚凌晨會自動切分,不過log日誌路徑要放在/var/log/nginx目錄下。
http://hostslinux.blog.51cto.com/8819775/1613387