天天看点

LVS+keepalived高可用

LVS+Keepalived负载均衡

LVS简介及工作原理

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

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

LVS NAT原理:用户请求LVS到达director,director将请求的报文的目标地址改成后端的realserver地址,同时将报文的目标端口也改成后端选定的realserver相应端口,最后将报文发送到realserver,realserver将数据返给director,director再把数据发送给用户。(两次请求都经过director,所以访问大的话,director会成为瓶颈)

LVS DR原理:用户请求LVS到达director,director将请求的报文的目标MAC地址改成后端的realserver MAC地址,目标IP为VIP(不变),源IP为用户IP地址(保持不变),然后Director将报文发送到realserver,realserver检测到目标为自己本地IP,如果在同一个网段,然后将请求直接返给用户。如果用户跟realserver不在一个网段,则通过网关返回用户。(此种转发效率最高)

LVS TUN原理:跟LVS DR类似,也是改变封装MAC地址,多了一层隧道加密。实施环境复杂,比LVS DR模式效率略低。

LVS环境安装配置

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

<code>wget -c http:</code><code>//www</code><code>.linuxvirtualserver.org</code><code>/software/kernel-2</code><code>.6</code><code>/ipvsadm-1</code><code>.24.</code><code>tar</code><code>.gz</code>

<code>ln</code> <code>-s </code><code>/usr/src/kernels/2</code><code>.6.* </code><code>/usr/src/linux</code>  <code>//IPVS</code><code>模块编译进内核里,需要做软连接</code>

<code>tar</code> <code>xzvf ipvsadm-1.24.</code><code>tar</code><code>.gz &amp;&amp;cdipvsadm-1.24 &amp;&amp; </code><code>make</code> <code>&amp;&amp;</code><code>make</code> <code>install</code>

<code>查看LVS转发列表命令为:ipvsadm–Ln</code>

<code>清空lvs转发            ipvsadm -C</code>

Keepalived安装配置

<code>wget    </code>

<code>tar</code> <code>-xzvf  keepalived-1.2.12.</code><code>tar</code><code>.gz;</code><code>cd</code>  <code>keepalived-1.2.12;</code>

<code>.</code><code>/configure</code> <code>&amp;&amp;</code><code>make</code> <code>&amp;&amp; </code><code>make</code> <code>install</code>

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

<code>DIR=</code><code>/usr/local/</code> 

<code>cp</code> <code>$DIR</code><code>/etc/rc</code><code>.d</code><code>/init</code><code>.d</code><code>/keepalived</code>

<code>/etc/rc</code><code>.d</code><code>/init</code><code>.d/ &amp;&amp; </code><code>cp</code> <code>$DIR</code><code>/etc/sysconfig/keepalived</code> <code>/etc/sysconfig/</code>

<code>&amp;&amp; </code><code>mkdir</code> <code>-p </code><code>/etc/keepalived</code> <code>&amp;&amp; </code><code>cp</code> <code>$DIR</code><code>/sbin/keepalived</code>

<code>/usr/sbin/</code>

在MASTER上即192.168.77.188上的/etc/keepalived/目录创建keepalived.conf配置文件,并写入如下内容:

<code>! Configuration File </code><code>for</code> <code>keepalived</code>

<code>global_defs {</code>

<code>   </code><code>notification_email {</code>

<code>       </code><code>[email protected]</code>

<code>   </code><code>}</code>

<code>   </code><code>notification_email_from [email protected]</code>

<code>   </code><code>smtp_server 127.0.0.1</code>

<code>   </code><code>smtp_connect_timeout 30</code>

<code>   </code><code>router_id LVS_DEVEL</code>

<code>}</code>

<code># VIP1</code>

<code>vrrp_instance VI_1 {</code>

<code>    </code><code>state MASTER</code>

<code>    </code><code>interface eth0</code>

<code>    </code><code>lvs_sync_daemon_inteface eth0</code>

<code>    </code><code>virtual_router_id 51</code>

<code>    </code><code>priority 100</code>

<code>    </code><code>advert_int 5</code>

<code>    </code><code>nopreempt</code>

<code>    </code><code>authentication {</code>

<code>        </code><code>auth_type PASS</code>

<code>        </code><code>auth_pass 1111</code>

<code>    </code><code>}</code>

<code>    </code><code>virtual_ipaddress {</code>

<code>        </code><code>192.168.77.223</code>

<code>virtual_server 192.168.77.223 80 {</code>

<code>    </code><code>delay_loop 6</code>

<code>    </code><code>lb_algo wrr</code>

<code>    </code><code>lb_kind DR</code>

<code>    </code><code>persistence_timeout 60</code>

<code>    </code><code>protocol TCP</code>

<code> </code><code>#REAL_SERVER_1</code>

<code>    </code><code>real_server 192.168.77.133 80 {</code>

<code>        </code><code>weight 100</code>

<code>        </code><code>TCP_CHECK {</code>

<code>        </code><code>connect_timeout 10</code>

<code>        </code><code>nb_get_retry 3</code>

<code>        </code><code>delay_before_retry 3</code>

<code>        </code><code>connect_port 80</code>

<code>        </code><code>}</code>

<code>#REAL_SERVER_2</code>

<code>    </code><code>real_server 192.168.77.166 80 {</code>

在LVS BACKUP即192.168.77.199服务器/etc/keepalived/目录创建keepalived.conf配置文件如下配置,需要注意的是客户端的配置要修改优先级及状态:

<code>    </code><code>state BACKUP</code>

<code>    </code><code>priority 90</code>

配置完成后分别重启keepalived服务并tail -f /var/log/message 查看日志,若果报错请执行以下加载模块:

<code>modprobe ip_vs</code>

<code>modprobe ip_vs_wrr</code>

<code>modprobe ip_vs_rr</code>

之后重启在查看日志是否正常加载vip

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冲突。

客户端启动Realserver.sh脚本内容:

  分别在后端机器192.168.77.133和192.168.77.166的data目录下创建个脚本并分别启动,脚本内容如下:

<code>#!/bin/sh</code>

<code>#LVS Client Server</code>

<code>VIP=192.168.77.223</code>

<code>case</code>  <code>$1  </code><code>in</code>

<code>start)</code>

<code>    </code><code>ifconfig</code> <code>lo:0 $VIP netmask 255.255.255.255 broadcast $VIP</code>

<code>    </code><code>/sbin/route</code> <code>add -host $VIP dev lo:0</code>

<code>    </code><code>echo</code> <code>"1"</code> <code>&gt;</code><code>/proc/sys/net/ipv4/conf/lo/arp_ignore</code>

<code>    </code><code>echo</code> <code>"2"</code> <code>&gt;</code><code>/proc/sys/net/ipv4/conf/lo/arp_announce</code>

<code>    </code><code>echo</code> <code>"1"</code> <code>&gt;</code><code>/proc/sys/net/ipv4/conf/all/arp_ignore</code>

<code>    </code><code>echo</code> <code>"2"</code> <code>&gt;</code><code>/proc/sys/net/ipv4/conf/all/arp_announce</code>

<code>    </code><code>sysctl -p &gt;</code><code>/dev/null</code> <code>2&gt;&amp;1</code>

<code>    </code><code>echo</code> <code>"RealServer Start OK"</code>

<code>    </code><code>exit</code> <code>0</code>

<code>;;</code>

<code>stop)</code>

<code>    </code><code>ifconfig</code> <code>lo:0 down</code>

<code>    </code><code>route del $VIP &gt;</code><code>/dev/null</code> <code>2&gt;&amp;1</code>

<code>    </code><code>echo</code> <code>"0"</code> <code>&gt;</code><code>/proc/sys/net/ipv4/conf/lo/arp_ignore</code>

<code>    </code><code>echo</code> <code>"0"</code> <code>&gt;</code><code>/proc/sys/net/ipv4/conf/lo/arp_announce</code>

<code>    </code><code>echo</code> <code>"0"</code> <code>&gt;</code><code>/proc/sys/net/ipv4/conf/all/arp_ignore</code>

<code>    </code><code>echo</code> <code>"0"</code> <code>&gt;</code><code>/proc/sys/net/ipv4/conf/all/arp_announce</code>

<code>    </code><code>echo</code> <code>"RealServer Stoped OK"</code>

<code>    </code><code>exit</code> <code>1</code>

<code>*)</code>

<code>    </code><code>echo</code> <code>"Usage: $0 {start|stop}"</code>

<code>esac</code>

启动后用ifconfig可以查看到lo上的vip绑定成功。就可以用vip直接访问网站了。

后端LAMP在之前blog中写过,,这里省略,以上是全部lvs和keepalived配置安装

本文转自 Anonymous123 51CTO博客,原文链接:http://blog.51cto.com/woshitieren/1686686

继续阅读