專案成長記(三) —— 小型架構搭建
眼看一個禮拜的期限就要到了,使用者數與日俱增,這幫搞業務的真不是吹的,真給力,看來要架設多臺機器了,可是這個需要的money啊,我就找到老闆說:“老闆,咱們的業務現在越做越大了,需要新增點機器啊”,老闆嚴肅了起來,不耐煩的說:“要多少臺啊”,我說:“得需要8臺吧”,老闆一聽就火了:“8臺,太多了,再說現在跑的不挺好嗎,最多一共給你四臺,想怎麼撐住是你的問題了”,“我靠”,心裡暗罵,“就喜歡你這樣的老闆,讓我有更多的機會鍛鍊,謝謝老闆,我退下了”,我非常嚴肅的對老闆說,表現出了我不卑不亢的精神面貌。其實說實話四臺是夠用的,之所以要8臺是為了做buffer,所以下面就開始了我的規劃。
首先設計的架構圖如下:
1、安裝keepalived install
tar zxvf keepalived-1.2.9.tar.gz cd keepalived-1.2.9/ ./configure --prefix=/data/soft/keepalived make && make install #需要修改一些東西變成系統服務 cp /data/soft/keepalived/sbin/keepalived /usr/sbin/ cp /data/soft/keepalived/etc/sysconfig/keepalived /etc/sysconfig/ cp /data/soft/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/ mkdir /etc/keepalived cp /data/soft/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/ #編輯主keepalived配置檔案 vim /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs { notification_email {[email protected] } notification_email_from [email protected]oc smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS_DEVEL } vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 100 #只有這個地方不同 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.1.123 } #編輯從keepalived配置檔案 ! Configuration File for keepalived global_defs { notification_email {[email protected] } notification_email_from [email protected] smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS_DEVEL } vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 51 priority 99 #只有這個地方不同 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.1.123 } #啟動服務 service keepalived start
然後通過ip addr命令檢視一下eth0,看是否綁定了兩個ip,如下圖,其中192.168.1.123就是虛擬出來的ip,我們叫它VIP,
現在兩臺機器都啟動了keepalived,然後虛擬出來的ip都是192.168.1.123,然後啟動Nginx和php-fpm,以前是直接通過機器的ip訪問的,現在通過VIP訪問試試,是不是一樣的結果,然後關掉其中一臺看看是否還是依然可以訪問。
2、配置Nginx的負載均衡
#在nginx.conf檔案的http下面新增(weight是權重,max_fails是最多失敗次數,超過就換另一臺機器,fail_timeout超時就換下一臺) http{ upstream p2pwd { server 192.168.1.99 weight=1 max_fails=2 fail_timeout=30s; server 192.168.1.115 weight=1 max_fails=2 fail_timeout=30s; } server { listen 80; server_name localhost; root html; index index.html index.php; error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } location / { proxy_next_upstream http_502 http_504 error timeout invalid_header; proxy_pass http://p2pwd; proxy_set_header X-Forward-For $remote_addr; } } } #其他一些配置可以參考專案成長記(二)中的配置,其他一些location就不需要了
3、MySQL主主結構
為什麼要設計成主主結構呢,這是方便以後如果出現故障可以隨時切換主從,MySQL在主主結構同時寫入的時候會有一個bug(同時寫入會混亂),所以採用讀寫分離的方式(具體實現是通過PHP程式實現的)
#在兩臺mysql的配置檔案中分別加上一下欄位 server_id 1 #兩個資料庫的數字不能一樣 log-bin = binlog expire_logs_days = 14 max_binlog_size = 5G binlog_cache_size = 10M max_binlog_cache_size = 20M #然後重啟,登入,在兩臺資料庫分別執行 CREATE USER 'slave'@'%' IDENTIFIED BY '密碼'; GRANT REPLICATION SLAVE , REPLICATION CLIENT ON * . * TO 'slave'@'%' IDENTIFIED BY '密碼'; #分別檢視每個資料庫的master狀態 show master status\G; #執行完上面的命令就會顯示下面的資訊,記住這兩條 File: binlog.000001 Position: 211 #最後授權,在每臺機器上執行下面的命令 change master to master_host='另一臺機器的ip',master_user='slave',master_port=3306,master_password='密碼',master_log_file='另一臺機器的File值',master_log_pos=另一臺機器的Position值; #啟動從庫 start slave; #檢視是否啟動從庫 show slave status\G; #如果兩臺顯示的都和下圖的一樣,說明就成功了
雖然還沒進行優化,但是已經可以穩定運行了,而且應對未來大資料可以水平擴充套件,只需要加機器就行了,以後升級可以是如下圖的方式
雖然已經完成了任務,但我沒有向以前一樣趕緊去找老大得瑟一番,而是想的如何做的更好點,讓老大挑不出毛病。做技術的好像都有“潔癖”,總覺得優化的地方還有很多,要是不優化一下渾身難受,優化的道路是永無止境。欲知後事如何,請聽下回分解……
ps:最近我們要在公司的慶功會上跳一段“爸爸咋了”,很惆悵啊!!大家可以點選看一下,要命了。
還有大家覺得我上面的架構圖畫的怎麼樣,我用的是一個線上的,叫做Gliffy,大家可以嘗試用一下哦,我個人覺得很方便,基本上你要的功能都能實現了!
轉載於:https://blog.51cto.com/weijingwu/1345877