Haproxy+Keepalived高可用負載均衡叢集

wishy blog發表於2020-12-11

結構

在這裡插入圖片描述

 配置
排程器安裝並配置Haproxy、Keepalived,haproxy1的優先順序高於haproxy2
web叢集編譯安裝nginx、並將儲存伺服器提供的共享檔案掛載到網站根目錄
儲存伺服器安裝nfs-utils、rpcbind;共享檔案
裝置安裝軟體作用
haproxy1Haproxy、Keepalived主排程器、接待使用者
haproxy2Haproxy、Keepalived備用排程器、當主失效後、代替主
nginx1nginx為使用者提供服務
nginx2nginx為使用者提供服務
nfsnfs-utils、rpcbind為web叢集提供儲存服務

NFS

1.需安裝nfs-utils、rpcbind軟體包

yum -y install nfs-utils rpcbind

2.設定共享目錄
(為了便於測試,所以設定兩個不同的目錄區分)

mkdir /opt/nginx1
mkdir /opt/nginx2
echo "<html><title>nginx1</title><body><h1>This is nginx1</h1></body></html>" >> /opt/nginx1/index.html
echo "<html><title>nginx2</title><body><h1>This is nginx2</h1></body></html>" >> /opt/nginx2/index.html

3.編輯配置檔案,共享目錄

vi /etc/exports
/opt/nginx1 192.168.2.16(ro)
/opt/nginx2 192.168.2.17(ro)

在這裡插入圖片描述

重啟

systemctl restart nfs

檢視本機發布的NFS共享目錄

showmount -e

在這裡插入圖片描述

Web叢集

使用xftp上傳軟體包
在這裡插入圖片描述

yum 安裝依賴包

yum -y install gcc gcc-c++ make pcre pcre-devel zlib zlib-devel

建立一個不可登陸賬戶給ngxin使用

useradd -M -s /sbin/nologin nginx

解壓

tar xf nginx-1.12.2.tar.gz
cd nginx-1.12.2/

配置內容

 ./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module

編譯安裝

make && make install

建立nginx軟連線

ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

nginx配置檔案軟連線

ln -s /usr/local/nginx/conf/nginx.conf /etc/

檢查nginx是都可以正常執行

nginx -t

在這裡插入圖片描述

檢視NFS伺服器共享的目錄

showmount -e 192.168.2.18

在這裡插入圖片描述

將目錄掛載到網站根目錄

nginx1

mount 192.168.2.18:/opt/nginx1 /usr/local/nginx/html/

nginx2

mount 192.168.2.18:/opt/nginx2 /usr/local/nginx/html/

檢查一下是否掛載成功

cat /usr/local/nginx/html/index.html

在這裡插入圖片描述
在這裡插入圖片描述

關閉防火牆

systemctl stop firewalld
setenforce 0
vi /etc/selinux/config
SELINUX=disabled

測試

curl http://localhost

在這裡插入圖片描述
在這裡插入圖片描述

排程器

1.安裝配置haproxy(主備都要安裝)

xftp上傳檔案haproxy

yum安裝依賴包、解壓、安裝

yum -y install gcc gcc-c++ make pcre-devel bzip2-devel
tar xf haproxy-1.4.24.tar.gz
cd haproxy-1.4.24/
make TARGET=linux26
make install

建立一個目錄、拷貝

mkdir /etc/haproxy
cp examples/haproxy.cfg /etc/haproxy/

編輯haproxy.cfg

vi /etc/haproxy/haproxy.cfg

註釋

        #chroot /usr/share/haproxy
        #redispatch

刪除

刪除所有listen選項

新增

listen webcluster 0.0.0.0:80
        option httpchk GET /index.html
        balance roundrobin
        server nginx1 192.168.2.16:80 check inter 2000 fall 3
        server nginx2 192.168.2.17:80 check inter 2000 fall 3

2.安裝keepalived(主備都要安裝)

xftp上傳keepalived檔案,解壓

tar xf keepalived-2.0.13.tar.gz

安裝編譯工具與外掛

yum -y install gcc gcc-c++ make popt-devel kernel-devel openssl-devel

切換目錄、編譯安裝

cd keepalived-2.0.13/
./configure --prefix=/
make && make install

加入系統管理服務、設為開機自啟

cp keepalived/etc/init.d/keepalived /etc/init.d/
systemctl enable keepalived.service

haproxy1配置檔案

(主排程器)

vi /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {
   router_id Haproxy_01
   }

vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 150
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    track_script {
    chk_http_port
    }

    virtual_ipaddress {
        192.168.2.100
    }
}

haproxy2配置檔案

(從排程器)

! Configuration File for keepalived

global_defs {
   router_id Haproxy_02
   }

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 145
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    track_script {
    chk_http_port
    }

    virtual_ipaddress {
        192.168.2.100
    }
}

測試

1.瀏覽器訪問測試(主備都正常)
在這裡插入圖片描述
在這裡插入圖片描述

2.ip addr 測試(主備都正常)

在這裡插入圖片描述
在這裡插入圖片描述
3.模擬主排程器網路故障測試
在這裡插入圖片描述

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

Haproxy監控指令碼

假如Haproxy1裝置只是Haproxy服務出現故障,Keepalived沒有出現故障,那麼備用排程器就不會啟用,就會造成服務中斷。因此需要關閉Keepalived,這時候就需要編寫一個指令碼監控Haproxy,假如Haproxy關閉,那麼指令碼就會自動關閉Keepalived

編輯指令碼

vi /etc/keepalived/check_haproxy.sh
#!/bin/bash
#haproxy失效關閉keepalived
A=`ps -C haproxy --no-header |wc -l`
if [ $A -eq 0 ];then
/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/conf/haproxy.cfg
sleep 3
if [ `ps -C haproxy --no-header |wc -l` -eq 0 ];then
/etc/init.d/keepalived stop
fi
fi

加許可權

chmod 755 /etc/keepalived/check_haproxy.sh

修改配置檔案

vi /etc/keepalived/keepalived.conf 
! Configuration File for keepalived
vrrp_script chk_http_port {
script "/etc/keepalived/check_haproxy.sh"
interval 2
weight 2

global_defs {
   router_id Haproxy_01
   }

vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 150
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    track_script {
    chk_http_port
    }

    virtual_ipaddress {
        192.168.2.100
    }
}
}

在這裡插入圖片描述
測試
在這裡插入圖片描述

相關文章