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

相关推荐

  • 8月20日程序包管理

    程序包管理 概述    API:Application Program Interface应用编程接口    ABI:Application Binary Interface应用二进制接口    Unix-like,  …

    Linux干货 2016-08-21
  • 笔记–8.4 文本处理工具,正则表达式

    cat 查看文本文件 命令功能: cat主要有三大功能: 1.一次显示整个文件:cat filename 2.从键盘创建一个文件:cat > filename 只能创建新文件,不能编辑已有文件. 3.将几个文件合并为一个文件:cat file1 file2 > fil…

    Linux干货 2016-08-07
  • Shell运算符

    Bash 支持很多运算符,包括算数运算符、关系运算符、布尔运算符、字符串运算符和文件测试运算符。 原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。 expr 是一款表达式计算工具,使用它能完成表达式的求值操作。 例如,两个数相加: #!/bin/bash val=`expr 2 + 2` echo …

    Linux干货 2017-04-18
  • 系统时间与硬件时间

    1. “系统时间”与“硬件时间”    系统时间: 一般说来就是我们执行 date 命令看到的时间,linux系统下所有的时间调用(除了直接访问硬件时间的命令)都是使用的这个时间。    硬件时间: 主板上BIOS中的时间,由主板电池供电来维持运行,系统开机时要读取这个时间,并根…

    Linux干货 2016-08-05
  • 0809linux基础小记(sed和vim用法)

    sed  [options] ‘scripts’ inputfile -n: 不输出模式空间内容的自动打印 -e: 多点编辑 -f:从指定文件中读取编辑脚本 -i:原处编辑 scripts: ’地址命令’ 地址定界: (1)  不给地址:对全文进行处理 (2)  单地址: #:  指定的行 例: sed '2…

    Linux干货 2016-08-11
  • SSH协议详解

    OpenSSH 一、 前言 使用SSH可以在本地主机和远程服务器之间进行加密地传输数据,实现数据的安全。而OpenSSH是SSH协议的免费开源实现,它采用安全、加密的网络连接工具代替了telnet、ftp等古老明文传输工具。 SSH(Secure Shell)是建立在应用层和传输层基础上的安全协议。SSH是目前较可靠,专为远程登陆会话和其他网络服务提供安全性…

    Linux干货 2016-12-16