文档章节

使用LVS和Keepalived搭建高可用WEB服务

奔跑的阿甘
 奔跑的阿甘
发布于 2016/10/09 09:16
字数 2085
阅读 127
收藏 1

by: 白马公园/naritech

 

         本文的主旨在于配置一个尽可能简单的高可用WEB服务系统,帮助读者理清keepalived、LVS等软件的配置和使用,为进一步用好LVS树立信心,夯实基础。

本文只涉及使用LVS和Keepalived解决WEB服务的高可用和高并发,对于WEB集群中的session共享即数据一致性问题不做讨论,对WEB集群中的session共享问题感兴趣的朋友可以参考我的另外一篇文章《nginx、tomcat、redis配置session共享》

         网上关于LVS和keepalived搭建高可用WEB服务的文章很多,本文的不同之处在于笔者在配置的过程中遇到了很多问题,因而走了不少弯路。所以本文的重点将放在这些问题的讲述上。

 

一、  系统架构

全系统包括五台服务器,均为虚拟机,安装Centos6.5操作系统,其中

hadoop01   192.168.75.88              安装keepalived,作为主负载调度器使用

hadoop02   192.168.75.89              安装keepalived,作为备用负载调度器使用

 

hadoop03   192.168.75.90              安装tomcat,作为真实Web服务器使用

hadoop04   192.168.75.91              安装tomcat,作为真实Web服务器使用

hadoop05   192.168.75.92              安装tomcat,作为真实Web服务器使用

 

         VIP设定为 192.168.75.188,正常运行时该IP被设置在hadoop01上,接受客户端请求并按照负载分配策略挑选出一台真实的服务器,并将请求分配给真实的服务器进行处理。当hadoop01上的keepalived退出运行时,VIP被设置到hadoop02上,hadoop02接管此前hadoop01的任务,继续接受客户端请求并提供负载调度服务

 

二、  keepalived的安装配置(hadoop01和hadoop02均需要安装配置)

 

2.1    keepalived版本选择

         最新的keepalived1.2.24对应Centos6.5操作系统在安装上有些问题,make不能成功,不推荐使用Keepalived1.2.6版本安装后运行异常,跟踪日志文件后无法定位问题,也不推荐使用,这里选择keepalived1.2.19,安装介质可以在keepalived官网上下载

 

2.2    keepalived安装前的准备

         1、需要安装C++编译器。

                   C++编译器的安装请参考《nginx、tomcat、redis配置session共享》

         2、需要安装openSSL

                   rpm -ivh zlib-1.2.3-29.el6.x86_64.rpm

rpm -ivh zlib-devel-1.2.3-29.el6.x86_64.rpm

rpm -ivh libsepol-devel-2.0.41-4.el6.x86_64.rpm

rpm -ivh pkgconfig-0.23-9.1.el6.x86_64.rpm

rpm -ivh libcom_err-devel-1.41.12-18.el6.x86_64.rpm

rpm -ivh keyutils-libs-devel-1.4-4.el6.x86_64.rpm

rpm -ivh libselinux-devel-2.0.94-5.3.el6_4.1.x86_64.rpm

rpm -ivh krb5-devel-1.10.3-10.el6_4.6.x86_64.rpm

rpm -ivh openssl-1.0.1e-15.el6.x86_64.rpm

                   rpm -ivh openssl-devel-1.0.1e-15.el6.x86_64.rpm

 

3、需要安装kernel-devel开发包

         rpm -ivh kernel-devel-2.6.32-431.el6.x86_64.rpm

 

2.3    keepalived的configure

        

./configure --prefix=/usr/local/keepalived --with-kernel-dir=/usr/src/kernels/2.6.32-431.el6.x86_64 --disable-fwmark

         当安装了kernel-devel开发包之后,系统就有了/usr/src/kernels/2.6.32-431.el6.x86_64这样的类似目录,直接找到这个目录即可

 

         Configure成功后会显示出以下内容:

 

         Keepalived configuration

------------------------

Keepalived version       : 1.2.19

Compiler                 : gcc

Compiler flags           : -g -O2

Extra Lib                : -lssl -lcrypto -lcrypt

Use IPVS Framework       : Yes

IPVS sync daemon support : Yes

IPVS use libnl           : No

fwmark socket support    : No

Use VRRP Framework       : Yes

Use VRRP VMAC            : Yes

SNMP support             : No

SHA1 support             : No

Use Debug flags          : No

        

特别要注意:Use IPVS Framework、IPVS sync daemon support、Use VRRP Framework、Use VRRP VMAC这四项必须为Yes

 

2.4    keepalived的make

         介质路径下直接键入make,注意使用root用户

         make成功之后会显示以下内容:

 

Make complete

make[1]: Leaving directory `/users/oracle/software/keepalived-1.2.19/genhash'

 

Make complete

 

2.5    keepalived的make install

         介质路径下直接键入make install,注意使用root用户

         make install成功之后会显示以下内容:

        

make[1]: Leaving directory `/users/oracle/software/keepalived-1.2.19/keepalived'

make -C genhash install

make[1]: Entering directory `/users/oracle/software/keepalived-1.2.19/genhash'

install -d /usr/local/keepalived/bin

install -m 755 ../bin/genhash /usr/local/keepalived/bin/

install -d /usr/local/keepalived/share/man/man1

install -m 644 ../doc/man/man1/genhash.1 /usr/local/keepalived/share/man/man1

make[1]: Leaving directory `/users/oracle/software/keepalived-1.2.19/genhash'

 

2.6    安装后的系统级设置

         cp     /usr/local/keepalived/sbin/keepalived  /usr/sbin/

         cp      /usr/local/keepalived/etc/sysconfig/keepalived  /etc/sysconfig/

         cp     /usr/local/keepalived/etc/rc.d/init.d/keepalived  /etc/init.d/

         chmod 777 /etc/init.d/keepalived

         cd     /etc/init.d

         chkconfig --add keepalived

         chkconfig keepalived on

         mkdir –p /etc/keepalived

         touch /etc/keepalived/keepalived.conf

 

2.7    keepalived的配置

 

! Configuration File for keepalived

 

global_defs {               

   notification_email {

     sadgump@163.com                                //可以是虚假的email地址,但要配置

   }

   notification_email_from  sadgump@163.com          //可以是虚假的email地址,但要配置

   smtp_server 192.168.200.1                        //可以是虚假的IP地址,但一定要配置

   smtp_connect_timeout 30                          //默认

   router_id LVS_DEVEL                                            //默认

}

 

vrrp_instance VI_1 {                       //定义一个VRRP实力对象  VI_1

    state MASTER                                  //hadoop01上设置为MASTER,hadoop02上设置为BACKUP

    interface eth0                                  //定义设置VIP地址的网卡名

    virtual_router_id 51                //默认

    priority 100           //hadoop01设为100,hadoop02设为99,数越小,级别越低

    advert_int 1          //默认

    authentication {            

        auth_type PASS               //默认

        auth_pass 1111              //默认

    }

    virtual_ipaddress {

        192.168.75.188               //VIP地址

    }

}

 

//VIP地址的监听端口,该端口要和实际服务器的监听端口一致,否则会不能正常转发

virtual_server 192.168.75.188 8080 {     

    delay_loop 6                           //默认

    lb_algo rr                                //负载调度算法设置

    lb_kind DR                    //负载均衡转发:使用效率最高的DR算法

    nat_mask 255.255.255.0        //默认

    persistence_timeout 50                   //默认

    protocol TCP                                     //转发支持的协议

 

    real_server 192.168.75.90 8080 {             //实时服务器一的地址及端口

        weight 1                                                      //权重

        TCP_CHECK {                                     

            connect_timeout 3                    //默认

            nb_get_retry 3                           //默认

            delay_before_retry 3                 //默认

        }

    }

 

    real_server 192.168.75.91 8080 {             //实时服务器二的地址及端口

        weight 1                                                      //权重

        TCP_CHECK {                                     

            connect_timeout 3                    //默认

            nb_get_retry 3                           //默认

            delay_before_retry 3                 //默认

        }

    }

   

    real_server 192.168.75.92 8080 {             //实时服务器三的地址及端口

        weight 1                                                      //权重

        TCP_CHECK {                                     

            connect_timeout 3                    //默认

            nb_get_retry 3                           //默认

            delay_before_retry 3                 //默认

        }

    }

}

三、  实际服务器的软件安装和配置

实际服务器有三台即hadoop03、hadoop04、hadoop05,均需要安装和配置

3.1    tomcat的安装

         略

         在三台实际服务器上启动tomcat,监听端口为8080

 

3.2    IPVS相关配置

编辑一个realserver.sh脚本,chmod 777 realserver.sh

内容:

 

SNS_VIP=192.168.75.188

source /etc/rc.d/init.d/functions

case "$1" in

start)

ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP up

/sbin/route add -host $SNS_VIP dev lo:0

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

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

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

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

sysctl -p >/dev/null 2>&1

echo "RealServer Start OK"

;;

stop)

ifconfig lo:0 down

/sbin/route del $SNS_VIP >/dev/null 2>&1

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

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

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

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

;;

*)

        echo "Usage:$0 {start|stop}"

        exit 1

esac

exit 0

 

在三台机器上逐一使用realserver.sh start启动该脚本

 

四、  测试

使用http://192.168.75.188:8080可以访问到tomcat,停止hadoop01或者hadoop02中的任意一台机器都不影响http://192.168.75.188:8080这个入口,停止hadoop03、hadoop04、hadoop05中的任意一台或者任意两台都不影响web服务的访问

 

五、  补充

 

5.1    keepalived的调试

         Keepalived的安装相对而言难一点,遇到的问题较多。安装并不困难,困难在启动之后会遇到一些异常,在排查这些异常的时候,需要使用一些适合的方法,可以从/var/log/message文件中查看keepalived启动后的输出日志,从而判断是否运行正常

         Keepalived启动之后,可以使用ip addr命令查看VIP是否已经正确加载到了对应的网卡上,注意不要使用ifconfig –a命令,ifconfig命令无法查看到VIP的信息

         Keepalived启动异常的原因有很大可能是keepalived.conf配置文件配置不正确,可以通过精简配置文件来逐一排查。比如先去掉virtualserver的部分配置,只保留VIP的配置,如下:

 

! Configuration File for keepalived

 

global_defs {               

   notification_email {

     sadgump@163.com                                //可以是虚假的email地址,但要配置

   }

   notification_email_from  sadgump@163.com          //可以是虚假的email地址,但要配置

   smtp_server 192.168.200.1                        //可以是虚假的IP地址,但一定要配置

   smtp_connect_timeout 30                          //默认

   router_id LVS_DEVEL                                            //默认

}

 

vrrp_instance VI_1 {                       //定义一个VRRP实力对象  VI_1

    state MASTER                                  //hadoop01上设置为MASTER,hadoop02上设置为BACKUP

    interface eth0                                  //定义设置VIP地址的网卡名

    virtual_router_id 51                //默认

    priority 100           //hadoop01设为100,hadoop02设为99,数越小,级别越低

    advert_int 1          //默认

    authentication {            

        auth_type PASS               //默认

        auth_pass 1111              //默认

    }

    virtual_ipaddress {

        192.168.75.188               //VIP地址

    }

}

 

使用这个配置文件来运行keepalived,测试VIP是否能被正确添加到网卡上,如果可以,再加上virtualserver的配置部分,通过这种手段可以快速定位异常和错误

© 著作权归作者所有

共有 人打赏支持
奔跑的阿甘
粉丝 2
博文 8
码字总数 12572
作品 0
南京
私信 提问
高可用简介及简单实现方案

前面介绍了lvs集群架构的搭建,提到了单点故障问题,一旦Director服务器出现问题不可用,lvs集群将整体崩溃,集群所提供的服务将顺利下线。高可用的想法是一旦中间某台服务器丧失提供服务的能...

从运维开始
2017/10/25
0
0
服务器集群之keepalived配置高可用(资料)

Linux集群概述 • 根据功能划分为两大类:高可用和负载均衡 • 高可用集群通常为两台服务器,一台工作,另外一台作为冗余,当提供服务的机器宕机,冗余将接替继续提供服务 • 实现高可用的开...

寰宇01
2018/05/24
0
0
LVS+keepalived 高可用群集

LVS+keepalived 高可用群集 实验目的: 使用 keepalived 实现 LVS 双机热备。 实验环境: 配置 LVS 负载调度器 cd /etc/sysconfig/network-scripts/ cp ifcfg-ens32 ifcfg-ens32:0 #复制现有...

HHHNDYD
2018/06/22
0
0
服务器状态监测 Keepalived

keepalived是一个类似于layer3, 4 & 5交换机制的软件,也就是我们平时说的第3层、第4层和第5层交换。Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Kee...

凯文加内特
2015/03/27
0
0
搭建Keepalived+LVS实现简单高可用

keepalived高可用集群介绍: keepalived起初是专为LVS设计的,专门用来监控LVS集群系统中各个服务节点的状态,后来又加入了VRRP的功能,因此除了配置LVS服务外,也可以作为其他服务的高可用软...

yacai1990
2016/01/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

sass和less的优缺点

简述 sass和less都是css的预编译处理语言,他们引入了mixins,参数,嵌套规则,运算,颜色,名字空间,作用域,JavaScript赋值等 加快了css开发效率,当然这两者都可以配合gulp和grunt等前端构...

莫西摩西
21分钟前
0
0
信号量与PV操作

在计算机操作系统中,PV操作是进程管理中的难点。 首先应弄清PV操作的含义:PV操作由P操作原语和V操作原语组成(原语是不可中断的过程),对信号量进行操作,具体定义如下: P(S):①将信号...

shzwork
33分钟前
0
0
重新认识网络通信协议

OSI网络分层 应用层 http, smtp,pop3这些都属于应用层协议 为用户的应用程序提供服务 表示层 确保一个系统的应用层发送的信息被另一个系统的应用层接收到 会话层 通过传输层建立数据传输的通...

最胖的瘦子
48分钟前
1
0
【转】分布式数据流的轻量级异步快照

本篇翻译自论文:Lightweight Asynchronous Snapshots for Distributed Dataflows,Flink的容错快照模型即来源于该论文。原文地址:https://arxiv.org/pdf/1506.08603.pdf 分布式数据流的轻量...

yiduwangkai
50分钟前
1
0
java使用反射机制设置私有成员变量的值

写一个方法:public void setProperty(Objectobj, String propertyName, Object value){}, 此方法可将obj对象中名为propertyName的属性的值设置为value。(这里不知道obj对象的propertyNam...

群星纪元
56分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部