gpt4 book ai didi

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

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章Nginx实现高可用集群构建(Keepalived+Haproxy+Nginx)由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

1、组件及实现的功能 。

Keepalived:实现对Haproxy服务的高可用,并采用双主模型配置,

Haproxy:实现对Nginx的负载均衡和读写分离,

Nginx:实现对HTTP请求的高速处理,

2、架构设计图 。

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

3、Keepalived部署 。

在两个节点上都需要执行安装keepalived,命令如下:

$ yum -y install keepalived

 修改 172.16.25.109 节点上 keepalived.conf 文件配置,命令如下 。

$ vim /etc/keepalived/keepalived.conf

修改后的内容如下:

! Configuration File for keepalivedglobal_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"}

同理修改 172.16.25.110 节点上 keepalived.conf 配置,内容如下:

! Configuration File for keepalivedglobal_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 BACKUP    priority 99    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_haproxychk_maintaince_down    }    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 MASTER    priority 100    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_haproxy    }    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"}# vi /etc/keepalived/notify.sh#!/bin/bash# Author: Jason.Yu <admin@lnmmp.com># description: An example of notify script#contact="root@localhost"notify() {    mailsubject="`hostname` to be $1: $2 floating"    mailbody="`date "+%F %H:%M:%S"`: vrrp transition, `hostname` changed to be $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 # 在节点切换成backup状态时,无需刻意停止haproxy服务,防止chk_maintaince和chk_haproxy多次对haproxy服务操作;        exit 0    ;;    fault)        notify fault $2 # 同上        exit 0    ;;    *)        echo "Usage: `basename $0` {master|backup|fault}"        exit 1    ;;esac

在两个节点上执行 keepalived 启动命令,命令如下:

  $ service keepalived start

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

4、Haproxy部署 。

在两个节点上都需要执行安装 HAProxy,命令如下:

 $ yum -y install haproxy

修改 172.16.25.109 和 172.16.25.110 节点上 haproxy.cfg 文件配置(两节点配置文件内容一致),命令如下:

 $ 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    daemon # 以后台程序运行;defaults    mode                   http # 选择HTTP模式,即可进行7层过滤;    log                     global    option                  httplog # 可以得到更加丰富的日志输出;    option                  dontlognull    option http-server-close # server端可关闭HTTP连接的功能;    option forwardfor except 127.0.0.0/8 # 传递client端的IP地址给server端,并写入“X-Forward_for”首部中;    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 # 统计页面绑定1080端口;    stats enable # 开启统计页面功能;    stats hide-version # 隐藏Haproxy版本号;    stats uri     /haproxyadmin?stats # 自定义统计页面的访问uri;    stats realm   Haproxy Statistics # 统计页面密码验证时的提示信息;    stats auth    admin:admin # 为统计页面开启登录验证功能;    stats admin if TRUE # 若登录用户验证通过,则赋予管理功能;frontend http-in    bind *:80    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 # 符合ACL规则的,请求转入后端静态服务器    default_backend dynamic_servers # 默认请求转入后端动态服务器backend static_servers    balance roundrobin    server imgsrv1 192.168.0.25:80 check maxconn 6000 # 静态服务器,可配置多台,还可设置权重weight;backend dynamic_servers    balance source # 对于动态请求利用source调度算法,可一定程度上实现session保持;但最好利用cookie绑定的方式实现session保持    server websrv1 192.168.0.35:80 check maxconn 1000 # 动态服务器,可配置多台,还可设置权重weight;

两个节点执行启动服务,命令如下:

$ service haproxy start

5、Nginx部署 。

yum -y groupinstall “Development tools”yum -y groupinstall “Server Platform Development”yum install gcc openssl-devel pcre-devel zlib-develgroupadd -r nginxuseradd -r -g nginx -s /sbin/nologin -M nginxtar 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-pcremake && make install

配置服务脚本 。

vi /etc/init.d/nginx # 配置服务脚本#!/bin/sh## nginx - this script starts and stops the nginx daemon## chkconfig:   - 85 15# description:  Nginx is an HTTP(S) server, HTTP(S) reverse #               proxy and IMAP/POP3 proxy server# processname: nginx# config:      /etc/nginx/nginx.conf# config:      /etc/sysconfig/nginx# pidfile:     /var/run/nginx.pid# Source function library.. /etc/rc.d/init.d/functions# Source networking configuration.. /etc/sysconfig/network# Check that networking is up.[ "$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() {   # make required directories   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               # echo "creating" $value               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 # 复***务脚本执行权限vi /etc/nginx/nginx.conf # 编辑主配置文件worker_processes  2;error_log  /var/log/nginx/nginx.error.log;pid        /var/run/nginx.pid;events {    worker_connections  1024;}http {    include       mime.types;    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"";    sendfile        on;    keepalive_timeout  65;    server {        listen       80;        server_name  xxrenzhe.lnmmp.com;        access_log  /var/log/nginx/nginx.access.log  main;        location / {            root   /www/lnmmp.com;            index  index.php index.html index.htm;        }        error_page  404              /404.html;        error_page  500 502 503 504  /50x.html;        location = /50x.html {            root   /www/lnmmp.com;        }        location ~ .php$ {            root           /www/lnmmp.com;            fastcgi_pass   127.0.0.1:9000;            fastcgi_index  index.php;            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;            include        fastcgi_params;        }    }}vi /etc/nginx/fastcgi_params # 编辑fastcgi参数文件fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;fastcgi_param  SERVER_SOFTWARE    nginx;fastcgi_param  QUERY_STRING       $query_string;fastcgi_param  REQUEST_METHOD     $request_method;fastcgi_param  CONTENT_TYPE       $content_type;fastcgi_param  CONTENT_LENGTH     $content_length;fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;fastcgi_param  REQUEST_URI        $request_uri;fastcgi_param  DOCUMENT_URI       $document_uri;fastcgi_param  DOCUMENT_ROOT      $document_root;fastcgi_param  SERVER_PROTOCOL    $server_protocol;fastcgi_param  REMOTE_ADDR        $remote_addr;fastcgi_param  REMOTE_PORT        $remote_port;fastcgi_param  SERVER_ADDR        $server_addr;fastcgi_param  SERVER_PORT        $server_port;fastcgi_param  SERVER_NAME        $server_name;

启动服务 。

service nginx configtest # 服务启动前先验证配置文件是否正确service nginx startps -ef |grep nginx # 检查nginx进程,尤其是worker进程是否与worker_processes值一致ss -antupl |grep 80 # 检查服务端口是否启动

6、访问验证 。

Haproxy 统计页面测试 。

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

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

动静分离测试 。

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

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

高可用测试 。

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

到此 Nginx高可用集群构建(Keepalived+Haproxy+Nginx)介绍完成.

到此这篇关于Nginx实现高可用集群构建(Keepalived+Haproxy+Nginx)的文章就介绍到这了,更多相关Nginx 高可用集群内容请搜索我以前的文章或继续浏览下面的相关文章希望大家以后多多支持我! 。

原文链接:https://blog.csdn.net/qq_19734597/article/details/117220953 。

最后此篇关于Nginx实现高可用集群构建(Keepalived+Haproxy+Nginx)的文章就讲到这里了,如果你想了解更多关于Nginx实现高可用集群构建(Keepalived+Haproxy+Nginx)的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com