項目成長記(三) —— 小型架構搭建

眼看一個禮拜的期限就要到了,用戶數與日俱增,這幫搞業務的真不是吹的,真給力,看來要架設多臺機器了,可是這個需要的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]
   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,大家可以嘗試用一下哦,我個人覺得很方便,基本上你要的功能都能實現了!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章