首頁 運維 Nginx keepalived+nginx高可用怎麼實現

keepalived+nginx高可用怎麼實現

May 11, 2023 pm 09:28 PM
nginx keepalived

1.keepalived介紹

keepalived最初是專為lvs負載平衡軟體設計的,用來管理和監控lvs叢集系統中各個服務節點的狀態,後來又加入了實現高可用的vrrp功能。 keepalived除了能夠管理lvs軟體外,還能支援其他服務的高可用解決方案。

keepalived透過vrrp協定實現高可用功能的。 vrrp(virtual router redundancy protocol)虛擬路由冗餘協定。 vrrp出現的目的就是為了解決靜態路由單點故障問題,它能保證當個別節點宕機時,整個網路可以不間斷地運作。

2.keepalived高可用故障轉移原理

keepalived高可用服務之間的故障轉移,是透過vrrp來實現的。在keepalived服務工作時,主master節點會不斷地向備節點發送(多播的方式)心跳訊息,用來告訴備backup節點自己還活著。

  當主節點發生故障時,無法給備節點發送心跳訊息,如果備節點無法繼續偵測到來自主節點的心跳。就會呼叫自身的接管程序,接管主節點的ip資源和服務。當主節點恢復時,備節點又會釋放主節點故障時自身接管的ip資源和服務,恢復到原來的備用角色

##3.安裝nginx

3.1.主節點(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基礎設定

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列表,真实应用服务器都放在这
  upstream tomcat_pool{
    #server tomcat地址:端口号 weight表示权值,权值越大,被分配的几率越大;
    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;  #转向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.備節點(192.168.80.21)

說明:安裝方式同nginx主節點。

4.安裝keepalived

4.1.主節點(192.168.80.22)

#安装keepalived
yum install keepalived -y

#启动keepalived服务
/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]#

#设置开机自启动
echo "/etc/init.d/keepalived start" >>/etc/rc.local

#关闭keepalived服务
/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
  }
}
...........................................................
登入後複製

關於設定說明:

  •  【router_id】 是一個路由標識,在一個區域網路裡面應該是唯一的

    • 【vrrp_instance vi_1】{...}這是一個vrrp實例,裡面定義了keepalived的主備狀態、介面、優先權、認證和ip資訊

    • 【state】 定義了vrrp的角色

    • 【interface】定義使用的接口,這裡我的伺服器用的網卡都是eth1

    • 【virtual_router_id】是虛擬路由id標識,一組的keepalived配置中主備都是設定一致

    • 【priority】是優先權,數字越大,優先權越大,

    • 【auth_type】是認證方式

    • 【auth_pass】是認證的密碼

  • 【virtual_ipaddress】 {...}定義虛擬ip位址,可以配置多個ip位址,這裡我定義為192.168.80.100,綁定了eth1的網路接口,虛擬接口eth1:1

##4.2.備節點(192.168.80.21 )

#安装keepalived
yum install keepalived -y

#启动keepalived服务
/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]#

#设置开机自启动
echo "/etc/init.d/keepalived start" >>/etc/rc.local

#关闭keepalived服务
/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.啟動主備節點的keepalived服務

#在节点一执行(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]#


#在节点二执行(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存取服務

http://192.168.80.100/session-redis-demo/

keepalived+nginx高可用怎麼實現5.3.停止主節點keepalived服務

#在节点一执行(192.168.80.22)
/etc/init.d/keepalived stop

#观察备节点变化
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.繼續透過虛擬ip存取服務

http://192.168.80.100/session-redis-demo/

keepalived+nginx高可用怎麼實現

6.keepalived nginx整合

#說明:編寫nginx守護腳本,如果nginx服務出現故障,則停止目前節點的keepalived服務。自動切換到備用節點。

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

#给脚本授权
chmod u+x nginx_check.sh

#执行脚本
nohup /usr/local/develop/anginx/shell/nginx_check.sh &
登入後複製

6.2.停止主節點nginx服務

#停止主节点nginx服务
/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 ~]#

#观察备用节点变化【服务正常】
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]#

#再次重新启动主节点nginx和keepalived服务
/usr/local/develop/anginx/webserver/nginx/sbin/nginx

/etc/init.d/keepalived start
登入後複製

以上是keepalived+nginx高可用怎麼實現的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1671
14
CakePHP 教程
1428
52
Laravel 教程
1331
25
PHP教程
1276
29
C# 教程
1256
24
nginx在windows中怎麼配置 nginx在windows中怎麼配置 Apr 14, 2025 pm 12:57 PM

如何在 Windows 中配置 Nginx?安裝 Nginx 並創建虛擬主機配置。修改主配置文件並包含虛擬主機配置。啟動或重新加載 Nginx。測試配置並查看網站。選擇性啟用 SSL 並配置 SSL 證書。選擇性設置防火牆允許 80 和 443 端口流量。

docker怎麼啟動容器 docker怎麼啟動容器 Apr 15, 2025 pm 12:27 PM

Docker 容器啟動步驟:拉取容器鏡像:運行 "docker pull [鏡像名稱]"。創建容器:使用 "docker create [選項] [鏡像名稱] [命令和參數]"。啟動容器:執行 "docker start [容器名稱或 ID]"。檢查容器狀態:通過 "docker ps" 驗證容器是否正在運行。

docker容器名稱怎麼查 docker容器名稱怎麼查 Apr 15, 2025 pm 12:21 PM

可以通過以下步驟查詢 Docker 容器名稱:列出所有容器(docker ps)。篩選容器列表(使用 grep 命令)。獲取容器名稱(位於 "NAMES" 列中)。

怎麼查看nginx是否啟動 怎麼查看nginx是否啟動 Apr 14, 2025 pm 01:03 PM

確認 Nginx 是否啟動的方法:1. 使用命令行:systemctl status nginx(Linux/Unix)、netstat -ano | findstr 80(Windows);2. 檢查端口 80 是否開放;3. 查看系統日誌中 Nginx 啟動消息;4. 使用第三方工具,如 Nagios、Zabbix、Icinga。

docker怎麼創建容器 docker怎麼創建容器 Apr 15, 2025 pm 12:18 PM

在 Docker 中創建容器: 1. 拉取鏡像: docker pull [鏡像名] 2. 創建容器: docker run [選項] [鏡像名] [命令] 3. 啟動容器: docker start [容器名]

nginx怎麼查版本 nginx怎麼查版本 Apr 14, 2025 am 11:57 AM

可以查詢 Nginx 版本的方法有:使用 nginx -v 命令;查看 nginx.conf 文件中的 version 指令;打開 Nginx 錯誤頁,查看頁面的標題。

nginx怎麼配置雲服務器域名 nginx怎麼配置雲服務器域名 Apr 14, 2025 pm 12:18 PM

在雲服務器上配置 Nginx 域名的方法:創建 A 記錄,指向雲服務器的公共 IP 地址。在 Nginx 配置文件中添加虛擬主機塊,指定偵聽端口、域名和網站根目錄。重啟 Nginx 以應用更改。訪問域名測試配置。其他注意事項:安裝 SSL 證書啟用 HTTPS、確保防火牆允許 80 端口流量、等待 DNS 解析生效。

nginx服務器掛了怎麼辦 nginx服務器掛了怎麼辦 Apr 14, 2025 am 11:42 AM

當 Nginx 服務器宕機時,可執行以下故障排除步驟:檢查 nginx 進程是否正在運行。查看錯誤日誌以獲取錯誤消息。檢查 nginx 配置語法正確性。確保 nginx 具有訪問文件所需的權限。檢查文件描述符打開限制。確認 nginx 正在偵聽正確的端口。添加防火牆規則以允許nginx流量。檢查反向代理設置,包括後端服務器可用性。如需進一步幫助,請聯繫技術支持。

See all articles