Keepalived+Nginx+Apache主备及双活搭建测试

本文介绍了如何使用Keepalived与Nginx搭建主备和双活架构,主备模式下对外提供单一VIP,而双活模式下提供两个VIP,确保服务高可用。通过配置Keepalived、Nginx和Apache,实现了服务器间的健康检查和故障切换,详细阐述了搭建步骤与测试过程。

   keepalived+nginx高可用有主备和双活两种方式。主备方式下对外提供一个vip,同时只有一台服务器工作,另一台作备机;双活方式下对外提供两个vip,两台机器互为备份,下面详细说明搭建测试步骤。

 

主备模式

架构图:

keepalived-nginx主备.jpg

配置:

主机ip操作系统软件备注
nginx01172.27.9.91Centos7.3.1611

nginx 端口82 

keepalived

关闭防火墙和selinu
nginx02172.27.9.92Centos7.3.1611

nginx 端口82

keepalived

关闭防火墙和selinu
web01172.27.9.125Centos7.3.1611apache 端口1180关闭防火墙和selinu
web02172.27.9.126Centos7.3.1611apache 端口1180关闭防火墙和selinu

 

1.nginx安装

nginx01和nginx02安装nginx参见Centos7安装nginx

2.nginx配置

两台nginx服务器配置相同,如下:

[root@nginx01 ~]# more /usr/local/nginx/conf/nginx.conf
#user  nobody;
worker_processes  1;
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#pid        logs/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"';
    #access_log  logs/access.log  main;
    sendfile        on;
    #tcp_nopush     on;
    #keepalive_timeout  0;
    keepalive_timeout  65;
    #gzip  on;
    upstream webser{
             server 172.27.9.125:1180;
             server 172.27.9.126:1180;
           }
    server {
        listen       82;
        server_name  localhost;
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
        location / {
            proxy_pass http://webser;
            #root   html;
            #index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}
[root@nginx01 ~]#

  

3.keepalived安装

分别在nginx01和nginx02上安装keepalived:

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

 

4.keepalived配置

nginx01上keepalived配置:

[root@nginx01 keepalived]# more keepalived.conf
! Configuration File for keepalived
global_defs {
   router_id proxy1 
}
vrrp_script chk_nginx {
  script "/etc/keepalived/check_nginx.sh"
  interval 2    #健康检查周期
  weight 20     #优先级变化幅度
  fall 3         #判定服务异常的检查次数
  rise 2         #判定服务正常的检查次数
}
vrrp_instance VI_1 {
    state MASTER 
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.27.9.200
    }
    track_script {
        chk_nginx
    }
}

nginx02上的keepalived配置:

[root@nginx02 keepalived]# more keepalived.conf
! Configuration File for keepalived
global_defs {
   router_id proxy2
}
vrrp_script chk_nginx {
  script "/etc/keepalived/check_nginx.sh"
  interval 2
  weight 20 
  fall 3
  rise 2
}
vrrp_instance VI_1 {
    state BACKUP 
    interface ens33
    virtual_router_id 51
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.27.9.200
    }
    track_script {
        chk_nginx
    }
}

check_nginx.sh脚本:

[root@nginx02 keepalived]# more check_nginx.sh 
#!/bin/bash
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ];then
      /usr/local/nginx/sbin/nginx
      if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
      pkill keep
      fi
fi

该脚本用户检测nginx进程是否存在,若不存在则重启,若重启失败则直接杀掉keepalived进程,触发切换。(若没有pkill命令请先安装)

 

5.apache安装

在web01和web02上分别安装配置apache:

[root@web01 ~]# yum -y install httpd
[root@web01 ~]# systemctl start httpd
[root@web01 ~]# systemctl enable httpd
[root@web01 /]# echo web01-172.27.9.125 >/var/www/html/index.html

[root@web02 /]# echo web02-172.27.9.126 >/var/www/html/index.html

分别修改apache默认端口,有80更改为1180:

[root@web01 /]# view /etc/httpd/conf/httpd.conf
Listen 1180

 

 

6.启动服务

启动两台服务器nginx和keepalived服务。

[root@nginx01 ~]# nginx
[root@nginx01 ~]# service keepalived start
Redirecting to /bin/systemctl start  keepalived.service

 

7.高可用测试

页面访问http://172.27.9.200:82/

图片.png图片.png

vip查看:

图片.png

图片.png

发现vip在nginx01上,此时对外提供服务的为nginx01,nginx02用作备份。停止nginx01上的keepalived服务,触发切换。

[root@nginx01 ~]# pkill keep
[root@nginx01 ~]# ps -ef|grep keep
root      11389   2172  0 16:56 pts/0    00:00:00 grep --color=auto keep

图片.png

此时vip切换至nginx02,刷新页面访问http://172.27.9.200:82/

图片.png图片.png

发现访问vip还是以轮询方式访问后端web服务器,此时对外提供服务器的为nginx02,nginx01相当于宕机状态。

 

双活模式

架构图:

keepalived-nginx双活.jpg

配置:

主机ip操作系统软件vip
nginx01172.27.9.91Centos7.3.1611

nginx 端口82 

keepalived

172.27.9.200
nginx02172.27.9.92Centos7.3.1611

nginx 端口82

keepalived

172.27.9.210
web01172.27.9.125Centos7.3.1611apache 端口1180/
web02172.27.9.126Centos7.3.1611apache 端口1180/

 

1.keepalived配置

nginx01上keepalived配置:

[root@nginx01 ~]# more /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
   router_id proxy1 
}
vrrp_script chk_nginx {
  script "/etc/keepalived/check_nginx.sh"
  interval 2
  weight 20
  fall 3
  rise 2
}
vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.27.9.200
    }
    track_script {
        chk_nginx
    }
}
vrrp_instance VI_2 {
    state BACKUP 
    interface ens33
    virtual_router_id 52
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.27.9.210
    }
    track_script {
        chk_nginx
    }
}

nginx02上keepalived配置:

[root@nginx02 ~]# more /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
   router_id proxy2
}
vrrp_script chk_nginx {
  script "/etc/keepalived/check_nginx.sh"
  interval 2
  weight 20
  fall 3
  rise 2
}
vrrp_instance VI_1 {
    state BACKUP 
    interface ens33
    virtual_router_id 51
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.27.9.200
    }
    track_script {
        chk_nginx
    }
}
vrrp_instance VI_2 {
    state MASTER
    interface ens33
    virtual_router_id 52
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.27.9.210
    }
    track_script {
        chk_nginx
    }
}

修改keepalived配置后分别重启keepalived服务:

[root@nginx01 ~]# service keepalived restart

 

 

2.vip查看

nginx01:

图片.png

nginx02:

图片.png

 

3.页面访问:

vip1:http://172.27.9.200:82/

vip2:http://172.27.9.210:82/ 

图片.png图片.png图片.png图片.png

发现vip1和vip2分别以轮询方式访问web服务器

 

4.高可用测试

此时vip1在nginx01上,vip2在nginx02上,两台服务器互为主备一期对外提供服务。现在停止nginx01上的keepalived服务,模拟宕机,触发切换。

[root@nginx01 ~]# pkill keep
[root@nginx01 ~]# ps -ef|grep keep
root      13688   2172  0 17:22 pts/0    00:00:00 grep --color=auto keep

页面访问:

vip1:http://172.27.9.200:82/

vip2:http://172.27.9.210:82/

图片.png图片.png图片.png图片.png

发现vip1和vip2访问web服务正常。vip查看:

nginx01:

图片.png

nginx02:

图片.png

发现vip1漂移至vip2,nginx02接管nginx01的vip1,此时nginx02单独对外提供服务。

 

      总结:

      1.主备模式对外只提供一个vip,访问便捷,但同时只有一台服务器对外提供服务;

      2.双活模式对外提供两个vip,访问比较麻烦,但同时又两台服务器对外提供服务;

      3.不管主备模式还是双活模式都能高可用运行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值