1. 程式人生 > 實用技巧 >專案成長記(三) —— 小型架構搭建

專案成長記(三) —— 小型架構搭建

眼看一個禮拜的期限就要到了,使用者數與日俱增,這幫搞業務的真不是吹的,真給力,看來要架設多臺機器了,可是這個需要的money啊,我就找到老闆說:“老闆,咱們的業務現在越做越大了,需要新增點機器啊”,老闆嚴肅了起來,不耐煩的說:“要多少臺啊”,我說:“得需要8臺吧”,老闆一聽就火了:“8臺,太多了,再說現在跑的不挺好嗎,最多一共給你四臺,想怎麼撐住是你的問題了”,“我靠”,心裡暗罵,“就喜歡你這樣的老闆,讓我有更多的機會鍛鍊,謝謝老闆,我退下了”,我非常嚴肅的對老闆說,表現出了我不卑不亢的精神面貌。其實說實話四臺是夠用的,之所以要8臺是為了做buffer,所以下面就開始了我的規劃。

首先設計的架構圖如下:

172834652.jpg

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,

210616762.png

現在兩臺機器都啟動了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;
#如果兩臺顯示的都和下圖的一樣,說明就成功了

225512122.png

雖然還沒進行優化,但是已經可以穩定運行了,而且應對未來大資料可以水平擴充套件,只需要加機器就行了,以後升級可以是如下圖的方式


225338412.png


雖然已經完成了任務,但我沒有向以前一樣趕緊去找老大得瑟一番,而是想的如何做的更好點,讓老大挑不出毛病。做技術的好像都有“潔癖”,總覺得優化的地方還有很多,要是不優化一下渾身難受,優化的道路是永無止境。欲知後事如何,請聽下回分解……


ps:最近我們要在公司的慶功會上跳一段“爸爸咋了”,很惆悵啊!!大家可以點選看一下,要命了。

還有大家覺得我上面的架構圖畫的怎麼樣,我用的是一個線上的,叫做Gliffy,大家可以嘗試用一下哦,我個人覺得很方便,基本上你要的功能都能實現了!


轉載於:https://blog.51cto.com/weijingwu/1345877