nginx+keepalived集群搭建-主备-程序员宅基地

技术标签: nginx  linux  

nginx集群

1. nginx部署

单机部署可参考:https://blog.csdn.net/ym5209999/article/details/119897237

2. keepalived安装

[root@nginx1 ~]# yum -y install keepalived

3. keepalived配置

3.1 安装完成后,默认配置文件位于:/etc/keepalived,默认配置如下:

keepalived.conf

! Configuration File for keepalived

global_defs {
   notification_email {
     [email protected]
     [email protected]
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.200.16
        192.168.200.17
        192.168.200.18
    }
}

virtual_server 192.168.200.100 443 {
    delay_loop 6
    lb_algo rr
    lb_kind NAT
    persistence_timeout 50
    protocol TCP

    real_server 192.168.201.100 443 {
        weight 1
        SSL_GET {
            url {
              path /
              digest ff20ad2481f97b1754ef3e12ecd3a9cc
            }
            url {
              path /mrtg/
              digest 9b3a0c85a887a256d6939da88aabd8cd
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

virtual_server 10.10.10.2 1358 {
    delay_loop 6
    lb_algo rr 
    lb_kind NAT
    persistence_timeout 50
    protocol TCP

    sorry_server 192.168.200.200 1358

    real_server 192.168.200.2 1358 {
        weight 1
        HTTP_GET {
            url { 
              path /testurl/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url { 
              path /testurl2/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url { 
              path /testurl3/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }

    real_server 192.168.200.3 1358 {
        weight 1
        HTTP_GET {
            url { 
              path /testurl/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334c
            }
            url { 
              path /testurl2/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334c
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

virtual_server 10.10.10.3 1358 {
    delay_loop 3
    lb_algo rr 
    lb_kind NAT
    persistence_timeout 50
    protocol TCP

    real_server 192.168.200.4 1358 {
        weight 1
        HTTP_GET {
            url { 
              path /testurl/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url { 
              path /testurl2/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url { 
              path /testurl3/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }

    real_server 192.168.200.5 1358 {
        weight 1
        HTTP_GET {
            url { 
              path /testurl/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url { 
              path /testurl2/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url { 
              path /testurl3/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

3.2 按实际情况修改keepalived.conf

! Configuration File for keepalived

global_defs {
	# 路由ID,当前主机标识,必须唯一
   router_id LVS_DEVEL_144
   script_user root
   enable_script_security
}

vrrp_instance VI_1 {
	# 状态,可配置内容为:MASTER/BACKUP
    state MASTER
	# 网卡名称
    interface ens192
	# 主备节点需保持一致
    virtual_router_id 51
	# 优先级,当主节点宕机后,优先级最高的成为主节点
    priority 100
	# 主备同步时间间隔 
    advert_int 1
	# 认证授权密码
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.2.198 # 虚拟IP
    }
}

! Configuration File for keepalived

global_defs {
	# 路由ID,当前主机标识,必须唯一
   router_id LVS_DEVEL_62
   script_user root
   enable_script_security
}

vrrp_instance VI_1 {
	# 状态,可配置内容为:MASTER/BACKUP
    state BACKUP
	# 网卡名称
    interface ens192
	# 主备节点需保持一致
    virtual_router_id 51
	# 优先级,当主节点宕机后,优先级最高的成为主节点
    priority 80
	# 主备同步时间间隔 
    advert_int 1
	# 认证授权密码
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.2.198 # 虚拟IP
    }
}

4. 启动验证

# 启动nginx
[root@nginx1 ~]# /apps/nginx/sbin/nginx –c /apps/nginx/conf/nginx.conf

# 启动keepalived
[root@nginx1 ~]# systemctl start keepalived

1)启动完成后,查看主节点IP地址,在ens192下生成虚拟IP后,即可访问:192.168.2.198查看效果(在配置文件中,主节点priority 值大于备节点,故会生成在主节点);
2)将主节点keepalived服务结束后,再次访问192.168.2.198,会自动切换到备节点

5. 优化

当nginx服务器挂掉之后,由于keepalived服务保持正常,故VIP依旧保留在进程异常的服务器上,导致前端无法自动切换,故需要对配置进行优化。
优化点:定期检测nginx进程活性,若nginx服务不存在,则重启nginx服务,若无法启动,则将keepalived进程结束,使之正常切换到正常的keepalived。
nginx活性检测脚本:
nginx_check.sh

#!/bin/bash
A=`ps -C nginx --no-header |wc -l`   #查看是否有进程,把值赋给变量A
if [ $A -eq 0 ];then    #如果没有进程值则为0
   /apps/nginx/sbin/nginx –c /apps/nginx/conf/nginx.conf  #nginx的启动路径
    sleep 5   #尝试启动nginx等待5秒
	B=`ps -C nginx --no-header |wc -l`
    if [ $B -eq 0 ];then    #在查看一下是否有进程,没有则结束,杀掉keepalived
        systemctl stop keepalived
    fi
fi

将脚本上传至主、备服务器:/etc/keepalived/目录下,并授权(不能授权为777!!!)
chmod -R 755 nginx_check.sh
建议在启动验证的时候,打印系统日志,同步查看:tail -f /var/log/messages

! Configuration File for keepalived

global_defs {
	# 路由ID,当前主机标识,必须唯一
   router_id LVS_DEVEL_144
   script_user root
   enable_script_security
}

# ----------------------- 新增点 ------------------------
vrrp_script nginxcheck {
   script "/etc/keepalived/nginx_check.sh"
   interval 10
}
# ----------------------- 新增点 ------------------------

vrrp_instance VI_1 {
	# 状态,可配置内容为:MASTER/BACKUP
    state MASTER
	# 网卡名称
    interface ens192
	# 主备节点需保持一致
    virtual_router_id 51
	# 优先级,当主节点宕机后,优先级最高的成为主节点
    priority 100
	# 主备同步时间间隔 
    advert_int 1
	# 认证授权密码
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.2.198
    }
    # ----------------------- 新增点 ------------------------
	track_script {
		nginxcheck
	}
	# ----------------------- 新增点 ------------------------
}

! Configuration File for keepalived

global_defs {
	# 路由ID,当前主机标识,必须唯一
   router_id LVS_DEVEL_62
   script_user root
   enable_script_security
}

# ----------------------- 新增点 ------------------------
vrrp_script nginxcheck {
   script "/etc/keepalived/nginx_check.sh"
   interval 10
}
# ----------------------- 新增点 ------------------------

vrrp_instance VI_1 {
	# 状态,可配置内容为:MASTER/BACKUP
    state BACKUP
	# 网卡名称
    interface ens192
	# 主备节点需保持一致
    virtual_router_id 51
	# 优先级,当主节点宕机后,优先级最高的成为主节点
    priority 80
	# 主备同步时间间隔 
    advert_int 1
	# 认证授权密码
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.2.198
    }
    # ----------------------- 新增点 ------------------------
	track_script {
		nginxcheck
	}
	# ----------------------- 新增点 ------------------------
}

6. 验证

1)按上述配置完成后,重启keepalived,验证是否能把nginx进程自动拉起;
2)手动结束nginx进程,并故意将nginx_check.sh中nginx启动命令调整为错误命令,尝试是否会将对应节点keepalived进程自动结束。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ym5209999/article/details/132983080

智能推荐

python 实验七 字典与集合 (上)_以下是某电商卖家在售产品价目一览表-程序员宅基地

文章浏览阅读9.7w次,点赞307次,收藏975次。1.莫尔斯电码是一种早期的数字化通信形式,它通过“·”和“-”的不同排列顺序来表示不同的英文字母、数字以及标点符号。试编写程序,使用字典存放下表的内容,将用户输入的字符串(假设只包含英文字母)以莫尔斯电码的形式输出。dic_morse={"A":"•−","B":"−•••","C":"−•−•","D":"−••","E":"•","F":"••−•","G":"−−•", "H":"••••","I":"••","J":"•−−−","K":"−•−","L":"•−••","M_以下是某电商卖家在售产品价目一览表

请教:运放噪声 5nV/根号Hz 什么意思啊?(电压噪声,电流噪声)_电流噪声密度-程序员宅基地

文章浏览阅读1.8w次,点赞5次,收藏16次。请教:运放噪声 5nV/根号Hz 什么意思啊? - 维库电子市场网 http://www.dzsc.com/dzbbs/20060929/20076518228437300.html 其实噪声是个能量概念或者说功率概念白噪声总功率(W)与带宽(Hz)成正比所以噪声密度的单位是 W/Hz但是平常习惯用电压电流表示信号,所以要把功率换算成电压 功率跟电压是平方关系,所以开平方后..._电流噪声密度

Android:项目引入module导致Duplicate class....或Program type already present okhttp3 OkUrlFactory(包重复问题)_android okurlfactory-程序员宅基地

文章浏览阅读971次。Android:项目引入module导致Duplicate class…或Program type already present okhttp3 OkUrlFactory_android okurlfactory

hsqldb的使用方法-程序员宅基地

文章浏览阅读595次。现在很多开源项目使用hsqldb作为数据库。了解hsqldb的基本使用方法还是很必要的。这篇不是全面介绍hsqldb的文字,但我认为用这个笔记的内容调试程序够用了。 一、下载数据库,地址在http://sourceforge.net/projects/hsqldb/files/hsqldb/ 我使用的是1.8.0版本。假定下载解压后的目录是D:/hsqldb/, 那么hsqldb.jar在D:/hsqldb/lib目录下。这个jar文件是hsqldb的核心包 二、启动数据库,比如数据库名称为tes_hsqldb的使用

ubuntu查看 固态硬盘位置_ubuntu新增加固态硬盘,格式化并挂载到根目录下-程序员宅基地

文章浏览阅读1.2k次。前言:将固态硬盘装到电脑,ubuntu系统需要格式化并挂载才能正式使用将固态装在电脑上后,打开后端1:查看现有硬盘分区及挂载状态命令 :df -h没有新增的SSD固态硬盘2:查看服务器所有安装的硬盘状态(包括已安装和未安装的)命令: fdisk -l此时已经安装的磁盘,但是没有分区,先分区3, 将磁盘分区,分一个区挂载到根目录下命令:fdisk /dev/sdb (该目录是上面未安装的磁盘目录)..._怎么看固态硬盘在服务器上的挂载路径

TortoiseSVN使用简介_tortoisesvn 文件哪个版本好用-程序员宅基地

文章浏览阅读3.3k次,点赞3次,收藏16次。TortoiseSVN使用简介_tortoisesvn 文件哪个版本好用

随便推点

在windows server 2008 64位服务器上配置php环境_在2008服务器上面配置phpmyadmin访问-程序员宅基地

文章浏览阅读2.4w次。PHP是越来越受欢的开发语言,PHP是因网络而生,是专业于网络程序开发的基础平台.很多优势在些不作太多介绍.对于我们习惯了windows操作系统技术人员来讲,在windows系统上架设PHP环境更轻松些.接下来由向大家介绍2008 R2 64位的服务器如何配置最新PHP环境._在2008服务器上面配置phpmyadmin访问

python 特征选择卡方_4. 机器学习之特征选择-Python代码-程序员宅基地

文章浏览阅读719次。1. 特征选择------sklearn代码1.1 特征选择------方差法忽略warning错误import warningswarnings.filterwarnings("ignore")# 方差法from sklearn.feature_selection import VarianceThresholdX = [[0, 2, 0, 3], [0, 1, 4, 3], [0, 1, 1..._python 方差法选择特征

WebGL快速入门_webgl入门-程序员宅基地

文章浏览阅读2.3k次,点赞2次,收藏11次。WebGL是一种用于在Web浏览器中实现高性能3D图形的技术。本文将帮助读者快速入门WebGL,了解其基本概念和使用方法。我们将介绍WebGL的基本架构和API,包括如何创建WebGL上下文、渲染对象和着色器编程等。此外,我们还会深入探讨WebGL的基本原理和渲染管线,以及如何通过优化渲染流程来提升性能。通过学习本文,读者将能够理解WebGL的核心概念和使用方法,并能够开始开发高性能的3D应用程序。_webgl入门

C++中的String的常用函数用法总结_string函数-程序员宅基地

文章浏览阅读10w+次,点赞1.3k次,收藏6.1k次。一. string的构造函数的形式: string str:生成空字符串string s(str):生成字符串为str的复制品string s(str, strbegin,strlen):将字符串str中从下标strbegin开始、长度为strlen的部分作为字符串初值string s(cstr, char_len):以C_string类型cstr的前char_len个字..._string函数

金融风控训练营金融风控基础知识学习笔记_风控师学习笔记-程序员宅基地

文章浏览阅读162次。一、赛题理解和学习目标:本次挑战赛以个人信贷为背景,要求选手对金融风控之贷款是否违约进行预测,以此判断是否通过此项贷款的一项问题型比赛。通过学习Task1了解第一个学习内容,要求对金融风控的问题建立数学模型最后给定金融风险程度。在此过程中要了解混淆矩阵、AUC评价指标,KS统计量等二、学习内容:混淆矩阵就是一个2×2的矩阵分为真正类TP、真分类TN、假正类FT、假反类FNFP FN TP TN AUC被定义在ROC曲线下与坐标轴围成的面积(ROC曲线:以真阳性率._风控师学习笔记

哈希表 添加 增添 删除 获取方法 Js封装_js hash追加-程序员宅基地

文章浏览阅读237次。<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>D._js hash追加

推荐文章

热门文章

相关标签