博客
关于我
Nginx高可用集群构建(Keepalived+Haproxy+Nginx)
阅读量:797 次
发布时间:2023-02-15

本文共 7813 字,大约阅读时间需要 26 分钟。

Nginx高可用集群构建(Keepalived+Haproxy+Nginx)

1. 组件及实现功能

Keepalived、Haproxy 和 Nginx 分别承担了不同的角色,形成了一套高可用架构。具体实现如下:

  • Keepalived:通过双主模型(Master/Backup)实现服务的高可用性,确保任意一主节点故障时,另一主节点能够自动接管服务。
  • Haproxy:作为反向代理服务器,负责负载均衡和读写分离,有效提升应用的性能和并发处理能力。
  • Nginx:专注于处理 HTTP 请求,实现高性能的网络应用服务器功能。

2. 架构设计图

以下为系统架构的设计图(图示内容已移除,仅保留文字描述):

  • 服务器架构:采用双节点部署,节点间通过集群方式实现服务冗余。
  • 反向代理层:由 Haproxy 统管,负责请求分发和负载均衡。
  • 应用服务器:通过 Nginx 提供高性能的 HTTP 处理能力。

3. Keepalived 部署

配置步骤

  • 安装 Keepalived:在两个节点上执行以下命令安装:
  • yum -y install keepalived
    1. 配置 Keepalived:分别在 172.16.25.109172.16.25.110 上修改 keepalived.conf 文件,配置如下:
    2. vim /etc/keepalived/keepalived.conf

      配置示例

      global_defs {    notification_email {        root@localhost    }    notification_email_from admin@lnmmp.com    smtp_connect_timeout 3    smtp_server 127.0.0.1    router_id LVS_DEVEL}vrrp_script chk_maintaince_down {    script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"    interval 1    weight 2}vrrp_script chk_haproxy {    script "killall -0 haproxy"    interval 1    weight 2}vrrp_instance VI_1 {    interface eth0    state MASTER    priority 100    virtual_router_id 125    garp_master_delay 1    authentication {        auth_type PASS        auth_pass 1e3459f77aba4ded    }    track_interface {        eth0    }    virtual_ipaddress {        172.16.25.10/16 dev eth0 label eth0:0    }    track_script {        chk_haproxy    }    notify_master "/etc/keepalived/notify.sh master 172.16.25.10"    notify_backup "/etc/keepalived/notify.sh backup 172.16.25.10"    notify_fault "/etc/keepalived/notify.sh fault 172.16.25.10"}vrrp_instance VI_2 {    interface eth0    state BACKUP    priority 99    virtual_router_id 126    garp_master_delay 1    authentication {        auth_type PASS        auth_pass 7615c4b7f518cede    }    track_interface {        eth0    }    virtual_ipaddress {        172.16.25.11/16 dev eth0 label eth0:1    }    track_script {        chk_haproxychk_maintaince_down    }    notify_master "/etc/keepalived/notify.sh master 172.16.25.11"    notify_backup "/etc/keepalived/notify.sh backup 172.16.25.11"    notify_fault "/etc/keepalived/notify.sh fault 172.16.25.11"}
      1. 创建通知脚本:在 /etc/keepalived/notify.sh 上执行以下命令创建通知脚本:
      2. #!/bin/bash# 作者:Jason.Yu# contact='root@localhost'notify() {    mailsubject="`hostname`到被$1:$2故障"    mailbody="`date '+%F %H:%M:%S'`: vrrp转换,`hostname`变为$1"    echo $mailbody | mail -s "$mailsubject" $contact}case "$1" in    master)        notify master $2        /etc/rc.d/init.d/haproxy restart        exit 0    ;;    backup)        notify backup $2        exit 0    ;;    fault)        notify fault $2        exit 0    ;;    *)        echo '使用:`basename $0` {master|backup|fault}'        exit 1    ;;esac
        1. 启动服务:在两个节点上执行以下命令启动 Keepalived 服务:
        2. service keepalived start

          4. Haproxy 部署

          配置步骤

        3. 安装 Haproxy:在两个节点上执行以下命令安装:
        4. yum -y install haproxy
          1. 配置 Haproxy:分别在 172.16.25.109172.16.25.110 上修改 haproxy.cfg 文件,配置如下:
          2. vim /etc/haproxy/haproxy.cfg

            配置示例

            global    log 127.0.0.1 local2    chroot /var/lib/haproxy    pidfile /var/run/haproxy.pid    maxconn 4000    user haproxy    group haproxy    daemondefaults    mode http    log global    option httplog    option dontlognull    option http-server-close    option forwardfor except 127.0.0.0/8    option redispatch    retries 3    timeout http-request 10s    timeout queue 1m    timeout connect 10s    timeout client 1m    timeout server 1m    timeout http-keep-alive 10s    timeout check 10s    maxconn 30000listen stats    mode http    bind 0.0.0.0:1080    stats enable    stats hide-version    stats uri /haproxyadmin?stats    stats realm Haproxy Statistics    stats auth admin:admin    stats admin if TRUEfrontend http-in    bind *    mode http    log global    option httpclose    option logasap    option dontlognull    capture request header Host len 20    capture request header Referer len 60    acl url_static path_beg -i /static /p_w_picpaths /javascript /stylesheets    acl url_static path_end -i .jpg .jpeg .gif .png .css .js .html    use_backend static_servers if url_static    default_backend dynamic_serversbackend static_servers    balance roundrobin    server imgsrv1 192.168.0.25:80 check maxconn 6000backend dynamic_servers    balance source    server websrv1 192.168.0.35:80 check maxconn 1000
            1. 启动服务:在两个节点上执行以下命令启动 Haproxy 服务:
            2. service haproxy start

              5. Nginx 部署

              安装与配置

            3. 安装依赖项:安装必要的软件包:
            4. yum -y groupinstall "Development tools"yum -y groupinstall "Server Platform Development"yum install gcc openssl-devel pcre-devel zlib-devel
              1. 安装 Nginx:解压并配置 Nginx:
              2. tar xf nginx-1.4.7.tar.gzcd nginx-1.4.7mkdir -pv /var/tmp/nginx./configure \    --prefix=/usr \    --sbin-path=/usr/sbin/nginx \    --conf-path=/etc/nginx/nginx.conf \    --error-log-path=/var/log/nginx/error.log \    --http-log-path=/var/log/nginx/access.log \    --pid-path=/var/run/nginx/nginx.pid \    --lock-path=/var/lock/nginx.lock \    --user=nginx \    --group=nginx \    --with-http_ssl_module \    --with-http_flv_module \    --with-http_stub_status_module \    --with-http_gzip_static_module \    --http-client-body-temp-path=/var/tmp/nginx/client/ \    --http-proxy-temp-path=/var/tmp/nginx/proxy/ \    --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \    --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \    --http-scgi-temp-path=/var/tmp/nginx/scgi \    --with-pcremakemake install
                1. 配置服务脚本:创建 Nginx 的服务脚本:
                2. vi /etc/init.d/nginx

                  服务脚本内容

                  #!/bin/sh## nginx - 这个脚本用于启动和停止 Nginx 服务## chkconfig:  -  85 15## 描述: Nginx 是一个 HTTP(S) 服务器,HTTP(S) 反向代理和 IMAP/POP3 代理服务器## 进程名称: nginx## 配置文件: /etc/nginx/nginx.conf## pidfile: /var/run/nginx.pid## 来源函数库: .. /etc/rc.d/init.d/functions## 来源网络配置: .. /etc/sysconfig/network[ "$NETWORKING" = "no" ] && exit 0nginx="/usr/sbin/nginx"prog=$(basename $nginx)NGINX_CONF_FILE="/etc/nginx/nginx.conf"[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginxlockfile=/var/lock/subsys/nginxmake_dirs() {    user=`nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -`    options=`$nginx -V 2>&1 | grep 'configure arguments:'`    for opt in $options; do        if [[ `echo $opt | grep '.*-temp-path'` ]]; then            value=`echo $opt | cut -d "=" -f 2`            if [[ ! -d "$value" ]]; then                mkdir -p $value && chown -R $user $value            fi        fi    done}start() {    [ -x $nginx ] || exit 5    [ -f $NGINX_CONF_FILE ] || exit 6    make_dirs    echo -n $"Starting $prog: "    daemon $nginx -c $NGINX_CONF_FILE    retval=$?    echo    [ $retval -eq 0 ] && touch $lockfile    return $retval}stop() {    echo -n $"Stopping $prog: "    killproc $prog -QUIT    retval=$?    echo    [ $retval -eq 0 ] && rm -f $lockfile    return $retval}restart() {    configtest || return $?    stop    sleep 1    start}reload() {    configtest || return $?    echo -n $"Reloading $prog: "    killproc $nginx -HUP    RETVAL=$?    echo}force_reload() {    restart}configtest() {    $nginx -t -c $NGINX_CONF_FILE}rh_status() {    status $prog}rh_status_q() {    rh_status > /dev/null 2>&1}case "$1" in    start)        rh_status_q && exit 0        $1    ;;    stop)        rh_status_q || exit 0        $1    ;;    restart|configtest)        $1    ;;    reload)        rh_status_q || exit 7        $1    ;;    force-reload)        force_reload    ;;    status)        rh_status    ;;    condrestart|try-restart)        rh_status_q || exit 0    ;;    *)        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"        exit 2esacchmod +x /etc/init.d/nginx
                  1. 启动服务:执行以下命令启动 Nginx 服务,并验证配置:
                  2. service nginx configtestservice nginx startps -ef | grep nginx# 检查 worker进程数是否与 worker_processes值一致ss -antupl | grep 80

                    6. 访问验证

                    Haproxy 统计页面测试

                    通过 Haproxy 的统计页面验证集群状态,测试 URL 访问是否正常,确保服务负载均衡。

                    动静分离测试

                    验证 Nginx 对动态和静态资源的处理能力,确保动态请求和静态文件请求能够正确分离处理。

                    高可用测试

                    验证 Keepalived 和 Haproxy 的高可用机制,确保在节点故障时,服务能够自动切换到备用节点,保证系统的稳定性和可用性。

                    通过以上步骤,可以完成 Nginx 高可用集群的部署和配置,确保系统在高负载和故障情况下的稳定性和可靠性。

    转载地址:http://byjfk.baihongyu.com/

    你可能感兴趣的文章
    NEW DATE()之参数传递
    查看>>
    New Journey--工作五年所思所感小记
    查看>>
    new Queue(REGISTER_DELAY_QUEUE, true, false, false, params)
    查看>>
    New Relic——手机应用app开发达人的福利立即就到啦!
    查看>>
    new work
    查看>>
    new 一个button 然后dispose,最后这个button是null吗???
    查看>>
    new一个对象的过程
    查看>>
    new和delete用法小结
    查看>>
    new对象时,JVM内部究竟藏了什么小秘密?
    查看>>
    new操作符的实现原理
    查看>>
    Next.js React Server Components 教程
    查看>>
    NextGen Mirth Connect XStream反序列化远程代码执行漏洞(CVE-2023-43208)
    查看>>
    next项目部署到服务器pm2进程守护
    查看>>
    nexus 介绍
    查看>>
    nexus上传jar
    查看>>
    Nexus指南中的更新强调集成和透明度的重要性
    查看>>
    Nexus指南已经发布
    查看>>
    Nexus(1):Nexus的安装与配置
    查看>>
    NFC技术:概述
    查看>>
    NFinal学习笔记 02—NFinalBuild
    查看>>