LVS+keepalived-DR模式

 下面一张图 其实就是企业的集群架构图  结合前面的技术加上今天的lvs+keepalived负载均衡nginxde技术就能够搭建出来  前面的实验累积一块儿就是这张图 只不过她的web服务器比咱们实验的机器要多 其实理论是同样的 那么结合之前的实验 今天我们能够作一个完整的网络图前端

 

集群图大概上这样的 ,可是条件有限我这里就开3台机器 其实还要加一台lvs从,防止主挂机能够切到从上面,vs从就不作了,后面会给你们一些配置文件,其实从和主同样,就是keepalived的优先级不同,下面有lvs从的配置文件 安装和主同样.mysql

实验环境:(环境你们能够参照其它笔记搭建)linux

192.168.1.120   lvs+keepalived负载nginx服务器(主)nginx

192.168.1.116   nginx负载均衡服务器web

192.168.1.118   nginx负载均衡服务器算法

192.168.1.117   lap+tomcat1+tomcat2 WEB服务器(通常每台web服务器只配一个网站 tomcat能够配置多个)sql

192.168.1.18    mysql主也是keepalived数据库

(这里咱们用5台就能够演示出来 固然你的机器好的话 也能够把我们前面两台数据库和两台web服务器均可以开起来 也能够在配置一台lvs从,这样效果更明显)后端

 今天的内容是lvs+keepalived 来负载前端nginx服务器  作到这里那么咱们上一张的nginx+keepalived 就能够不用了 若是说大家公司就两台nginx服务器 那么nginx+keepalived就能够的,可是 一旦nginx服务器多的话 keepalived没有使用的价值了,今天的lvs+keepalived就是来解决前端多台nginx负载均衡的问题。。。。。。。。。。。。tomcat

 

LVS 简单工做原理:用户请求LVS VIP,LVS根据转发方式和算法,将请求转发给后端服务器,后端服务器接受到请求,返回给用户。对于用户来讲,看不到WEB后端具体的应用。

LVS转发方式有三种,分别是NAT、DR、TUN模式,经常使用算法:RR、LC、WRR、WLC模式等(RR为轮询模式,LC为最少链接模式)

 

假以下面就是1.116和1.118的nginx负载均衡的网站 两个网站是同样的要怎么不用访问这两台nginx的ip  lvs能够解决负载nginx( 前端两台nginx  后端两台web服务器+两台数据库)这里条件有限就在两台nginx上配置两个同样的网站。 

步骤1.

  • LVS环境安装配置192.168.1.120

下载LVS所需软件ipvsadm-1.2.4.tar.gz软件,编译安装:

wget -c  

http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz 

ln -s /usr/src/kernels/2.6.*  /usr/src/linux  //IPVS模块编译进内核里,须要作软链接

(这里写的是本身机器的内内核 这里记住若是内核Tab不出来, 那么咱们就安装内核扩展包 yum –y install kernel kernel-devel)

yum -y install gcc* openssl openssl-devel

tar xzvf ipvsadm-1.24.tar.gz &&cd ipvsadm-1.24 && make && make install

 

(下面的黄色标记的公司通常不会用这种方式来作 下面的keepalived的配置能够来完成)

LVS安装完毕以后,须要进行配置,配置的步骤有两步,第一步为定义端口服务,第二步为添加realserver后端服务。

ipvsadm -A -t 192.168.1.199:80 -s rr

ipvsadm -a -t 192.168.1.199:80 -r 192.168.1.116 -g -w 2

ipvsadm -a -t 192.168.1.199:80 -r 192.168.1.118 -g -w 2

能够用脚本自动部署:server_lvs.sh

#!/bin/bash

SNS_VIP=192.168.1.199

SNS_RIP1=192.168.1.116

SNS_RIP2=192.168.1.118

echo 1 > /proc/sys/net/ipv4/ip_forward

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

function IPVSADM(){

/sbin/ipvsadm --set 30 5 60

/sbin/ifconfig eth0:0 $VIP broadcast $VIP netmask 255.255.255.255 up

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

/sbin/ipvsadm -A -t $SNS_VIP:80 -s wlc -p 120

/sbin/ipvsadm -a -t $SNS_VIP:80 -r $SNS_RIP1:80 -g -w 1

/sbin/ipvsadm -a -t $SNS_VIP:80 -r $SNS_RIP2:80 -g -w 1

/etc/init.d/ipvsadm save

}

case "$1" in

start)

IPVSADM

echo "-----------------------------------------------------"

/sbin/ipvsadm -Ln

touch /var/lock/subsys/ipvsadm > /dev/null 2>&1

;;

stop)

/sbin/ipvsadm -C

/sbin/ipvsadm -Z

ifconfig eth0:0 down >>/dev/null 2>&1

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

rm -rf /var/lock/subsys/ipvsadm > /dev/null 2>&1

echo "ipvsadm stopped!"

;;

status)

if [ ! -e /var/lock/subsys/ipvsadm ]

then

echo "ipvsadm stopped!"

exit 1

else

echo "ipvsadm started!"

fi

;;

*)

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

exit 1

esac

exit 0

参数说明:

-A 增长一台虚拟服务器地址。

-t  虚拟服务器提供的是tcp服务。

-s  使用的调度算法

-a  在虚拟服务器中增长一台后端真实服务器。

-r  指定真实服务器地址。

-m 设置当前转发方式为NAT模式;-g为直接路由模式;-i  模式为隧道模式

-w 后端真实服务器的权重。

ipvsadm -D -t 192.168.1.199:80

ipvsadm -d -t 10.143.130.106:80 -r 10.143.130.107:80

查看LVS转发列表命令为:ipvsadm –Ln

 咱们会发现,若是这台LVS发生突发状况,down机了,那后端全部的应用程序都访问不了。如何避免这种问题呢,这里须要用到故障切换,也就是若是有一台备用的LVS就行了,主down了,自动切换到从,怎么实现这个需求,接下来说解的keepalived软件就是专门用来作故障检测及切换的。

须要注意一点,若是使用了keepalived.conf配置,就不须要再执行ipvs –A命令去添加均衡的realserver命令了,全部的配置都会在keepalived.conf里面,一个配置文件搞定全部,即只须要安装ipvs模块。

步骤2.

  • Keepalived安装配置

官方下载keepalived相应稳定版本:

cd /usr/src ;wget -c  http://www.keepalived.org/software/keepalived-1.1.15.tar.gz 

tar -xzvf keepalived-1.1.15.tar.gz &&cd keepalived-1.1.15 && ./configure && make && make install

(这里的keepalived安装不须要编译内核了 和前面mysql+keepalived安装方法不同了 由于咱们安装lvs的时候已经定义了)

 

这里编译出错 就安装yum install popt-devel)

安装完毕,配置keepalived服务为系统服务。

DIR=/usr/local/

cp $DIR/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/ && cp $DIR/etc/sysconfig/keepalived /etc/sysconfig/ && mkdir -p /etc/keepalived && cp $DIR/sbin/keepalived /usr/sbin/

 

MASTER上/etc/keepalived/目录建立keepalived.conf配置文件,并写入以下内容:

! Configuration File for keepalived

global_defs {

   notification_email {

      wgkgood@163.com

   }

   notification_email_from wgkgood@163.com

   smtp_server 127.0.0.1

   smtp_connect_timeout 30

   router_id LVS_DEVEL

}

# VIP1

vrrp_instance VI_1 {

    state BACKUP

    interface eth0

    lvs_sync_daemon_inteface eth0

    virtual_router_id 51

    priority 100

    advert_int 5

    nopreempt

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        192.168.1.199   

    }

}

virtual_server 192.168.1.199 80 {

    delay_loop 6    

    lb_algo wrr    

    lb_kind DR   

#    persistence_timeout 60    

    protocol TCP         

    real_server 192.168.1.116 80 {

        weight 100        

        TCP_CHECK {

        connect_timeout 10

        nb_get_retry 3

        delay_before_retry 3

        connect_port 80

        }

    }

    real_server 192.168.1.118 80 {

        weight 100

        TCP_CHECK {

        connect_timeout 10

        nb_get_retry 3

        delay_before_retry 3

        connect_port 80      

        }

    }

}

以上就是keepalived的配置文件 记住上面的vip的ip要保证没有被使用 这里是两台nginx服务器 若是还有多个nginx服务器就在配置文件里面添加real_server 对应的配置段

下面能够看到咱们的lvs+keepalived配置成功

 

 

Lvs从上安装lvs和主安装是同样的  keepalived上配置以下就好了  我这里就不演示了:

如上配置文件,红色标记的地方须要注意,state状态主服务器设置MASTER,从设置为BACKUP,优先级备机设置比MASTER小,例如设置90,使用TCP端口检测。

LVS BACKUP服务器写入以下配置,须要注意的是客户端的配置要修改优先级及状态:

! Configuration Filefor keepalived

global_defs {

  notification_email {

   wgkgood@163.com

  }

  notification_email_from wgkgood@163.com

  smtp_server 127.0.0.1

  smtp_connect_timeout 30

  router_id LVS_DEVEL

}

# VIP1

vrrp_instance VI_1 {

  state BACKUP

  interface eth0

  lvs_sync_daemon_inteface eth0

  virtual_router_id 51

  priority 90

  advert_int 5

  authentication {

    auth_type PASS

    auth_pass 1111

  }

  virtual_ipaddress {

    192.168.1.199

  }

}

virtual_server 192.168.1.199 80 {

  delay_loop 6

  lb_algo wrr

  lb_kind DR

# persistence_timeout 60

  protocol TCP

  real_server 192.168.1.116 80 {

    weight 100

    TCP_CHECK {

    connect_timeout 10

    nb_get_retry 3

    delay_before_retry 3

    connect_port 80

    }

}

  real_server 192.168.1.118 80 {

    weight 100

    TCP_CHECK {

    connect_timeout 10

    nb_get_retry 3

    delay_before_retry 3

    connect_port 80

    }

  }

}

如上设置,LVS 主备配置完毕,接下来须要在realserver配置LVS VIP,为何要在realserver绑定VIP呢?

客户端访问director的VIP,director接收请求,将经过相应的算法将请求转发给相应的realserver。在转发的过程当中,会修改请求包的目的mac地址,目的ip地址不变。

Realserver接收请求,并直接响应客户端。这时便出现一个问题,director此时与realserver位于同一个网络中,当director直接将请求转发给realserver时,realserver检测到该请求包的目的ip是vip而并不是本身,便会丢弃,而不会响应。为了解决这个问题,因此须要在全部Realserver上都配上VIP。

 

为何必定要配置在lo接口上呢?

realserver上的lo口配置VIP,这样限制了VIP不会在物理交换机上产生MAC地址表,从而避免IP冲突。

客户端nginx服务器上启动Realserver.sh脚本内容:

#!/bin/sh

#LVS Client Server

VIP=192.168.1.199 (这里的vip 要和lvs上的keepalived配置文件里面的vip是同样的)

case  $1  in                                                                                                                                                                                                                                                    

start)                                                                                                                                                                                                                                            

    ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP

    /sbin/route add -host $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"

    exit 0

;;                                                                                                                                                                                                                                         

stop)

    ifconfig lo:0 down

    route del $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 "RealServer Stoped OK"

    exit 1

;;

*)

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

;;

esac

在客户端nginx服务器都要执行上面的脚本 执行方式以下 两台nginx都是同样在lo上绑定虚拟ip 两台都要指定 有多少nginx服务器就指定多少

 

  

这是咱们来作个验证  就是把其中一台nginx服务关掉看看有什么效果:

 

这里咱们会发现那台nginx服务关掉了 lvs就会从路由表里面把它踢出去   固然nginx再起来的时候lvs就会自动把它加入路由表里面

接下来就是验证的时候了 在验证前咱们要先把一些服务器添加到开机自动启动,

chkconfig --add keepalived

chkconfig keepalived on

  1. lvs上 咱们要保证开机自动启动keepalived执行命令: echo "/etc/init.d/keepalived restart">>/etc/rc.local 
  2. 在客户端nginx服务器上保证vip开机自动添加 执行命令:echo "sh /root/realserver.sh start" >> /etc/rc.local
  3. 客户端nginx服务器保证开机启动nginx服务执行命令:echo "/usr/local/nginx/sbin/nginx">>/etc/rc.local

 

接下来咱们域名解析在Windows上hosts文件里 ,访问网站看到以下效果,说明咱们成功了。

相关文章
相关标签/搜索