Keepalived+Nginx+Tomcat搭建高可用的Web服務(一):主備模式
前言
Nginx和Apache都可以用來作為反向代理伺服器,來提供負載均衡的能力,使我們的web伺服器,能夠水平擴容,從而處理更多的使用者請求,但是反向代理伺服器又變成了一個單點,當反向代理伺服器掛了,整合Web伺服器就不能被外界訪問到,所以我們必須要保證反向代理伺服器的高可用。
下面我們來演示下如何使用Keepalived,搭建高可用的Web服務,我們選擇使用Nginx作為反向代理伺服器。
Keepalived 簡要介紹
Keepalived 是一種高效能的伺服器高可用或熱備解決方案,Keepalived 可以用來防止伺服器單點故障的發生,通過配合 Nginx 可以實現 web 前端服務的高可用。
這種Nginx+keepalived高可用架構一般有2種模式:
1、主備模式
使用一個VIP(虛擬IP)地址,前端使用2臺機器,一臺做主,一臺做備,但同時只有一臺機器工作,另一臺備份機器在主機器不出現故障的時候,永遠處於浪費狀態,對於伺服器不多的網站,該方案不經濟實惠。
2、雙主模式
使用兩個VIP(虛擬IP)地址,前端使用2臺機器,互為主備,同時有兩臺機器工作,當其中一臺機器出現故障,兩臺機器的請求轉移到一臺機器負擔,非常適合於當前架構環境。
Keepalived 以 VRRP 協議為實現基礎,用 VRRP 協議來實現高可用性(HA)。VRRP(Virtual Router Redundancy Protocol)協議是用於實現路由器冗餘的協議,VRRP 協議將兩臺或多臺路由器裝置虛擬成一個裝置,對外提供虛擬路由器 IP(一個或多個),而在路由器組內部,如果實際擁有這個對外 IP 的路由器如果工作正常的話就是 MASTER, 或者是通過演算法選舉產生, MASTER 實現針對虛擬路由器 IP 的各種網路功能,如 ARP 請求,ICMP,以及資料的轉發等;其他裝置不擁有該虛擬 IP,狀態是 BACKUP,除了接收 MASTER 的VRRP 狀態通告資訊外,不執行對外的網路功能。當主機失效時,BACKUP 將接管原先 MASTER 的網路功能。
VRRP 協議使用多播資料來傳輸 VRRP 資料, VRRP 資料使用特殊的虛擬源 MAC 地址傳送資料而不是自身網絡卡的 MAC 地址,VRRP 執行時只有 MASTER 路由器定時傳送 VRRP 通告資訊,表示 MASTER 工作正常以及虛擬路由器 IP(組),BACKUP 只接收 VRRP 資料,不傳送資料,如果一定時間內沒有接收到 MASTER 的通告資訊,各 BACKUP 將宣告自己成為 MASTER,傳送通告資訊,重新進行 MASTER 選舉狀態。
本篇博文將主要演示Keepalived+Nginx的主備模式
環境準備
Ubuntu 16.04 LTS
Keepalived v1.2.19 (03/13,2017)
Niginx nginx/1.10.3
Tomcat v8.0
準備4臺虛擬機器,兩臺Nginx和兩臺Tomcat,另外一個VIP(虛擬IP),192.168.224.150
虛擬機器 | IP | 說明 |
---|---|---|
Nginx1+Keepalived (Master) | 192.168.224.101 | Nginx Server 1 |
Nginx2+Keepalived (Backup) | 192.168.224.102 | Nginx Server 2 |
Tomcat1 | 192.168.224.103 | Tomcat Web Server 1 |
Tomcat2 | 192.168.224.104 | Tomcat Web Server 2 |
安裝tomcat
在192.168.224.103,192.168.224.104上安裝tomcat,並修改ROOT/index.jsp頁面,在頁面中加入tomcat的IP地址,並打印出request header中的X-NGINX值,這個值,我們將在後面配置NGINX時傳入,如192.168.224.103上我們修改為:
<div id="asf-box">
<h1>${pageContext.servletContext.serverInfo}(192.168.224.103)<%=request.getHeader("X-NGINX")%></h1>
</div>
啟動103和104兩臺機器的tomcat,確認瀏覽器能正確訪問http://192.168.224.103:8080和http://192.168.224.104:8080
並且頁面上能正確顯示各自的IP地址,此時request header裡沒有X-NGINX,所以顯示null。
安裝nginx
安裝gcc g++的依賴庫
apt-get install build-essential
apt-get install libtool
安裝 pcre依賴庫
sudo apt-get update
sudo apt-get install libpcre3 libpcre3-dev
安裝 zlib依賴庫
apt-get install zlib1g-dev
安裝 ssl依賴庫
apt-get install openssl
安裝nginx,並啟動
apt-get install nginx
nignx
配置nginx反向代理
cat /etc/nginx/nginx.conf
檢視nignx配置,預設會載入/etc/nginx/conf.d下所有*.conf檔案,和/etc/nginx/sites-enabled下所有檔案
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
移除/etc/nginx/sites-enabled目錄下的default配置,並在目錄下建立tomcat.conf
cd /etc/nginx/sites-enabled
rm default
touch tomcat.conf
vi tomcat.conf
在tomcat.conf中,配置nginx的反向代理,將請求轉發到103和104兩臺tomcat上。
為了能在tomcat頁面上看出是哪臺nginx轉發過來的請求,我們這裡給兩臺nginx分別配置兩個自定義的header傳給tomcat,tomcat將其取出列印在頁面上。
在Master(101)中設定proxy_set_header X-NGINX “NGINX-1”
upstream tomcat {
server 192.168.224.103:8080 weight=1;
server 192.168.224.104:8080 weight=1;
}
server{
location / {
proxy_pass http://tomcat;
proxy_set_header X-NGINX "NGINX-1";
}
#......其他省略
}
在Backup(102)中設定proxy_set_header X-NGINX “NGINX-2”
upstream tomcat {
server 192.168.224.103:8080 weight=1;
server 192.168.224.104:8080 weight=1;
}
server{
location / {
proxy_pass http://tomcat;
proxy_set_header X-NGINX "NGINX-2";
}
#......其他省略
}
執行reload命令,使配置生效
nginx -s reload
按照上面方法在Master(101)上安裝和配置好nginx,瀏覽器位址列輸入http://192.168.224.101
多次重新整理頁面,能看到頁面上顯式IP地址資訊,192.168.224.103和192.168.224.104交替顯式,說明nginx已經將使用者請求負載均衡到了2臺tomcat上
並且能看到NGINX-1也能顯示在頁面上,如下圖
同理在Backup(102)上安裝和配置好nginx,瀏覽器位址列輸入http://192.168.224.102
多次重新整理頁面,能看到頁面上顯式IP地址資訊,192.168.224.103和192.168.224.104交替顯式,說明nginx已經將使用者請求負載均衡到了2臺tomcat上
並且能看到NGINX-2也能顯示在頁面上,如下圖
安裝Keepalived
apt-get install keepalived
在/etc/keepalived目錄下,新增check_nginx.sh(檢查nginx存活的shell指令碼)和keepalived.conf(keepalived配置檔案)
check_nginx.sh
#!/bin/bash
#程式碼一定注意空格,邏輯就是:如果nginx程序不存在則啟動nginx,如果nginx無法啟動則kill掉keepalived所有程序
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ];then
/etc/init.d/nginx start
sleep 3
if [ `ps -C nginx --no-header |wc -l`-eq 0 ];then
killall keepalived
fi
fi
Master(101)中的keepalived.conf配置如下
vrrp_script chk_nginx {
script "/etc/keepalived/check_nginx.sh" //檢測nginx程序的指令碼
interval 2
weight -20
}
global_defs {
notification_email {
//可以新增郵件提醒
}
}
vrrp_instance VI_1 {
state MASTER //主伺服器
interface ens33
virtual_router_id 51
mcast_src_ip 192.168.224.101
priority 250
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
track_script {
chk_nginx
}
virtual_ipaddress {
192.168.224.150
}
}
Backup(102)中的keepalived.conf配置如下
vrrp_script chk_nginx {
script "/etc/keepalived/check_nginx.sh" //檢測nginx程序的指令碼
interval 2
weight -20
}
global_defs {
notification_email {
//可以新增郵件提醒
}
}
vrrp_instance VI_1 {
state BACKUP //從伺服器
interface ens33
virtual_router_id 51
mcast_src_ip 192.168.224.102
priority 240
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
track_script {
chk_nginx
}
virtual_ipaddress {
192.168.224.150
}
}
關於keepalived配置的幾點說明
- state - 主伺服器需配成MASTER,從伺服器需配成BACKUP
- interface - 這個是網絡卡名,我使用的是VM12.0的版本,所以這裡網絡卡名為ens33
- mcast_src_ip - 配置各自的實際IP地址
- priority - 主伺服器的優先順序必須比從伺服器的高,這裡主伺服器配置成250,從伺服器配置成240
- virtual_ipaddress - 配置虛擬IP(192.168.224.150)
- authentication - auth_pass主從伺服器必須一致,keepalived靠這個來通訊
- virtual_router_id - 主從伺服器必須保持一致
Step-1 Master,Backup都正常,只有Master對外提供服務
配置完成後,先啟動Master(101)機器的keepalived,並檢視啟動log
[email protected]:/etc/keepalived# /etc/init.d/keepalived start
[ ok ] Starting keepalived (via systemctl): keepalived.service.
[email protected]:/etc/keepalived# tail /var/log/syslog
Nov 21 00:46:38 ubuntu Keepalived_vrrp[1296]: Configuration is using : 68579 Bytes
Nov 21 00:46:38 ubuntu Keepalived_vrrp[1296]: Using LinkWatch kernel netlink reflector...
Nov 21 00:46:38 ubuntu Keepalived_healthcheckers[1295]: Initializing ipvs 2.6
Nov 21 00:46:38 ubuntu Keepalived_healthcheckers[1295]: Registering Kernel netlink reflector
Nov 21 00:46:38 ubuntu Keepalived_healthcheckers[1295]: Registering Kernel netlink command channel
Nov 21 00:46:38 ubuntu Keepalived_healthcheckers[1295]: Opening file '/etc/keepalived/keepalived.conf'.
Nov 21 00:46:38 ubuntu Keepalived_healthcheckers[1295]: Configuration is using : 11193 Bytes
Nov 21 00:46:38 ubuntu Keepalived_healthcheckers[1295]: Using LinkWatch kernel netlink reflector...
Nov 21 00:46:39 ubuntu Keepalived_vrrp[1296]: VRRP_Instance(VI_1) Transition to MASTER STATE
Nov 21 00:46:40 ubuntu Keepalived_vrrp[1296]: VRRP_Instance(VI_1) Entering MASTER STATE
檢視keepalived和nginx程序,確保keepalived和nginx啟動正常
[email protected]:/etc/keepalived# ps -ef | grep keepalived
root 1293 1 0 00:46 ? 00:00:00 /usr/sbin/keepalived
root 1295 1293 0 00:46 ? 00:00:00 /usr/sbin/keepalived
root 1296 1293 0 00:46 ? 00:00:00 /usr/sbin/keepalived
root 1377 1121 0 00:47 pts/0 00:00:00 grep --color=auto keepalived
[email protected]:/etc/keepalived# ps -ef | grep nginx
root 1365 1 0 00:47 ? 00:00:00 nginx: master process nginx
www-data 1366 1365 0 00:47 ? 00:00:00 nginx: worker process
www-data 1367 1365 0 00:47 ? 00:00:00 nginx: worker process
root 1381 1121 0 00:47 pts/0 00:00:00 grep --color=auto nginx
使用ip add命令,檢視VIP是否被繫結到101機器上,可以看到192.168.224.150/32 scope global ens33已經被繫結到101機器上了
[email protected]:/etc/keepalived# ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:46:80:15 brd ff:ff:ff:ff:ff:ff
inet 192.168.224.101/24 brd 192.168.224.255 scope global ens33
valid_lft forever preferred_lft forever
inet 192.168.224.150/32 scope global ens33
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe46:8015/64 scope link
valid_lft forever preferred_lft forever
再啟動Backup(102)機器的keepalived和nginx,確保其正常啟動,檢視Backup的IP資訊,發現VIP現在還沒有繫結到Backup(102)上。
瀏覽器多次重新整理並訪問http://192.168.224.150/
可以看到頁面上IP交替顯式103和104,並且顯示NGINX-1,則表明是Master(101)在轉發web請求
Step-2 Master掛了,Backup接替Master對外提供服務
接著,我們在Master(101)機器上關閉keepalived和nginx程序來模擬Master伺服器掛掉,並檢視VIP是否還在Master機器上
[email protected]:/etc/keepalived# killall keepalived
[email protected]:/etc/keepalived# killall nginx
[email protected]:/etc/keepalived# ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:46:80:15 brd ff:ff:ff:ff:ff:ff
inet 192.168.224.101/24 brd 192.168.224.255 scope global ens33
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe46:8015/64 scope link
valid_lft forever preferred_lft forever
檢視Backup(102)的VIP,發現VIP已經繫結到了Backup(102)
[email protected]:/etc/keepalived# ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:8c:eb:5c brd ff:ff:ff:ff:ff:ff
inet 192.168.224.102/24 brd 192.168.224.255 scope global ens33
valid_lft forever preferred_lft forever
inet 192.168.224.150/32 scope global ens33
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe8c:eb5c/64 scope link
valid_lft forever preferred_lft forever
瀏覽器多次重新整理並訪問http://192.168.224.150/
可以看到頁面上IP交替顯式103和104,並且顯示NGINX-2,則表明是Backup(102)在轉發web請求,也就是說Master掛掉後,Backup繼續接管Master的服務。
Step-3 Master恢復正常後,Master繼續提供服務,Backup停止服務,並繼續等待Master出現故障
我們再啟動Master(101)機器的keepalived和nginx,檢視VIP,發現VIP已經被Master“奪回”了使用許可權
瀏覽器多次重新整理並訪問http://192.168.224.150/
可以看到頁面上IP交替顯式103和104,並且顯示NGINX-1,則表明是Master(101)在轉發web請求,也就是說Master重新啟動後,Master重新對外提供服務,Backup則停止服務繼續等待Master掛掉。
Keepalived搶佔模式和非搶佔模式
keepalived的HA分為搶佔模式和非搶佔模式,搶佔模式即MASTER從故障中恢復後,會將VIP從BACKUP節點中搶佔過來。非搶佔模式即MASTER恢復後不搶佔BACKUP升級為MASTER後的VIP。
前面的例子中,我們實際上配置的是搶佔模式,下面我們再來看看非搶佔模式
Master(101)中的keepalived.conf配置如下
vrrp_script chk_nginx {
script "/etc/keepalived/check_nginx.sh" //檢測nginx程序的指令碼
interval 2
weight -20
}
global_defs {
notification_email {
//可以新增郵件提醒
}
}
vrrp_instance VI_1 {
state BACKUP //主伺服器(非搶佔模式需要配置成BACKUP)
interface ens33
virtual_router_id 51
mcast_src_ip 192.168.224.101
priority 250
advert_int 1
nopreempt //非搶佔模式
authentication {
auth_type PASS
auth_pass 123456
}
track_script {
chk_nginx
}
virtual_ipaddress {
192.168.224.150
}
}
Backup(102)中的keepalived.conf配置如下
vrrp_script chk_nginx {
script "/etc/keepalived/check_nginx.sh" //檢測nginx程序的指令碼
interval 2
weight -20
}
global_defs {
notification_email {
//可以新增郵件提醒
}
}
vrrp_instance VI_1 {
state BACKUP //從伺服器
interface ens33
virtual_router_id 51
mcast_src_ip 192.168.224.102
priority 240
advert_int 1
nopreempt //非搶佔模式
authentication {
auth_type PASS
auth_pass 123456
}
track_script {
chk_nginx
}
virtual_ipaddress {
192.168.224.150
}
}
搶佔模式配置說明
和非搶佔模式的配置相比,只改了兩個地方:
1> 在vrrp_instance塊下兩個節點各增加了nopreempt指令,表示不爭搶vip
2> 節點的state都為BACKUP
兩個keepalived節點都啟動後,預設都是BACKUP狀態,雙方在傳送組播資訊後,會根據優先順序來選舉一個MASTER出來。由於兩者都配置了nopreempt,所以MASTER從故障中恢復後,不會搶佔vip。這樣會避免VIP切換可能造成的服務延遲。
(非搶佔模式)Step-1 Master,Backup都正常,只有Master對外提供服務
配置完成後,先啟動Master(101)機器的keepalived和nginx,檢視Master的IP資訊,可以看到VIP已經被繫結到101機器上了,再啟動Backup(102)機器的keepalived和nginx,檢視Backup的IP資訊,可以看到VIP沒有被繫結到102機器上了
瀏覽器多次重新整理並訪問http://192.168.224.150/
可以看到頁面上IP交替顯式103和104,並且顯示NGINX-1,則表明是Master(101)在轉發web請求
(非搶佔模式)Step-2 Master掛了,Backup接替Master對外提供服務
接著,我們在Master(101)機器上關閉keepalived和nginx程序來模擬Master伺服器掛掉,檢視Backup(102)的VIP,發現VIP已經繫結到了Backup(102)
瀏覽器多次重新整理並訪問http://192.168.224.150/
可以看到頁面上IP交替顯式103和104,並且顯示NGINX-2,則表明是Backup(102)在轉發web請求,也就是說Master掛掉後,Backup繼續接管Master的服務。
(非搶佔模式)Step-3 Master恢復正常後,Backup繼續對外提供服務,Master不會搶佔VIP,而是繼續等待Backup出現故障
我們再啟動Master(101)機器的keepalived和nginx,檢視VIP,發現VIP已經被Master“奪回”了使用許可權
瀏覽器多次重新整理並訪問http://192.168.224.150/
可以看到頁面上IP交替顯式103和104,並且顯示NGINX-2,則表明是Backup(102)在轉發web請求,也就是說Master恢復後,並未接管Backup的服務。
(非搶佔模式)Step-4 Backup掛了,Master重新繫結VIP,接替Backup對外提供服務
我們在Backup(102)機器上關閉keepalived和nginx程序來模擬Backup伺服器掛掉,檢視Master(101)的VIP,發現VIP已經繫結到了Master(101)
瀏覽器多次重新整理並訪問http://192.168.224.150/
可以看到頁面上IP交替顯式103和104,並且顯示NGINX-1,則表明是Master(101)在轉發web請求
相關推薦
Keepalived+Nginx+Tomcat搭建高可用的Web服務(一):主備模式
前言 Nginx和Apache都可以用來作為反向代理伺服器,來提供負載均衡的能力,使我們的web伺服器,能夠水平擴容,從而處理更多的使用者請求,但是反向代理伺服器又變成了一個單點,當反向代理伺服器掛了,整合Web伺服器就不能被外界訪問到,所以我們必須要保證反向
Keepalived + LVS-DR搭建高可用Web服務器集群
9.png 構圖 windows pro 所有結點 編譯 機制 pool tor 導航: Keepalived概述 LVS概述 編譯安裝keepalived 配置主調度器 雙機熱備 一、Keepalived概述 keepalived是一個類似於layer3, 4 &
keepalived+nginx+tomcat搭建高性能web服務器集群
keepalived+nginx+tomcat 高性能 高可用 web服務器集群使用keepalived+nginx+tomcat搭建高性能web服務器集群,系統采用centos6.9,前端用nginx做反向代理實現負載均衡,同時結合keepalived對nginx實現高可用,後端使用兩臺tomcat做動態j
Keepalived + LVS-DR搭建高可用Web伺服器叢集
導航: Keepalived概述 LVS概述 編譯安裝keepalived 配置主排程器 雙機熱備 一、Keepalived概述 keepalived是一個類似於layer3, 4 & 5交換機制的軟體,也就是我們平時說的第3層、第4層和第5層交換。Keepalive
Mongodb3.4.7搭建高可用集群(二)
cto logs ica sta ready 部署 ... ima exiting 部署Mongodb高可用集群 準備 按照官方說明,至少需要3個config server,2個mongos,2個shard,每個shard至少2個副本,就是4個shard,共需要9個Mong
搬運 搭建高可用mongodb叢集(二)—— 副本集
在上一篇文章《搭建高可用MongoDB叢集(一)——配置MongoDB》 提到了幾個問題還沒有解決。 主節點掛了能否自動切換連線?目前需要手工切換。 主節點的讀寫壓力過大如何解決? 從節點每個上面的資料都是對資料庫全量拷貝,從節點壓力會不會過大? 資料壓力大到機
iOS 從0到1搭建高可用App框架(二)
前言: 本文是繼《iOS 從0到1搭建高可用App框架》之後,通過專案實踐以及同行交流思考總結出來的一些新的架構思想,但初心仍不變,目的為搭建高可用App框架,保持框架底層健壯的同時讓程式碼更清晰,為後期頂層業務開發時,避免出現風格迥異的程式碼。 架構圖: 架構圖 效果
搭建高可用MongoDB叢集(分片)
搭建高可用MongoDB叢集(分片) KaliArch關注1人評論28269人閱讀2017-12-0
MySQL+MMM 高可用叢集部署(一)
一、MMM的功能特點 MMM 即(Master-Master replication manager for MySQL)的簡稱,它是一套支援雙主故障切換和雙主日常管理的指令碼程式,而MMM是用 Perl 語言所開發,其主要功能是: 第一、用來監控和管理 MySQL 資料庫 主主複製(Master-M
搭建eclipse+tomcat+maven+shiro+springmvc+jpa專案(一):技術選型及架構文件
一、Java語言 Java是一門面向物件程式語言,不僅吸收了C++語言的各種優點,還摒棄了C++裡難以理解的多繼承、指標等概念,因此Java語言具有功能強大和簡單易用兩個特徵。Java語言作為靜態面向物件程式語言的代表,極好地實現了面向物件理論,允許程式設計師以優雅的思維方式進行復雜的程式設計。
從零搭建ES搜索服務(一)基本概念及環境搭建
class 分析 nload 返回結果 fire blog count 搜索服務 變化 前言 本系列文章最終目標是為了快速搭建一個簡易可用的搜索服務。方案並不一定是最優,但實現難度較低。 背景 近期公司在重構老系統,需求是要求知識庫支持全文檢索。 我們知道普通的數據庫li
一步步搭建一個完整的web專案(一):基本框架的搭建
資料看的再多,不如自己手動操作一遍。這裡我吧框架搭建的步驟羅列出來,只要跟著步驟走,就能實現一個web框架的搭建。本篇的任務:基本框架的搭建,並實現註冊登入功能。準備工作:1、開發環境的準備 詳細步驟不寫出來了,非常簡單,我把我的開發環境列出來。 2、jar包準備
編寫python web框架(一):簡介
== web 方法 nvi ever pytho 必須 ext sim 編寫一個最簡單的應用: def app(environ, start_response): start_response(‘200 OK‘, [(‘Content-Type‘, ‘tex
搭建自己的部落格(一):前期準備
目前想要自己搭建一個個人部落格,在這記錄部落格搭建的過程。 部落格採用Django框架搭建。該框架可以快速搭建出一個網站,並且是一個開源框架,由python編寫。 1、目前的部落格想法比較簡單。主要對部落格的功能有如下幾個方面: 暫時先想著實現這些功能,等搭建好之後在完善其他模組。
Web安全(一):常見的XSS攻擊
<SCRIPT SRC=http://xi.baidu.com/XSS/xss.js></SCRIPT> <IMG SRC=javascript:alert('XSS')> <IMG SRC=jaVaScRipt:alert('XSS')> <I
使用gensim和sklearn搭建一個文字分類器(一):流程概述
總的來講,一個完整的文字分類器主要由兩個階段,或者說兩個部分組成:一是將文字向量化,將一個字串轉化成向量形式;二是傳統的分類器,包括線性分類器,SVM, 神經網路分類器等等。 之前看的THUCTC的技術棧是使用 tf-idf 來進行文字向量化,使用卡方校驗(c
DNS服務(一):由域名解析出IP
DNS簡介 DNS,就是Domain Name System的縮寫,翻譯過來就是域名系統,是網際網路上作為域名和IP地址相互對映的一個分散式資料庫。DNS能夠使使用者更方便的訪問網際網路,而不用去記住能夠被機器直接讀取的IP數串。通過域名,最終得到該域名對應的
如何使用Azure Container Service Engine在Azure中國區部署容器服務(一):DC/OS篇
前言 什麼是Azure Container Service(簡稱ACS) 目前越來越多的企業正在嘗試使用容器來構建他們的服務,他們或者在自己的本地資料中心搭建基於容器的叢集,或者利用公有云來承載基於容器和微服務的叢集架構,然而很多企業發現搭建一套能夠適用
Nginx+Keeplived+Tomcat搭建高可用/負載均衡的web服務器集群
tomcat keepalived nginx 一、集群規劃服務器角色主機名IP地址/VIP軟件Nginx MasterNK120.0.20.101/20.0.20.100Nginx/KeepalivedNginx BackupNK220.0.20.102/20.0.20.100Nginx/Kee
【Linux運維-叢集技術進階】Nginx+Keepalived+Tomcat搭建高可用/負載均衡/動靜分離的Web伺服器叢集
額,部落格名字有點長。。。 前言 終於到這篇文章了,心情是有點激動的。因為這篇文章會集中以前部落格講到的所有Nginx功能點,包括基本的負載均衡,還有動靜分離技術再加上這篇文章的重點,通過Keepalived實現的HA(High Available),為什麼