天天看點

小白入門必知必會-Nginx+Keepalived雙機熱備安裝

作者:霸都運維

一 高可用介紹

1.1 概念簡介

HA即(High Available)高可用,又被叫做雙機熱備,用于關鍵性業務。簡單了解就是,有2台機器 server1和server2,正常是server1提供服務,server2待命閑置,當server1當機或服務宕掉,會切換至server2機器繼續提供服務。常見的實作高可用的開源軟體有 heartbeat 和 keepalived。

1.2 場景介紹

一台web伺服器一天24小時提供服務,難免會存在服務挂掉或伺服器當機的情況,那麼使用者就通路不了服務了,生産環境肯定是接受不了的。

但如果有2台伺服器,server1對外提供web服務,server2作為備用,如果server1挂掉,那麼server2立刻替代server1去提供服務,這樣對使用者來說是無感覺的。

但是這裡有個問題,server1的ip是 192.168.0.99,server2的ip是192.168.0.100,顯然向使用者提供server1或server2的ip位址是不可行的,因為使用者總不能去切換ip來通路。

這時heartbeat或keepalived可以提供一個虛拟VIP:192.168.0.97,使用者隻需要通路192.168.0.97,當server1提供服務時,VIP 會漂移到server1伺服器上,當server2提供服務時,VIP會漂移到server2伺服器上,這樣就可以讓使用者通過通路192.168.0.97來擷取web服務,即使server1或server2伺服器切換也不影響使用者的正常通路。

1.3 keepalived介紹

Keepalived的作用是檢測伺服器的狀态,如果有一台web伺服器當機,或工作出現故障,Keepalived将檢測到,并将有故障的伺服器從系統中剔除,同時使用其他伺服器代替該伺服器的工作,當伺服器工作正常後Keepalived自動将伺服器加入到伺服器群中,這些工作全部自動完成,不需要人工幹涉,需要人工做的隻是修複故障的伺服器。

下面使用keepalived來做 HA 叢集,并且把 nginx 服務作為 HA 對應的服務。

二 Nginx+Keepalived安裝

2.1 準備環境

伺服器1:

  • 主機名:keepalived01
  • 作業系統:CentOS7.8 64位
  • IP位址:192.168.0.99

伺服器2:

  • 主機名:keepalived02
  • 作業系統:CentOS7.8 64位
  • IP位址:192.168.0.100

虛拟VIP:

  • VIP:192.168.0.97

2.2 設定主機名

伺服器1設定hostname

hostnamectl set-hostname keepalived01

退出重新登入

伺服器2設定hostname

hostnamectl set-hostname keepalived02

2.3 關閉防火牆和selinux(2台節點都要操作)

關閉防火牆

systemctl stop firewalld

systemctl disable firewalld

關閉selinux

setenforce 0

sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

2.4 配置hosts檔案(2台伺服器都要操作)

vim /etc/hosts

增加内容如下:

192.168.0.97 VIP

192.168.0.99 keepalived01

192.168.0.100 keepalived02

2.5 安裝nginx(2台伺服器都操作)

yum install nginx nginx-mod-stream -y

vim /etc/nginx/nginx.conf

在檔案最後添加如下内容

stream {

log_format proxy '$time_local|$remote_addr|$upstream_addr|$protocol|$status|'

'$session_time|$upstream_connect_time|$bytes_sent|$bytes_received|'

'$upstream_bytes_sent|$upstream_bytes_received' ;

upstream web {

server 192.168.0.99:81 max_fails=3 fail_timeout=30s;

server 192.168.0.100:81 max_fails=3 fail_timeout=30s;

}

server {

listen 80;

proxy_connect_timeout 2s;

proxy_timeout 900s;

proxy_pass web;

access_log /var/log/nginx/proxy.log proxy;

}

}

啟動nginx

systemctl enable nginx --now

2.6 安裝keepalived(2台伺服器都操作)

yum install keepalived -y

添加檢測腳本

vim /etc/keepalived/check_port.sh

#!/bin/bash

CHK_PORT=$1

if [ -n "$CHK_PORT" ];then

PORT_PROCESS=`ss -lnt|grep $CHK_PORT|wc -l`

if [ $PORT_PROCESS -eq 0 ];then

echo "Port $CHK_PORT is not used,end."

fi

if [ $PORT_PROCESS -eq 0 ];then

systemctl stop keepalived

fi

else

echo "Check Port Can Be Empty!"

fi

授予可執行權限

chmod +x /etc/keepalived/check_port.sh

2.7 keepalived01伺服器操作

cat >/etc/keepalived/keepalived.conf<<EOF

! Configuration File for keepalived

global_defs {

router_id 192.168.0.99

}

vrrp_script chk_nginx {

script "/etc/keepalived/check_port.sh 80"

interval 2

weight -20

}

vrrp_instance VI_1 {

state MASTER

interface ens3

virtual_router_id 251

priority 100

advert_int 1

mcast_src_ip 192.168.0.99

authentication {

auth_type PASS

auth_pass 11111111

}

track_script {

chk_nginx

}

virtual_ipaddress {

192.168.0.97

}

}

EOF

啟動keepalived

systemctl enable keepalived --now

2.8 keepalived02伺服器操作

cat >/etc/keepalived/keepalived.conf<<EOF

! Configuration File for keepalived

global_defs {

router_id 192.168.0.100

}

vrrp_script chk_nginx {

script "/etc/keepalived/check_port.sh 80"

interval 2

weight -20

}

vrrp_instance VI_1 {

state BACKUP

interface ens3

virtual_router_id 251

priority 90

advert_int 1

mcast_src_ip 192.168.0.100

authentication {

auth_type PASS

auth_pass 11111111

}

track_script {

chk_nginx

}

virtual_ipaddress {

192.168.0.97

}

}

EOF

啟動keepalived

systemctl enable keepalived --now

2.9 測試高可用

先确定VIP在哪台伺服器

小白入門必知必會-Nginx+Keepalived雙機熱備安裝

浏覽器通路

http://192.168.0.97

小白入門必知必會-Nginx+Keepalived雙機熱備安裝

停止keepalived01伺服器的nginx

pkill nginx

發現VIP漂移到keepalived02伺服器上了

小白入門必知必會-Nginx+Keepalived雙機熱備安裝

而此時,浏覽器還是可以正常通路

http://192.168.0.97

小白入門必知必會-Nginx+Keepalived雙機熱備安裝

至此,基于Keepalived的雙機熱備安裝完成。

繼續閱讀