nginx+docker+nfs部署

云计算 一.体系架构

在Keepalived + Nginx高可用负载均衡架构中,keepalived负责实现High-availability (HA) 功能控制前端机VIP(虚拟网络地址),当有设备发生故障时,热备服务器可以瞬间将VIP自动切换过来,实际运行中体验只有2秒钟切换时间,dns服务可以负责前端VIP的负载均衡。
nginx负责控制后端web服务器的负载均衡,将客户端的请求按照一定的算法转发给后端Real Server处理,而Real Server将响应直接返回给客户端。
nfs服务器做实时备份,给web服务器提供web界面。

太平网站建设公司创新互联公司,太平网站设计制作,有大型网站制作公司丰富经验。已为太平1000多家提供企业网站建设服务。企业网站搭建\成都外贸网站制作要多少钱,请找那个售后服务好的太平做网站的公司定做!二.简单原理

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,做到实时备份。

新闻名称:nginx+docker+nfs部署
文章出自:https://www.cdcxhl.com/article26/cpsdjg.html

成都网站建设公司_创新互联,为您提供搜索引擎优化营销型网站建设手机网站建设移动网站建设建站公司微信公众号

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

网站优化排名