keepalived+nginx

本文详细介绍了如何安装配置nginx和keepalived,以实现负载均衡器LB1和LB2之间的无缝切换。配置过程中涉及nginx.conf的修改、启动与检查,以及keepalived的安装、配置与健康检查。通过VIP漂移确保了在nginx故障时服务不中断,同时讲解了check_nginx脚本的作用和keepalived在HA中的关键角色。
APP01
APP02
LB2
LB1
check_nginx.sh
check_nginx.sh
tomcat
tomcat
keepalived
(backup)
nginx
keepalived
(master)
nginx
client
VIP
IPnamesoftwarecomment
192.168.122.10LB1keepalived+nginxnginx配置的代理端口8080
192.168.122.11LB2keepalived+nginxnginx配置的代理端口8080
192.168.122.12APP01tomcat端口8080
192.168.122.13APP02tomcat端口8080
192.168.122.100VIPkeepalived进行维护,决定VIP是否需要漂移

1 安装配置nginx

1.1 安装(LB1+LB2)

dnf install nginx

1.2 配置(LB1+LB2)

#vim /etc/nginx/nginx.conf

在配置文件/etc/nginx/nginx.conf中增加代码段部分:

events {
worker_connections 1024;
}

#stream是配置代理
stream {
  #配置日志
  log_format main '$remote_addr $upstream_addr - [$time_local] $status $upstream_bytes_sent';
  access_log /var/log/nginx/tomcat-access.log main;
  
  #upstream是配置负载均衡,支持5种分配方式:轮询backend(默认),weight,ip_hash,fair,url_hash
  #for tomcat
  upstream tomcat {
	server 192.168.122.12:8080;  #APP01上部署的tomcat
	server 192.168.122.13:8080;  #APP02上部署的tomcat
  }
  #nginx使用8080端口来代理upstream中配置的tomcat
  server {
  	listen 8080;
	proxy_pass tomcat;
  }
}

验证配置是否正常

#nginx -t

1.3 启动nginx

#systemctl start nginx

1.4 编写检查nginx进程是否存在

#vim /etc/nginx/check_nginx.sh
count=$(ps -ef |grep nginx |egrep -cv "grep|$$")
if [ "$count" -eq 0 ];then
   systemctl stop keepalived
fi
#chmod u+x /etc/nginx/check_nginx.sh

2 安装配置keepalived

2.1 安装(LB1+LB2)

dnf install keepalived

2.2 配置(LB1)

#vim /etc/keepalived/keepalived.conf
#注释以下这条,否则无法ping通虚拟ip地址
#vrrp_strict

#增加vrrp_script,定义vrrp的脚本check_nginx
vrrp_script check_nginx {
  script "/etc/nginx/check_nginx.sh"
}

#修改vrrp_instance中注释的部分
vrrp_instance VI_1 {
    state MASTER    #LB1为MASTER LB2为BACKUP
    interface ens3  #网卡名
    virtual_router_id 51
    priority 100    #优先级,MASTER为100, BACKUP为90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {  
        192.168.122.100  #配置虚拟IP
    }
    track_script {   #跟踪脚本,会调用此脚本
      check_nginx
    }
}

2.3 配置(LB2)

#vim /etc/keepalived/keepalived.conf
#注释以下这条,否则无法ping通虚拟ip地址
#vrrp_strict

#增加vrrp_script,定义vrrp的脚本check_nginx
vrrp_script check_nginx {
  script "/etc/nginx/check_nginx.sh"
}

#修改vrrp_instance中注释的部分
vrrp_instance VI_1 {
    state BACKUP    #LB1为MASTER LB2为BACKUP
    interface ens3  #网卡名
    virtual_router_id 51
    priority 90   #优先级,MASTER为100, BACKUP为90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {  
        192.168.122.100  #配置虚拟IP
    }
    track_script {   #跟踪脚本,会调用此脚本
      check_nginx
    }
}

2.4 启动

#systemctl start keepalived

2.5 检查

2.5.1 在LB01上查看VIP是否存在
#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: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 52:54:00:69:f7:87 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.10/24 brd 192.168.122.255 scope global noprefixroute ens3
       valid_lft forever preferred_lft forever
    inet 192.168.122.100/32 scope global ens3
       valid_lft forever preferred_lft forever
    inet6 fe80::e227:b11b:fe3:8d20/64 scope link dadfailed tentative noprefixroute 
       valid_lft forever preferred_lft forever
    inet6 fe80::7196:9ba5:b2de:c492/64 scope link dadfailed tentative noprefixroute 
       valid_lft forever preferred_lft forever
    inet6 fe80::6bf5:be52:b953:26ab/64 scope link dadfailed tentative noprefixroute 
       valid_lft forever preferred_lft forever

2.5.2 停止LB01上的nginx,查看VIP 是否会转移到LB02

在LB01上

#systemctl stop nginx
LB02
(1)调用
存在
不存在
(4)停掉
(5)VIP漂移
keepalived(LB02)
keepalived(LB01)
check_nginx
nginx进程
是否存在
(2)
不做操作
(3)systemctl stop keepalived
2.5.3 查看nginx日志

在浏览器中访问tomcat

http://192.168.122.100:8080

查看/var/log/nginx/tomcat-access.log日志,查看访问的记录,在APP01和APP02上轮询

192.168.122.1 192.168.122.12:8080 -[13/Aug/2020:15:27:36 +0800] 200 0
192.168.122.1 192.168.122.13:8080 -[13/Aug/2020:15:27:36 +0800] 200 0
192.168.122.1 192.168.122.12:8080 -[13/Aug/2020:15:27:36 +0800] 200 0
192.168.122.1 192.168.122.13:8080 -[13/Aug/2020:15:27:36 +0800] 200 0
192.168.122.1 192.168.122.13:8080 -[13/Aug/2020:15:27:46 +0800] 200 384
192.168.122.1 192.168.122.12:8080 -[13/Aug/2020:15:27:53 +0800] 200 729
192.168.122.1 192.168.122.13:8080 -[13/Aug/2020:15:27:53 +0800] 200 0

3 理解

1、keepalived的功能是通过vip去实现从一台主机切到另一台主机的无缝切换,两台主机通过vip实现HA;

2、nginx要与keepalived部署在一起,通用keepalived的vip来实现部署在两台服务器上nginx的HA;

3、当一台主机上的nginx出现故障进程丢失(check_nginx实现),则会将这台主机的keepalived进程停掉,则vip漂移到另一台keepalived上;

4、nginx作为tomcat的代理,实现了两台应用(tomcat)的不同访问策略,也实现了tomcat的HA;

5、当一台tomcat出现故障,则nginx不会再访问故障的tomcat

4 关于脚本check_nginx

check_nginx只是用来监控nginx进程,

可以根据io、cpu、mem等条件去杀掉keepalived,实现vip漂移;

5 关于keepalived

想要实现vip漂移,只需要杀掉一下keepalived即可

可以根据任意信息,来判断是否需要vip飘逸;

比如如果数据库是HA的,则可以根据数据库的负荷,来实现将访问切换到另一台数据库上。

### 使用 KeepalivedNginx 实现高可用性配置 #### 1. 环境准备 为了确保系统的稳定性和可靠性,在部署之前需要准备好两个服务器节点,分别作为主节点(Master)和备用节点(Backup)。这两个节点都需要安装 NginxKeepalived。 #### 2. 安装 NginxKeepalived 在每个节点上安装 NginxKeepalived。对于大多数 Linux 发行版来说,可以通过包管理器来完成这一步骤[^1]: ```bash sudo apt update && sudo apt install nginx keepalived -y ``` #### 3. 配置 Nginx 编辑 `/etc/nginx/nginx.conf` 文件以适应具体的业务需求。确保 Nginx 能够正常工作并监听所需的端口。完成后重启 Nginx 服务使更改生效: ```bash sudo systemctl restart nginx ``` #### 4. 配置 Keepalived 主节点 (Master) 创建或修改 `/etc/keepalived/keepalived.conf` 文件如下所示。此配置用于设置 Master 节点的角色及其优先级等参数: ```plaintext vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 123456 } virtual_ipaddress { 192.168.1.100 } } ``` #### 5. 配置 Keepalived 备用节点 (Backup) 同样地,在 Backup 节点上也需创建或调整 `keepalived.conf` 文件的内容。注意这里的状态应设为 BACKUP 并降低其优先级以便于区分角色: ```plaintext vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 51 priority 90 advert_int 1 authentication { auth_type PASS auth_pass 123456 } virtual_ipaddress { 192.168.1.100 } } ``` #### 6. 启动 Keepalived 服务 启动 Keepalived 服务并将之设置为开机自启模式。这样当系统重新启动时,Keepalived 可自动运行而无需手动干预: ```bash sudo systemctl start keepalived sudo systemctl enable keepalived ``` #### 7. 测试故障转移功能 通过关闭 Master 上的网络接口或者停止 Keepalived 来模拟故障场景。此时应该观察到 VIP 自动迁移到 Backup 节点,并且客户端请求能够继续被处理而不受影响[^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值