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 19:27
下一篇 2017-05-15 20:08

相关推荐

  • 磁盘管理之文件系统

    一,概述 文件系统是操作系统用于明确存储设备或分区上的文件的方 法和数据结构;即在存储设备上组织文件的方法。操作系统 中负责管理和存储文件信息的软件结构称为文件管理系统, 简称文件系统。  从系统角度来看,文件系统是对文件存储设备的空间进行组 织和分配,负责文件存储并对存入的文件进行保护和检索的 系统。具体地说,它负责为用户建立文件,存入、读出、修…

    Linux干货 2016-09-05
  • Linux基础知识——网络管理基础

    OSI七层模型与TCP/IP模型的区别 写一个脚本,使用ping命令探测172.168.250.1-172.168.250.254之间的所有主机的在线状态,在线的用绿色表示,不在线的使用红色表示 #!/bin/bash for ((IP=1;IP<=254;IP++))     do  &nb…

    Linux干货 2016-12-11
  • linux 磁盘管理与文件挂载

        磁盘对于linux来说是至关重要的而且与它 的中心思想相关联,一切皆文件,因此就把磁盘分为了好多类型, 如:块设备,字符设备。对于每类磁盘的使用,我们对它进行了分区与规划,这就用到我们的分区与查看工具 fdisk,理论上磁盘容量足够时,可以建立任意数量的分区。  一.磁盘的管理与工具 1.  fdisk 强大的…

    2017-06-17
  • 硬盘分区及挂载

    标签:文件系统、分区、挂载 一、Linux的基本原则    1、一切皆文件(包括硬件);这个原则会会在很多方面得到体现; 磁盘在Linux中也表现为文件,即/dev目录下:IDE,ATA:/dev/hd[a-z]    SATA,SCSI,USB,SAS:sd[a-z]。    &nbsp…

    Linux干货 2015-05-18
  • CentOS 6上的防火墙策略的保存

    两种iptables的策略保存的方法

    2018-02-27
  • linux中的权限和ACL

    linux中权限详解和ACL

    2017-11-18