温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
  • 忘记密码?
登录注册×
获取短信验证码
其他方式登录
点击 登录注册 即表示同意 《亿速云用户服务条款》
  • 服务器
  • 数据库
  • 开发技术
  • 网络安全
  • 互联网科技
登 录 注册有礼
最新更新 网站标签 地图导航
产品
  • 首页 > 
  • 教程 > 
  • 服务器 > 
  • 建站服务器 > 
  • Centos 7部署docker+nginx+keepalived实现高可用web集群

Centos 7部署docker+nginx+keepalived实现高可用web集群

发布时间:2020-07-31 08:27:44 来源:网络 阅读:59127 作者:xuad88 栏目: 建站服务器

一.体系架构

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

二.简单原理

NGINX_MASTER、NGINX_BACKUP两台服务器均通过keepalived软件把ens32网卡绑上一个虚拟IP(VIP)地址192.168.2.242,此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.2.242重新绑定给NGINX_MASTER的ens32网卡。
使用此方案的优越性
1.实现了可弹性化的架构,在压力增大的时候可以临时添加web服务器添加到这个架构里面去;
2.upstream具有负载均衡能力,可以自动判断后端的机器,并且自动踢出不能正常提供服务的机器;
3.相对于lvs而言,正则分发和重定向更为灵活。而Keepalvied可保证单个nginx负载均衡器的有效性,避免单点故障;
4.用nginx做负载均衡,无需对后端的机器做任何改动。
5.nginx部署在docker容器里,即大量地节约开发、测试、部署的时间,又可以在出现故障时通过镜像快速恢复业务。

三、系统环境

两台负载机器安装:centos7.5+docker+nginx+keepalived,分别命名为:NGINX_MASTER,NGINX_BACKUP。
后端web服务器,可以是提供web服务的任何架构,分别命名为:WEB_1,WEB_2。
后端数据库机器可任意架构,只要能提供数据库服务即可。

服务器 操作系统 IP地址 安装软件
NGINX_MASTER Centos 7.5 64位 192.168.2.228 docker+nginx+keepalived
NGINX_BACKUP Centos 7.5 64位 192.168.2.229 docker+nginx+keepalived
WEB_1 Centos 7.5 64位 192.168.2.226 docker+apache+php
WEB_2 Centos 7.5 64位 192.168.2.227 docker+apache+php
数据库集群 Centos 7.5 64位 mysql集群

四、web服务器部署

web服务器我这里用的是LAMP架构,具体的安装部署请参考我的另一篇博文《Centos 7使用docker部署LAMP搭建wordpress博客系统》,https://blog.51cto.com/andyxu/2177116。

五、安装配置nginx

分别在NGINX_MASTER、NGINX_BACKUP两台服务器上操作
1、部署docker环境
(1)安装docker
注:安装的是docker社区版本

yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast
yum -y install docker-ce

(2)修改配置文件,添加私有仓库地址和阿里云镜像地址,并指定docker数据存储目录

mkdir -p /data/docker
mkdir -p /etc/docker
vim /etc/docker/daemon.json
{
  "registry-mirrors": ["https://registry.docker-cn.com"], "graph": "/data/docker",
  "insecure-registries": ["192.168.2.225:5000"]
}

(3)启动docker,并加入开机启动

systemctl start docker
systemctl enable docker

2、配置nginx容器
(1)下载nginx镜像
docker pull nginx
(2)复制nginx主配置文件到本地

mkdir -p /data/docker/nginx/conf
docker run --name tmp-nginx-container -d nginx:latest
docker cp tmp-nginx-container:/etc/nginx/nginx.conf /data/docker/nginx/conf/
docker rm -f tmp-nginx-container

(4)创建运行nginx镜像的脚本
vim docker_nginx.sh

#!/bin/bash
docker run --name nginx --restart=always -p 80:80 \
    -v /data/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf:ro \
    -v /data/docker/nginx/conf/conf.d:/etc/nginx/conf.d \
    -v /data/docker/nginx/html:/usr/share/nginx/html \
    -v /data/docker/nginx/logs:/var/log/nginx \
    -d nginx:latest

注:--restart=always是重启策略,当docker服务重启后,容器也会自动启动
(5)启动nginx容器
sh docker_nginx.sh
(6)修改nginx主配置文件
vim /data/docker/nginx/conf/nginx.conf

user  nginx;
worker_processes  4;   #工作进程数,为CPU的核心数或者两倍

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
    use epoll;   #Linux最常用支持大并发的事件触发机制
    worker_connections  65535;
}

http {
    include       /etc/nginx/mime.types;   #设定mime类型,类型由mime.type文件定义
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  120;

    #gzip  on;
    limit_conn_zone $binary_remote_addr zone=perip:10m;   #添加limit_zone,限制同一IP并发数
    include /etc/nginx/conf.d/*.conf;   #包含nginx虚拟主机配置文件目录
}

(7)创建upstream配置文件
vim /data/docker/nginx/conf/conf.d/myhost.conf

upstream xuad {
  ip_hash;  #会话保持
  server 192.168.2.226  max_fails=1 fail_timeout=60s;
  server 192.168.2.227  max_fails=1 fail_timeout=60s;
}

(8)创建虚拟主机配置文件
vim /data/docker/nginx/conf/conf.d/xuad.conf

server {
        listen       80; 
        server_name  localhost; 
        #charset GB2312; 

        location / 
        { 
              proxy_redirect off; 
              proxy_set_header        Host $host; 
              proxy_set_header        X-Real-IP $remote_addr;
              proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for; 
              proxy_pass http://xuad;
        } 

# 查看nginx的并发连接数配置
        location /NginxStatus
        {
             stub_status             on;
             access_log              off;
             auth_basic              "NginxStatus";
        }

        access_log  off;
        error_page 404  /404.html;
        error_page   500 502 503 504 /404.html;
        location = /404.html {
            root   html;
        }
        limit_conn perip 200;   #同一ip并发数为200,超过会返回503
}

(9)重启nginx容器
docker restart nginx

六、安装配置keepalived

分别在NGINX_MASTER、NGINX_BACKUP两台服务器上操作
1、下载并安装keepalived
注:keepalived安装在实体机上

yum install wget make gcc gcc-c++ openssl-devel
wget http://www.keepalived.org/software/keepalived-2.0.7.tar.gz
tar zxvf keepalived-2.0.7.tar.gz
cd keepalived-2.0.7
./configure --prefix=/data/keepalived

如果报以下警告:
*** WARNING - this build will not support IPVS with IPv6. Please install libnl/libnl-3 dev libraries to support IPv6 with IPVS.

不用担心,我们只需要用到VRRP功能,不需要用IPVS功能,所以请确保以下三项是yes就行了。
Use VRRP Framework : Yes
Use VRRP VMAC : Yes
Use VRRP authentication : Yes

make
make install

2、将keepalived 以服务方式启动

mkdir /etc/keepalived
cp /data/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
systemctl enable keepalived

3、修改keepalived配置文件
vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {
   notification_email {
     xuad@xuad.com
   }
   notification_email_from root@xuad.com
   smtp_server mail.xuad.com
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_script chk_nginx {
    script "/etc/keepalived/nginx_pid.sh"   # 检查nginx状态的脚本
    interval 2
    weight 3
}

vrrp_instance VI_1 {
    state MASTER     #备份服务器上将MASTER改为BACKUP
    interface ens32
    virtual_router_id 51
    priority 100       #备份服务上将100改为小于100,可配置成90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.2.242    #有多个vip可在下面继续增加
    }
    track_script {
        chk_nginx
    }
}

4、添加检查nginx状态的脚本
vim /etc/keepalived/nginx_pid.sh

#!/bin/bash
#version 0.0.1
#
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ];then
     systemctl restart docker
      sleep 3
            if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
                  systemctl stop keepalived
fi 
fi

脚本说明:当nginx进程不存在时,会自动重启docker服务,docker服务启动时会自动启动nginx容器;再次检查nginx进程,如果不存在,就停止keepalived服务,然后NGINX_BACKUP主机会自动接替NGINX_MASTER的工作。
chmod +x /etc/keepalived/nginx_pid.sh
5、配置firewalld防火墙允许vrrp协议
VRRP(Virtual Router Redundancy Protocol,虚拟路由器冗余协议)

firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.2.229" protocol value="vrrp" accept"
firewall-cmd --reload

如果是backup服务器,source address改成master服务器的IP
6、启动keepalived
systemctl start keepalived

七、测试

1、当NGINX_MASTER、NGINX_BACKUP服务器nginx均正常工作时
在NGINX_MASTER上:
Centos 7部署docker+nginx+keepalived实现高可用web集群
在NGINX_BACKUP上:
Centos 7部署docker+nginx+keepalived实现高可用web集群
master服务器ens32网卡正常绑定VIP,而backup却没有绑定,通过浏览器可正常访问网站。
2、关闭NGINX_MASTER的nginx容器
Centos 7部署docker+nginx+keepalived实现高可用web集群
当nginx容器停止后,马上就又启起来了,nginx启动脚本没问题
3、关闭NGINX_MASTER的keepalived服务
在NGINX_MASTER上:
Centos 7部署docker+nginx+keepalived实现高可用web集群
在NGINX_BACKUP上:
Centos 7部署docker+nginx+keepalived实现高可用web集群
NGINX_BACKUP的ens32网卡已瞬间绑定VIP,通过浏览器访问网站正常。
4、将NGINX_MASTER的keepalived服务启动
在NGINX_MASTER上:
Centos 7部署docker+nginx+keepalived实现高可用web集群
在NGINX_BACKUP上:
Centos 7部署docker+nginx+keepalived实现高可用web集群
NGINX_MASTER的ens32网卡重新绑定VIP,通过浏览器访问网站正常。
5、关闭WEB_1服务器,通过浏览器访问网站正常。

附1:配置时间同步

1、在NGINX_MASTER和NGINX_BACKUP上安装ntp
yum -y install ntp
2、在NGINX_MASTER上修改ntp配置文件
添加以下两行

server 127.127.1.0 iburst  local clock   #添加使用本地时间
restrict 192.168.2.0 mask 255.255.255.0 nomodify   #允许更新的IP地址段

3、在NGINX_MASTER上启动ntp服务,并加入开机启动

systemctl start ntpd
systemctl enable ntpd

4、在NGINX_MASTER上添加防火墙策略
只允许192.168.2.229访问ntp服务

firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.2.229" port protocol="udp" port="123" accept"
firewall-cmd --reload

5、在NGINX_BACKUP上同步NGINX_MASTER的时间
ntpdate 192.168.2.228
Centos 7部署docker+nginx+keepalived实现高可用web集群
6、在NGINX_BACKUP上设置计划任务,每天凌晨5点01分同步时间

crontab -e
1 5 * * * /usr/sbin/ntpdate 192.168.2.228 >> /var/log/upClock.log
向AI问一下细节
推荐阅读:
  1. Centos7中部署kubernetes的教程
  2. Centos 7.6部署elasticsearch集群

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

docker keepalived nginx
  • 上一篇新闻:
    vsftp服务器搭建
  • 下一篇新闻:
    目标端口扫描方法总结

猜你喜欢

  • SignalR怎么实现库存更新与购物车同步
  • Unity开发环境如何搭建
  • Unity脚本怎么编写与调试
  • Unity碰撞检测的方法是什么
  • Unity怎么创建交互式的用户界面
  • Unity中的角色动画与状态机怎么实现
  • Unity如何实现复杂的视觉效果
  • Unity的资源管理方法是什么
  • Unity场景管理的方法是什么
  • Unity的图形管线与材质系统怎么用
最新资讯
  • 如何利用Alamofire监控上传或下载任务的带宽使用情况
  • 讨论Alamofire中如何优化大量数据传输的性能
  • Alamofire如何支持下载任务在应用退出后继续进行
  • 在使用Alamofire时如何处理从服务器接收到的重定向请求
  • 如何在Alamofire中设置全局请求头例如为所有请求添加一个API密钥
  • 描述如何使用Alamofire实现数据流的下载和上传
  • Alamofire和其他Swift HTTP网络库相比优势在哪里
  • 在Alamofire中EventMonitor是做什么用的如何使用
  • 如何使用Alamofire实现反序列化自定义对象
  • 使用Alamofire时如何处理长轮询请求
相关推荐
  • 如何在CentOS7.3下二进制安装Kubernetes 1.16.0高可用集群
  • Centos7 RabbitMQ消息队列集群
  • CentOS 8.0有什么新特性
  • CentOS 8正式发布的示例分析
  • 如何在Centos7.6上部署k8s v1.16
  • Linux系统下CentOS 7怎么搭建集群
  • 怎么在CentOS 7下搭建高可用集群
  • Centos7中如何实现pacemaker高可用安装配置
  • Centos7中怎么安装Mesos
  • CentOS7怎么搭建高可用集群

相关标签

docker安装 dockerfile docker- docker-ce docker监控 2-docker docker-compose docker 容器 docker私有仓库部署 docker compose docker镜像 docker仓库 docker run docker命令 dockertoolbox dockerswarm docker容器服务 DockerHub docker服务 Docker CE
AI

PHP网站源码武汉网站优化推广哪家好杭州设计网站报价镇江网站搭建价格周口网站优化排名推荐广安SEO按天计费公司巴中关键词按天扣费推荐防城港网页制作价格阳江阿里店铺托管报价焦作seo网站优化价格咸宁网站优化按天扣费哪家好唐山企业网站制作推荐衡阳网站制作四平网站设计价格郴州百度关键词包年推广公司白城关键词排名包年推广推荐深圳百度标王价格长葛设计公司网站公司镇江SEO按天收费公司大庆SEO按天收费报价漯河网站改版多少钱永新优化多少钱随州建网站公司咸阳网站推广哪家好潍坊模板制作推荐鄂州百搜标王哪家好商丘百度竞价包年推广公司罗湖关键词按天计费报价汕头建设网站公司仙桃企业网站制作多少钱铜陵外贸网站制作报价歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

PHP网站源码 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化