天天看點

Keepalived +Nginx 防止伺服器單點故障

1 什麼是keepalived

keepalived是解決單點故障的一種解決方案,通過

VRRP 協定實作高可用性

VRRP 協定将兩台或多台路由器裝置虛拟成一個裝置,對外提供虛拟路由器 IP(一個或多個),而在路由器組内部,如果實際擁有這個對外 IP 的路由器如果工作正常的話就是 MASTER,或者是通過算法選舉産生, MASTER 實作針對虛拟路由器 IP 的各種網絡功能,其他裝置不擁有該虛拟 IP,狀态是 BACKUP。

2ubuntu 安裝keepalived

2.1 依賴下載下傳

apt-get install libssl-dev

apt-get install openssl  

apt-get install libpopt-dev  

2.2 安裝

tar -zxvf keepalived-1.2.15.tar.gz

./configure

make 

Sudo make install  

2.3 配環境

在/usr

find -name keepalived

cp /usr/local/sbin/keepalived /usr/sbin

拷貝可執行檔案,沒有這一步将會在執行service keepalived start的時候報錯:keepalived: command not found

cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/

需要在/etc目錄下建立keepalived目錄

cp /usr/local/etc/rc.d/init.d/keepalived /etc/init.d/

建立入口腳本檔案,可以接收start| stop | status | restart

cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/

拷貝系統配置檔案(上面提到的日志就是在這裡配置的

2.4 改配置檔案

sudo vi /etc/init.d/keepalived

# Source function library

#. /etc/rc.d/init.d/functions

./lib/lsb/init-functions

# Source configuration file (we set KEEPALIVED_OPTIONS there)

#. /etc/sysconfig/keepalived

. /etc/sysconfig/keepalived

start() {

echo -n $"Starting $prog: "

#daemon keepalived ${KEEPALIVED_OPTIONS}

daemon keepalived start

RETVAL=$?

echo

[ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog

}

2.5 更新啟動服務

mkdir -p /var/lock/subsys  

update-rc.d keepalived defaults

apt-get install daemon

apt-get install daemon

3 環境搭建

Vip Ip Nginx 狀态
http://192.168.137.135/ http://192.168.137.138/ 端口80代理了Tomcat
http://192.168.137.135/ http://192.168.137.139/ 端口80代理了Tomcat

外部統一通路 vip

Keep vip

192.168.137.135

判斷同一個keepalived.conf下配置

為主節點的伺服器是否

存活

Nginx伺服器

Ip 192.168.137.138

BACKUP

Nginx伺服器

ip 192.168.137.139

MASTER

選舉一個主節點

Nginx伺服器

Ip 192.168.137.138

MASTER

global_defs {

notification_email {

[email protected]

[email protected]

[email protected]

}

notification_email_from [email protected]

smtp_server 192.168.200.1

smtp_connect_timeout 30

router_id LVS_DEVEL

}

vrrp_script chk_http_port {

script "/usr/local/src/check_nginx_pid.sh"

interval 2 #(檢測腳本執行的間隔)

weight 2

}

vrrp_instance VI_1 {

state BACKUP

interface ens33

virtual_router_id 51

priority 60

advert_int 1

authentication {

auth_type PASS

auth_pass 1111

}

track_script {

chk_http_port #(調用檢測腳本)

}

virtual_ipaddress {

192.168.137.135

}

}

global_defs {

notification_email {

[email protected]

[email protected]

[email protected]

}

notification_email_from [email protected]

smtp_server 192.168.200.1

smtp_connect_timeout 30

router_id LVS_DEVEL

}

vrrp_script chk_http_port {

script "/usr/local/src/check_nginx_pid.sh"

interval 2 #(檢測腳本執行的間隔)

weight 2

}

vrrp_instance VI_1 {

state MASTER

interface ens33

virtual_router_id 51

priority 100

advert_int 1

authentication {

auth_type PASS

auth_pass 1111

}

track_script {

chk_http_port #(調用檢測腳本)

}

virtual_ipaddress {

192.168.137.135

}

}