侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

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

2023-12-18 星期一 / 0 评论 / 0 点赞 / 129 阅读 / 24744 字

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

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 {

     [email protected]                                //可以是虚假的email地址,但要配置

   }

   notification_email_from  [email protected]          //可以是虚假的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 {

     [email protected]                                //可以是虚假的email地址,但要配置

   }

   notification_email_from  [email protected]          //可以是虚假的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的配置部分,通过这种手段可以快速定位异常和错误

广告 广告

评论区