lvs负载调度

      Lvs的三种模式:

     NAT : Client -> VS -> DNAT -> RS -> VS -> SNAT -> Client

     Tunnel : Client ->VS -> RS -> Client ,VS 和RS 之间要遵守隧道协议,且支持广域网

     DR : Client -> Dip ->Vip

     Fallnat : Client -> 公网 -> Router -> lvs ->nginx ->App -> DB

三种模式负载均衡方面比较:


下面给出LVS的基本实现方法,具体算法不再一一演示其功能:


新建一个2048M的虚拟机,并且给他加一块20G的虚拟磁盘

fdisk -l

对该磁盘进行分区:

[root@server6 ~]# fdisk -cu /dev/vda

 

扩展根区域:

[root@server6 ~]# pvcreate /dev/vda1

[root@server6 ~]# vgs

  VG       #PV #LV #SN Attr   VSize VFree

  VolGroup   1   2   0 wz--n- 7.51g    0 

[root@server6 ~]# vgextend VoGroup /dev/vda1

[root@server6 ~]# lvs

  LV      VG       Attr       LSize   Pool Origin Data%  Move Log Cpy%Sync Convert

  lv_root VolGroup -wi-ao----   6.71g                                             

  lv_swap VolGroup -wi-ao---- 816.00m                                             

[root@server6 ~]# lvextend -L +20g /dev/VolGroup/lv_root

  Extending logical volume lv_root to 26.71 GiB

  Insufficient free space: 5120 extents needed, but only 5119 available

[root@server6 ~]# lvextend -l +5119 /dev/VolGroup/lv_root

   Extending logical volume lv_root to 26.71 GiB

  Logical volume lv_root successfully resized

[root@server6 ~]# resize2fs /dev/VolGroup/lv_root

 [root@server6 ~]# df -h

扩展完成后,安装内核kernel-2.6.32-220.23.1.el6.src.rpm:

[root@server6 ~]# rpm -ivh kernel-2.6.32-220.23.1.el6.src.rpm

[root@server6 rpmbuild]# cd SPECS/

[root@server6 SPECS]# ls

kernel.spec

[root@server6 SPECS]# yum install -y rpm-build

对内核进行源码编译:

[root@server6 SPECS]# rpmbuild -bp kernel.spec


安装编译过程中需要的软件后再次编译:

[root@server6 SPECS]# yum install -y gcc redhat-rpm-config patchutils  xmlto asciidoc elfutils-libelf-devel zlib-devel binutils-devel newt-devel python-devel perl-ExtUtils-Embed hmaccalc 

[root@server6 SPECS]# rpmbuild -bp kernel.spec 



此时,需要的安装包是yum仓库中没有的包,需要在官网上下载:

[root@server6 SPECS]# yum install -y ~/asciidoc-8.4.5-4.1.el6.noarch.rpm ~/newt-devel-0.52.11-3.el6.x86_64.rpm

解决依赖性后,再次编译:

[root@server6 SPECS]# yum install -y ~/asciidoc-8.4.5-4.1.el6.noarch.rpm ~/newt-devel-0.52.11-3.el6.x86_64.rpm ~/slang-devel-2.2.1-1.el6.x86_64.rpm 

[root@server6 SPECS]# rpmbuild -bp kernel.spec 

当编译时卡在这时:

需要ssh到server6,安装这个软件,并执行这条命令

[root@server6 ~]# yum install rng-tools -y

[root@server6 ~]# rngd -r /dev/urandom 

完成这两步后,另一边就自动完成编译。

 

[root@server6 ~]# tar zxf Lvs-fullnat-synproxy.tar.gz

[root@server6 ~]# cd lvs-fullnat-synproxy/

[root@server6 lvs-fullnat-synproxy]# ls

lvs-2.6.32-220.23.1.el6.patch  README

lvs-tools.tar.gz               toa-2.6.32-220.23.1.el6.patch

[root@server6 lvs-fullnat-synproxy]# cp lvs-2.6.32-220.23.1.el6.patch ~/rpmbuild/BUILD/kernel-2.6.32-220.23.1.el6/linux-2.6.32-220.23.1.el6.x86_64/

[root@server6 lvs-fullnat-synproxy]# cd

[root@server6 ~]# cd ~/rpmbuild/BUILD/kernel-2.6.32-220.23.1.el6/linux-2.6.32-220.23.1.el6.x86_64/

打补丁:

[root@server6 linux-2.6.32-220.23.1.el6.x86_64]# patch -p1 < lvs-2.6.32-220.23.1.el6.patch 

比较两个文件的不同:

[root@server6 linux-2.6.32-220.23.1.el6.x86_64]# diff .config configs/kernel-2.6.32-x86_64.config 

0a1

> # x86_64

770c771

< CONFIG_IP_VS_TAB_BITS=22

---

> CONFIG_IP_VS_TAB_BITS=12

[root@server6 linux-2.6.32-220.23.1.el6.x86_64]# vim Makefile

用两个CPU进行编译:

[root@server6 linux-2.6.32-220.23.1.el6.x86_64]# make -j2

编译完成后,进行模块安装:

[root@server6 linux-2.6.32-220.23.1.el6.x86_64]# df -h

Filesystem                    Size  Used Avail Use% Mounted on

/dev/mapper/VolGroup-lv_root   27G  8.4G   17G  34% /

tmpfs                         939M     0  939M   0% /dev/shm

/dev/sda1                     485M   33M  427M   8% /boot

 

[root@server6 linux-2.6.32-220.23.1.el6.x86_64]# make modules_install

 

[root@server6 linux-2.6.32-220.23.1.el6.x86_64]# make install

[root@server6 linux-2.6.32-220.23.1.el6.x86_64]# cd /boot/grub/

[root@server6 grub]# vim grub.conf 


[root@server6 grub]# reboot

查看内核版本:

[root@server6 ~]# uname -r

2.6.32-220.23.1.el6

 

[root@server6 ~]# ll -d /lib/modules/`uname -r`/build

lrwxrwxrwx 1 root root 80 7月  20 11:05 /lib/modules/2.6.32-220.23.1.el6/build -> /root/rpmbuild/BUILD/kernel-2.6.32-220.23.1.el6/linux-2.6.32-220.23.1.el6.x86_64

安装keepalived:

[root@server6 ~]# cd lvs-fullnat-synproxy/

[root@server6 lvs-fullnat-synproxy]# ls

lvs-2.6.32-220.23.1.el6.patch  README

lvs-tools.tar.gz               toa-2.6.32-220.23.1.el6.patch

[root@server6 lvs-fullnat-synproxy]# tar zxf lvs-tools.tar.gz 

[root@server6 lvs-fullnat-synproxy]# ls

lvs-2.6.32-220.23.1.el6.patch  README                         tools

lvs-tools.tar.gz               toa-2.6.32-220.23.1.el6.patch

[root@server6 lvs-fullnat-synproxy]# cd tools/

[root@server6 tools]# ls

ipvsadm  keepalived  quagga  rpm

[root@server6 tools]# cd keepalived/

[root@server6 keepalived]# ./configure --with-kernel-dir="/lib/modules/`uname -r`/build"

[root@server6 keepalived]# yum install openssl-devel popt-devel -y

[root@server6 keepalived]# ./configure --with-kernel-dir="/lib/modules/`uname -r`/build"

[root@server6 keepalived]# make

[root@server6 keepalived]# make install

[root@server6 keepalived]# which keepalived

/usr/local/sbin/keepalived

[root@server6 keepalived]# cd /usr/local/etc/

[root@server6 etc]# ls

keepalived  rc.d  sysconfig

[root@server6 etc]# cd keepalived/

[root@server6 keepalived]# ls

keepalived.conf  samples

 

安装ipvsadm:

如果之前安装过ipvsadm,需要将之前安装的先卸载掉,然后重新编译。

[root@server6 ~]# cd lvs-fullnat-synproxy/tools/

[root@server6 tools]# ls

ipvsadm  keepalived  quagga  rpm

[root@server6 tools]# cd ipvsadm/

[root@server6 ipvsadm]# make

[root@server6 ipvsadm]# make install

[root@server6 ipvsadm]# ipvsadm -l

IP Virtual Server version 1.2.1 (size=4194304)

Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

 IPVS已经实现了八种LVS的负载调度算法,分别是:轮叫调度,加权轮叫调度,最小连接调度,加权最小连接调度,基于局部性的最少链接调度,带复制的基于局部性的最少链接调度,目标地址散列调度以及源地址散列调度。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值