天天看点

LVS集群实战

LVS集群实战

LVS

Linux Virtual Server: Linux虚拟服务器

基于四层的LB

================================

LVS+keepalived Web Server 80/tcp

LVS+keepalived Galera MySQL/MySQL Cluster 3306/tcp

一、LVS概述

LVS是Linux内核的一部分,因此性能较高

Linux虚拟服务器(即分发器或调度器)功能:

   不真正提供服务,介接受客户的访问,为整个集群提供一个唯一的入口

   虚拟服务器和真实服务器(Real Server)通信

   真正提供服务,集群中每个(Real Server)可以是物理机,也可以是虚拟机

二、LVS三种基本模式

VS/NAT

VS/TUN

VS/DR

Server

any

Tunneling

Non-arp   device

Server   network

private

LAN/WAN

LAN

Server  number

low(10-20)

High(100)

Server  gateway

load   balancer

own   router

Own   router

注:Server为Real  Server

VS/NAT:

IIS,Apache,Nginx

私有网络

low

10~20

gateway

所有Real  Server网关必须指向调度器

VS/NAT:网络地址转换模式,进站/出站的数据流量经过分发器。

VS/DR:直接路由模式,只有进站的数据流量经过分发器

        调试器和真实服务器必须在同一网段

VS/TUN:隧道模式,只有进站的数据流量经过分发器。

VS/NAT配置

实验说明:

1、  KVM网络使用NAT模式

2、  client、调试器、Real  Server都使用虚拟机或使用真实服务器

3、  虚拟机上的网卡使用半虚拟化驱动,如果半虚拟化驱动异常,可以使用default/rtl8139

网络拓扑:

主机功能

IP地址

必备软件

client

CIP:192.168.122.0/24

curl、elinks或firefox

Director

eth0:VIP:192.168.122.100

eth1:DIP:10.10.10.1

Real   Server

RIP:10.10.10.10    10.10.10.20    10.10.10.30

安装httpd服务

DNS   Server

www.ak.com=====>192.168.122.100

bind或bind-chroot

建议:先在Real  Server安装如httpd

VS/NAT实施

1、  准备工作(集群中所有主机)[可选]

IP、hostname、hosts、iptables、SELinux、ssh  trust、ntp

cat  /etc/hosts

0.0.1    localhost

10.10.1   director1.sky.com   director1

10.10.10   node1.sky.com   node1

10.10.20   node2.sky.com   node2

10.10.30   node3.sky.com   node3

2、  RS配置

说明:RS是指Real Server,即后端的真实服务器。

在node1、node2、node3上部署

node1部署httpd服务

yum    install   -y  httpd

echo   ServerName  node1.sky.com:80  >   /etc/httpd/conf.d/sv.conf

echo   node1 web  > /var/www/html

service    httpd  restart

chkconfig   httpd    on

cd   /etc/sysconfig/network-scripts

cp   -v  ifcfg-eth0{,.bak}

cat   > ifcfg-eth0 <<EOF

DEVICE=eth0

TYPE=Ethernet

ONBOOT=yes

BOOTPROTO=static

IPADDR=10.10.10.10

NETMASK=255.255.255.0

GATEWAY=10.10.10.1

DNS=192.168.122.100

EOF

service    network  restart

ip   addr  show

curl    127.0.0.1

node2部署httpd服务

echo   ServerName  node2.sky.com:80  >   /etc/httpd/conf.d/sv.conf

echo   node2 web  > /var/www/html

IPADDR=10.10.10.20

node3部署httpd服务

echo   ServerName  node3.sky.com:80  >   /etc/httpd/conf.d/sv.conf

echo   node3 web  > /var/www/html

IPADDR=10.10.10.30

配置好网站服务器,测试所有RS      //为了看到效果,建议提供不同的页面

默认网关均指向Directory的DIP

3、  Director分发器配置

配置VIP

ip   addr   add  dev   eth0  192.168.122.100/24

vim    /etc/sysctl.conf     修改内容如下

net_ipv4.ip_forward=1

:wq保存退出

sysctl   -p     //确保打开路由转发

定义LVS的分发策略

yum    install   -y  ipvsadm    

ipvsadm    --help

man    ipvsadm   然后查找EXAMPLE实例

ipvsadm  -A  -t   192.168.122.100:80  -s  rr

ipvsadm   -a  -t   192.168.122.100:80   -r   10.10.10.10  -m

ipvsadm   -a  -t   192.168.122.100:80   -r   10.10.10.20  -m

ipvsadm   -a  -t   192.168.122.100:80   -r   10.10.10.30  -m

确保RHEL仓库可用

-m是批massquerading(NAT)

技巧:

     Director调度器调度多个网站服务时,只需要给调度器的WAN网卡设置多个外网IP,然后做第2个调度策略。

查看LVS状态信息

ipvsadm    -L

ipvsadm    -Ln

状态信息如下:

查看其他信息

ipvsadm    -L   -n   --stats

ipvsadm    -L   -n   --rate

ipvsadm    -Ln   -c

watch   -n.5  'ipvsadm   -Ln   -c'

看速率

看LVS的连接条目

4、  测试

5、  小结

VS/NAT模式的原理:当Director收到Client请求时,Director将数据包的目标IP由VIP转换为选中的Real  Server的RIP来实现分发。

要求:RS将网关指向Director的DIP。

特点:配置简单,所有的入站、出站数据包都经过分发器。当数据量比较大时,分发器可能会出现网络瓶颈!因而支持的RS数量少。

重点注意:

     Director必须开启Kernel  ip_forward

所有Real Server默认网关指向DIP

     Director使用DIP和Real Server的RIP通信

监测:

     watch -n.5  'ipvsadm   -Ln -c'

新命令了解:

     arping -I  eth0  172.20.20.250

     ip addr   add  dev br1  172.16.20.250/24

     ip addr   add  dev lo  172.16.20.250/32

     arp -n | grep  192.168.100.2

VS/DR模式原理解析

RIP:设置在物理网卡

VIP:设置在lo环回网卡(127.0.0.1)上 

Non-arp工作原理:

VS-DR部署实战

2、  DR模式要求Director的DIP和所有Real Server的RIP必须在同一个网段及广播域

3、  所有节点网关均指定真实网关

4、  用脚本部署LVS集群

注意:调度器和RealServer必须在同一个LAN,LAN可以使用公网IP,也可以使用private  IP

公网IP:前端路由器工作模式为路由模式

私网IP:前端路由器工作为NAT,并将某个公网IP映射到VIP(private)

Client

CIP:192.168.122.1

VIP:192.168.122.100

DIP:192.168.122.2

Real Server

RIP:192.168.122.10

RIP:192.168.122.20

RIP:192.168.122.30

Nor-arp

DNS Server

LVS/DR实战

1、准备工作(集群中所有主机)

168.122.2   director1.sky.com   director1

168.122.10   node1.sky.com   node1

168.122.20   node2.sky.com   node2

168.122.30   node3.sky.com   node3

6、  RS配置

在node1、node2、node3上部署好网站服务器,测试所有RS。为了测试效果,提供不同的网站页面。

在三台RS上的lo环回接口上添加VIP,并开启Non-arp功能

ip    addr   dee  lo    192.168.122.100/32        #在lo接口上绑定VIP

echo   1 > /proc/sys/net/ipv4/conf/all/arp_ignore       #non-arp

echo   2> /proc/sys/net/ipv4/conf/all/arp_announce     #non-arp

默认网关均指向Director的DIP

7、  Director分发器配置

ip   addr   add  dev   eth0  192.168.122.100/32     ##配置VIP

yum    install   -y   ipvsadm     ##确保yum仓库可用

定义LVS分发策略

ipvsadm   -C

ipvsadm   -A  -t  192.168.122.100:80  -s   rr

ipvsadm   -a  -t  192.168.122.100:80  -r   192.168.122.10  -g

ipvsadm   -a  -t  192.168.122.100:80  -r   192.168.122.20  -g

ipvsadm   -a  -t  192.168.122.100:80  -r   192.168.122.30  -g

service    ipvsadm  save

ipvsadm   -Ln

8、  测试

9、  小结

VS/NAT模式的原理:当一个Client发送一个请求到VIP,Director根据VIP选择对应的RealServer的Pool,根据算法,在Pool中选择一台RealServer,然后将Client的请求包发给选择的RealServer,最后,选择的RealServer把应答包直接传给Client。

LVS集群部署的脚本

vi   lvs_httpd.sh

#!/bin/bash

#LVS_DR_RealServer的httpd初始化脚本,并发处理。

IFS=$'\n'

alias   sed='sed  -c  --follow-syslinks'

ntpserver=172.16.8.100

vip=192.168.122.100

for    line   in  $(cat   real_serverip.txt)

#real_serverip.txt

#old_ip            hostname    newip

#192.168.122.10    web10      192.168.122.10 

#192.168.122.11    web11      192.168.122.20 

#192.168.122.12    web12      192.168.122.30 

#...

do

         {

         ip=$(echo  $line | awk '{print  $1}')

         hostname=$(echo  $line | awk '{print  $2}')

         newip=$(echo  $line | awk '{print  $3}')

         ssh  root@$ip   'chkconfig  NetworkManager  off'

         ssh  root@$ip   'iptables  -F ; service  iptables   save'

         ssh  root@$ip   "sed -r  -i  "/^SELINUX/cSELINUX=permissive"  /etc/selinux/config"

         ssh  root@$ip   "sed -r  -i  "/^HOSTNAME/cHOSTNAME=$hostname"  /etc/sysconfig/network"

         ssh  root@$ip   "sed -r  -i  "/^BOOTPROTO/cBOOTPROTO=none"   /etc/sysconfig/network-scripts/ifcfg-eth0"

         ssh  root@$ip   "sed -r  -i  "/IPADDR/cIPADDR=$newip"   /etc/sysconfig/network-scripts/ifcfg-eth0"

         ssh  root@$ip   "sed -r  -i  "3aPREFIX=24"  /etc/sysconfig/network-scripts/ifcfg-eth0"

         ssh  root@$ip   "sed -r  -i  "3aGATEWAY=$gw"  /etc/sysconfig/network-scripts/ifcfg-eth0"

         ssh  root@$ip   "wget   ftp://172.16.8.100/rhel6.repo   -O  /etc/yum.repos.d/rhel6.repo"

         ssh  root@$ip   "yum  install  -y   lftp  tree  httpd"

         ssh  root@$ip   "chkconfig  httpd  on"

         ssh  root@$ip   "echo   "ServerName   $hostname" > /etc/httpd/conf.d/sv.conf"

         ssh  root@$ip   "service  httpd  restart"

         ssh  root@$ip   "echo  $hostname >  /var/www/html/index.html"

         }&

done

      本文转自rshare 51CTO博客,原文链接:http://blog.51cto.com/1364952/1956226,如需转载请自行联系原作者

继续阅读