
Nginx高可用集群构建(Keepalived+Haproxy+Nginx)
安装 Keepalived:在两个节点上执行以下命令安装:
发布日期:2025-04-20 23:40:23
浏览次数:8
分类:精选文章
本文共 8084 字,大约阅读时间需要 26 分钟。
Nginx高可用集群构建(Keepalived+Haproxy+Nginx)
1. 组件及实现功能
Keepalived、Haproxy 和 Nginx 分别承担了不同的角色,形成了一套高可用架构。具体实现如下:
- Keepalived:通过双主模型(Master/Backup)实现服务的高可用性,确保任意一主节点故障时,另一主节点能够自动接管服务。
- Haproxy:作为反向代理服务器,负责负载均衡和读写分离,有效提升应用的性能和并发处理能力。
- Nginx:专注于处理 HTTP 请求,实现高性能的网络应用服务器功能。
2. 架构设计图
以下为系统架构的设计图(图示内容已移除,仅保留文字描述):
- 服务器架构:采用双节点部署,节点间通过集群方式实现服务冗余。
- 反向代理层:由 Haproxy 统管,负责请求分发和负载均衡。
- 应用服务器:通过 Nginx 提供高性能的 HTTP 处理能力。
3. Keepalived 部署
配置步骤
yum -y install keepalived
- 配置 Keepalived:分别在
172.16.25.109
和172.16.25.110
上修改keepalived.conf
文件,配置如下: - 创建通知脚本:在
/etc/keepalived/notify.sh
上执行以下命令创建通知脚本: - 启动服务:在两个节点上执行以下命令启动 Keepalived 服务:
- 安装 Haproxy:在两个节点上执行以下命令安装:
- 配置 Haproxy:分别在
172.16.25.109
和172.16.25.110
上修改haproxy.cfg
文件,配置如下: - 启动服务:在两个节点上执行以下命令启动 Haproxy 服务:
- 安装依赖项:安装必要的软件包:
- 安装 Nginx:解压并配置 Nginx:
- 配置服务脚本:创建 Nginx 的服务脚本:
- 启动服务:执行以下命令启动 Nginx 服务,并验证配置:
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"}
#!/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
service keepalived start
4. Haproxy 部署
配置步骤
yum -y install haproxy
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
service haproxy start
5. Nginx 部署
安装与配置
yum -y groupinstall "Development tools"yum -y groupinstall "Server Platform Development"yum install gcc openssl-devel pcre-devel zlib-devel
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
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
service nginx configtestservice nginx startps -ef | grep nginx# 检查 worker进程数是否与 worker_processes值一致ss -antupl | grep 80
6. 访问验证
Haproxy 统计页面测试
通过 Haproxy 的统计页面验证集群状态,测试 URL 访问是否正常,确保服务负载均衡。
动静分离测试
验证 Nginx 对动态和静态资源的处理能力,确保动态请求和静态文件请求能够正确分离处理。
高可用测试
验证 Keepalived 和 Haproxy 的高可用机制,确保在节点故障时,服务能够自动切换到备用节点,保证系统的稳定性和可用性。
通过以上步骤,可以完成 Nginx 高可用集群的部署和配置,确保系统在高负载和故障情况下的稳定性和可靠性。
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2025年04月16日 05时36分12秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!