Keepalives+lvs实现高可用httpd的双主模型

基础环境Centos 7.3 最小化安装四台 关闭防火墙及selinux

简单原理:

keepalived是以VRRP协议为实现基础的,VRRP全称Virtual
Router Redundancy Protocol
,即虚拟路由冗余协议。

虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backupmaster上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backupmaster。这样的话就可以保证路由器的高可用了。

LVSLinux Virtual
Server
的简写,意即linux虚拟服务器,是一个虚拟的服务器集群系统。

通过keepalives+lvs实现负载均衡及高可用。

Keepalives+lvs实现高可用httpd的双主模型

 

主机名

IP

提供的服务

客户机CIP

172.10.32.0

测试服务使用

lvs-1

172.10.32.1

主负载均衡器

lvs-2

172.10.32.2

备用负载均衡器

http-1

172.10.32.3

群集web1

http-2

172.10.32.4

群集web2

实验模型为:lvs-DR模型,对外提供的虚拟IP172.10.32.200    LVS-1为主,LVS_2为备

实验模型为:lvs-DR模型,对外提供的虚拟IP172.10.32.201    LVS-1为备,LVS_2为主

 

http组:
#yum install net-tools httpd –y

#echo $ip > /var/www/html/index.html           //$ipIP地址,如httpd-1172.10.32.3

#systemctl start httpd.service

#curl $ip   //查看对应web服务是不是正常访问

#vim web.sh

#!/bin/bash

#

vip=172.10.32.200

vic=172.10.32.201

mask=’255.255.255.255′

 

case $1 in

start)

    echo
1 > /proc/sys/net/ipv4/conf/all/arp_ignore

    echo
1 > /proc/sys/net/ipv4/conf/lo/arp_ignore

    echo
2 > /proc/sys/net/ipv4/conf/all/arp_announce

    echo
2 > /proc/sys/net/ipv4/conf/lo/arp_announce

    ifconfig
lo:0 $vip netmask $mask broadcast $vip up

    route
add -host $vip dev lo:0

    ifconfig
lo:1 $vic netmask $mask broadcast $vic up

    route
add -host $vic dev lo:1

    ;;

stop)

    ifconfig
lo:0 down

    ifconfig
lo:1 down

    echo
0 > /proc/sys/net/ipv4/conf/all/arp_ignore

    echo
0 > /proc/sys/net/ipv4/conf/lo/arp_ignore

    echo
0 > /proc/sys/net/ipv4/conf/all/arp_announce

    echo
0 > /proc/sys/net/ipv4/conf/lo/arp_announce

    ;;

*)

    echo
“Usage $(basename $0) start|stop”

    exit
1

    ;;

esac

#bash bash start

#ifconfig //查看对外虚拟ip绑定在lo网卡上

 

Lvs组:

#yum install ipvsadm.x86_64
keepalived.x86_64 httpd.x86_64 –y

#systemctl start httpd.server

Lvs-1#vi /etc/keepalived/keepalived.conf

! Configuration File for
keepalived

 

global_defs {

   notification_email {

    root@node1.localhost.localdomain

   }

   notification_email_from
Alexandre.Cassen@firewall.loc

   smtp_server 127.0.0.1

   smtp_connect_timeout 30

   router_id abd

   vrrp_mcast_group4 224.0.100.71

}

 

vrrp_instance web1 {

    state MASTER

    interface ens33

    virtual_router_id 88

    priority 100

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111ACSD

    }

    virtual_ipaddress {

    172.10.32.200
dev ens33 label ens33:0

    }

}

 

virtual_server
172.10.32.200  80 {

    delay_loop 6

    lb_algo rr

    lb_kind DR

    protocol TCP

 

    sorry_server
127.0.0.1 80

 

real_server 172.10.32.3 80 {

        weight 10

        HTTP_GET {

            url {

              path /

        status_code
200

            }

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

        }

    }

real_server 172.10.32.4 80 {

        weight 10

        HTTP_GET {

            url {

              path /

                status_code 200

            }

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

        }

    }

}

 

vrrp_instance web2 {

    state BACKUP

    interface ens33

    virtual_router_id 89

    priority 98

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass ANXLazsw

    }

    virtual_ipaddress {

        172.10.32.201 dev ens33 label ens33:1

    }

}

 

virtual_server
172.10.32.201  80 {

    delay_loop 6

    lb_algo rr

    lb_kind DR

    protocol TCP

       

        sorry_server 127.0.0.1 80

 

real_server 172.10.32.3 80 {

        weight 10

        HTTP_GET {

            url {

              path /

                status_code 200

            }

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

        }

    }

real_server 172.10.32.4 80 {

        weight 10

        HTTP_GET {

            url {

              path /

                status_code 200

            }

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

        }

    }

}

 

Lvs-2# vi /etc/keepalived/keepalived.conf

! Configuration File for
keepalived

 

global_defs {

   notification_email {

    root@node2.localhost.localdomain

   }

   notification_email_from
Alexandre.Cassen@firewall.loc

   smtp_server 127.0.0.1

   smtp_connect_timeout 30

   router_id abd

   vrrp_mcast_group4 224.0.100.71

}

 

vrrp_instance web1 {

    state BACKUP

    interface ens32

    virtual_router_id 88

    priority 98

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111ACSD

    }

    virtual_ipaddress {

    172.10.32.200
dev ens32 label ens32:0

    }

}

 

 

virtual_server
172.10.32.200  80 {

    delay_loop 6

    lb_algo rr

    lb_kind DR

    protocol TCP

 

    sorry_server
127.0.0.1 80

 

real_server 172.10.32.3 80 {

        weight 10

        HTTP_GET {

            url {

              path /

        status_code
200

            }

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

        }

    }

real_server 172.10.32.4 80 {

        weight 10

        HTTP_GET {

            url {

              path /

                status_code 200

            }

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

        }

    }

 

}

 

vrrp_instance web2 {

    state MASTER

    interface ens32

    virtual_router_id 89

    priority 100

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass ANXLazsw

    }

    virtual_ipaddress {

        172.10.32.201 dev ens32 label ens32:1

    }

}

 

virtual_server
172.10.32.201  80 {

    delay_loop 6

    lb_algo rr

    lb_kind DR

    protocol TCP

       

        sorry_server 127.0.0.1 80

 

real_server 172.10.32.3 80 {

        weight 10

        HTTP_GET {

            url {

              path /

                status_code 200

            }

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

        }

    }

real_server 172.10.32.4 80 {

        weight 10

        HTTP_GET {

            url {

              path /

                status_code 200

            }

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

        }

    }

}

 

提示:两个配置文件相差不大,但需要注意网卡名、主备模式、虚拟路由的id

 

Lvs

#systemctl start
keepalived.service

CIP进行测试

# for i in {1..14} ; do curl
172.10.32.201 ;done

# for i in {1..14} ; do curl
172.10.32.200 ;done

查看结果是不是为web服务器组ip并轮询

 

关闭web服务器组中一个web服务器,并运用上面命令测试,查看结果是不是显示未关闭服务器ip地址

 

关闭lvs服务器组,并运用上面命令测试,查看结果是不是显示为当前绑定对外虚拟ip的服务器ip

 

在关闭lvs服务器组中的一个,测试,查看结果是不是为当前绑定对外虚拟ip的服务器ip

 

然后重启web服务器进行测试。

 

 

 

原创文章,作者:chenbin,如若转载,请注明出处:http://www.178linux.com/75799

(1)
chenbinchenbin
上一篇 2017-05-15
下一篇 2017-05-15

相关推荐

  • LVS集群讲解

    目录 LVS介绍 LVS集群类型 LVS调度算法 ipvsadm/ipvs LVS-NAT模型演练 LVS-DR模型演练 LVS定义多集群 FWM实现多集群统一调度 LVS持久连接  每端口持久 每FWM持久 每客户端持久 LVS介绍 一般来说,LVS采用三层结构:负载调度器、服务器池、共享存储。工作在TCP/IP协议的四层,其转发是依赖于四层协议…

    Linux干货 2016-11-07
  • 通配符、正则表达式小计

    基本通配符:    *: 匹配任意长度的任意字符;    ?: 匹配任意的单个字符;    []: 匹配指定范围内的任意单个字符;    [^]: 匹配非指定范围内的任意单个字符;   简单示例:   &nbs…

    Linux干货 2017-03-16
  • 软连接与硬连接

    硬链接定义 新建的文件是已经存在的文件的一个别名,当原文件删除时,新建的文件仍然可以使用. 硬链接(hard link) ln   UNIX文件系统提供了一种将不同文件链接至同一个文件的机制,称这种机制为链接。它可以使得单个程序对同一文件使用不同的名字。这样的好处是文件系统只存在一个文件的副本。系统简单地通过在目录中建立一个新的登记项来实现这种连接。该登记项…

    Linux干货 2017-07-22
  • 系统启动和内核管理-1

    1、Linux 组成 kernel: 进程管理、内存管理、网络管理、驱动程序、文件系统、安全功能等等 rootfs: 程序和glibc 内核设计流派: 单内核(monolithic kernel)-Linux-把所有功能集成于同一个程序 微内核(micro kernel)-Windows, Solaris-每种功能使用一个单独子系统实现 1)、Linux内核…

    Linux干货 2016-09-13
  • 随笔—git的基本命令

    git是一个非常优秀的版本控制系统,可以对各类大小的项目进行源代码管理,  #git的常用功能如下: 1、从服务器上克隆完整的Git仓库(包括代码和版本信息)到单机上。 2、在本地仓库上根据不同的开发目的,创建分支,修改代码。 3、在本机上向自己创建的分支上提交代码。 4、在本机上合并分支。 5、将本地仓库代码和分支推送到服务器上的远程仓库 在官网…

    Linux干货 2016-07-04
  • 8.8作业

    4、如何设置tab缩进为4个字符?    set tabstop=4     5、复制/etc/rc.d/init.d/functions文件至/tmp目录;替换/tmp/functions文件中的/etc/sysconfig/init为/var/log; cp /etc/rc.d/init.d/functi…

    Linux干货 2016-08-11