nginx+keepalived的高可用负载均衡集群构建

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
简介:

实验架构图:

wKioL1S6DUGzDjhZAAJ6qvOq_dw938.jpg



实验环境


Nginx和Keepalived原理介绍

参考博客:http://467754239.blog.51cto.com/4878013/1541421

1、nginx

Nginx进程基于于Master+Slave(worker)多进程模型,自身具有非常稳定的子进程管理功能。在Master进程分配模式下,Master进程永远不进行业务处理,只是进行任务分发,

从而达到Master进程的存活高可靠性,Slave(worker)进程所有的业务信号都 由主进程发出,Slave(worker)进程所有的超时任务都会被Master中止,属于非阻塞式任务模型。


2、keepalived

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

主要用作RealServer的健康状态检查以及LoadBalance主机和BackUP主机之间failover的实现


3、单点故障

Nginx有很强代理功能,但是一台nginx就形成了单点,现在使用keepalived来解决这个问题,keepalived的故障转移时间很短.

Nginx+keepalived双机实现nginx反向代理服务的高可用,一台nginx挂掉之后不影响应用也不影响内网访问外网.



4、此架构需要考虑的问题

1) Master没挂,则Master占有vip且nginx运行在Master上

2) Master挂了,则backup抢占vip且在backup上运行nginx服务

3) 如果master服务器上的nginx服务挂了,则vip资源转移到backup服务器上

4) 检测后端服务器的健康状态


5、叙述

Master和Backup两边都开启nginx服务,无论Master还是Backup,当其中的一个keepalived服务停止后,vip都会漂移到keepalived服务还在的节点上,

如果要想使nginx服务挂了,vip也漂移到另一个节点,则必须用脚本或者在配置文件里面用shell命令来控制。

首先必须明确后端服务器的健康状态检测keepalived在这种架构上是无法检测的,后端服务器的健康状态检测是有nginx来判断的,但是nginx的检测机制有一定的缺陷,后端服务器某一个宕机之后,nginx还是会分发请求给它,在一定的时间内后端服务响应不了,nginx则会发给另外一个服务器,然后当客户的请求来了,nginx会一段时间内不会把请求分发给已经宕机的服务器,但是过一段时间后,nginx还是会把分发请求发给宕机的服务器上。



实验实现:


HA高可用集群构建前提:

1.proxy和proxy2节点时间必须同步;

建议使用ntp协议进行;

参考博客:http://sohudrgon.blog.51cto.com/3088108/1598314


2、节点之间必须要通过主机名互相通信;

建议使用hosts文件;

通信中使用的名字必须与其节点为上“uname -n”命令展示出的名字保持一致;

[root@proxy ~]# cat /etc/hosts                        

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

172.16.0.1  server.magelinux.com server

172.16.31.52 proxy.stu31.com proxy

172.16.31.53 proxy2.stu31.com proxy2

172.16.31.50 tom1.stu31.com tom1

172.16.31.51 tom2.stu31.com tom2


3、节点之间彼此root用户能基于ssh密钥方式进行通信;

节点proxy:

# ssh-keygen -t rsa -P ""

# ssh-copy-id -i .ssh/id_rsa.pub proxy2

节点proxy2:

# ssh-keygen -t rsa -P ""

# ssh-copy-id -i .ssh/id_rsa.pub proxy


测试ssh无密钥通信:

[root@proxy ~]# date ; ssh proxy2 date

Fri Jan 16 15:38:36 CST 2015

Fri Jan 16 15:38:36 CST 2015



一.安装nginx

1.两个节点都安装nginx

# yum install nginx-1.6.2-1.el6.ngx.x86_64.rpm


2.分别在两台机器上创建不同的测试页面[为了测试]

[root@proxy ~]# echo "Page from nginx1 ,proxy" >/usr/share/nginx/html/index.html

[root@proxy2 ~]# echo "Page from nginx2 ,proxy2" >/usr/share/nginx/html/index.html


3.配置nginx的配置文件

配置nginx服务器将动态内容反向代理到后端tomcat服务器组,而静态内容直接访问本地的nginx服务器;


定义后端tomcat服务器组:

[root@proxy ~]# vim /etc/nginx/nginx.conf 

#添加如下后端服务器组

    upstream tcsrvs {

        ip_hash;

        server 172.16.31.50:8080;

        server 172.16.31.51:8080;

    }

定义反向代理:

[root@proxy nginx]# pwd

/etc/nginx

[root@proxy nginx]# vim conf.d/default.conf 

server {

    listen       80;

    server_name  localhost;

    #charset koi8-r;

    #access_log  /var/log/nginx/log/host.access.log  main;

    location / {

        root   /usr/share/nginx/html;

        index  index.html index.htm;

    }

    location ~* \.(jsp|do)$ {

        proxy_pass http://tcsrvs;

    }

}


3.启动nginx服务访问测试

静态内容是本地nginx提供的页面:

wKiom1S53CSTLS1pAAM2HAZCrMM959.jpg


动态页面丢到后端的tomcat服务器了:

wKioL1S53OGhcCbhAAODeI9daMc933.jpg





到节点tom1和tom2创建tomcat的测试页:

节点tom1:

[root@tom1 testapp]# pwd

/usr/local/tomcat/webapps/ROOT

[root@tom1 testapp]# vim index.jsp

<%@ page language="java" %>

<html>

  <head><title>TomcatA</title></head>

  <body>

    <h1><font color="red">TomcatA.stu31.com</font></h1>

    <table align="centre" border="1">

      <tr>

        <td>Session ID</td>

    <% session.setAttribute("stu31.com","stu31.com"); %>

        <td><%= session.getId() %></td>

      </tr>

      <tr>

        <td>Created on</td>

        <td><%= session.getCreationTime() %></td>

     </tr>

    </table>

  </body>

</html>


节点tom2:

[root@tom2 testapp]# pwd

/usr/local/tomcat/webapps/ROOT

[root@tom2 testapp]# vim index.jsp

<%@ page language="java" %>

<html>

  <head><title>TomcatB </title></head>

  <body>

    <h1><font color="red">TomcatB.stu31.com</font></h1>

    <table align="centre" border="1">

      <tr>

        <td>Session ID</td>

    <% session.setAttribute("stu31.com","stu31.com"); %>

        <td><%= session.getId() %></td>

      </tr>

      <tr>

        <td>Created on</td>

        <td><%= session.getCreationTime() %></td>

     </tr>

    </table>

  </body>

</html>


复制配置文件到节点proxy2:

[root@proxy nginx]# scp nginx.conf proxy2:/etc/nginx/

nginx.conf                                    100%  740     0.7KB/s   00:00    

[root@proxy nginx]# scp conf.d/default.conf proxy2:/etc/nginx/conf.d/

default.conf                                  100% 1167     1.1KB/s   00:00


二.keepalived安装与配置

CentOS 6.6 是1.2.13版本的keepalived,已经够用了,最新版本的keepalived是1.2.15;

1.两个节点安装keepalived软件

# yum install -y keepalived


2.配置keepalived

修改keepalived配置文件

keepalived的文件路径/etc/keepalived/keepalived.conf 


主节点MASTER node:

! Configuration File for keepalived   #全局定义  

  

global_defs {

   notification_email {               #指定keepalived在发生事件时(比如切换),需要发送的email对象,可以多个,每行一个 

     root@stu31.com

   }

   notification_email_from kaadmin@stu31.com

   smtp_server 127.0.0.1              #指定发送email的smtp服务器

   smtp_connect_timeout 30

   router_id LVS_DEVEL                #运行keepalived的机器的一个标识

}

  

vrrp_instance VI_1 {

    state MASTER               #为主服务器

    interface eth0             #监听的本地网卡接口

    virtual_router_id 100      #主辅virtual_router_id号必须相同

    mcast_src_ip=172.16.31.52  #主nginx的ip地址

    priority 100               #优先级为100,此值越大优先级越大 就为master 权重值

    advert_int 1               #VRRP Multicast 广播周期秒数;心跳检测时间,单位秒

    authentication {

        auth_type PASS         #vrrp认证方式

        auth_pass oracle       #vrrp口令

    }

    virtual_ipaddress {        #VRRP HA 虚拟地址 如果有多个VIP,继续换行填写

        172.16.31.188/24 dev eth0 

    }

}



备用节点BACKUP node:

global_defs {

        notification_email {

                root@stu31.com

        }

        notification_email_from kaadmin@stu31.com

        smtp_server 127.0.0.1

        smtp_connect_timeout 30

        router_id LVS_DEVEL

}

vrrp_instance  VI_1 {

        state BACKUP

        interface eth0

        virtual_router_id 100

        mcast_src_ip=172.16.31.53

        priority 99

        advert_int 1

        authentication {

                auth_type PASS

                auth_pass oracle

        }

        virutal_ipaddress {

                172.16.31.188/24 dev eth0 

        }

}


3.启动keepalived服务

设置keepalived开机启动:

# chkconfig keepalived on


启动两个节点的keepalived服务:

[root@proxy ~]# service keepalived start ; ssh proxy2 "service keepalived start"



4.查看vip状态

#首先在master节点上查看vip的状态

[root@proxy keepalived]# ip addr show eth0

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

    link/ether 08:00:27:3b:23:60 brd ff:ff:ff:ff:ff:ff

    inet 172.16.31.52/16 brd 172.16.255.255 scope global eth0

    inet 172.16.31.188/16 scope global secondary eth0

    inet6 fe80::a00:27ff:fe3b:2360/64 scope link 

       valid_lft forever preferred_lft forever

  

#其次在backup节点上查看vip的状态

[root@proxy2 keepalived]# ip addr show eth0

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

    link/ether 08:00:27:6e:bd:28 brd ff:ff:ff:ff:ff:ff

    inet 172.16.31.53/16 brd 172.16.255.255 scope global eth0

    inet6 fe80::a00:27ff:fe6e:bd28/64 scope link 

       valid_lft forever preferred_lft forever



5.查看keepalived服务启动后选举VIP的过程日志:

MASTER节点的日志:

当启动keepalived服务的时候,会根据配置文件的优先级来竞选谁为master,从日志来看172.16.31.52竞选master

[root@proxy keepalived]# tail -f /var/log/messages 

Jan 16 16:31:06 proxy Keepalived[5807]: Starting Keepalived v1.2.13 (10/15,2014)

Jan 16 16:31:06 proxy Keepalived[5809]: Starting Healthcheck child process, pid=5811

Jan 16 16:31:06 proxy Keepalived[5809]: Starting VRRP child process, pid=5812

Jan 16 16:31:06 proxy Keepalived_healthcheckers[5811]: Netlink reflector reports IP 172.16.31.52 added

Jan 16 16:31:06 proxy Keepalived_healthcheckers[5811]: Netlink reflector reports IP fe80::a00:27ff:fe3b:2360 added

Jan 16 16:31:06 proxy Keepalived_vrrp[5812]: Netlink reflector reports IP 172.16.31.52 added

Jan 16 16:31:06 proxy Keepalived_healthcheckers[5811]: Registering Kernel netlink reflector

Jan 16 16:31:06 proxy Keepalived_healthcheckers[5811]: Registering Kernel netlink command channel

Jan 16 16:31:06 proxy Keepalived_vrrp[5812]: Netlink reflector reports IP fe80::a00:27ff:fe3b:2360 added

Jan 16 16:31:06 proxy Keepalived_vrrp[5812]: Registering Kernel netlink reflector

Jan 16 16:31:06 proxy Keepalived_vrrp[5812]: Registering Kernel netlink command channel

Jan 16 16:31:06 proxy Keepalived_vrrp[5812]: Registering gratuitous ARP shared channel

Jan 16 16:31:06 proxy Keepalived_healthcheckers[5811]: Opening file '/etc/keepalived/keepalived.conf'.

Jan 16 16:31:06 proxy Keepalived_vrrp[5812]: Opening file '/etc/keepalived/keepalived.conf'.

Jan 16 16:31:06 proxy Keepalived_vrrp[5812]: Configuration is using : 62912 Bytes

Jan 16 16:31:06 proxy Keepalived_vrrp[5812]: Using LinkWatch kernel netlink reflector...

Jan 16 16:31:06 proxy Keepalived_vrrp[5812]: VRRP sockpool: [ifindex(2), proto(112), unicast(0), fd(10,11)]

Jan 16 16:31:06 proxy Keepalived_healthcheckers[5811]: Configuration is using : 7455 Bytes

Jan 16 16:31:06 proxy Keepalived_healthcheckers[5811]: Using LinkWatch kernel netlink reflector...

Jan 16 16:31:06 proxy Keepalived_vrrp[5812]: VRRP_Instance(VI_1) Transition to MASTER STATE

Jan 16 16:31:07 proxy Keepalived_vrrp[5812]: VRRP_Instance(VI_1) Entering MASTER STATE

Jan 16 16:31:07 proxy Keepalived_vrrp[5812]: VRRP_Instance(VI_1) setting protocol VIPs.

Jan 16 16:31:07 proxy Keepalived_healthcheckers[5811]: Netlink reflector reports IP 172.16.31.188 added

Jan 16 16:31:07 proxy Keepalived_vrrp[5812]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 172.16.31.188

Jan 16 16:31:07 proxy Keepalived_vrrp[5812]: receive an invalid ip number count associated with VRID!

Jan 16 16:31:07 proxy Keepalived_vrrp[5812]: bogus VRRP packet received on eth0 !!!

Jan 16 16:31:07 proxy Keepalived_vrrp[5812]: VRRP_Instance(VI_1) Dropping received VRRP packet...

Jan 16 16:31:08 proxy Keepalived_vrrp[5812]: receive an invalid ip number count associated with VRID!

Jan 16 16:31:08 proxy Keepalived_vrrp[5812]: bogus VRRP packet received on eth0 !!!

Jan 16 16:31:08 proxy Keepalived_vrrp[5812]: VRRP_Instance(VI_1) Dropping received VRRP packet...

Jan 16 16:31:09 proxy Keepalived_vrrp[5812]: receive an invalid ip number count associated with VRID!

Jan 16 16:31:09 proxy Keepalived_vrrp[5812]: bogus VRRP packet received on eth0 !!!

Jan 16 16:31:09 proxy Keepalived_vrrp[5812]: VRRP_Instance(VI_1) Dropping received VRRP packet...

Jan 16 16:31:12 proxy Keepalived_vrrp[5812]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 172.16.31.188



BACKUP节点的日志;

由于优先级低,就成为了备用节点;

[root@proxy2 keepalived]# tail -f /var/log/messages 

Jan 16 16:31:09 proxy2 Keepalived[2176]: Starting Keepalived v1.2.13 (10/15,2014)

Jan 16 16:31:09 proxy2 Keepalived[2178]: Starting Healthcheck child process, pid=2180

Jan 16 16:31:09 proxy2 Keepalived[2178]: Starting VRRP child process, pid=2181

Jan 16 16:31:09 proxy2 Keepalived_healthcheckers[2180]: Netlink reflector reports IP 172.16.31.53 added

Jan 16 16:31:09 proxy2 Keepalived_vrrp[2181]: Netlink reflector reports IP 172.16.31.53 added

Jan 16 16:31:09 proxy2 Keepalived_healthcheckers[2180]: Netlink reflector reports IP fe80::a00:27ff:fe6e:bd28 added

Jan 16 16:31:09 proxy2 Keepalived_healthcheckers[2180]: Registering Kernel netlink reflector

Jan 16 16:31:09 proxy2 Keepalived_healthcheckers[2180]: Registering Kernel netlink command channel

Jan 16 16:31:09 proxy2 Keepalived_vrrp[2181]: Netlink reflector reports IP fe80::a00:27ff:fe6e:bd28 added

Jan 16 16:31:09 proxy2 Keepalived_vrrp[2181]: Registering Kernel netlink reflector

Jan 16 16:31:09 proxy2 Keepalived_healthcheckers[2180]: Opening file '/etc/keepalived/keepalived.conf'.

Jan 16 16:31:09 proxy2 Keepalived_vrrp[2181]: Registering Kernel netlink command channel

Jan 16 16:31:09 proxy2 Keepalived_vrrp[2181]: Registering gratuitous ARP shared channel

Jan 16 16:31:09 proxy2 Keepalived_vrrp[2181]: Opening file '/etc/keepalived/keepalived.conf'.

Jan 16 16:31:09 proxy2 Keepalived_healthcheckers[2180]: Configuration is using : 7455 Bytes

Jan 16 16:31:09 proxy2 Keepalived_vrrp[2181]: Configuration is using : 62912 Bytes

Jan 16 16:31:09 proxy2 Keepalived_vrrp[2181]: Using LinkWatch kernel netlink reflector...

Jan 16 16:31:09 proxy2 Keepalived_healthcheckers[2180]: Using LinkWatch kernel netlink reflector...

Jan 16 16:31:09 proxy2 Keepalived_vrrp[2181]: VRRP_Instance(VI_1) Entering BACKUP STATE

Jan 16 16:31:09 proxy2 Keepalived_vrrp[2181]: VRRP sockpool: [ifindex(2), proto(112), unicast(0), fd(10,11)]


6.我们停止MASTER节点的keepalived服务,那么BACKUP节点会成为主节点。

主节点停止keepalived服务:

[root@proxy keepalived]# service keepalived stop

Stopping keepalived:                                       [  OK  ]


我们通过日志来查看自动切换的过程:

主节点的VIP自动移除:

[root@proxy keepalived]# tail -f /var/log/messages 

Jan 16 16:37:33 proxy Keepalived[5809]: Stopping Keepalived v1.2.13 (10/15,2014)

Jan 16 16:37:33 proxy Keepalived_vrrp[5812]: VRRP_Instance(VI_1) sending 0 priority

Jan 16 16:37:33 proxy Keepalived_vrrp[5812]: VRRP_Instance(VI_1) removing protocol VIPs.

Jan 16 16:37:33 proxy Keepalived_healthcheckers[5811]: Netlink reflector reports IP 172.16.31.188 removed


备用节点自动竞选成主节点,获取VIP:

[root@proxy2 keepalived]# tail -f /var/log/messages 

Jan 16 16:37:34 proxy2 Keepalived_vrrp[2181]: VRRP_Instance(VI_1) Transition to MASTER STATE

Jan 16 16:37:35 proxy2 Keepalived_vrrp[2181]: VRRP_Instance(VI_1) Entering MASTER STATE

Jan 16 16:37:35 proxy2 Keepalived_vrrp[2181]: VRRP_Instance(VI_1) setting protocol VIPs.

Jan 16 16:37:35 proxy2 Keepalived_vrrp[2181]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 172.16.31.188

Jan 16 16:37:35 proxy2 Keepalived_healthcheckers[2180]: Netlink reflector reports IP 172.16.31.188 added

Jan 16 16:37:40 proxy2 Keepalived_vrrp[2181]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 172.16.31.188


7.我们将主节点重新启动,并测试节点主备切换时间:

[root@proxy keepalived]# service keepalived start

Starting keepalived:                                       [  OK  ]


我在物理机上测试主备切换时间,间隔差不多一秒钟左右:

C:\Users\GuoGang>ping -t 172.16.31.188

正在 Ping 172.16.31.188 具有 32 字节的数据:

来自 172.16.31.188 的回复: 字节=32 时间<1ms TTL=64

来自 172.16.31.188 的回复: 字节=32 时间<1ms TTL=64

来自 172.16.31.188 的回复: 字节=32 时间<1ms TTL=64

请求超时。

来自 172.16.31.188 的回复: 字节=32 时间<1ms TTL=64

来自 172.16.31.188 的回复: 字节=32 时间<1ms TTL=64

来自 172.16.31.188 的回复: 字节=32 时间<1ms TTL=64

来自 172.16.31.188 的回复: 字节=32 时间<1ms TTL=64

来自 172.16.31.188 的回复: 字节=32 时间<1ms TTL=64

172.16.31.188 的 Ping 统计信息:

    数据包: 已发送 = 9,已接收 = 8,丢失 = 1 (11% 丢失),


8.更改DNS服务器的IP为虚拟ip

DNS服务器构建请参考博客:http://sohudrgon.blog.51cto.com/3088108/1588344


# vim /var/named/stu31.com.zone 

$TTL 600

$ORIGIN stu31.com.

@       IN      SOA     ns1.stu31.com.  root.stu31.com. (

                        2014121801

                        1D

                        5M

                        1W

                        1H)

@       IN      NS      ns1.stu31.com.

ns1     IN      A       172.16.31.52

www     IN      A       172.16.31.188


重启named服务器;


9.访问测试:

wKioL1S53sDBAiR6AANRlVEI4c0206.jpg



wKioL1S53trQxJ3RAALSuJk8TLk484.jpg




三.Keepalived服务根据nginx状态实现自动切换配置


1.默认情况下,keepalived工作模式并不能直接监控nginx服务,只有当keepalived服务挂掉后才能主备切换,nginx服务挂掉后不能实现主备服务器的切换,但是我们的目的就是要实现nginx服务keepalived挂掉后,都要主备切换。


以上有两种方法可以实现

A.keepalived配置文件中可以支持shell脚本,写个监听nginx服务的脚本就可以了

B.单独写个脚本来监听nginx和keepalived服务

keepalived的样板文件中有配置文件专门探测服务正常与否:

[root@proxy keepalived]# ls /usr/share/doc/keepalived-1.2.13/samples/

keepalived.conf.fwmark          keepalived.conf.track_interface

keepalived.conf.HTTP_GET.port   keepalived.conf.virtualhost

keepalived.conf.inhibit         keepalived.conf.virtual_server_group

keepalived.conf.IPv6            keepalived.conf.vrrp

keepalived.conf.misc_check      keepalived.conf.vrrp.localcheck

keepalived.conf.misc_check_arg  keepalived.conf.vrrp.lvs_syncd

keepalived.conf.quorum          keepalived.conf.vrrp.routes

keepalived.conf.sample          keepalived.conf.vrrp.scripts

keepalived.conf.SMTP_CHECK      keepalived.conf.vrrp.static_ipaddress

keepalived.conf.SSL_GET         keepalived.conf.vrrp.sync

keepalived.conf.status_code     sample.misccheck.smbcheck.sh

就是keepalived.conf.vrrp.localcheck这个样例文件中讲解了所有的探测服务正常与否的方法;




2.基于第一种情况我们在keepalived的配置文件中加入如下探测nginx服务是否正常:

主备节点都需要添加:

vrrp_script 

chk_nginx {               #检测nginx服务是否在运行有很多方式,比如进程,用脚本检测等等 

   script "killall -0 nginx"  #用shell命令检查nginx服务是否存在 

   interval 1                 #时间间隔为1秒检测一次 

   weight -2                  #当nginx的服务不存在了,就把当前的权重-2 

   fall 2                     #测试失败的次数 

   rise 1                     #测试成功的次数 

然后在vrrp_instance配置段中引用定义的脚本名称;

track_script { 

    chk_nginx   #引用上面的vrrp_script定义的脚本名称 

}


实例测试:

MASTER节点的配置文件:

[root@proxy keepalived]# cat keepalived.conf

global_defs {

        notification_email {

                root@stu31.com

        }

        notification_email_from kaadmin@stu31.com

        smtp_server 127.0.0.1

        smtp_connect_timeout 30

        router_id LVS_DEVEL

}

vrrp_script chk_nginx {               #检测nginx服务是否在运行有很多方式,比如进程,用脚本检测等等 

   script "killall -0 nginx"  #用shell命令检查nginx服务是否存在 

   interval 1                 #时间间隔为1秒检测一次 

   weight -2                  #当nginx的服务不存在了,就把当前的权重-2 

   fall 2                     #测试失败的次数 

   rise 1                     #测试成功的次数 

vrrp_instance  VI_1 {

        state MASTER

        interface eth0

        virtual_router_id 100

        mcast_src_ip=172.16.31.52

        priority 100

        advert_int 1

        authentication {

                auth_type PASS

                auth_pass oracle

        }

        virtual_ipaddress {

                172.16.31.188/16 dev eth0 

        }

        track_script { 

                chk_nginx   #引用上面的vrrp_script定义的脚本名称 

        } 

}


BACKUP节点的配置文件:

[root@proxy2 keepalived]# cat keepalived.conf

global_defs {

        notification_email {

                root@stu31.com

        }

        notification_email_from kaadmin@stu31.com

        smtp_server 127.0.0.1

        smtp_connect_timeout 30

        router_id LVS_DEVEL

}

vrrp_script chk_nginx {               #检测nginx服务是否在运行有很多方式,比如进程,用脚本检测等等 

   script "killall -0 nginx"  #用shell命令检查nginx服务是否存在 

   interval 1                 #时间间隔为1秒检测一次 

   weight -2                  #当nginx的服务不存在了,就把当前的权重-2 

   fall 2                     #测试失败的次数 

   rise 1                     #测试成功的次数 

vrrp_instance  VI_1 {

        state BACKUP

        interface eth0

        virtual_router_id 100

        mcast_src_ip=172.16.31.53

        priority 99

        advert_int 1

        authentication {

                auth_type PASS

                auth_pass oracle

        }

        virtual_ipaddress {

                172.16.31.188/16 dev eth0 

        }

        track_script { 

                chk_nginx   #引用上面的vrrp_script定义的脚本名称 

        } 

}


重启keepalived服务;我们将主节点的nginx服务停止;测试keepalived服务是否自动切换到备用节点:

重启服务;

[root@proxy keepalived]# service keepalived restart ; ssh proxy2 "service keepalived restart"

Stopping keepalived:                                       [  OK  ]

Starting keepalived:                                       [  OK  ]

Stopping keepalived: [  OK  ]

Starting keepalived: [  OK  ]


查看日志可以发现已经在检查nginx服务了:

MASTE节点的启动日志:

[root@proxy keepalived]# tail -f /var/log/messages 

Jan 16 17:18:02 proxy Keepalived[6098]: Starting Keepalived v1.2.13 (10/15,2014)

Jan 16 17:18:02 proxy Keepalived[6100]: Starting Healthcheck child process, pid=6102

Jan 16 17:18:02 proxy Keepalived[6100]: Starting VRRP child process, pid=6104

Jan 16 17:18:02 proxy Keepalived_vrrp[6104]: Netlink reflector reports IP 172.16.31.52 added

Jan 16 17:18:02 proxy Keepalived_healthcheckers[6102]: Netlink reflector reports IP 172.16.31.52 added

Jan 16 17:18:02 proxy Keepalived_healthcheckers[6102]: Netlink reflector reports IP fe80::a00:27ff:fe3b:2360 added

Jan 16 17:18:02 proxy Keepalived_vrrp[6104]: Netlink reflector reports IP fe80::a00:27ff:fe3b:2360 added

Jan 16 17:18:02 proxy Keepalived_healthcheckers[6102]: Registering Kernel netlink reflector

Jan 16 17:18:02 proxy Keepalived_vrrp[6104]: Registering Kernel netlink reflector

Jan 16 17:18:02 proxy Keepalived_healthcheckers[6102]: Registering Kernel netlink command channel

Jan 16 17:18:02 proxy Keepalived_vrrp[6104]: Registering Kernel netlink command channel

Jan 16 17:18:02 proxy Keepalived_vrrp[6104]: Registering gratuitous ARP shared channel

Jan 16 17:18:02 proxy Keepalived_healthcheckers[6102]: Opening file '/etc/keepalived/keepalived.conf'.

Jan 16 17:18:02 proxy Keepalived_healthcheckers[6102]: Configuration is using : 7495 Bytes

Jan 16 17:18:02 proxy Keepalived_vrrp[6104]: Opening file '/etc/keepalived/keepalived.conf'.

Jan 16 17:18:02 proxy Keepalived_vrrp[6104]: Configuration is using : 65170 Bytes

Jan 16 17:18:02 proxy Keepalived_vrrp[6104]: Using LinkWatch kernel netlink reflector...

Jan 16 17:18:02 proxy Keepalived_vrrp[6104]: VRRP sockpool: [ifindex(2), proto(112), unicast(0), fd(10,11)]

Jan 16 17:18:02 proxy Keepalived_healthcheckers[6102]: Using LinkWatch kernel netlink reflector...

Jan 16 17:18:02 proxy Keepalived_vrrp[6104]: VRRP_Script(chk_nginx) succeeded

Jan 16 17:18:02 proxy Keepalived_vrrp[6104]: VRRP_Instance(VI_1) Transition to MASTER STATE

Jan 16 17:18:02 proxy Keepalived_vrrp[6104]: VRRP_Instance(VI_1) Received lower prio advert, forcing new election

Jan 16 17:18:03 proxy Keepalived_vrrp[6104]: VRRP_Instance(VI_1) Entering MASTER STATE

Jan 16 17:18:03 proxy Keepalived_vrrp[6104]: VRRP_Instance(VI_1) setting protocol VIPs.

Jan 16 17:18:03 proxy Keepalived_vrrp[6104]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 172.16.31.188

Jan 16 17:18:03 proxy Keepalived_healthcheckers[6102]: Netlink reflector reports IP 172.16.31.188 added



BACKUP节点的启动日志:

[root@proxy2 keepalived]# tail -f /var/log/messages 

Jan 16 17:18:03 proxy2 Keepalived[25883]: Starting Keepalived v1.2.13 (10/15,2014)

Jan 16 17:18:03 proxy2 Keepalived[25885]: Starting Healthcheck child process, pid=25887

Jan 16 17:18:03 proxy2 Keepalived[25885]: Starting VRRP child process, pid=25888

Jan 16 17:18:03 proxy2 Keepalived_vrrp[25888]: Netlink reflector reports IP 172.16.31.53 added

Jan 16 17:18:03 proxy2 Keepalived_vrrp[25888]: Netlink reflector reports IP fe80::a00:27ff:fe6e:bd28 added

Jan 16 17:18:03 proxy2 Keepalived_healthcheckers[25887]: Netlink reflector reports IP 172.16.31.53 added

Jan 16 17:18:03 proxy2 Keepalived_vrrp[25888]: Registering Kernel netlink reflector

Jan 16 17:18:03 proxy2 Keepalived_healthcheckers[25887]: Netlink reflector reports IP fe80::a00:27ff:fe6e:bd28 added

Jan 16 17:18:03 proxy2 Keepalived_healthcheckers[25887]: Registering Kernel netlink reflector

Jan 16 17:18:03 proxy2 Keepalived_healthcheckers[25887]: Registering Kernel netlink command channel

Jan 16 17:18:03 proxy2 Keepalived_healthcheckers[25887]: Opening file '/etc/keepalived/keepalived.conf'.

Jan 16 17:18:03 proxy2 Keepalived_vrrp[25888]: Registering Kernel netlink command channel

Jan 16 17:18:03 proxy2 Keepalived_vrrp[25888]: Registering gratuitous ARP shared channel

Jan 16 17:18:03 proxy2 Keepalived_vrrp[25888]: Opening file '/etc/keepalived/keepalived.conf'.

Jan 16 17:18:03 proxy2 Keepalived_healthcheckers[25887]: Configuration is using : 7495 Bytes

Jan 16 17:18:03 proxy2 Keepalived_vrrp[25888]: Configuration is using : 65170 Bytes

Jan 16 17:18:03 proxy2 Keepalived_vrrp[25888]: Using LinkWatch kernel netlink reflector...

Jan 16 17:18:03 proxy2 Keepalived_vrrp[25888]: VRRP_Instance(VI_1) Entering BACKUP STATE

Jan 16 17:18:03 proxy2 Keepalived_vrrp[25888]: VRRP sockpool: [ifindex(2), proto(112), unicast(0), fd(10,11)]

Jan 16 17:18:03 proxy2 Keepalived_healthcheckers[25887]: Using LinkWatch kernel netlink reflector...

Jan 16 17:18:03 proxy2 Keepalived_vrrp[25888]: VRRP_Script(chk_nginx) succeeded

只是检测了nginx服务;



我们在MASTER节点关闭nginx服务后观察:

[root@proxy keepalived]# service nginx stop

Stopping nginx:                                            [  OK  ]


观察日志,主节点检查服务失败,移除VIP地址;

MASTE节点的启动日志:

[root@proxy keepalived]# tail -f /var/log/messages 

Jan 16 17:21:20 proxy Keepalived_vrrp[6104]: VRRP_Script(chk_nginx) failed

Jan 16 17:21:22 proxy Keepalived_vrrp[6104]: VRRP_Instance(VI_1) Received higher prio advert

Jan 16 17:21:22 proxy Keepalived_vrrp[6104]: VRRP_Instance(VI_1) Entering BACKUP STATE

Jan 16 17:21:22 proxy Keepalived_vrrp[6104]: VRRP_Instance(VI_1) removing protocol VIPs.

Jan 16 17:21:22 proxy Keepalived_healthcheckers[6102]: Netlink reflector reports IP 172.16.31.188 removed



备用节点检查nginx服务正常,进行自动加载VIP:

[root@proxy2 keepalived]# tail -f /var/log/messages 

Jan 16 17:21:22 proxy2 Keepalived_vrrp[25888]: VRRP_Instance(VI_1) forcing a new MASTER election

Jan 16 17:21:22 proxy2 Keepalived_vrrp[25888]: VRRP_Instance(VI_1) forcing a new MASTER election

Jan 16 17:21:23 proxy2 Keepalived_vrrp[25888]: VRRP_Instance(VI_1) Transition to MASTER STATE

Jan 16 17:21:24 proxy2 Keepalived_vrrp[25888]: VRRP_Instance(VI_1) Entering MASTER STATE

Jan 16 17:21:24 proxy2 Keepalived_vrrp[25888]: VRRP_Instance(VI_1) setting protocol VIPs.

Jan 16 17:21:24 proxy2 Keepalived_healthcheckers[25887]: Netlink reflector reports IP 172.16.31.188 added

Jan 16 17:21:24 proxy2 Keepalived_vrrp[25888]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 172.16.31.188

Jan 16 17:21:29 proxy2 Keepalived_vrrp[25888]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 172.16.31.188


至此,内置检测脚本测试服务正常与否的设置就成功。



3.基于第二种情况,我们单独写一个脚本来探测nginx服务是否正常;探测nginx进程正常与否

我们需要跟上面的设置区分开来,如果使用独立脚本,上面的内置脚本就不用设置了。

#vim nginxpidcheck.sh

#!/bin/bash 

while  : 

do 

 nginxpid=`ps -C nginx --no-header | wc -l` 

 if [ $nginxpid -eq 0 ];then 

  /usr/local/nginx/sbin/nginx 

  sleep 5 

  nginxpid=`ps -C nginx --no-header | wc -l` 

  echo $nginxpid 

    if [ $nginxpid -eq 0 ];then 

 /etc/init.d/keepalived stop 

   fi 

 fi 

 sleep 5 

done


我们将脚本制定为任务计划运行即可,我们测试就直接交给后台自动运行:


这是一个无限循环的脚本,放在主Nginx机器上(因为目前主要是由它提供服务),每隔5秒执行一次,用ps -C 命令来收集nginx的PID值到底是否为0,如果是0的话(即Nginx进程死掉了),尝试启动nginx进程;如果继续为0,即nginx启动失改, 则关闭本机的Keeplaived进程,VIP地址则会由备机接管,当然了,整个网站就会由备机的Nginx来提供服务了,这样保证Nginx进程的高可用。



实例测试:


我们将脚本放在/etc/keepalived目录下,两个节点都存放:

[root@proxy2 keepalived]# ls

keepalived.conf   nginxpidcheck.sh

直接交给后台自动运行,两个节点都运行:

#nohup sh /etc/keepalived/nginxpidcheck.sh &


我们停止主节点的nginx服务:

[root@proxy keepalived]# service nginx stop

Stopping nginx:                                            [  OK  ]



观察日志查看主备切换过程成功与否:


MASTE节点的启动日志:

[root@proxy keepalived]# tail -f /var/log/messages 

Jan 16 17:33:37 proxy Keepalived[7221]: Stopping Keepalived v1.2.13 (10/15,2014)

Jan 16 17:33:37 proxy Keepalived_vrrp[7225]: VRRP_Instance(VI_1) sending 0 priority

Jan 16 17:33:37 proxy Keepalived_vrrp[7225]: VRRP_Instance(VI_1) removing protocol VIPs.

Jan 16 17:33:37 proxy Keepalived_healthcheckers[7224]: Netlink reflector reports IP 172.16.31.188 removed

VIP移除了;


备用节点检查nginx服务正常,进行自动加载VIP:

[root@proxy2 keepalived]# tail -f /var/log/messages 

Jan 16 17:33:37 proxy2 Keepalived_vrrp[26984]: VRRP_Instance(VI_1) Transition to MASTER STATE

Jan 16 17:33:38 proxy2 Keepalived_vrrp[26984]: VRRP_Instance(VI_1) Entering MASTER STATE

Jan 16 17:33:38 proxy2 Keepalived_vrrp[26984]: VRRP_Instance(VI_1) setting protocol VIPs.

Jan 16 17:33:38 proxy2 Keepalived_healthcheckers[26983]: Netlink reflector reports IP 172.16.31.188 added

Jan 16 17:33:38 proxy2 Keepalived_vrrp[26984]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 172.16.31.188

Jan 16 17:33:43 proxy2 Keepalived_vrrp[26984]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 172.16.31.188


访问测试,静态内容是转到了节点proxy2上了:

wKioL1S53_eAp2kfAABgUCIIQJM966.jpg


4.基于邮件通知形式的自动切换主备节点的脚本构建

邮件通知脚本构建:将脚本放置在/etc/keepalived/下,两个节点都需要创建


[root@proxy keepalived]# vim notify.sh

#!/bin/bash

vip=172.16.31.188

contact='root@localhost'

notify() {

    mailsubject="`hostname` to be $1: $vip floating"

    mailbody="`date '+%F %H:%M:%S'`: vrrp transition, `hostname` changed to be $1"

    echo $mailbody | mail -s "$mailsubject" $contact

}

case "$1" in

    master)

        notify master

        /etc/rc.d/init.d/nginx start

        exit 0

    ;;

    backup)

        notify backup

        /etc/rc.d/init.d/nginx stop

        exit 0

    ;;

    fault)

        notify fault

        /etc/rc.d/init.d/nginx stop

        exit 0

    ;;

    *)

        echo 'Usage: `basename $0` {master|backup|fault}'

        exit 1

    ;;

esac


如果是主MASTER节点,我们就启动nginx服务;如果是BACKUP备用节点我们就停止nginx服务;如果节点故障,我们停止nginx服务;

需要在keepalived配置文件中进行脚本调用:

MASTER节点:

[root@proxy keepalived]# cat keepalived.conf

global_defs {

        notification_email {

                root@stu31.com

        }

        notification_email_from kaadmin@stu31.com

        smtp_server 127.0.0.1

        smtp_connect_timeout 30

        router_id LVS_DEVEL

}

vrrp_script chk_maintance_down {    #检查脚本,如果存在down这个文件,就将节点的权重减5

        script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"

        interval 1    #时间间隔为1秒检测一次 

        weight  -5    #当nginx的服务不存在了,就把当前的权重-5 

}

vrrp_instance  VI_1 {

        state MASTER

        interface eth0

        virtual_router_id 100

        mcast_src_ip=172.16.31.52

        priority 100

        advert_int 1

        authentication {

                auth_type PASS

                auth_pass oracle

        }

        virtual_ipaddress {

                172.16.31.188/16 dev eth0 

        }

        track_script {

                chk_maintance_down  #引用上面的vrrp_script定义的脚本名称 

        }

        #如果脚本检查到节点是主节点,就邮件通知管理员,并启动nginx服务器

        notify_master "/etc/keepalived/notify.sh master"

        #如果脚本检查到节点是备用节点,就邮件通知管理员,并停止nginx服务器

        notify_backup "/etc/keepalived/notify.sh backup"

        #如果脚本检查到节点是故障节点,就邮件通知管理员,并停止nginx服务器

        notify_fault "/etc/keepalived/notify.sh fault"

}


BACKUP节点也设置如下:

[root@proxy2 keepalived]# cat keepalived.conf

global_defs {

        notification_email {

                root@stu31.com

        }

        notification_email_from kaadmin@stu31.com

        smtp_server 127.0.0.1

        smtp_connect_timeout 30

        router_id LVS_DEVEL

}

vrrp_script chk_maintance_down {

        script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"

        interval 1

        weight  -5

}

vrrp_instance  VI_1 {

        state BACKUP

        interface eth0

        virtual_router_id 100

        mcast_src_ip=172.16.31.53

        priority 99

        advert_int 1

        authentication {

                auth_type PASS

                auth_pass oracle

        }

        virtual_ipaddress {

                172.16.31.188/16 dev eth0 

        }

        track_script {

                chk_maintance_down

        }

        notify_master "/etc/keepalived/notify.sh master"

        notify_backup "/etc/keepalived/notify.sh backup"

        notify_fault "/etc/keepalived/notify.sh fault"

}


我们重启keepalived服务器;观察节点的选举情况,

MASTER节点的日志:

[root@proxy keepalived]# tail -f /var/log/messages 

Jan 16 18:09:36 proxy Keepalived[10991]: Starting Keepalived v1.2.13 (10/15,2014)

Jan 16 18:09:36 proxy Keepalived[10993]: Starting Healthcheck child process, pid=10996

Jan 16 18:09:36 proxy Keepalived[10993]: Starting VRRP child process, pid=10997

Jan 16 18:09:36 proxy Keepalived_healthcheckers[10996]: Netlink reflector reports IP 172.16.31.52 added

Jan 16 18:09:36 proxy Keepalived_healthcheckers[10996]: Netlink reflector reports IP fe80::a00:27ff:fe3b:2360 added

Jan 16 18:09:36 proxy Keepalived_healthcheckers[10996]: Registering Kernel netlink reflector

Jan 16 18:09:36 proxy Keepalived_healthcheckers[10996]: Registering Kernel netlink command channel

Jan 16 18:09:36 proxy Keepalived_healthcheckers[10996]: Opening file '/etc/keepalived/keepalived.conf'.

Jan 16 18:09:36 proxy Keepalived_healthcheckers[10996]: Configuration is using : 7599 Bytes

Jan 16 18:09:36 proxy Keepalived_vrrp[10997]: Netlink reflector reports IP 172.16.31.52 added

Jan 16 18:09:36 proxy Keepalived_vrrp[10997]: Netlink reflector reports IP fe80::a00:27ff:fe3b:2360 added

Jan 16 18:09:36 proxy Keepalived_vrrp[10997]: Registering Kernel netlink reflector

Jan 16 18:09:36 proxy Keepalived_vrrp[10997]: Registering Kernel netlink command channel

Jan 16 18:09:36 proxy Keepalived_vrrp[10997]: Registering gratuitous ARP shared channel

Jan 16 18:09:36 proxy Keepalived_healthcheckers[10996]: Using LinkWatch kernel netlink reflector...

Jan 16 18:09:36 proxy Keepalived_vrrp[10997]: Opening file '/etc/keepalived/keepalived.conf'.

Jan 16 18:09:36 proxy Keepalived_vrrp[10997]: Configuration is using : 65356 Bytes

Jan 16 18:09:36 proxy Keepalived_vrrp[10997]: Using LinkWatch kernel netlink reflector...

Jan 16 18:09:36 proxy Keepalived_vrrp[10997]: VRRP sockpool: [ifindex(2), proto(112), unicast(0), fd(10,11)]

#检查出无down这个文件;

Jan 16 18:09:36 proxy Keepalived_vrrp[10997]: VRRP_Script(chk_maintance_down) succeeded

Jan 16 18:09:37 proxy Keepalived_vrrp[10997]: VRRP_Instance(VI_1) Transition to MASTER STATE

Jan 16 18:09:38 proxy Keepalived_vrrp[10997]: VRRP_Instance(VI_1) Entering MASTER STATE

Jan 16 18:09:38 proxy Keepalived_vrrp[10997]: VRRP_Instance(VI_1) setting protocol VIPs.

Jan 16 18:09:38 proxy Keepalived_vrrp[10997]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 172.16.31.188

Jan 16 18:09:38 proxy Keepalived_healthcheckers[10996]: Netlink reflector reports IP 172.16.31.188 added

Jan 16 18:09:43 proxy Keepalived_vrrp[10997]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 172.16.31.188



BACKUP节点的日志:

[root@proxy2 keepalived]# tail -f /var/log/messages 

Jan 16 18:09:36 proxy2 Keepalived[29190]: Starting Keepalived v1.2.13 (10/15,2014)

Jan 16 18:09:36 proxy2 Keepalived[29192]: Starting Healthcheck child process, pid=29194

Jan 16 18:09:36 proxy2 Keepalived[29192]: Starting VRRP child process, pid=29195

Jan 16 18:09:36 proxy2 Keepalived_vrrp[29195]: Netlink reflector reports IP 172.16.31.53 added

Jan 16 18:09:36 proxy2 Keepalived_healthcheckers[29194]: Netlink reflector reports IP 172.16.31.53 added

Jan 16 18:09:36 proxy2 Keepalived_healthcheckers[29194]: Netlink reflector reports IP fe80::a00:27ff:fe6e:bd28 added

Jan 16 18:09:36 proxy2 Keepalived_healthcheckers[29194]: Registering Kernel netlink reflector

Jan 16 18:09:36 proxy2 Keepalived_healthcheckers[29194]: Registering Kernel netlink command channel

Jan 16 18:09:36 proxy2 Keepalived_vrrp[29195]: Netlink reflector reports IP fe80::a00:27ff:fe6e:bd28 added

Jan 16 18:09:36 proxy2 Keepalived_vrrp[29195]: Registering Kernel netlink reflector

Jan 16 18:09:36 proxy2 Keepalived_vrrp[29195]: Registering Kernel netlink command channel

Jan 16 18:09:36 proxy2 Keepalived_vrrp[29195]: Registering gratuitous ARP shared channel

Jan 16 18:09:36 proxy2 Keepalived_healthcheckers[29194]: Opening file '/etc/keepalived/keepalived.conf'.

Jan 16 18:09:36 proxy2 Keepalived_healthcheckers[29194]: Configuration is using : 7599 Bytes

Jan 16 18:09:36 proxy2 Keepalived_vrrp[29195]: Opening file '/etc/keepalived/keepalived.conf'.

Jan 16 18:09:36 proxy2 Keepalived_vrrp[29195]: Configuration is using : 65356 Bytes

Jan 16 18:09:36 proxy2 Keepalived_healthcheckers[29194]: Using LinkWatch kernel netlink reflector...

Jan 16 18:09:36 proxy2 Keepalived_vrrp[29195]: Using LinkWatch kernel netlink reflector...

Jan 16 18:09:36 proxy2 Keepalived_vrrp[29195]: VRRP_Instance(VI_1) Entering BACKUP STATE

Jan 16 18:09:36 proxy2 Keepalived_vrrp[29195]: VRRP sockpool: [ifindex(2), proto(112), unicast(0), fd(10,11)]

Jan 16 18:09:36 proxy2 Keepalived_vrrp[29195]: VRRP_Script(chk_maintance_down) succeeded

Jan 16 18:09:43 proxy2 Keepalived[29192]: Stopping Keepalived v1.2.13 (10/15,2014)



查看邮件:

MASTER主节点的邮件:

[root@proxy keepalived]# mail

Heirloom Mail version 12.4 7/29/08.  Type ? for help.

"/var/spool/mail/root": 2 messages 2 new

>N  1 root                  Fri Jan 16 18:08  18/696   "proxy.stu31.com to be master: 172.16.31.188 floating"

 N  2 root                  Fri Jan 16 18:09  18/696   "proxy.stu31.com to be master: 172.16.31.188 floating"

& 2

Message  2:

From root@proxy.stu31.com  Fri Jan 16 18:09:38 2015

Return-Path: <root@proxy.stu31.com>

X-Original-To: root@localhost

Delivered-To: root@localhost.stu31.com

Date: Fri, 16 Jan 2015 18:09:38 +0800

To: root@localhost.stu31.com

Subject: proxy.stu31.com to be master: 172.16.31.188 floating

User-Agent: Heirloom mailx 12.4 7/29/08

Content-Type: text/plain; charset=us-ascii

From: root@proxy.stu31.com (root)

Status: R

2015-01-16 18:09:38: vrrp transition, proxy.stu31.com changed to be master



备用节点的邮件:

[root@proxy2 keepalived]# mail

Heirloom Mail version 12.4 7/29/08.  Type ? for help.

"/var/spool/mail/root": 2 messages 2 new

>N  1 root                  Fri Jan 16 18:08  18/703   "proxy2.stu31.com to be backup: 172.16.31.188 floating"

 N  2 root                  Fri Jan 16 18:09  18/703   "proxy2.stu31.com to be backup: 172.16.31.188 floating"

& 2

Message  2:

From root@proxy2.stu31.com  Fri Jan 16 18:09:36 2015

Return-Path: <root@proxy2.stu31.com>

X-Original-To: root@localhost

Delivered-To: root@localhost.stu31.com

Date: Fri, 16 Jan 2015 18:09:36 +0800

To: root@localhost.stu31.com

Subject: proxy2.stu31.com to be backup: 172.16.31.188 floating

User-Agent: Heirloom mailx 12.4 7/29/08

Content-Type: text/plain; charset=us-ascii

From: root@proxy2.stu31.com (root)

Status: R

2015-01-16 18:09:36: vrrp transition, proxy2.stu31.com changed to be backup


我们在主节点的/etc/keepalived/目录下创建一个down文件,来观察主节点是否会切换到备用节点:

[root@proxy keepalived]# touch down


查看主节点日志:

MASTER节点的日志:

[root@proxy keepalived]# tail -f /var/log/messages 

Jan 16 19:09:10 proxy Keepalived_vrrp[20675]: VRRP_Script(chk_maintance_down) failed

Jan 16 19:09:12 proxy Keepalived_vrrp[20675]: VRRP_Instance(VI_1) Received higher prio advert

Jan 16 19:09:12 proxy Keepalived_vrrp[20675]: VRRP_Instance(VI_1) Entering BACKUP STATE

Jan 16 19:09:12 proxy Keepalived_vrrp[20675]: VRRP_Instance(VI_1) removing protocol VIPs.

Jan 16 19:09:12 proxy Keepalived_healthcheckers[20674]: Netlink reflector reports IP 172.16.31.188 removed


BACKUP节点的日志:

[root@proxy2 keepalived]# tail -f /var/log/messages 

Jan 16 19:09:12 proxy2 Keepalived_vrrp[2320]: VRRP_Instance(VI_1) forcing a new MASTER election

Jan 16 19:09:12 proxy2 Keepalived_vrrp[2320]: VRRP_Instance(VI_1) forcing a new MASTER election

Jan 16 19:09:13 proxy2 Keepalived_vrrp[2320]: VRRP_Instance(VI_1) Transition to MASTER STATE

Jan 16 19:09:14 proxy2 Keepalived_vrrp[2320]: VRRP_Instance(VI_1) Entering MASTER STATE

Jan 16 19:09:14 proxy2 Keepalived_vrrp[2320]: VRRP_Instance(VI_1) setting protocol VIPs.

Jan 16 19:09:14 proxy2 Keepalived_healthcheckers[2319]: Netlink reflector reports IP 172.16.31.188 added

Jan 16 19:09:14 proxy2 Keepalived_vrrp[2320]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 172.16.31.188

Jan 16 19:09:19 proxy2 Keepalived_vrrp[2320]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 172.16.31.188



查看邮件:

主节点成为了备用节点了:

[root@proxy keepalived]# mail

Heirloom Mail version 12.4 7/29/08.  Type ? for help.

"/var/spool/mail/root": 4 messages 2 new 3 unread

 U  1 root                  Fri Jan 16 18:08  19/706   "proxy.stu31.com to be master: 172.16.31.188 floating"

    2 root                  Fri Jan 16 18:09  19/707   "proxy.stu31.com to be master: 172.16.31.188 floating"

>N  3 root                  Fri Jan 16 19:06  18/696   "proxy.stu31.com to be master: 172.16.31.188 floating"

 N  4 root                  Fri Jan 16 19:09  18/696   "proxy.stu31.com to be backup: 172.16.31.188 floating"

& 4

Message  4:

From root@proxy.stu31.com  Fri Jan 16 19:09:12 2015

Return-Path: <root@proxy.stu31.com>

X-Original-To: root@localhost

Delivered-To: root@localhost.stu31.com

Date: Fri, 16 Jan 2015 19:09:12 +0800

To: root@localhost.stu31.com

Subject: proxy.stu31.com to be backup: 172.16.31.188 floating

User-Agent: Heirloom mailx 12.4 7/29/08

Content-Type: text/plain; charset=us-ascii

From: root@proxy.stu31.com (root)

Status: R

2015-01-16 19:09:12: vrrp transition, proxy.stu31.com changed to be backup

& quit


备用节点成为了主节点了:

[root@proxy2 keepalived]# mail

Heirloom Mail version 12.4 7/29/08.  Type ? for help.

"/var/spool/mail/root": 5 messages 3 new 4 unread

 U  1 root                  Fri Jan 16 18:08  19/713   "proxy2.stu31.com to be backup: 172.16.31.188 floating"

    2 root                  Fri Jan 16 18:09  19/714   "proxy2.stu31.com to be backup: 172.16.31.188 floating"

>N  3 root                  Fri Jan 16 19:06  18/703   "proxy2.stu31.com to be backup: 172.16.31.188 floating"

 N  4 root                  Fri Jan 16 19:06  18/703   "proxy2.stu31.com to be backup: 172.16.31.188 floating"

 N  5 root                  Fri Jan 16 19:09  18/703   "proxy2.stu31.com to be master: 172.16.31.188 floating"

& 5

Message  5:

From root@proxy2.stu31.com  Fri Jan 16 19:09:14 2015

Return-Path: <root@proxy2.stu31.com>

X-Original-To: root@localhost

Delivered-To: root@localhost.stu31.com

Date: Fri, 16 Jan 2015 19:09:14 +0800

To: root@localhost.stu31.com

Subject: proxy2.stu31.com to be master: 172.16.31.188 floating

User-Agent: Heirloom mailx 12.4 7/29/08

Content-Type: text/plain; charset=us-ascii

From: root@proxy2.stu31.com (root)

Status: R

2015-01-16 19:09:14: vrrp transition, proxy2.stu31.com changed to be master

& quit


我们在查看一下nginx服务的启动状况:

主节点的nginx服务状态是停止的:

[root@proxy keepalived]# service nginx status

nginx is stopped


备用节点的nginx服务状态是启动的:

[root@proxy2 keepalived]# service nginx status

nginx (pid  2679) is running...



至此,基于nginx+keepalived构建主备负载均衡代理服务器的实验就完成了。




四.双主模式构建

两个keepalived节点互为主备节点的模式构建;

实例配置文件:


proxy节点:

[root@proxy keepalived]# cat keepalived.conf

global_defs {

   notification_email {    #通知邮件地址

     root@localhost

   }

   notification_email_from root@localhost

   smtp_server 127.0.0.1        #邮件服务器地址

   smtp_connect_timeout 30

   router_id LVS_DEVEL

}

#

vrrp_script chk_nginx {

        script "killall -0 nginx"    #服务探测,返回0说明服务是正常的

        interval 1    #每隔1秒探测一次

        weight -2      #nginx服务下线,权重减2

}

#

vrrp_instance VI_1 {        #双主实例1

    state MASTER            #proxy(172.16.31.52)为主,proxy2(172.16.31.53)为备

    interface eth0

    virtual_router_id 88    #实例1的VRID为88

    garp_master_delay 1

    priority 100            #主(172.16.31.52)的优先级为100,从的(172.16.31.52)优先级为99

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 123456

    }

#

    virtual_ipaddress {

        172.16.31.88/16 dev eth0    #实例1的VIP

    }

    track_interface {

        eth0

    }

#

    track_script {        #脚本追踪

        chk_nginx

    }

    notify_master "/etc/keepalived/notify.sh master"

    notify_backup "/etc/keepalived/notify.sh backup"

    notify_fault "/etc/keepalived/notify.sh fault"

}

vrrp_instance VI_2 {

    state BACKUP        #实例2在proxy(172.16.31.52)上是备,在proxy2(172.16.31.53)上是主

    interface eth0

    virtual_router_id 188    #实例2的VRID是188

    garp_master_delay 1

    priority 200             #实例2在proxy上的优先级是200,在proxy2上的优先级是201

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 123456

    }

#

    virtual_ipaddress {

        172.16.31.188/16 dev eth0    #实例2的VIP

    }

    track_interface {

        eth0

    }

    track_script {        #脚本追踪

        chk_nginx

    }

}


proxy2节点的配置文件:

[root@proxy2 keepalived]# cat keepalived.conf

global_defs {

   notification_email {    #通知邮件地址

     root@localhost

   }

   notification_email_from root@localhost

   smtp_server 127.0.0.1        #邮件服务器地址

   smtp_connect_timeout 30

   router_id LVS_DEVEL

}

#

vrrp_script chk_nginx {

        script "killall -0 nginx"    #服务探测,返回0说明服务是正常的

        interval 1    #每隔1秒探测一次

        weight -2      #nginx服务下线,权重减2

}

#

vrrp_instance VI_1 {        #双主实例1

    state BACKUP            #proxy(172.16.31.52)为主,proxy2(172.16.31.53)为备

    interface eth0

    virtual_router_id 88    #实例1的VRID为88

    garp_master_delay 1

    priority 99            #主(172.16.31.52)的优先级为100,从的(172.16.31.52)优先级为99

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 123456

    }

#

    virtual_ipaddress {

        172.16.31.88/16 dev eth0    #实例1的VIP

    }

    track_interface {

        eth0

    }

#

    track_script {        #脚本追踪

        chk_nginx

    }

    notify_master "/etc/keepalived/notify.sh master"

    notify_backup "/etc/keepalived/notify.sh backup"

    notify_fault "/etc/keepalived/notify.sh fault"

}

vrrp_instance VI_2 {

    state MASTER        #实例2在proxy(172.16.31.52)上是备,在proxy2(172.16.31.53)上是主

    interface eth0

    virtual_router_id 188    #实例2的VRID是188

    garp_master_delay 1

    priority 201             #实例2在proxy上的优先级是200,在proxy2上的优先级是201

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 123456

    }

#

    virtual_ipaddress {

        172.16.31.188/16 dev eth0    #实例2的VIP

    }

    track_interface {

        eth0

    }

    track_script {        #脚本追踪

        chk_nginx

    }

}



启动keepalived服务:

[root@proxy keepalived]# service keepalived start ; ssh proxy2 "service keepalived start"    

Starting keepalived:                                       [  OK  ]

Starting keepalived: [  OK  ]



查看启动日志:

从中发现该节点将本该属于proxy2节点的VIP抢占过来了,能proxy节点出现问题了;去查看一下:

[root@proxy keepalived]# tail -f /var/log/messages 

Jan 16 20:19:06 proxy Keepalived[25249]: Starting Keepalived v1.2.13 (10/15,2014)

Jan 16 20:19:06 proxy Keepalived[25251]: Starting Healthcheck child process, pid=25254

Jan 16 20:19:06 proxy Keepalived[25251]: Starting VRRP child process, pid=25255

Jan 16 20:19:06 proxy Keepalived_vrrp[25255]: Netlink reflector reports IP 172.16.31.52 added

Jan 16 20:19:06 proxy Keepalived_healthcheckers[25254]: Netlink reflector reports IP 172.16.31.52 added

Jan 16 20:19:06 proxy Keepalived_vrrp[25255]: Netlink reflector reports IP fe80::a00:27ff:fe3b:2360 added

Jan 16 20:19:06 proxy Keepalived_vrrp[25255]: Registering Kernel netlink reflector

Jan 16 20:19:06 proxy Keepalived_vrrp[25255]: Registering Kernel netlink command channel

Jan 16 20:19:06 proxy Keepalived_vrrp[25255]: Registering gratuitous ARP shared channel

Jan 16 20:19:06 proxy Keepalived_healthcheckers[25254]: Netlink reflector reports IP fe80::a00:27ff:fe3b:2360 added

Jan 16 20:19:06 proxy Keepalived_healthcheckers[25254]: Registering Kernel netlink reflector

Jan 16 20:19:06 proxy Keepalived_healthcheckers[25254]: Registering Kernel netlink command channel

Jan 16 20:19:06 proxy Keepalived_vrrp[25255]: Opening file '/etc/keepalived/keepalived.conf'.

Jan 16 20:19:06 proxy Keepalived_healthcheckers[25254]: Opening file '/etc/keepalived/keepalived.conf'.

Jan 16 20:19:06 proxy Keepalived_vrrp[25255]: Configuration is using : 72628 Bytes

Jan 16 20:19:06 proxy Keepalived_healthcheckers[25254]: Configuration is using : 7886 Bytes

Jan 16 20:19:06 proxy Keepalived_healthcheckers[25254]: Using LinkWatch kernel netlink reflector...

Jan 16 20:19:06 proxy Keepalived_vrrp[25255]: Using LinkWatch kernel netlink reflector...

Jan 16 20:19:06 proxy Keepalived_vrrp[25255]: VRRP_Instance(VI_2) Entering BACKUP STATE

Jan 16 20:19:06 proxy Keepalived_vrrp[25255]: VRRP sockpool: [ifindex(2), proto(112), unicast(0), fd(10,11)]

Jan 16 20:19:06 proxy Keepalived_vrrp[25255]: VRRP_Script(chk_nginx) succeeded

Jan 16 20:19:07 proxy Keepalived_vrrp[25255]: VRRP_Instance(VI_1) Transition to MASTER STATE

Jan 16 20:19:08 proxy Keepalived_vrrp[25255]: VRRP_Instance(VI_1) Entering MASTER STATE

Jan 16 20:19:08 proxy Keepalived_vrrp[25255]: VRRP_Instance(VI_1) setting protocol VIPs.

Jan 16 20:19:08 proxy Keepalived_healthcheckers[25254]: Netlink reflector reports IP 172.16.31.88 added

Jan 16 20:19:08 proxy Keepalived_vrrp[25255]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 172.16.31.88

Jan 16 20:19:09 proxy Keepalived_vrrp[25255]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 172.16.31.88

Jan 16 20:19:10 proxy Keepalived_vrrp[25255]: VRRP_Instance(VI_2) forcing a new MASTER election

Jan 16 20:19:10 proxy Keepalived_vrrp[25255]: VRRP_Instance(VI_2) forcing a new MASTER election

Jan 16 20:19:11 proxy Keepalived_vrrp[25255]: VRRP_Instance(VI_2) Transition to MASTER STATE

Jan 16 20:19:12 proxy Keepalived_vrrp[25255]: VRRP_Instance(VI_2) Entering MASTER STATE

Jan 16 20:19:12 proxy Keepalived_vrrp[25255]: VRRP_Instance(VI_2) setting protocol VIPs.

Jan 16 20:19:12 proxy Keepalived_healthcheckers[25254]: Netlink reflector reports IP 172.16.31.188 added



#查看proxy2节点的日志,发现nginx服务检查失败,可能nginx服务停止了,我们去启动nginx服务后在查看日志:

[root@proxy2 keepalived]# tail -f /var/log/messages 

Jan 16 20:19:06 proxy2 Keepalived[7034]: Starting Keepalived v1.2.13 (10/15,2014)

Jan 16 20:19:06 proxy2 Keepalived[7036]: Starting Healthcheck child process, pid=7038

Jan 16 20:19:06 proxy2 Keepalived[7036]: Starting VRRP child process, pid=7039

Jan 16 20:19:06 proxy2 Keepalived_vrrp[7039]: Netlink reflector reports IP 172.16.31.53 added

Jan 16 20:19:06 proxy2 Keepalived_vrrp[7039]: Netlink reflector reports IP fe80::a00:27ff:fe6e:bd28 added

Jan 16 20:19:06 proxy2 Keepalived_vrrp[7039]: Registering Kernel netlink reflector

Jan 16 20:19:06 proxy2 Keepalived_vrrp[7039]: Registering Kernel netlink command channel

Jan 16 20:19:06 proxy2 Keepalived_vrrp[7039]: Registering gratuitous ARP shared channel

Jan 16 20:19:07 proxy2 Keepalived_vrrp[7039]: Opening file '/etc/keepalived/keepalived.conf'.

Jan 16 20:19:07 proxy2 Keepalived_healthcheckers[7038]: Netlink reflector reports IP 172.16.31.53 added

Jan 16 20:19:07 proxy2 Keepalived_healthcheckers[7038]: Netlink reflector reports IP fe80::a00:27ff:fe6e:bd28 added

Jan 16 20:19:07 proxy2 Keepalived_healthcheckers[7038]: Registering Kernel netlink reflector

Jan 16 20:19:07 proxy2 Keepalived_healthcheckers[7038]: Registering Kernel netlink command channel

Jan 16 20:19:07 proxy2 Keepalived_vrrp[7039]: Configuration is using : 72628 Bytes

Jan 16 20:19:07 proxy2 Keepalived_vrrp[7039]: Using LinkWatch kernel netlink reflector...

Jan 16 20:19:07 proxy2 Keepalived_healthcheckers[7038]: Opening file '/etc/keepalived/keepalived.conf'.

Jan 16 20:19:07 proxy2 Keepalived_healthcheckers[7038]: Configuration is using : 7886 Bytes

Jan 16 20:19:07 proxy2 Keepalived_vrrp[7039]: VRRP_Instance(VI_1) Entering BACKUP STATE

Jan 16 20:19:07 proxy2 Keepalived_vrrp[7039]: VRRP sockpool: [ifindex(2), proto(112), unicast(0), fd(10,11)]

Jan 16 20:19:07 proxy2 Keepalived_healthcheckers[7038]: Using LinkWatch kernel netlink reflector...

Jan 16 20:19:07 proxy2 Keepalived_vrrp[7039]: VRRP_Script(chk_nginx) succeeded

Jan 16 20:19:08 proxy2 Keepalived_vrrp[7039]: VRRP_Instance(VI_2) Transition to MASTER STATE

Jan 16 20:19:08 proxy2 Keepalived_vrrp[7039]: VRRP_Script(chk_nginx) failed

Jan 16 20:19:09 proxy2 Keepalived_vrrp[7039]: VRRP_Instance(VI_2) Entering MASTER STATE

Jan 16 20:19:09 proxy2 Keepalived_vrrp[7039]: VRRP_Instance(VI_2) setting protocol VIPs.

Jan 16 20:19:09 proxy2 Keepalived_healthcheckers[7038]: Netlink reflector reports IP 172.16.31.188 added

Jan 16 20:19:09 proxy2 Keepalived_vrrp[7039]: VRRP_Instance(VI_2) Sending gratuitous ARPs on eth0 for 172.16.31.188

Jan 16 20:19:10 proxy2 Keepalived_vrrp[7039]: VRRP_Instance(VI_2) Sending gratuitous ARPs on eth0 for 172.16.31.188

Jan 16 20:19:10 proxy2 Keepalived_vrrp[7039]: VRRP_Instance(VI_2) Received higher prio advert

Jan 16 20:19:10 proxy2 Keepalived_vrrp[7039]: VRRP_Instance(VI_2) Entering BACKUP STATE

Jan 16 20:19:10 proxy2 Keepalived_vrrp[7039]: VRRP_Instance(VI_2) removing protocol VIPs.

Jan 16 20:19:10 proxy2 Keepalived_healthcheckers[7038]: Netlink reflector reports IP 172.16.31.188 removed


在proxy2节点启动nginx服务

[root@proxy2 keepalived]# service nginx status

nginx is stopped

[root@proxy2 keepalived]# service nginx start

Starting nginx:                                            [  OK  ]



观察两个节点的日志记录:

proxy节点将属于proxy2节点的VIP返还了:

[root@proxy keepalived]# tail -f /var/log/messages 

Jan 16 20:19:12 proxy Keepalived_vrrp[25255]: VRRP_Instance(VI_2) Sending gratuitous ARPs on eth0 for 172.16.31.188

Jan 16 20:19:13 proxy Keepalived_vrrp[25255]: VRRP_Instance(VI_2) Sending gratuitous ARPs on eth0 for 172.16.31.188

Jan 16 20:23:28 proxy Keepalived_vrrp[25255]: VRRP_Instance(VI_2) Received higher prio advert

Jan 16 20:23:28 proxy Keepalived_vrrp[25255]: VRRP_Instance(VI_2) Entering BACKUP STATE

Jan 16 20:23:28 proxy Keepalived_vrrp[25255]: VRRP_Instance(VI_2) removing protocol VIPs.

Jan 16 20:23:28 proxy Keepalived_healthcheckers[25254]: Netlink reflector reports IP 172.16.31.188 removed


proxy2节点的VIP设置成功:

[root@proxy2 keepalived]# tail -f /var/log/messages 

Jan 16 20:23:27 proxy2 Keepalived_vrrp[7039]: VRRP_Script(chk_nginx) succeeded

Jan 16 20:23:28 proxy2 Keepalived_vrrp[7039]: VRRP_Instance(VI_2) forcing a new MASTER election

Jan 16 20:23:28 proxy2 Keepalived_vrrp[7039]: VRRP_Instance(VI_2) forcing a new MASTER election

Jan 16 20:23:29 proxy2 Keepalived_vrrp[7039]: VRRP_Instance(VI_2) Transition to MASTER STATE

Jan 16 20:23:30 proxy2 Keepalived_vrrp[7039]: VRRP_Instance(VI_2) Entering MASTER STATE

Jan 16 20:23:30 proxy2 Keepalived_vrrp[7039]: VRRP_Instance(VI_2) setting protocol VIPs.

Jan 16 20:23:30 proxy2 Keepalived_vrrp[7039]: VRRP_Instance(VI_2) Sending gratuitous ARPs on eth0 for 172.16.31.188

Jan 16 20:23:30 proxy2 Keepalived_healthcheckers[7038]: Netlink reflector reports IP 172.16.31.188 added

Jan 16 20:23:31 proxy2 Keepalived_vrrp[7039]: VRRP_Instance(VI_2) Sending gratuitous ARPs on eth0 for 172.16.31.188


我们在DNS服务器中增加一个域名,对应的虚拟IP为172.16.31.88:

[root@proxy keepalived]# vim /var/named/stu31.com.zone 

$TTL 600

$ORIGIN stu31.com.

@       IN      SOA     ns1.stu31.com.  root.stu31.com. (

                        2014121801

                        1D

                        5M

                        1W

                        1H)

@       IN      NS      ns1.stu31.com.

ns1     IN      A       172.16.31.52

www     IN      A       172.16.31.188

www1    IN      A       172.16.31.88



重启named服务器后在客户端访问测试:

wKiom1S54Sfw-myOAALsFWM07Iw967.jpg

至此,nginx+keepalived的双主高可用负载均衡集群构建成功!



本文转自 dengaosky 51CTO博客,原文链接:http://blog.51cto.com/dengaosky/1965348,如需转载请自行联系原作者
相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
1天前
|
负载均衡 算法 Linux
LVS+Keepalived:实现高效软负载均衡的利器
本文介绍了如何使用LVS(Linux Virtual Server)和Keepalived搭建高可用负载均衡集群。LVS通过不同调度算法将请求转发给后端服务器,而Keepalived基于VRRP协议实现服务高可用,避免IP单点故障。具体步骤包括环境准备、安装配置ipvsadm和Keepalived、启动服务及测试。文中还详细解释了配置文件中的关键参数,并提供了故障转移测试方法。最后,文章简要对比了软件、硬件和云负载均衡方案的特点,帮助读者选择合适的负载均衡策略。
21 4
|
4月前
|
Java 应用服务中间件 Shell
Nginx+Keepalived+Tomcat 实现Web高可用集群
Nginx+Keepalived+Tomcat 实现Web高可用集群
142 0
|
3月前
|
运维 负载均衡 网络协议
LVS+Keepalived 负载均衡
LVS+Keepalived 负载均衡
93 8
LVS+Keepalived 负载均衡
|
3月前
|
域名解析 运维 负载均衡
LVS+Keepalived 负载均衡(二)28-1
【8月更文挑战第28天】LVS+Keepalived 负载均衡 配置 LVS VIP
74 5
|
4月前
|
负载均衡 算法 应用服务中间件
负载均衡技术在Web服务器集群中的应用
【8月更文第28天】随着互联网的发展和用户对Web服务需求的增长,单台服务器很难满足大规模访问的需求。为了提高系统的稳定性和扩展性,通常会采用Web服务器集群的方式。在这种架构中,负载均衡器扮演着至关重要的角色,它能够合理地分配客户端请求到不同的后端服务器上,从而实现资源的最优利用。
148 2
|
4月前
|
负载均衡 前端开发 应用服务中间件
FastDFS+Nginx+fastdfs-nginx-module集群搭建
FastDFS+Nginx+fastdfs-nginx-module集群搭建
|
4月前
|
运维 负载均衡 监控
Nginx加Keepalived实现高可用
使用Nginx和Keepalived来实现高可用性的方案,对于确保关键服务的稳定性和可靠性来说是非常有效的。此配置涉及多个步骤,包括各个服务的安装、设置及测试,目标是在主服务器故障时能无缝切换,以确保服务的持续可用。正确的配置和充分的测试是实现高可用性的保证,这也要求管理员对这些工具和它们背后的原理有深入的了解。
87 1
|
4月前
|
负载均衡 算法 关系型数据库
MySQL集群如何实现负载均衡?
【8月更文挑战第16天】MySQL集群如何实现负载均衡?
247 6
|
4月前
|
负载均衡 网络协议
使用LVS搭建集群实现负载均衡(二)安装使用
【8月更文挑战第8天】使用LVS搭建集群实现负载均衡(二)安装使用
81 5
|
4月前
|
存储 负载均衡 算法
使用LVS搭建集群实现负载均衡(一)
【8月更文挑战第8天】使用LVS搭建集群实现负载均衡
184 5