在家上51cto時隨意點了一個連接,然後看到“拯救趙明”的帖子,發現趙明此時公司的網絡拓撲圖中存在很多
問題:
1、負責均衡器存在單點故障
2、缺少收集日誌系統
3、缺少專業的IPS系統
4、數據庫沒有主從之分,不存在負載
5、缺少Webserver健康檢查系統
經分析調整後的架構圖如下:
此架構說明:
1、使用兩臺nginx實現負載均衡器,解決了單點故障、高併發問題,
2、數據庫採用負載均衡,通過開發語言調用memcached緩存數據,從而大大降低了數據庫的壓力
3、增加了一臺多功能服務器,作用:
(1)、用來檢查Webserver服務器的80狀態和首頁的狀態
(2)、用來存放Webserver的數據文件,Webserver的網頁文件是多功能服務器通過推送方式
傳到兩臺Webserver服務器相同目錄下的,推送方式用的是開源軟件rsync+intify,可
以實時同步兩地數據,從而保證了原始數據的安全性;
(3)、用來存放各個系統的日誌信息,監控故障通知功能
一、使用兩臺nginx做負載均衡服務器
本來一開始是考慮用lvs+keepalived做負載均衡,可是一想它現在有很多缺點不能跟nginx
相比,選用nginx的原因有以下幾點:
1、支持高併發連接:經官方測試可以跑到5w併發,在生產環境可以跑2w~3w的併發連接數
2、內存消耗少:nginx+PHP(fastcgi)服務在3w併發的連接下,開始10個nginx進程消耗150MB內
存(15MB×10),開啓64個php-fgi的進程消耗1280MB內存(20MB×64),加上系統自身消耗的內存,
總共消耗不到2GB。
3、成本低廉:nginx是遵循BSD開源協議,是一款免費開源的軟件。
4、其他理由:
(1)、配置文件非常簡單易懂
(2)、支持rewrite重寫規則
(3)、內置了健康檢查功能
(4)、支持GZIP壓縮,可以大大節省帶寬資源
(5)、穩定性高
(6)、支持熱部署,重啓服務不需要中斷服務
(7)、高版本支持緩存功能,加上第三方的模塊,可以像squid一樣清除指定的url緩存
用兩臺nginx服務器做負載均衡,兩臺同時在線運行接受外部用戶的訪問,而不是一臺運行另一臺處於
空閒狀態,兩臺服務器的故障切換通過腳本切換。此種方案已經有人(張宴)用在生產環境中測試了,說
很穩定,現在寫出來和大家一起分享一下。
此腳本出自張宴之手,在此引用:
每臺負載均衡器各自綁定一個公網虛擬vip,
負載均衡器1vip:61.1.1.2
負載均衡器2vip:61.1.1.3
負載均衡器1真實ip:61.1.1.4
負載均衡器1真實ip:61.1.1.5
IDC公網網關:61.1.1.1
服務器1
/sbin/ifconfig eth0:1 61.1.1.2 broadcast 61.1.1.255 netmask 255.255.255.0 up
/sbin/route add -host 61.1.1.2 dev eth0:1
/sbin/arping -I eth0 -c 3 -s 61.1.1.2 61.1.1.1
服務器2
/sbin/ifconfig eth0:1 61.1.1.3 broadcast 61.1.1.255 netmask 255.255.255.0 up
/sbin/route add -host 61.1.1.3 dev eth0:1
/sbin/arping -I eth0 -c 3 -s 61.1.1.3 61.1.1.1
兩個shell腳本 來實現自動故障轉移
nginx_ha1.sh,放在nginx負載均衡器1上:
#!/bin/bash
LANG=C
date=$(date -d "today" + "%Y-%m-%d %H:%M:%S")
function_bind_vip1()
{
/sbin/ifconfig eth0:ha1 61.1.1.2 broadcast 219.232.254.255 netmask 255.255.255.192 up
/sbin/route add -host 61.1.1.2 dev eth0:ha1
}
function_bind_vip2()
{
/sbin/ifconfig eth0:ha2 61.1.1.3 broadcast 219.232.254.255 netmask 255.255.255.192 up
/sbin/route add -host 61.1.1.3 dev eth0:ha2
}
function_restart_nginx()
{
kill -USR1 `cat /usr/local/webserver/nginx/nginx.pid`
}
function_remove_vip1()
{
/sbin/ifconfig eth0:ha1 61.1.1.2 broadcast 219.232.254.255 netmask 255.255.255.192 down
}
function_remove_vip2()
{
/sbin/ifconfig eth0:ha2 61.1.1.3 broadcast 219.232.254.255 netmask 255.255.255.192 down
}
function_vip_arping1()
{
/sbin/arping -I eth0 -c 3 -s 61.1.1.2 61.1.1.1 > /dev/null 2>&1
}
function_vip_arping2()
{
/sbin/arping -I eth0 -c 3 -s 61.1.1.3 61.1.1.1 > /dev/null 2>&1
}
bind_time_vip1="N";
bind_time_vip2="N";
while true
do
httpcode_rip1=`/usr/bin/curl -o /dev/null -s -w %{http_code} http://61.1.1.4`
httpcode_rip2=`/usr/bin/curl -o /dev/null -s -w %{http_code} http://61.1.1.5`
if [ x$httpcode_rip1 == "x200" ];
then
if [ $bind_time_vip1 == "N" ];
then
function_bind_vip1
function_vip_arping1
function_restart_nginx
bind_time_vip1="Y"
fi
function_vip_arping1
else
if [ $bind_time_vip1 == "Y" ];
then
function_remove_vip1
bind_time_vip1="N"
fi
fi
if [ x$httpcode_rip2 == "x200" ];
then
if [ $bind_time_rip2 == "Y" ];
then
function_remove_vip2
bind_time_vip2="N"
fi
else
if [ $bind_time_vip2 == "N" ];
then
function_bind_vip2
function_vip_arping2
function_restart_nginx
bind_time_vip2="Y"
fi
function_vip_arping2
fi
sleep 5
done
在nginx負載均衡器1將腳本駐留後臺運行:
nohup /bin/bash ./nginx_ha1.sh 2>&1 > /dev/null &
服務器2腳本 nginx_ha2.sh,部署在nginx負載均衡器上:
#!/bin/bash
LANG=C
date=$(date -d "today" + "%Y-%m-%d %H:%M:%S")
function_bind_vip1()
{
/sbin/ifconfig eth0:ha1 61.1.1.3 broadcast 219.232.254.255 netmask 255.255.255.192 up
/sbin/route add -host 61.1.1.3 dev eth0:ha1
}
function_bind_vip2()
{
/sbin/ifconfig eth0:ha2 61.1.1.2 broadcast 219.232.254.255 netmask 255.255.255.192 up
/sbin/route add -host 61.1.1.2 dev eth0:ha2
}
function_restart_nginx()
{
kill -USR1 `cat /usr/local/webserver/nginx/nginx.pid`
}
function_remove_vip1()
{
/sbin/ifconfig eth0:ha1 61.1.1.3 broadcast 219.232.254.255 netmask 255.255.255.192 down
}
function_remove_vip2()
{
/sbin/ifconfig eth0:ha2 61.1.1.2 broadcast 219.232.254.255 netmask 255.255.255.192 down
}
function_vip_arping1()
{
/sbin/arping -I eth0 -c 3 -s 61.1.1.3 61.1.1.1 > /dev/null 2>&1
}
function_vip_arping2()
{
/sbin/arping -I eth0 -c 3 -s 61.1.1.2 61.1.1.1 > /dev/null 2>&1
}
bind_time_vip1="N";
bind_time_vip2="N";
while true
do
httpcode_rip1=`/usr/bin/curl -o /dev/null -s -w %{http_code} http://61.1.1.5`
httpcode_rip2=`/usr/bin/curl -o /dev/null -s -w %{http_code} http://61.1.1.4`
if [ x$httpcode_rip1 == "x200" ];
then
if [ $bind_time_vip1 == "N" ];
then
function_bind_vip1
function_vip_arping1
function_restart_nginx
bind_time_vip1="Y"
fi
function_vip_arping1
else
if [ $bind_time_vip1 == "Y" ];
then
function_remove_vip1
bind_time_vip1="N"
fi
fi
if [ x$httpcode_rip2 == "x200" ];
then
if [ $bind_time_rip2 == "Y" ];
then
function_remove_vip2
bind_time_vip2="N"
fi
else
if [ $bind_time_vip2 == "N" ];
then
function_bind_vip2
function_vip_arping2
function_restart_nginx
bind_time_vip2="Y"
fi
function_vip_arping2
fi
sleep 5
done
在nginx負載均衡器2將腳本駐留後臺運行:
nohup /bin/bash ./nginx_ha2.sh 2>&1 > /dev/null &
關於web服務器用nginx而不用apache,請google一下就知道了,這裏就掠過了。
nginx負載均衡的配置請參考張宴的博客:http://blog.s135.com/post/306/
mysql負載均衡的配置請參考張宴的博客:http://blog.s135.com/post/379/ 和守住每一天的博客
http://liuyu.blog.51cto.com/183345/305145
關於多功能服務器所需的腳本,還在編寫測試中,等測試沒有問題了會貼出來與大家一起分享
【拯救趙明】安全方案:http://liuyu.blog.51cto.com/183345/305145 守住每一天 寫的已經很不錯了
它所用的軟件都是開源軟件。這樣可以爲企業可以節省很大的成本。我寫出來只是想在它的基礎上再加點
自己的見解。
熱愛技術,熱愛開源軟件。
可能在寫的過程中,有些地方敘述錯誤,請看的同仁指出來。在這感謝張宴,感謝守住每一天,謝謝!
分享技術快樂自我
【拯救趙明】網絡安全解決方案
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
微軟和谷歌將在未來 5 年內投資 300 億美元用於網路安全
therfigeln
2021-08-31 11:14:43
託管 DNS 服務雲中的漏洞讓攻擊者監視 DNS 流量
therfigeln
2021-08-13 11:07:08
一個嚴重的亂數產生器缺陷影響了數十億的物聯網設備
therfigeln
2021-08-11 11:07:50
印度版Twitter---Koo,受到嚴重的蠕蟲攻擊!
therfigeln
2021-08-09 11:21:02
報告:2021 年DDoS 攻擊量呈上升趨勢
therfigeln
2021-06-01 13:46:25
黑客入侵富士通ProjectWEB平台,日本多個政府數據被竊取!
therfigeln
2021-05-31 11:23:23
加拿大保險公司guard.me遭網絡攻擊,目前已關閉網站!
therfigeln
2021-05-25 11:43:13
突發!愛爾蘭衛生系統遭黑客攻擊!網上疫苗預約均無法進行!
therfigeln
2021-05-18 11:31:06
你的外賣信息真的安全嗎?當心!Glovo遭受網絡攻擊用戶信息被拿到網上售賣!
therfigeln
2021-05-13 11:17:14
拜登:政府正調查燃油公司黑客攻擊事件:已確定被勒索軟件感染
therfigeln
2021-05-12 11:46:16
【網絡安全】企業加快偵測內部網絡威脅警覺性提高
therfigeln
2021-05-10 13:48:56
美國政府警告Fortinet軟件漏洞恐遭國家黑客開採!
therfigeln
2021-04-08 14:22:09
2018年國內DDOS功擊數據報告
近墨者黒
2019-02-24 12:55:03
信息系統安全管理以及風險管理
hua0221
2019-02-23 13:43:41
【拯救趙明】追溯網站安全問題所在 才能應對網站安全威脅
戀上一隻豬
2019-02-23 13:42:51