IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> nginx高可用测试实例 -> 正文阅读

[系统运维]nginx高可用测试实例

准备工作

# 两台服务器
192.168.0.108
192.168.0.109

# 在两台服务器上安装nginx
yum install -y nginx

# 在两台服务器上安装keepalived
yum install -y keepalived

测试流程

1)修改主服务器(192.168.0.108)的keepalived配置文件

# 全局配置
global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.0.108
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

# 相关脚本配置
vrrp_script chk_http_port{
  script "/usr/local/src/nginx_check.sh"
  interval 2  # 检测脚本执行的间隔
  weight 2    # 权重。当脚本的条件成立,把当前的权重加2;如果值为负数(-20),就减少20。通过修改weight来改变主从服务器
}

# 虚拟IP的配置
vrrp_instance VI_1 {
    state MASTER              # 主MATER
    interface enp5s0          # 网卡 通过ifconfig查看
    virtual_router_id 51      # 主从机的virtual_router_id必须相同
    priority 100              # 主从机取不同的优先级,主机值较大,备份机值较小
    advert_int 1              # 心跳时间间隔,用于检测主机或服务器是否还活着,默认1秒。表示每隔多长时间发生一个心跳
    authentication {          # 权限校验方式
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {       # 通过它就可以完成keepalived的配置
        192.168.0.188         # 对外虚拟ip
    }
}

2)修改备服务器(192.168.0.109)的keepalived配置文件

# 全局配置
global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.0.109
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

# 相关脚本配置
vrrp_script chk_http_port{
  script "/usr/local/src/nginx_check.sh"
  interval 2  #检测脚本执行的间隔
  weight 2    #权重。当脚本的条件成立,把当前的权重加2;如果值为负数(-20),就减少20。通过修改weight来改变主从服务器
}

# 虚拟IP的配置
vrrp_instance VI_1 {
    state BACKUP              # 从BACKUP
    interface ens33           # 网卡 通过ifconfig查看
    virtual_router_id 51      # 主从机的virtual_router_id必须相同
    priority 99               # 主从机取不同的优先级,主机值较大,备份机值较小
    advert_int 1              # 心跳时间间隔,用于检测主机或服务器是否还活着,默认1秒。表示每隔多长时间发生一个心跳
    authentication {          # 权限校验方式
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {       # 通过它就可以完成keepalived的配置
        192.168.0.188         # 对外虚拟ip
    }
}

3)编写nginx_check.sh脚本文件

#!/bin/bash
A=`ps -C nginx -no-header | wc -l`
if [ $A -eq 0 ];then
	/usr/local/nginx/sbin/nginx
	sleep 2
	if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
		killall keepalived
	fi
fi

4)在两台服务器启动nginx和keepalived

# 启动nginx
nginx -s stop
nginx

# 启动keepalived
systemctl start keepalived.service

遇到的问题1:

# 报错
[root@192 keepalived]# systemctl start keepalived.service
Job for keepalived.service failed. See "systemctl status keepalived.service" and "journalctl -xe" for details.

# 解决方法
[root@192 keepalived]# chmod 644 keepalived.conf 
[root@192 keepalived]# systemctl start keepalived.service
[root@192 keepalived]# ps -aux | grep keepalived
root       1403  0.0  0.1 123012  1400 ?        Ss   05:41   0:00 /usr/sbin/keepalived -D
root       1404  0.0  0.2 123012  2640 ?        S    05:41   0:00 /usr/sbin/keepalived -D
root       1405  0.0  0.2 125136  2412 ?        S    05:41   0:00 /usr/sbin/keepalived -D
root       1416  0.0  0.0 112828   988 pts/0    R+   05:42   0:00 grep --color=auto keepalived

5)web网页访问nginx(ip地址为虚拟网卡的ip—192.168.0.188)

在这里插入图片描述

6)停掉主服务器(192.168.0.108)的nginx和keepalived

# 停掉keepalived
systemctl stop keepalived.service

# 停掉nginx
nginx -s stop

7)继续访问nginx

在这里插入图片描述

仍然可以访问成功,说明此时原本的备用服务器成为了主服务器,使得用户可以正常访问nginx。

查看备用服务器(192.168.0.109)的网卡:

[root@192 keepalived]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:9f:1f:da brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.104/24 brd 192.168.0.255 scope global noprefixroute dynamic ens33
       valid_lft 4755sec preferred_lft 4755sec
    inet 192.168.0.188/32 scope global ens33            -------------------> 已经绑定了虚拟网卡
       valid_lft forever preferred_lft forever
    inet 192.168.0.109/24 brd 192.168.0.255 scope global secondary noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::3827:c675:a38b:d2ac/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

至此,nginx高可用的测试完成

nginx高可用原理图

在这里插入图片描述

nginx有主备服务器,对外绑定相同的虚拟ip(例如本例中的192.168.0.188)。

当主服务器发生故障后,通过keepalived检测并实现主备切换,此时备服务器绑定虚拟ip,保证请求正常响应,这一过程完全是自动完成的。

相关概念

VRRP协议

VRRP全称 Virtual Router Redundancy Protocol,即”虚拟路由冗余协议“。可以认为它是实现路由器高可用的容错协议,即将N台提供相同功能的路由器组成一个路由器组(Router Group),这个组里面有一个master和多个backup,但在外界看来就像一台一样,构成虚拟路由器,拥有一个虚拟IP(VIP - Virtual IP,也就是路由器所在局域网内其他机器的默认路由),占有这个IP的master实际负责ARP相应和转发IP数据包,组中的其它路由器作为备份的角色处于待命状态。master会发组播消息,当backup在超时时间内收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master,保证路由器的高可用。

KeepAlived

KeepAlived是实现VRRP备份路由的高可靠性运行件。基于KeepAlived设计的服务模式能够真正做到主服务器和备份服务器故障时IP瞬间无缝交接。

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

KeepAlived是一个基于VRRP协议来实现的服务高可用方案,可以利用其来避免IP单点故障,类似的工具还有Heartbeat 、Corosync、Pacemaker。但是它一般不会单独出现,而是与其它负载均衡技术(如LVS、Haproxy、Nginx)一起工作来达到集群的高可用。

部分参考:

https://blog.csdn.net/chuanchengdabing/article/details/119727185

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-09-25 23:24:39  更:2022-09-25 23:24:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 9:57:11-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码