天天看點

Docker+Nginx+KeepaLived實作Nginx一主一從高可用1. 主從兩台機器上分别啟動nginx容器:2.在兩台主控端器上分别安裝 keepalived (注意:keepalived安裝在實體機上,不是安裝到Docker容器中)

系統版本 Centos7

IP:10.10.11.79 Master

IP:10.10.11.81 Slave

虛拟ip:10.10.11.77

用戶端發起一個請求 ,請求沒有到Nginx的實際IP上,而是請求的虛拟IP(會和實際IP通過配置檔案進行綁定)

如果有一台Nginx伺服器挂了,Keepalived會自動在備Nginx伺服器上選一台當主伺服器

1. 主從兩台機器上分别啟動nginx容器:

兩台nginx容器要用相同的端口号:

docker run -d --privileged=true --name keepalivedNginx -p 82:80 nanlist/nginx1.23.1:v1.0
           

2.在兩台主控端器上分别安裝 keepalived (注意:keepalived安裝在實體機上,不是安裝到Docker容器中)

1.聯網下載下傳到/usr/local目錄下并解壓有可能會提示連接配接不成功,加上它提示的指令再下載下傳就好了

如果下載下傳不下來用浏覽器下載下傳下來再傳到服務上面也可以

兩台伺服器分别執行下:

主:

[[email protected] html]# cd /usr/local
[[email protected] local]# wget https://www.keepalived.org/software/keepalived-1.4.2.tar.gz
[[email protected] local]# tar -zxvf keepalived-1.4.2.tar.gz
           

從:

[[email protected] html]# cd /usr/local
[[email protected] local]# wget https://www.keepalived.org/software/keepalived-1.4.2.tar.gz
[[email protected] local]# tar -zxvf keepalived-1.4.2.tar.gz
           

2.安裝相關依賴,有不用下載下傳了

主:

[[email protected] local]# yum install -y gcc openssl-devel popt-devel
           

從:

[[email protected] local]# yum install -y gcc openssl-devel popt-devel
           

3.編譯安裝

主:

[[email protected] local]# cd keepalived-1.4.2
[[email protected] keepalived-1.4.2]# ./configure --prefix=/usr/local/keepalived
[[email protected] keepalived-1.4.2]# make
[[email protected] keepalived-1.4.2]# make install
           

從:

[[email protected] local]# cd keepalived-1.4.2
[[email protected] keepalived-1.4.2]# ./configure --prefix=/usr/local/keepalived
[[email protected] keepalived-1.4.2]# make
[[email protected] keepalived-1.4.2]# make install

           

4.相關配置,按指令執行

主:

[[email protected] keepalived-1.4.2]# pwd
/usr/local/keepalived-1.4.2
You have new mail in /var/spool/mail/root
[[email protected] keepalived-1.4.2]# cp /usr/local/keepalived-1.4.2/keepalived/etc/init.d/keepalived /etc/init.d/
[[email protected] keepalived-1.4.2]# mkdir /etc/keepalived
[[email protected] keepalived-1.4.2]# cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
[[email protected] keepalived-1.4.2]# cp /usr/local/keepalived-1.4.2/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
[[email protected] keepalived-1.4.2]# cp /usr/local/keepalived/sbin/keepalived /usr/sbin/

           

從:

[[email protected] keepalived-1.4.2]# pwd
/usr/local/keepalived-1.4.2
You have new mail in /var/spool/mail/root
[[email protected] keepalived-1.4.2]# cp /usr/local/keepalived-1.4.2/keepalived/etc/init.d/keepalived /etc/init.d/
[[email protected] keepalived-1.4.2]# mkdir /etc/keepalived
[[email protected] keepalived-1.4.2]# cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
[[email protected] keepalived-1.4.2]# cp /usr/local/keepalived-1.4.2/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
[[email protected] keepalived-1.4.2]# cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
[[email protected] keepalived-1.4.2]#

           

安裝之後,在 /etc/keepalived目錄下有個 keepalived.conf 配置檔案:

主:

vim /etc/keepalived/keepalived.conf
           

編輯内容:

global_defs {  
	router_id LVS_DEVEL 
}  

# 檢查nginx狀态的腳本,健康監測腳本
vrrp_script chk_nginx {
	script "/etc/keepalived/nginx_check.sh" # 腳本路徑
	interval 2 # 腳本執行間隔時間
	weight -20
}
  
vrrp_instance VI_1 {  
    state MASTER  
    interface ens192  # 目前進行vrrp通訊的網絡接口卡(目前centos的網卡) 用ifconfig檢視你具體的網卡
    virtual_router_id 51  # 虛拟路由編号,主從要一至
    priority 150 # 優先級,數值越大,擷取處理請求的優先級越高 master要大于slave
	advert_int 1
	unicast_src_ip 10.10.11.79 # 本機ip
	
	track_script {
		chk_nginx
	}

    nopreempt
    authentication {  
        auth_type PASS  # 指定認證方式。PASS簡單密碼認證(推薦),AH:IPSEC認證(不推薦)
        auth_pass 1111  # 指定認證所使用的密碼。最多8位
    }  
    unicast_peer { # 另外一台的伺服器ip,如果是多台就配多個ip
        10.10.11.81
    }
    virtual_ipaddress {  # 指定VIP位址
        10.10.11.77
    }  

}  
   

           

從:

編輯:

vim /etc/keepalived/keepalived.conf
           

配置内容:

global_defs {
	router_id LVS_DEVEL
}

vrrp_script chk_nginx {
	script "/etc/keepalived/nginx_check.sh"
	interval 2
	weight -20 
}

vrrp_instance VI_1 {
	state Slave
	interface ens192
	virtual_router_id 51
	priority 90
	advert_int 1
	unicast_src_ip 10.10.11.81
	unicast_peer {
		10.10.11.79
	}

	nopreempt
	authentication {
		auth_type PASS
		auth_pass 1111
	}

	track_script {
		chk_nginx
	}

	virtual_ipaddress {
		10.10.11.77
	}
}

           

健康監測腳本

主從機都需配置檢測nginx是否在運作,不在允許就直接啟動nginx的腳本,和keepalived放在一起

腳本名稱 nginx_check.sh

如果 nginx 停止運作,嘗試啟動,如果無法啟動則殺死本機的 keepalived 程序,keepalived将虛拟 ip 綁定到 BACKUP 機器上。内容如下:

#!/bin/bash
#version 0.0.1
#當nginx程序不存在時,會自動重新開機nginx服務;
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ];then
     docker restart keepalivedNginx     #重新開機nginx
     sleep 2
     if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
        systemctl stop keepalived
     fi 
fi
           

編輯完以後放入到/etc/keepalived目錄下:

Docker+Nginx+KeepaLived實作Nginx一主一從高可用1. 主從兩台機器上分别啟動nginx容器:2.在兩台主要端器上分别安裝 keepalived (注意:keepalived安裝在實體機上,不是安裝到Docker容器中)

隻要配置好了,以後直接啟動keepalived就好了,keepalived運作之後就會檢測nginx是否在運作,不在運作就通過腳本去啟動

自動重新開機不了解決方案

檢視腳本是否有運作的權限

如果你是root登陸的話(不是的話,切換到root使用者,對*.sh 賦可執行的權限)

chmod 777*.sh
           

或者

chmod +x *.sh
           

主從兩台伺服器這一步授權一定要執行不然腳本會失效:

[[email protected] keepalived]# chmod +x nginx_check.sh 
[[email protected] keepalived]# ll
total 12
-rw-r--r-- 1 root root 572 Oct 12 03:55 keepalived.conf
-rw-r--r-- 1 root root 3550 Oct 12 03:48 keepalived.conf.bak
-rwxr-xr-x 1 root root 205 Oct 12 04:04 nginx_check.sh
[[email protected] keepalived]#

           

腳本上傳以後重新開機keepalived。

keepalived常用指令

#啟動

service keepalived start
           

#停止

service keepalived stop
           

#檢視狀态

service keepalived status
           

驗證

1:如果驗證主從是否可以自動切換實作熱備效果可以把其中一台機器的keepalived服務stop掉,然後重新整理虛拟ip。

2:如果驗證健康腳本是否生效,可以把nginx容器stop掉,過兩秒再次檢視一下nginx容器是否啟動。

繼續閱讀