大型網站后臺構建實踐
公司接了個新項目,建一個查詢網站,同一時間可能會面對1萬甚至以上的查詢量。
普通PC環境,大約同時支持2000到3000的并發量,當然,我不排除有高手進行后臺服務器優化,實現更高的并發量。
一些大型的網站會采取“分流”的方式去將連接平均分攤到后臺服務器,例如前面一臺主機負責接收連接和與后臺服務器的負載均衡。如下圖:
實例如途中,一共需要配置了多臺服務器。
server1——裝有Centos6.3,Web server 為Nginx,主要功能對網站用戶進行負載均衡,將訪問派送到后臺的Webserver。
server2——裝有Centos6.3,基本配置為LAMP,或者LNMP。兩者皆有優缺點。主要用戶保存網站,數據存儲和網站數據處理等工作。
server3——同上
server4——同上
……
……
同時,為了保證數據的一致性,我們會采取一種數據庫同步的操作,利用1主2從,最后再做加入新從的測試。其實之前我也做過,具體可以參照之前寫的博客《Mysql 復制(Replication)實現》
正式開始配置
先分別為4臺server安裝Centos6.3,不選擇安裝Webserver,Database和PHP等,只安裝Centos。
配置輔助負載均衡的server前,先配置后臺server,這里,我選擇配置LNMP,具體配置方法可以參照我博文《Centos 6.2 實際工作環境搭建(LNMP)》
也可以使用《一鍵安裝LANMP》
這里我所使用的是一鍵安裝LANMP版本,配置比較簡單,比較適合新手。
下載安裝
wget http://dl.wdlinux.cn:5180/lanmp_v2.4.tar.gz
tar zxvf lanmp_v2.4.tar.gz
sh in.sh
4個可選安裝,如下圖
1,2,3 是安裝獨立的環境,不可自由切換nginx,apache,nginx+apache應用環境
4 是安裝所有,即可自由切換nginx,apache,nginx+apache的應用環境
編譯安裝比較慢,現只提供在CentOS 5.X/wdlinux_base 5.X/wdos 1.X 系統下的RPM安裝,5分鐘就可以
也可以直接下載wdos的安裝,集成最新的wdcp,不過目前只有32位
具體可看 http://www.wdlinux.cn/bbs/thread-2431-1-1.html
雖然安裝LANMP,但實際應用的時候會將服務系形似分配成LNMP或者LAMP。
測試通過就繼續安裝,分別安裝了3臺。
測試通過后,實際環境為:
1.LN(Centos6.3+Nginx)用于負載均衡---IP地址:192.168.1.100
2.LNMP(Centos6.3+Nginx+Mysql+PHP)Web服務器---IP地址:192.168.1.171
3.LNMP(Centos6.3+Nginx+Mysql+PHP)Web服務器---IP地址:192.168.1.172
4.LNMP(Centos6.3+Nginx+Mysql+PHP)Web服務器---IP地址:192.168.1.173
5.LNMP(Centos6.3+Nginx+Mysql+PHP)備用Web服務器---IP地址:192.168.1.174
Mysql復制
按照一開始的架構圖,需要1主2從,所以開始配置mysql復制,具體可以參照之前寫的博客《Mysql 復制(Replication)實現》 使用前要先說明,如果使用一鍵安裝版,就需要將read_only = 1 這個選項去掉,不能添加。這個只讀設置會影響一鍵安裝版的PHP管理頁面。
2號服務器的Mysql為主,3號,4號的為從。
配置過程中,要將2個數據庫列出到排外,不需要進行復制同步。避免數據庫出錯。
- #主/etc/my.cnf
- binlog_ignore_db=mysql,wdcpdb
- #從/etc/my.cnf
- replicate-ignore-db=mysql
- replicate-ignore-db=wdcpdb
配置完畢后,在兩天從中輸入:
- SHOW SLAVE STATUS\G
查看復制狀態,當看見
- Slave_IO_Running: Yes
- Slave_SQL_Running: Yes
就已經證明復制已經可以正常運作。在主隨便創建一個數據庫,然后在從刷新,就會出現剛復制過來的數據庫。
#p#
虛擬主機
做到這一步,基本就已經完成,剩下的就是建立虛擬主機放置網站和設定Nginx負載均衡。
打開瀏覽器輸入192.168.1.171:8080,進入wdcp服務器管理界面,根據下圖進行簡單設置。
簡單說明,增加服務器端口,是因為文章開頭已經說過,在假設沒有DNS的前提下進行操作,沒有DNS的域名識別,如何進行虛擬主機識別呢?用端口。我這里分別開通了81,82.Web引擎,默認是Lanmp的就是Linux+apache+Nginx+Mysql+php,我們這個項目需要高并發量,所以設置了Lnmp就是Web引擎為Nginx。設置完成后重啟。
設置虛擬主機
使用該管理系統新建虛擬主機非常簡單,只需要點擊新建站點,寫一下域名,就可以了,當然,記得將端口改為81.分別在三臺服務器中建立虛擬主機,端口號均為81.實際的第一個站點的虛擬主機如下:
- 1-server-192.168.1.171:81
- 2-server-192.168.1.172:81
- 3-server-192.168.1.173:81
注意問題:系統時間
有時候安裝完系統,系統時間會跟實際時間有出入,可能是時區問題,可能是虛擬機問題,等等,無論問題,都要調整時間,下面為Linux調整時間的方法。
- 修改linux的時間可以使用date指令
- 在命令行輸入:
- date
- 顯示當前時間 Fri Aug 3 14:15:16 CST 2007
- date -s
- 按字符串方式修改時間
- 可以只修改日期,不修改時間,輸入: date -s 2007-08-03
- 只修改時間,輸入:date -s 14:15:00
- 同時修改日期時間,注意要加雙引號,日期與時間之間有一空格,輸入:date -s "2007-08-03 14:15:00"
- 修改完后,記得輸入:clock -w
- 把系統時間寫入CMOS
負載均衡
對于LN 的安裝我就不再說明,直接跳過。(Linux+Nginx)
首先要開通負責負載均衡服務器(LN)的80端口。
1.配置Nginx.conf
- vi /etc/nginx/nginx.conf
修改成
- user nginx;
- worker_processes 10;
- #error_log logs/error.log;
- #error_log logs/error.log notice;
- #error_log logs/error.log info;
- #pid logs/nginx.pid;
- worker_rlimit_nofile 51200;
- events
- {
- use epoll;
- worker_connections 51200;
- }
- http
- {
- include /etc/nginx/mime.types;
- default_type application/octet-stream;
- keepalive_timeout 120;
- tcp_nodelay on;
- upstream s01 {
- server 192.168.1.171:81;
- server 192.168.1.172:81;
- server 192.168.1.173:81;
- }
- server {
- listen 80;
- server_name s01.domain.com;
- location / {
- proxy_pass http://s01;
- }
- }
- }
2.重啟Nginx
- service nginx restart