nginx+docker+nfs部署-創(chuàng)新互聯(lián)

一.體系架構(gòu)

在Keepalived + Nginx高可用負(fù)載均衡架構(gòu)中,keepalived負(fù)責(zé)實(shí)現(xiàn)High-availability (HA) 功能控制前端機(jī)VIP(虛擬網(wǎng)絡(luò)地址),當(dāng)有設(shè)備發(fā)生故障時(shí),熱備服務(wù)器可以瞬間將VIP自動(dòng)切換過(guò)來(lái),實(shí)際運(yùn)行中體驗(yàn)只有2秒鐘切換時(shí)間,DNS服務(wù)可以負(fù)責(zé)前端VIP的負(fù)載均衡。
nginx負(fù)責(zé)控制后端web服務(wù)器的負(fù)載均衡,將客戶端的請(qǐng)求按照一定的算法轉(zhuǎn)發(fā)給后端Real Server處理,而Real Server將響應(yīng)直接返回給客戶端。
nfs服務(wù)器做實(shí)時(shí)備份,給web服務(wù)器提供web界面。

成都創(chuàng)新互聯(lián)公司專注于濠江網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供濠江營(yíng)銷(xiāo)型網(wǎng)站建設(shè),濠江網(wǎng)站制作、濠江網(wǎng)頁(yè)設(shè)計(jì)、濠江網(wǎng)站官網(wǎng)定制、重慶小程序開(kāi)發(fā)服務(wù),打造濠江網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供濠江網(wǎng)站排名全網(wǎng)營(yíng)銷(xiāo)落地服務(wù)。

二.簡(jiǎn)單原理

NGINX_MASTER、NGINX_BACKUP兩臺(tái)服務(wù)器均通過(guò)keepalived軟件把ens33網(wǎng)卡綁上一個(gè)虛擬IP(VIP)地址192.168.1.40,此VIP當(dāng)前由誰(shuí)承載著服務(wù)就綁定在誰(shuí)的ens32上,當(dāng)NGINX_MASTER發(fā)生故障時(shí),NGINX_BACKUP會(huì)通過(guò)/etc/keepalived/keepalived.conf文件中設(shè)置的心跳時(shí)間advert_int 1檢查,無(wú)法獲取NGINX_MASTER正常狀態(tài)的話,NGINX_BACKUP會(huì)瞬間綁定VIP來(lái)接替nginx_master的工作,當(dāng)NGINX_MASTER恢復(fù)后keepalived會(huì)通過(guò)priority參數(shù)判斷優(yōu)先權(quán)將虛擬VIP地址192.168.1.40重新綁定給NGINX_MASTER的ens33網(wǎng)卡。
使用此方案的優(yōu)越性
1.實(shí)現(xiàn)了可彈性化的架構(gòu),在壓力增大的時(shí)候可以臨時(shí)添加web服務(wù)器添加到這個(gè)架構(gòu)里面去;
2.upstream具有負(fù)載均衡能力,可以自動(dòng)判斷后端的機(jī)器,并且自動(dòng)踢出不能正常提供服務(wù)的機(jī)器;
3.相對(duì)于lvs而言,正則分發(fā)和重定向更為靈活。而Keepalvied可保證單個(gè)nginx負(fù)載均衡器的有效性,避免單點(diǎn)故障;
4.用nginx做負(fù)載均衡,無(wú)需對(duì)后端的機(jī)器做任何改動(dòng)。
5.nginx部署在docker容器里,即大量地節(jié)約開(kāi)發(fā)、測(cè)試、部署的時(shí)間,又可以在出現(xiàn)故障時(shí)通過(guò)鏡像快速恢復(fù)業(yè)務(wù)。

三、系統(tǒng)環(huán)境

兩臺(tái)負(fù)載機(jī)器安裝:,nginx+docker+nfs 分別命名為:NGINX_MASTER,NGINX_BACKUP。
后端web服務(wù)器,可以是提供web服務(wù)的任何架構(gòu),分別命名為:WEB_1,WEB_2。
后端數(shù)據(jù)庫(kù)機(jī)器可任意架構(gòu),只要能提供數(shù)據(jù)庫(kù)服務(wù)即可。

nginx+docker+nfs部署

服務(wù)器 IP地址 安裝軟件
NGINX_MASTER192.168.1.10nginx+keepalived
NGINX_BACKUP192.168.1.20nginx+keepalived
WEB_1192.168.1.11docker+nginx
WEB_2192.168.1.13docker+nginx
nfs_MASTER192.168.1.30nfs+rsync+inotify
nfs_BACKUP192.168.1.10nfs+rsync+inotify

nginx部署(兩臺(tái)都是)

安裝nginx

[root@nginx01 ~]# tar zxf nginx-1.14.0.tar.gz 
//解壓nginx安裝包
[root@nginx01 ~]# cd nginx-1.14.0/
[root@nginx01 nginx-1.14.0]# yum -y install openssl-devel pcre-devel zlib-devel
//安裝nginx依賴包
[root@nginx01 nginx-1.14.0]# ./configure --prefix=/usr/local/nginx1.14 --with-http_dav_module --with-http_stub_status_module --with-http_addition_module  --with-http_sub_module --with-http_flv_module --with-http_mp4_module --with-pcre --with-http_ssl_module --with-http_gzip_static_module --user=nginx --group=nginx && make  &&  make install
//編譯安裝nginx
[root@nginx01 nginx-1.14.0]# useradd nginx -s /sbin/nologin -M
//創(chuàng)建所需用戶
[root@nginx01 nginx-1.14.0]# ln -s /usr/local/nginx1.14/sbin/nginx /usr/local/sbin/
//鏈接命令
[root@nginx01 nginx-1.14.0]# nginx 
//開(kāi)啟nginx
[root@nginx01 nginx-1.14.0]# netstat -anpt | grep nginx
//查看nginx是否開(kāi)啟

nginx+docker+nfs部署

部署nginx

[root@nginx01 ~]# cd /usr/local/nginx1.14/conf/
[root@nginx01 conf]# vim nginx.conf

? http模塊加

upstream backend {
server 192.168.1.11:90 weight=1 max_fails=2 fail_timeout=10s;
server 192.168.1.13:90 weight=1 max_fails=2 fail_timeout=10s;
}
    location / {
       # root   html;
       # index  index.html index.htm;
       proxy_pass http://backend;  #添加
    }

高可用環(huán)境

安裝keepalived

[root@nginx02 nginx-1.14.0]# yum -y install keepalived

配置keepalived

修改主和備nginx服務(wù)器上的keepalived 配置文件 /etc/keepalived/keepalived.conf 文件

主nginx

修改主nginx下/etc/keepalived/keepalived.conf文件

! Configuration File for keepalived
global_defs {
   router_id LVS_DEVEL
}   
vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }   
    virtual_ipaddress {
        192.168.1.40
    }
}

備nginx

修改備nginx下 /etc/keepalived /keepalived.conf文件

配置備nginx時(shí)需要注意:需要修改state為BACKUP , priority比MASTER低,virtual_router_id和master的值一致

! Configuration File for keepalived
global_defs {
   router_id TWO
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 1
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.40
    }
}

測(cè)試(在做完docker的時(shí)候)

主備nginx都啟動(dòng)keepalived

systemctl  start  keepalived
[root@nginx01 conf]# curl 192.168.1.40
wsd666

nfs部署(兩臺(tái)都是)

nfs操作

[root@localhost ~]# yum -y install nfs-utils
//下載nfs服務(wù)

[root@nfs ~]# mkdir /database
//創(chuàng)建共享目錄
[root@nfs02 ~]# chmod 777 /database/
//設(shè)置權(quán)限
[root@nfs ~]# vim /etc/exports
//設(shè)置權(quán)限如下
/database *(rw,sync,no_root_squash)

開(kāi)啟各項(xiàng)服務(wù)

[root@nfs ~]# systemctl start rpcbind
[root@nfs ~]# systemctl enable rpcbind
[root@nfs ~]# systemctl start nfs-server
[root@nfs ~]# systemctl enable nfs-server

docker01和docker02測(cè)試nfs

[root@nfs01 ~]# vim /etc/rsyncd.conf 
//建立rsync配置文件
uid = nobody
gid = nobody
use chroot = yes
address = 192.168.1.30
port 873
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
hosts allow = 192.168.1.0/24
[wwwroot]
path = /database
read only = no
dont compress = *.gz *.bz2 *.rar *.zip
[root@nfs01 ~]# mkdir /database
//創(chuàng)建共享目錄
[root@nfs01 ~]# rsync --daemon
//啟動(dòng)rsync
[root@nfs01 ~]# netstat -anpt | grep rsync
//查看端口

nginx+docker+nfs部署

如果需要重啟rsync服務(wù),需要:

[root@localhost ~]# kill  $(cat /var/run/rsyncd.pid)
//停止服務(wù)
[root@localhost ~]# rsync --daemon
//啟動(dòng)服務(wù)
[root@localhost ~]# kill -9 $(cat /var/run/rsyncd.pid)

或者直接使用“netstat -anpt | grep rsync”命令查出進(jìn)程號(hào),使用“kill 進(jìn)程號(hào)”一樣。
使用第一種方法停止rsync服務(wù)必須刪除存放rsync服務(wù)進(jìn)程的文件:

[root@localhost ~]# rm -rf /var/run/rsyncd.pid

使用rsync備份工具

配置好rsync同步源服務(wù)器之后,客戶端就可以使用rsync工具來(lái)執(zhí)行遠(yuǎn)程同步了。

與rsync主機(jī)同步
rsync命令的選項(xiàng):
-r:遞歸模式,包含目錄及子目錄中所有文件
-l:對(duì)于符號(hào)鏈接文件仍然復(fù)制為符號(hào)鏈接文件
-p:保留文件的權(quán)限標(biāo)記
-t:保留文件的時(shí)間標(biāo)記
-g:保留文件的屬組標(biāo)記(僅超級(jí)用戶使用)
-o:保留文件的屬主標(biāo)記(僅超級(jí)用戶使用)
-D:保留設(shè)備文件及其他特殊文件
-a:歸檔模式,遞歸并保留對(duì)象屬性,等同于 -rlptgoD
-v:顯示同步過(guò)程的詳細(xì)(verbose)信息
-z:在傳輸文件時(shí)進(jìn)行壓縮(compress)
-H:保留硬連接文件
-A:保留ACL屬性信息
--delete:刪除目標(biāo)位置有而原始位置沒(méi)有的文件
--checksum:根據(jù)對(duì)象的校驗(yàn)和來(lái)決定是否跳過(guò)文件

rsync是一款快速增量備份工具,支持:
(1)本地復(fù)制;
(2)與其他SSH同步;
(3)與rsync主機(jī)同步。

手動(dòng)與rsync主機(jī)同步
[root@localhost ~]# rsync -avz 192.168.1.1::wwwroot /root
或者
[root@localhost ~]# rsync -avz rsync://192.168.1.1/wwwroot /root
[root@nfs01 database]# vim index.html
xgp666
//創(chuàng)建測(cè)試目錄

配置inotify+rsync實(shí)時(shí)同步(兩臺(tái)都是)

(1)、軟件安裝

rpm -q rsync //查詢r(jià)sync是否安裝,一般為系統(tǒng)自帶安裝
yum install rsync -y //若沒(méi)有安裝,使用yum安裝

安裝inotify軟件包

[root@nfs02 ~]# tar zxf inotify-tools-3.14.tar.gz 
[root@nfs02 ~]# cd inotify-tools-3.14/
[root@nfs02 inotify-tools-3.14]#  ./configure && make && make install

(2)調(diào)整inotify內(nèi)核參數(shù)

[root@nfs02 ~]# vim /etc/sysctl.conf
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576

[root@nfs02 ~]# sysctl -p
//生效

(3) 編寫(xiě)觸發(fā)式同步腳本

#!/bin/bash
A="inotifywait -mrq -e modify,move,create,delete /database/"
B="rsync -avz  /database/ 192.168.1.40::wwwroot"
$A | while read DIRECTORY EVENT FILE
do
    if [ $(pgrep rsync | wc -l) -gt 0 ] ; then
        $B
    fi
done

此處需要注意,在兩臺(tái)服務(wù)器需要同步的目錄之間,也需要將目錄權(quán)限放到大,避免因目錄本身權(quán)限報(bào)錯(cuò)。

[root@nfs01 inotify-tools-3.14]# chmod  +x /opt/ino.sh

設(shè)置腳本開(kāi)機(jī)自啟

[root@nfs01 database]# vim /etc/rc.d/rc.local 
/opt/ino.sh &
/usr/bin/rsync --daemon

源服務(wù)器端測(cè)試

  • 執(zhí)行腳本后,當(dāng)前終端會(huì)變成實(shí)時(shí)監(jiān)控界面,需要重新打開(kāi)終端操作。
  • 在源服務(wù)器端共享模塊目錄下進(jìn)行文件操作,然后去備份服務(wù)器下,可觀察到文件已經(jīng)被實(shí)時(shí)同步。

docker部署(兩臺(tái)都是)

[root@docker01 ~]# docker pull nginx
[root@docker01 ~]# mkdir -p  /www  
//創(chuàng)建掛載目錄

nfs創(chuàng)建好之后docker上掛載目錄

[root@docker01 ~]#  mount  -t nfs 192.168.1.30:/database /www
[root@docker01 ~]# docker run -itd --name nginx -p 90:80 -v /www/index.html:/usr/share/nginx/html/index.html nginx:latest

測(cè)試

1、當(dāng)NGINX_MASTER、NGINX_BACKUP服務(wù)器nginx均正常工作時(shí)
在NGINX_MASTER上:
nginx+docker+nfs部署
在NGINX_BACKUP上:
nginx+docker+nfs部署
master服務(wù)器ens32網(wǎng)卡正常綁定VIP,而backup卻沒(méi)有綁定,通過(guò)瀏覽器可正常訪問(wèn)網(wǎng)站。
2、關(guān)閉NGINX_MASTER的nginx容器
nginx+docker+nfs部署
當(dāng)nginx容器停止后,馬上就又啟起來(lái)了,nginx啟動(dòng)腳本沒(méi)問(wèn)題
3、關(guān)閉NGINX_MASTER的keepalived服務(wù)
在NGINX_MASTER上:
nginx+docker+nfs部署
在NGINX_BACKUP上:
nginx+docker+nfs部署
NGINX_BACKUP的ens32網(wǎng)卡已瞬間綁定VIP,通過(guò)瀏覽器訪問(wèn)網(wǎng)站正常。
4、將NGINX_MASTER的keepalived服務(wù)啟動(dòng)
在NGINX_MASTER上:
nginx+docker+nfs部署
在NGINX_BACKUP上:
nginx+docker+nfs部署
NGINX_MASTER的ens32網(wǎng)卡重新綁定VIP,通過(guò)瀏覽器訪問(wèn)網(wǎng)站正常。
5、關(guān)閉WEB_1服務(wù)器,通過(guò)瀏覽器訪問(wèn)網(wǎng)站正常。

排錯(cuò)

首先查看nginx配置文件是否有問(wèn)題
兩臺(tái)keepakived的各項(xiàng)參數(shù)是否正常
docker上nginx是否映射端口,掛載nfs的共享目錄。
nfs是否設(shè)置目錄權(quán)限。是否配置rsync+inotify,寫(xiě)一個(gè)shell來(lái)做實(shí)時(shí)備份。

總結(jié):

首先是鏡像,就是拉取nginx的鏡像。然后再把nginx鏡像重建一下,就是變成我們需要的,主要就是改配置文件。然后把所有鏡像push到harbor上

搭建nginx,做反向代理。
搭建docker,安裝nginx鏡像做測(cè)試做頁(yè)面,測(cè)試面是從nfs共享來(lái)的。
搭建NFS,為了實(shí)現(xiàn)數(shù)據(jù)共享,包括數(shù)據(jù)庫(kù),就是持久化的。還要通過(guò)rsync+inotify,做到實(shí)時(shí)備份。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

當(dāng)前文章:nginx+docker+nfs部署-創(chuàng)新互聯(lián)
當(dāng)前鏈接:http://www.muchs.cn/article28/dsocjp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)、網(wǎng)站維護(hù)、定制網(wǎng)站、服務(wù)器托管Google、軟件開(kāi)發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)