Keepalived+Nginx高可用安裝部署(含Nginx+Tomcat負載均衡)
Keepalived
Nginx
Tomcat
1、規劃
虛IP:192.168.56.101
真實IP |主機名 |Nginx埠|Tomcat埠|主從
192.168.56.103|leo.dis2| 88 | 8080 |主
192.168.56.104|leo.dis3| 88 | 8080 |從
CentOS6.8
Nginx 1.13.1
Keepalived 1.3.5
Tomcat7.0.78
JDK1.8.0_131
參看我以前的文章,打開防火牆埠。
2、安裝Nginx
使用root用戶,安裝依賴包:
yum install gcc gcc-c++ make automake autoconf libtool pcre pcre-devel zlib zlib-devel openssl openssl-devel
把Nginx包放到/usr/local/src內,解壓縮並安裝:
tar -zxvf nginx-1.13.1.tar.gz
cd nginx-1.13.1
./configure --prefix=/usr/local/nginx
make && make install
3、配置Nginx
vi /usr/local/nginx/conf/nginx.conf
在開頭增加:
user root;
監聽埠80改為88。
vi /usr/local/nginx/html/index.html
分別給兩台伺服器的Nginx頁面增加103/104的標識。
啟動Nginx
/usr/local/nginx/sbin/nginx
# 重新載入配置文件
/usr/local/nginx/sbin/nginx -s reload
# 重啟 Nginx
/usr/local/nginx/sbin/nginx -s reopen
# 停止 Nginx
/usr/local/nginx/sbin/nginx -s stop
4、Nginx開機啟動
vi /etc/rc.local
添加 /usr/local/nginx/sbin/nginx
5、Keepalived安裝
安裝依賴包:
yum install openssl-devel libnl3-devel ipset-devel iptables-devel libnfnetlink-devel popt popt-static popt-devel gcc kernel-headers kernel-devel net-snmp-devel -y
把Keepalived包放到/usr/local/src內,解壓縮並安裝:
tar -zxvf keepalived-1.3.5.tar.gz
cd keepalived-1.3.5
./configure --prefix=/usr/local/nginx
make && make install
6、設置為開機啟動
接下來是跟很多教程不一樣的地方。
在很多教程里,安裝完畢後下一步應該是複製、鏈接一些文件,以便把keepalived設置成系統服務,但是請注意/usr/local/keepalived/etc/rc.d/init.d/keepalived這個文件,教程上都說有這個文件,複製到/etc/init.d/即可,可是在我安裝過程中,沒有這個目錄和文件,所以要按照以下的方法來處理:
mkdir -p /etc/keepalived
cd /usr/local/keepalived/
ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/keepalived/sbin/keepalived /usr/sbin/
ln -s /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
touch /etc/rc.d/init.d/keepalived
chmod +x /etc/rc.d/init.d/keepalived
vi /etc/rc.d/init.d/keepalived
keepalived腳本內容:
#!/bin/sh
#
# keepalived High Availability monitor built upon LVS and VRRP
#
# chkconfig: - 86 14
# description: Robust keepalive facility to the Linux Virtual Server project
# with multilayer TCP/IP stack checks.
### BEGIN INIT INFO
# Provides: keepalived
# Required-Start: $local_fs $network $named $syslog
# Required-Stop: $local_fs $network $named $syslog
# Should-Start: smtpdaemon httpd
# Should-Stop: smtpdaemon httpd
# Default-Start:
# Default-Stop: 0 1 2 3 4 5 6
# Short-Description: High Availability monitor built upon LVS and VRRP
# Description: Robust keepalive facility to the Linux Virtual Server
# project with multilayer TCP/IP stack checks.
### END INIT INFO
# Source function library.
. /etc/rc.d/init.d/functions
exec="/usr/sbin/keepalived"
prog="keepalived"
config="/etc/keepalived/keepalived.conf"
[ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog
lockfile=/var/lock/subsys/keepalived
start() {
[ -x $exec ] || exit 5
[ -e $config ] || exit 6
echo -n $"Starting $prog: "
daemon $exec $KEEPALIVED_OPTIONS
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval
}
stop() {
echo -n $"Stopping $prog: "
killproc $prog
retval=$?
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
}
restart() {
stop
start
}
reload() {
echo -n $"Reloading $prog: "
killproc $prog -1
retval=$?
echo
return $retval
}
force_reload() {
restart
}
rh_status() {
status $prog
}
rh_status_q() {
rh_status &>/dev/null
}
case "$1" in
start)
rh_status_q && exit 0
$1
;;
stop)
rh_status_q || exit 0
$1
;;
restart)
$1
;;
reload)
rh_status_q || exit 7
$1
;;
force-reload)
force_reload
;;
status)
rh_status
;;
condrestart|try-restart)
rh_status_q || exit 0
restart
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}"
exit 2
esac
exit $?
注意腳本裡面的目錄,要跟上面cp、ln的目錄一致。
設置服務開機啟動:
chkconfig --add keepalived
chkconfig --level 35 keepalived on
7、設置Keepalived
主節點(192.168.56.103):
vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id leo.dis2 #主機名
}
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh"
interval 2
weight -20
}
vrrp_instance VI_1 {
state MASTER#主節點 建議設置為BACKUP,具體解釋見後
interface eth1#指定監測的網卡
virtual_router_id 101#虛擬路由ID,節點保持一致
mcast_src_ip 192.168.56.103 #本機IP
priority 100#權重
nopreempt#設置為不搶佔資源
advert_int 1
authentication {
auth_type PASS
auth_pass 1357924680
}
track_script {
chk_nginx
}
virtual_ipaddress {
192.168.56.101#虛擬IP
}
}
從節點(192.168.56.104):
vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id leo.dis3
}
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh"
interval 2
weight -20
}
vrrp_instance VI_1 {
state BACKUP
interface eth1
virtual_router_id 101
mcast_src_ip 192.168.56.104
priority 90
nopreempt
advert_int 1
authentication {
auth_type PASS
auth_pass 1357924680
}
track_script {
chk_nginx
}
virtual_ipaddress {
192.168.56.101
}
}
注意:nopreempt這個選項要解釋解釋。
這個設置項,允許一個priority比較低的節點作為master,即使有priority更高的節點啟動。
通常如果master服務死掉後backup會變成master,但是當master服務又好了的時候 master此時會搶佔VIP,這樣就會發生兩次切換對業務繁忙的網站來說是不好的。
所以我們要在配置文件加入 nopreempt 非搶佔,但是這個參數只能用於state 為backup,故我們在用的時候最好master 和backup的state都設置成backup 讓其通過priority來競爭。
但是我在測試的時候,不管怎麼配置, VIP資源總是會被搶佔,後來查資料說要在防火牆上開啟組播:
vi /etc/sysconfig/iptables
#組播
-A INPUT -d 224.0.0.18 -j ACCEPT
重啟防火牆。
監測Nginx腳本:
#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
腳本賦權:
chmod +x /etc/keepalived/nginx_check.sh
啟動Keepalived:
service keepalived start
8、驗證
啟動Nginx、Keepalived。
分別訪問:http://192.168.56.103:88/ http://192.168.56.104:88/ 會看到之前做的標識。
訪問http://192.168.56.101:88/ 會看到103的標識。
關閉103的KA,刷新頁面則會看到104的標識。
9、Nginx+Tomcat負載均衡
Nginx+Tomcat負載均衡的教程特別多,不再多介紹,簡單提幾個點。
1)兩個nginx.conf修改以下幾處:
#增加
upstream tomcat.com{
#Tomcat1
192.168.56.103:8080 weight=1;
#Tomcat2
192.168.56.104:8080 weight=1;
}
#修改
location / {
#root html;
#index index.html index.htm;
proxy_pass http://tomcat.com;
proxy_redirect default;
}
2)JDK要安裝,防火牆要打開埠。
3)修改兩個Tomcat/webapps/ROOT/index.jsp,分別做上標識。
訪問http://192.168.56.101:88,即可看到不同標識的Tomcat主頁。
※Java操作Linux命令分割合并文本文件及其他
※Dubbo管理控制台安裝
TAG:Java個人學習心得 |
※Ansible自動部署nginx+keepalived高可用負載均衡
※使用Centos7.5+Nginx+Gunicorn+Django+Python3部署blog項目
※如何使用Rancher 2.0在Kubernetes集群上部署Istio
※Nginx+uwsgi部署Django應用
※Django(Ngnix)項目部署 負載均衡
※Chrome部署Material Design:似Firefox早期版本
※在 Kubernetes 上部署 Spinnaker
※Chrome部署Material Design:標籤欄類似於Firefox早期版本
※索尼為Xperia XA1/Plus和Ultra部署Android Oreo推送
※Semtech與Comcast旗下的machineQ宣布已在美國的10座城市部署LoRaWAN網路
※在Azure Stack上部署Kubernetes
※如何使用 TensorFlow mobile將PyTorch和Keras 部署到移動設備
※Inception部署
※Oracle開源GraphPipe:幾行代碼讓你在TensorFlow部署PyTorch模型
※BM推出了AIOpenScale和Multi-cloud Manager,以簡化AI和雲部署
※Linux部署Nginx+Mysql+PHP+PHPMyAdmin4環境
※Symantec NetBackup 部署需要調整Linux內核詳解
※Aruba OnConnect 方案部署
※NET Core從Github到 Nuget 持續集成、部署
※華為CloudCampus助力義大利Fastweb部署城市Wi-Fi熱點