keepalived+nginx高可用實現(xiàn)方法示例
1.keepalived介紹
keepalived最初是專為LVS負載均衡軟件設(shè)計的,用來管理并監(jiān)控LVS集群系統(tǒng)中各個服務(wù)節(jié)點的狀態(tài),后來又加入了實現(xiàn)高可用的VRRP功能。keepalived除了能夠管理LVS軟件外,還能支持其他服務(wù)的高可用解決方案。
keepalived通過VRRP協(xié)議實現(xiàn)高可用功能的。VRRP(Virtual Router Redundancy Protocol)虛擬路由冗余協(xié)議。VRRP出現(xiàn)的目的就是為了解決靜態(tài)路由單點故障問題,它能保證當(dāng)個別節(jié)點宕機時,整個網(wǎng)絡(luò)可以不間斷地運行。
2.keepalived高可用故障轉(zhuǎn)移原理
keepalived高可用服務(wù)之間的故障轉(zhuǎn)移,是通過VRRP來實現(xiàn)的。在keepalived服務(wù)工作時,主Master節(jié)點會不斷地向備節(jié)點發(fā)送(多播的方式)心跳消息,用來告訴備Backup節(jié)點自己還活著。
當(dāng)主節(jié)點發(fā)生故障時,無法給備節(jié)點發(fā)送心跳消息,如果備節(jié)點無法繼續(xù)檢測到來自主節(jié)點的心跳。就會調(diào)用自身的接管程序,接管主節(jié)點的IP資源和服務(wù)。當(dāng)主節(jié)點恢復(fù)時,備節(jié)點又會釋放主節(jié)點故障時自身接管的IP資源和服務(wù),恢復(fù)到原來的備用角色
3.安裝nginx
3.1.主節(jié)點(192.168.80.22)
3.1.1.安裝編譯工具和庫文件
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
3.1.2.安裝pcre
#進入目錄 cd /usr/local/develop/anginx #上傳安裝文件并解壓 tar -zxvf pcre-8.38.tar.gz #進入安裝目錄 cd pcre-8.38 #檢查配置 ./configure #編譯、安裝 make && make install #查看pcre版本 pcre-config --version
3.1.3.安裝nginx
#進入目錄 cd /usr/local/develop/anginx #上傳安裝文件,并解壓 tar -zxvf nginx-1.8.1.tar.gz #進入安裝目錄 cd nginx-1.8.1 #檢查配置 ./configure --prefix=/usr/local/develop/anginx/webserver/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre=/usr/local/develop/anginx/pcre-8.38 #編譯安裝 make && make install #查看nginx版本 /usr/local/develop/anginx/webserver/nginx/sbin/nginx -v -------------------------------------------------------- [root@hadoop02 webserver]# /usr/local/develop/anginx/webserver/nginx/sbin/nginx -v nginx version: nginx/1.8.1 #配置nginx(檢查) /usr/local/develop/anginx/webserver/nginx/sbin/nginx -t #nginx管理命令 /usr/local/develop/anginx/webserver/nginx/sbin/nginx # 啟動 Nginx /usr/local/develop/anginx/webserver/nginx/sbin/nginx -s stop # 停止 Nginx /usr/local/develop/anginx/webserver/nginx/sbin/nginx -s reload # 重新載入配置文件 /usr/local/develop/anginx/webserver/nginx/sbin/nginx -s reopen # 重啟 Nginx
3.1.4.nginx基礎(chǔ)配置
vi nginx.conf
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
#添加tomcat列表,真實應(yīng)用服務(wù)器都放在這
upstream tomcat_pool{
#server tomcat地址:端口號 weight表示權(quán)值,權(quán)值越大,被分配的幾率越大;
server 192.168.80.22:8080 weight=4 max_fails=2 fail_timeout=30s;
server 192.168.80.22:8081 weight=4 max_fails=2 fail_timeout=30s;
}
server {
listen 80;
server_name tomcat_pool;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
#root html;
#index index.html index.htm;
proxy_pass http://tomcat_pool; #轉(zhuǎn)向tomcat處理
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
3.2.備節(jié)點(192.168.80.21)
說明:安裝方式同nginx主節(jié)點。
4.安裝keepalived
4.1.主節(jié)點(192.168.80.22)
#安裝keepalived
yum install keepalived -y
#啟動keepalived服務(wù)
/etc/init.d/keepalived start
-------------------------------------------
[root@hadoop02 anginx]# /etc/init.d/keepalived start
正在啟動 keepalived: [確定]
[root@hadoop02 anginx]# ps -ef |grep keepalived
root 15723 1 0 00:59 ? 00:00:00 /usr/sbin/keepalived -D
root 15724 15723 0 00:59 ? 00:00:00 /usr/sbin/keepalived -D
root 15725 15723 0 00:59 ? 00:00:00 /usr/sbin/keepalived -D
root 15731 15622 0 00:59 pts/1 00:00:00 grep keepalived
[root@hadoop02 anginx]#
#設(shè)置開機自啟動
echo "/etc/init.d/keepalived start" >>/etc/rc.local
#關(guān)閉keepalived服務(wù)
/etc/init.d/keepalived stop
#編輯keepalived配置文件
vi /etc/keepalived/keepalived.conf
-----------------------------------------------------------
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id lb01
}
vrrp_instance VI_1 {
state MASTER
interface eth1
virtual_router_id 55
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass server123
}
virtual_ipaddress {
192.168.80.100 dev eth1 label eth1:1
}
}
...........................................................
關(guān)于配置說明:
- 【router_id】 是路由標(biāo)識,在一個局域網(wǎng)里面應(yīng)該是唯一的
- 【vrrp_instance VI_1】{...}這是一個VRRP實例,里面定義了keepalived的主備狀態(tài)、接口、優(yōu)先級、認證和IP信息
- 【state】 定義了VRRP的角色
- 【interface】定義使用的接口,這里我的服務(wù)器用的網(wǎng)卡都是eth1
- 【virtual_router_id】是虛擬路由ID標(biāo)識,一組的keepalived配置中主備都是設(shè)置一致
- 【priority】是優(yōu)先級,數(shù)字越大,優(yōu)先級越大,
- 【auth_type】是認證方式
- 【auth_pass】是認證的密碼
- 【virtual_ipaddress】 {...}定義虛擬IP地址,可以配置多個IP地址,這里我定義為192.168.80.100,綁定了eth1的網(wǎng)絡(luò)接口,虛擬接口eth1:1
4.2.備節(jié)點(192.168.80.21)
#安裝keepalived
yum install keepalived -y
#啟動keepalived服務(wù)
/etc/init.d/keepalived start
-------------------------------------------
[root@hadoop02 anginx]# /etc/init.d/keepalived start
正在啟動 keepalived: [確定]
[root@hadoop02 anginx]# ps -ef |grep keepalived
root 15723 1 0 00:59 ? 00:00:00 /usr/sbin/keepalived -D
root 15724 15723 0 00:59 ? 00:00:00 /usr/sbin/keepalived -D
root 15725 15723 0 00:59 ? 00:00:00 /usr/sbin/keepalived -D
root 15731 15622 0 00:59 pts/1 00:00:00 grep keepalived
[root@hadoop02 anginx]#
#設(shè)置開機自啟動
echo "/etc/init.d/keepalived start" >>/etc/rc.local
#關(guān)閉keepalived服務(wù)
/etc/init.d/keepalived stop
#編輯keepalived配置文件
vi /etc/keepalived/keepalived.conf
-----------------------------------------------------------------
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id lb02
}
vrrp_instance VI_1 {
state BACKUP
interface eth1
virtual_router_id 55
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass server123
}
virtual_ipaddress {
192.168.80.100 dev eth1 label eth1:1
}
}
.............................................................
5.測試
5.1.啟動主備節(jié)點的keepalived服務(wù)
#在節(jié)點一執(zhí)行(192.168.80.22) /etc/init.d/keepalived start ------------------------------------- [root@hadoop02 anginx]# ps -ef |grep keepalived root 15788 1 0 01:09 ? 00:00:00 /usr/sbin/keepalived -D root 15790 15788 0 01:09 ? 00:00:00 /usr/sbin/keepalived -D root 15791 15788 0 01:09 ? 00:00:00 /usr/sbin/keepalived -D root 15807 15622 0 01:33 pts/1 00:00:00 grep keepalived [root@hadoop02 anginx]# #在節(jié)點二執(zhí)行(192.168.80.21) /etc/init.d/keepalived start --------------------------------------- [root@hadoop01 ~]# ps -ef |grep keepalived root 11542 1 0 01:30 ? 00:00:00 /usr/sbin/keepalived -D root 11544 11542 0 01:30 ? 00:00:00 /usr/sbin/keepalived -D root 11545 11542 0 01:30 ? 00:00:00 /usr/sbin/keepalived -D root 11550 11512 0 01:33 pts/1 00:00:00 grep keepalived [root@hadoop01 ~]#
5.2.通過虛ip訪問服務(wù)
http://192.168.80.100/session-redis-demo/

5.3.停止主節(jié)點keepalived服務(wù)
#在節(jié)點一執(zhí)行(192.168.80.22)
/etc/init.d/keepalived stop
#觀察備節(jié)點變化
ip addr
-------------------------------------------
[root@hadoop01 ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:50:56:38:e5:46 brd ff:ff:ff:ff:ff:ff
inet 192.168.80.21/24 brd 192.168.80.255 scope global eth1
inet 192.168.80.100/32 scope global eth1:1
inet6 fe80::250:56ff:fe38:e546/64 scope link
valid_lft forever preferred_lft forever
[root@hadoop01 ~]#
5.4.繼續(xù)通過虛ip訪問服務(wù)
http://192.168.80.100/session-redis-demo/

6.keepalived+nginx整合
說明:編寫nginx守護腳本,如果nginx服務(wù)出現(xiàn)故障,則停止當(dāng)前節(jié)點的keepalived服務(wù)。自動切換到備用節(jié)點。
6.1.編寫nginx守護腳本
vi nginx_check.sh -------------------------------------- #!/bin/bash while true do if [ $(netstat -tlnp|grep nginx|wc -l) -ne 1 ] then /etc/init.d/keepalived stop fi sleep 2 done #給腳本授權(quán) chmod u+x nginx_check.sh #執(zhí)行腳本 nohup /usr/local/develop/anginx/shell/nginx_check.sh &
6.2.停止主節(jié)點nginx服務(wù)
#停止主節(jié)點nginx服務(wù)
/usr/local/develop/anginx/webserver/nginx/sbin/nginx -s stop
#查找進程
[root@hadoop02 ~]# ps -ef |grep nginx
root 15915 1 0 01:51 ? 00:00:00 /bin/bash /usr/local/develop/anginx/shell/nginx_check.sh
root 16516 15753 0 01:54 pts/5 00:00:00 grep nginx
[root@hadoop02 ~]#
#觀察備用節(jié)點變化【服務(wù)正?!?
ip addr
--------------------------------------
[root@hadoop01 shell]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:50:56:38:e5:46 brd ff:ff:ff:ff:ff:ff
inet 192.168.80.21/24 brd 192.168.80.255 scope global eth1
inet 192.168.80.100/32 scope global eth1:1
inet6 fe80::250:56ff:fe38:e546/64 scope link
valid_lft forever preferred_lft forever
[root@hadoop01 shell]#
#再次重新啟動主節(jié)點nginx和keepalived服務(wù)
/usr/local/develop/anginx/webserver/nginx/sbin/nginx
/etc/init.d/keepalived start
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- nginx keepalive的具體使用
- nginx+keepalived 高可用主從配置詳解
- nginx中keepalive配置詳解
- Nginx結(jié)合keepalived實現(xiàn)雙機熱備方案
- 生產(chǎn)環(huán)境部署Nginx服務(wù)器雙機熱備部署keepalived的步驟(多種模式教程)
- Nginx+Keepalived實現(xiàn)雙機主備的方法
- Nginx+Keepalived實現(xiàn)雙機熱備
- nginx配置keepalive長連接的實現(xiàn)方法
- nginx結(jié)合keepalived實現(xiàn)高可用的完整步驟
- Nginx連接保持超時(keepalive_timeout)配置小結(jié)
相關(guān)文章
nginx搭建圖片服務(wù)器的過程詳解(root和alias的區(qū)別)
這篇文章主要介紹了nginx搭建圖片服務(wù)器(root和alias的區(qū)別)的過程,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-10-10
windows下RunHiddenConsole 啟動 nginx與php(RunHiddenConsole下載)
這篇文章主要介紹了RunHiddenConsole 啟動 nginx與php的相關(guān)資料,希望通過本文能幫助到大家,讓大家學(xué)會使用RunHiddenConsole,需要的朋友可以參考下2017-10-10
詳解nginx服務(wù)器綁定域名和設(shè)置根目錄的方法
這篇文章主要介紹了詳解nginx服務(wù)器綁定域名和設(shè)置根目錄的方法,nginx服務(wù)器綁定域名以及設(shè)置根目錄非常方便,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-06-06
通過Nginx反向代理實現(xiàn)IP訪問分流的示例代碼
本篇文章主要介紹了通過Nginx反向代理實現(xiàn)IP訪問分流的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-11-11

