nginx負責控制后端web服務器的負載均衡,將客戶端的請求按照一定的算法轉發給后端Real Server處理,而Real Server將響應直接返回給客戶端。
nfs服務器做實時備份,給web服務器提供web界面。

二.簡單原理

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

三、系統環境

兩臺負載機器安裝:,nginx docker nfs 分別命名為:NGINX_MASTER,NGINX_BACKUP。
后端web服務器,可以是提供web服務的任何架構,分別命名為:WEB_1,WEB_2。
后端數據庫機器可任意架構,只要能提供數據庫服務即可。

服務器 IP地址 安裝軟件

NGINX_MASTER
192.168.1.10
nginx keepalived

NGINX_BACKUP
192.168.1.20
nginx keepalived

WEB_1
192.168.1.11
docker nginx

WEB_2
192.168.1.13
docker nginx

nfs_MASTER
192.168.1.30
nfs rsync inotify

nfs_BACKUP
192.168.1.10
nfs rsync inotify

nginx部署(兩臺都是)

安裝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
//創建所需用戶
[root@nginx01 nginx-1.14.0]# ln -s /usr/local/nginx1.14/sbin/nginx /usr/local/sbin/
//鏈接命令
[root@nginx01 nginx-1.14.0]# nginx 
//開啟nginx
[root@nginx01 nginx-1.14.0]# netstat -anpt | grep nginx
//查看nginx是否開啟

部署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;  #添加
    }

高可用環境

安裝keepalived

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

配置keepalived

修改主和備nginx服務器上的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時需要注意:需要修改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
    }
}

測試(在做完docker的時候)

主備nginx都啟動keepalived

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

nfs部署(兩臺都是)

nfs操作

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

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

開啟各項服務

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

docker01和docker02測試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
//創建共享目錄
[root@nfs01 ~]# rsync --daemon
//啟動rsync
[root@nfs01 ~]# netstat -anpt | grep rsync
//查看端口

如果需要重啟rsync服務,需要:

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

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

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

使用rsync備份工具

配置好rsync同步源服務器之后,客戶端就可以使用rsync工具來執行遠程同步了。

與rsync主機同步

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

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

手動與rsync主機同步

[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
//創建測試目錄

配置inotify rsync實時同步(兩臺都是)

(1)、軟件安裝

rpm -q rsync //查詢rsync是否安裝,一般為系統自帶安裝
yum install rsync -y //若沒有安裝,使用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)調整inotify內核參數

[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) 編寫觸發式同步腳本

#!/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

此處需要注意,在兩臺服務器需要同步的目錄之間,也需要將目錄權限放到最大,避免因目錄本身權限報錯。

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

設置腳本開機自啟

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

源服務器端測試

執行腳本后,當前終端會變成實時監控界面,需要重新打開終端操作。
在源服務器端共享模塊目錄下進行文件操作,然后去備份服務器下,可觀察到文件已經被實時同步。

docker部署(兩臺都是)

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

nfs創建好之后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

測試

1、當NGINX_MASTER、NGINX_BACKUP服務器nginx均正常工作時
在NGINX_MASTER上:

在NGINX_BACKUP上:

master服務器ens32網卡正常綁定VIP,而backup卻沒有綁定,通過瀏覽器可正常訪問網站。
2、關閉NGINX_MASTER的nginx容器

當nginx容器停止后,馬上就又啟起來了,nginx啟動腳本沒問題
3、關閉NGINX_MASTER的keepalived服務
在NGINX_MASTER上:

在NGINX_BACKUP上:

NGINX_BACKUP的ens32網卡已瞬間綁定VIP,通過瀏覽器訪問網站正常。
4、將NGINX_MASTER的keepalived服務啟動
在NGINX_MASTER上:

在NGINX_BACKUP上:

NGINX_MASTER的ens32網卡重新綁定VIP,通過瀏覽器訪問網站正常。
5、關閉WEB_1服務器,通過瀏覽器訪問網站正常。

排錯

首先查看nginx配置文件是否有問題
兩臺keepakived的各項參數是否正常
docker上nginx是否映射端口,掛載nfs的共享目錄。
nfs是否設置目錄權限。是否配置rsync inotify,寫一個shell來做實時備份。

總結:

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

搭建nginx,做反向代理。
搭建docker,安裝nginx鏡像做測試做頁面,測試面是從nfs共享來的。
搭建NFS,為了實現數據共享,包括數據庫,就是持久化的。還要通過rsync inotify,做到實時備份。

更多關于云服務器域名注冊,虛擬主機的問題,請訪問三五互聯官網:m.shinetop.cn

贊(0)
聲明:本網站發布的內容(圖片、視頻和文字)以原創、轉載和分享網絡內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。郵箱:3140448839@qq.com。本站原創內容未經允許不得轉載,或轉載時需注明出處:三五互聯知識庫 » nginx docker nfs部署

登錄

找回密碼

注冊

主站蜘蛛池模板: 久久久久久久久久久久中文字幕| 免费无码久久成人网站入口| 一区二区三区午夜无码视频| 熟女精品视频一区二区三区| 亚洲AV成人片在线观看| 亚洲国产韩国欧美在线| 久久精品夜夜夜夜夜久久| 欧美精品v国产精品v日韩精品| 久久伊99综合婷婷久久伊| 久久精品噜噜噜成人av| 亚洲国产精品一二三四区| 国产精品自在线拍国产手机版| 国产午夜福利精品视频| 久久精品国产99久久美女| 久久久久亚洲av成人网址| 欧美成人精品三级网站视频| 最近日本免费观看高清视频 | 国产成人女人在线观看| 无码粉嫩虎白一线天在线观看| 亚洲精品人妻中文字幕| 女人张开腿无遮无挡视频| 国产成人8X人网站视频| 久青草国产综合视频在线| 国产精品免费观在线| av无码精品一区二区乱子| 熟女少妇精品一区二区| 国产亚洲精品成人av在线| 日本欧美一区二区三区在线播放| 久久精品国产99亚洲精品| 亚洲美免无码中文字幕在线| 高清自拍亚洲精品二区| 久久蜜臀av一区三区| 国产喷水1区2区3区咪咪爱AV| 久热re这里精品视频在线6| 广宁县| 樱花草视频www日本韩国| 樱桃视频影院在线播放| 精品夜恋影院亚洲欧洲| 国产一区二区三区精美视频| 本道久久综合无码中文字幕| 国产视色精品亚洲一区二区 |