使用Nginx對Tomcat做負載均衡,nginx.conf中配置upstream
當Nginx請求過多時
Keepalived概念
1:解決單點故障
2:組件免費
3:可以實現高可用的HA機制
4:基于VRRP協議
VRRP:虛擬路由冗余協議
1:virtual router redundancy protocol
2:解決內網單機故障的路由協議
3:構建有多個路由器(Nginx) 的MASTER BACKUP
4:虛擬IP(virtual IP)
Keepalive 雙機主備原理
多臺Nginx機器配置之間硬件配置一致(主備),因為主機如果宕機之后,請求都打到備用機,如果此時備用機性能不好的話會很快就宕機了,主機恢復之后,請求重新打到主機
Keepalived下載keepalived.org
一、安裝
官方地址 keepalived 下載地址,選擇指定的版本后我們就開始下載
wget https://www.keepalived.org/software/keepalived-2.1.5.tar.gz
解壓縮
tar -zxvf keepalived-2.1.5.tar.gz
進行configure配置,指定安裝目錄:
cd keepalived-1.3.4 && ./configure --prefix=/home/keepalived-2.1.5/
編譯安裝
make && make install
如果安裝出現什么問題,一般都是缺少了環境,只要看報錯信息 yum install 相關環境就o了
二、keepalived 文件介紹(必須理解)
1. keepalived 啟動腳本文件
keepalived 的啟動腳本文件所在
/home/keepalived-2.1.5/keepalived/etc/init.d
啟動腳本文件代碼
#!/bin/sh
#
# Startup script for the Keepalived daemon Keepalived 守護進程啟動腳本
#
# processname: keepalived
# pidfile: /var/run/keepalived.pid keepalived.pid 路徑
# config: /etc/keepalived/keepalived.conf
# chkconfig: - 21 79
# description: Start and stop Keepalived 啟動或者停止Keepalived
# Source function library 指定源函數庫位置(這個文件本身linux自帶不需要我們管)
. /etc/rc.d/init.d/functions
# Source configuration file (we set KEEPALIVED_OPTIONS there) 源配置文件(該文件設置 KEEPALIVED_OPTIONS 的參數) 這個文件需要我們自己移動
. /etc/sysconfig/keepalived
# 返回值 默認0
RETVAL=0
# 指令
prog="keepalived"
# 啟動
start() {
echo -n $"Starting $prog: "
daemon keepalived ${KEEPALIVED_OPTIONS}
# $? 執行上一個指令的返回值 (顯示最后命令的退出狀態。0表示沒有錯誤,其他任何值表明有錯誤)
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog
}
stop() {
echo -n $"Stopping $prog: "
echo -n $"Stopping $prog: "
killproc keepalived
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$prog
}
reload() {
echo -n $"Reloading $prog: "
killproc keepalived -1
RETVAL=$?
echo
}
# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
reload)
reload
;;
restart)
stop
start
;;
condrestart)
if [ -f /var/lock/subsys/$prog ]; then
stop
start
fi
;;
status)
status keepalived
RETVAL=$?
;;
*)
echo "Usage: $0 {start|stop|reload|restart|condrestart|status}"
RETVAL=1
esac
exit $RETVAL
可以看出提供了啟動,暫停,重啟這些命令。
2. keepalived 啟動參數文件
這里的啟動參數文件相當于以上的 KEEPALIVED_OPTIONS 。是啟動文件里的 . /etc/sysconfig/keepalived 文件。源文件在
/home/keepalived-2.1.5/keepalived/etc/sysconfig
我們查看一下內容
# Options for keepalived. See `keepalived --help' output and keepalived(8) and
# keepalived.conf(5) man pages for a list of all options. Here are the most
# common ones :
# 這里是啟動常用參數
# --vrrp -P Only run with VRRP subsystem. 僅與VRRP子系統一起運行。
# --check -C Only run with Health-checker subsystem. 僅與運行狀況檢查子系統一起運行
# --dont-release-vrrp -V Dont remove VRRP VIPs & VROUTEs on daemon stop. 不要在守護進程停止時刪除VRRP VIP和VROUTEs。
# --dont-release-ipvs -I Dont remove IPVS topology on daemon stop. 不要在守護進程停止時刪除IPVS拓撲。
# --dump-conf -d Dump the configuration data. 轉儲配置數據。
# --log-detail -D Detailed log messages. 詳細的日志消息。
# --log-facility -S 0-7 Set local syslog facility (default=LOG_DAEMON) 0-7設置本地syslog工具(默認值=LOG_DAEMON)
#
# 這里就是設置啟動參數
KEEPALIVED_OPTIONS="-D"
這個文件主要是為了保存 keepalived 的啟動參數,要不然你啟動一次,下次你啟動你還記得你輸入過的參數嘛?那啟動參數具體有哪些?繼續往下看。
3.keepalived 啟動文件
位置如下
/home/keepalived-2.1.5/keepalived
查看啟動參數
[root@localhost keepalived]# ./keepalived -h
Usage: ./keepalived [OPTION...]
-f, --use-file=FILE 使用指定的配置文件
-P, --vrrp 僅與VRRP子系統一起運行
-C, --check 僅與運行狀況檢查子系統一起運行
--all 強制所有子進程運行,即使沒有配置
-l, --log-console 將消息記錄到本地控制臺
-D, --log-detail 詳細的日志消息
-S, --log-facility=[0-7] 將syslog facility設置為LOG_LOCAL[0-7]
-G, --no-syslog 不通過系統日志記錄
-u, --umask=MASK umask for file creation (in numeric form)
-X, --release-vips 從信號機過渡時放下VIP。
-V, --dont-release-vrrp 不要在守護進程停止時刪除VRRP VIP和VRRoute
-I, --dont-release-ipvs 在守護進程停止時不刪除IPV拓撲
-R, --dont-respawn 不要重新生成子進程
-n, --dont-fork 不要分叉守護進程
-d, --dump-conf 轉儲配置數據
-p, --pid=FILE 為父進程使用指定的pidfile
-r, --vrrp_pid=FILE 為VRRP子進程使用指定的PID文件
-c, --checkers_pid=FILE 對checkers子進程使用指定的pidfile
-a, --address-monitoring 報告通過netlink通知的所有地址添加/刪除
-s, --namespace=NAME 在網絡命名空間名稱中運行(重寫配置)
-m, --core-dump 異常終止時產生堆芯轉儲
-M, --core-dump-pattern=PATN Also set /proc/sys/kernel/core_pattern to PATN (default 'core')
-i, --config-id id Skip any configuration lines beginning '@' that don't match id
or any lines beginning @^ that do match.
The config-id defaults to the node name if option not used
--signum=SIGFUNC Return signal number for STOP, RELOAD, DATA, STATS, STATS_CLEAR
-t, --config-test[=LOG_FILE] Check the configuration for obvious errors, output to
stderr by default
-v, --version Display the version number
-h, --help Display this help message
4. keepalived .conf 配置文件
文件路徑
/home/keepalived-2.1.5/keepalived/etc/keepalived
文件內容簡介
# 全局配置
global_defs {
# 指定keepalived在發生切換時需要發送email到的對象,一行一個郵件地址
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
# 指定發件人
notification_email_from Alexandre.Cassen@firewall.loc
# 指定smtp服務器地址
smtp_server 192.168.200.1
# 指定smtp連接超時時間
smtp_connect_timeout 30
# 運行keepalived機器的一個標識,必須唯一
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
#vrrp 實例部分定義,VI_1自定義名稱
vrrp_instance VI_1 {
# 指定 keepalived 的角色,必須大寫 可選值:MASTER|BACKUP
state MASTER
# 網卡設置,lvs需要綁定在網卡上,RealServer 綁定在回環口。區別:lvs對訪問為外,realserver為內不易暴露本機信息
interface eth0
# 虛擬路由標識,是一個數字,同一個vrrp 實例使用唯一的標識,MASTER和BACKUP 的 同一個 vrrp_instance 下 這個標識必須保持一致
virtual_router_id 51
# 定義優先級,數字越大,優先級越高。
priority 100
# 設定 MASTER 與 BACKUP 負載均衡之間同步檢查的時間間隔,單位為秒,兩個節點設置必須一樣
advert_int 1
# 設置驗證類型和密碼,兩個節點必須一致
authentication {
auth_type PASS
auth_pass 1111
}
# 設置虛擬IP地址,可以設置多個虛擬IP地址,每行一個
virtual_ipaddress {
192.168.200.16
192.168.200.17
192.168.200.18
}
# 當前節點成為master時,通知腳本執行任務
# notify_master "/etc/keepalived/start_haproxy.sh start"
# 當前節點成為backup時,通知腳本執行任務
# notify_backup "/etc/keepalived/start_haproxy.sh stop"
# 當當前節點出現故障,執行的任務;
# notify_fault "/etc/keepalived/start_haproxy.sh stop"
}
# 定義RealServer 對應的VIP及服務端口,IP和端口之間用空格隔開
virtual_server 192.168.200.16 1358 {
# 健康檢查時間間隔
delay_loop 6
# lvs調度算法rr wrr lc wlc lblc sh dh
lb_algo rr
# 負載均衡轉發規則 NAT DR RUN
lb_kind NAT
# 同一IP的連接50秒內被分配到同一臺realserver
persistence_timeout 50
# 使用的協議
protocol TCP
# 備用機,所有realserver失效后啟用
sorry_server 192.168.200.200 1358
real_server 192.168.200.2 1358 {
# 權重,最大越高,lvs就越優先訪問
weight 1
# keepalived的健康檢查方式HTTP_GET | SSL_GET | TCP_CHECK | SMTP_CHECK | MISC
HTTP_GET {
url {
path /testurl/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
url {
path /testurl2/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
# 要檢測的URL,可以有多個
url {
# 具體路徑
path /testurl3/test.jsp
# 檢測效驗碼
digest 640205b7b0fc66c1ea91c463fac6334d
# 檢測返回http狀態碼
status_code 200
}
# 3秒無響應超時
connect_timeout 3
# 重連次數3次
retry 3
# 重連間隔時間
delay_before_retry 3
}
}
real_server 192.168.200.3 1358 {
weight 1
HTTP_GET {
url {
path /testurl/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334c
}
url {
path /testurl2/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334c
}
connect_timeout 3
retry 3
delay_before_retry 3
}
}
}
keepalived 文件分為4種,啟動腳本文件、啟動參數文件、keepalived.conf文件、啟動文件。他們的執行關系是 啟動腳本文件 -> 找到啟動參數文件 -> 啟動參數文件里描述了keepalived.conf的路徑和日志等指令 -> 然后交給啟動文件執行(真實啟動)。
三、keepalived 啟動
啟動
./keepalived -f /home/keepalived-2.1.5/keepalived/etc/keepalived/keepalived.conf
快捷啟動
cp /home/keepalived-2.1.5/keepalived/etc/init.d/keepalived /etc/init.d/
cp /home/keepalived-2.1.5/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
cp /home/keepalived-2.1.5/keepalived/etc/sysconfig/keepalived /etc/sysconfig/keepalived
service keepalived [start | stop | reload | restart ]
keepalived 日志默認在
/var/log/messages
沒有配置正確的 keepalived.conf 啟動會提示成功,但實際沒有啟動,需要自己去改配置。 keepalived 日志信息需要仔細閱讀才能找到問題。
以上配置來源于網絡