美文网首页
【phoenix-部署】Docker+Nginx+Keepali

【phoenix-部署】Docker+Nginx+Keepali

作者: 粮忆雨 | 来源:发表于2019-03-12 12:08 被阅读0次

    一、系统环境

    参考hadoop集群搭建中的“一、安装环境准备”。

    架构设计:
    QueryServer是一个单独部署的HTTP服务,接收轻客户端的RPC请求,并将SQL转发给Phoenix Core进行解析优化执行。与重客户端相比,轻客户端的的读写性能略有降低。(轻重客户端对比:https://yq.aliyun.com/articles/688631

    phoenix高可用负载均衡架构

    二、Docker+Nginx+Keepalived安装配置

    参考原文:https://blog.51cto.com/andyxu/2286045

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。通过Docker容器实现资源隔离,方便管理维护。

    Nginx 是一个很强大的高性能Web和反向代理服务,也是一个IMAP/POP3/SMTP服务。通过Nginx做负载均衡。

    Keepalived 的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。通过Keepalived实现高可用。

    2.1 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 缓存
      yum makecache fast
    • 安装社区版docker
      yum -y install docker-ce
    • 添加修改配置文件,添加私有仓库地址和阿里云镜像地址(或者网易的镜像地址:http://hub-mirror.c.163.com),并指定docker数据存储目录
      mkdir -p /data/docker
      mkdir -p /etc/docker
      vi /etc/docker/daemon.json
    {
      "registry-mirrors": ["https://registry.docker-cn.com"],
      "graph": "/data/docker",
      "insecure-registries": ["192.168.163.56:5000"]
    }
    
    • 启动docker,并加入开机启动
      systemctl start docker
      systemctl enable docker

    2.2 配置nginx容器

    • 下载nginx镜像
      docker pull nginx

    • 复制nginx主配置文件到本地(创建临时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

    • 编辑创建nginx容器脚本
      vi /data/docker/docker_nginx.sh

    #!/bin/bash
    docker run --name nginx --restart=always -p 8180: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
    

    说明: -v 挂载的宿主机本地目录/文件路径:容器目标目录/文件路径 (目的方便维护nginx配置)

    • 授予执行权限并执行该脚本
      chmod 755 /data/docker/docker_nginx.sh
      sh /data/docker/docker_nginx.sh

    • 修改nginx主配置文件
      vi /data/docker/nginx/conf/nginx.conf

    user  nginx;
    worker_processes  1;   #通常设为CPU的核心数
    
    error_log  /var/log/nginx/error.log warn; #错误日志目录及日志级别:debug / info / notice / warn / error / crit
    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  65;
    
        #gzip  on;
        limit_conn_zone $binary_remote_addr zone=perip:10m;   #添加limit_zone,限制同一IP并发数
        include /etc/nginx/conf.d/*.conf;   #包含nginx虚拟主机配置文件目录
    }
    

    upstream 模块负载均衡配置,通过默认的轮询调度方式来分发请求到后端服务器。
    vi /data/docker/nginx/conf/conf.d/upstream.conf

    upstream  phoenix_server {
        ip_hash; # 指定请求调度算法,默认是weight权重轮询调度
        server   192.168.163.54:8765 max_fails=3 fail_timeout=60s;
        server   192.168.163.55:8765 max_fails=3 fail_timeout=60s;
        server   192.168.163.56:8765 max_fails=3 fail_timeout=60s;
    }
    

    说明:8765 端口是phoenix queryserver的默认端口。phoenix轻客户端的连接方式"./bin/sqlline-thin.py http://host:8765"。在使用轻客户端时需启动queryserver服务:"/opt/apps/phoenix/bin/queryserver.py start"

    server模块
    vi /data/docker/nginx/conf/conf.d/server.conf

    server {
        listen 80;
        server_name localhost; #ip地址或者域名,多个配置之间用空格分隔
    
        location / {
            root /usr/share/nginx/html;
            index index.html;
        }
    
        location /phoenix {
             proxy_pass http://phoenix_server; #通过反向代理代理服务器访问模式,通过proxy_set配置让客户端访问透明化
             access_log /var/log/nginx/phoenix_server.log;
             error_log /var/log/nginx/phoenix_server.log;  
        }
        
        limit_conn perip 200;   #同一ip并发数为200,超过会返回503
    }
    
    

    说明:使用include 将server模块和upstream 模块分离,完整的结构如下:

    ....                                # 全局配置
    events {                            # nginx工作模式配置
    }
    http {                              # http设置
        server {                        # 服务器主机配置
            location {                  # 路由配置
            }
            location path {
            }
            location otherpath {
            }
        }
        upstream name {                 # 负载均衡配置
        }
    }
    
    • 编写index.html
      vi /data/docker/nginx/html/index.html
    <!DOCTYPE html>
    <html>
    
    <head>
    <meta charset="UTF-8">
    <title>Nginx</title>
    </head>
    <body>
       <h1> Hello,nginx in hdc-data6 server.</h1>
    </body>
    
    • 重启nginx容器
      docker restart nginx
    • 验证


    python测试

    2.3 Keepalived安装配置高可用

    首先,我们按照以上步骤分别在nginx集群服务器上安装配置好nginx。

    • 将keepalived 以服务方式启动
      mkdir /etc/keepalived
      cp /data/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
      systemctl enable keepalived

    • 修改/etc/keepalived/keepalived.conf配置文件

    ! Configuration File for keepalived
    
    global_defs {
       notification_email {
         xxxx@163.com   #接受邮件地址
       }
       notification_email_from xxxx@qq.com  #发送邮件地址
       smtp_server smtp.qq.com #发送邮件服务器,采用第三方
       smtp_connect_timeout 30
       router_id hdc-data6 #标识本节点的字条串,通常为 hostname
       vrrp_skip_check_adv_addr
       vrrp_strict
       vrrp_garp_interval 0
       vrrp_gna_interval 0
    }
    
    #添加nginx检查脚本配置
    vrrp_script chk_nginx {
        script "/etc/keepalived/nginx_check.sh"
        interval 2
        weight 3
    }
    
    vrrp_instance VI_1 {
        state MASTER  #备份服务器上将MASTER改为BACKUP
        interface ens33 #centos6 eth0
        virtual_router_id 51
        priority 100  #备份服务上将100改为小于100,可配置成90
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            192.168.163.250 #有多个vip可在下面继续增加
        }
        #添加nginx检查脚本配置
        track_script {
            chk_nginx
        }
    }
    ......
    
    • 添加检查nginx状态的脚本
    #!/bin/bash
    A=`ps -C nginx –no-header |wc -l`
    if [ $A -eq 0 ];then
        docker restart nginx
        sleep 3
        if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
            sudo systemctl stop keepalived
        fi
    fi
    

    授权
    chmod +x /etc/keepalived/nginx_check.sh

    • 若开启防火墙,配置firewalld防火墙允许vrrp协议
      如果是backup服务器,source address改成master服务器的IP
      firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.163.55" protocol value="vrrp" accept"
      firewall-cmd --reload

    • 重启keepalived
      systemctl start keepalived

    • 测试



      停掉hdc-data6 docker: systemctl stop docker



      hdc-data6再次启动docker时,还需同时 启动keepalived(手动)

    相关文章

      网友评论

          本文标题:【phoenix-部署】Docker+Nginx+Keepali

          本文链接:https://www.haomeiwen.com/subject/xxehpqtx.html