nat 的原理 

首先 用户请求包 会到负载均衡器(调度器)


调度器 会把请求包的目的地址改了(当然也可以改端口)


然后发送给服务器 服务器接受请求 回应网关(调度器)


调度器会把原地址改成vip地址 目的地址cip访问地址


tunnel

首先 用户请求包 会到负载均衡器(调度器)


调度器通过隧道模式 加一个ip头 通过调度算法 选择一台服务器 


服务器解包的时候 发现目的地址不是自己 


在lo的网卡添加vip的ip 


这台服务器 直接把请求送给用户


DR

首先 用户请求包 会到负载均衡器(调度器)


调度器通过算法 选择一个服务器 把服务器mac 封装数据包中


服务器解开数据包时 发现目的是vip


lo绑定vip 发现时自己 直接发送给客户端

一、实验环境需求&准备

我们这次实验要完成的一个架构如下图所示,我们通过LVS-DR-MASTER,LVS-DR-BACKUP作为LVS负载均衡调度器,并且两者之间通过keepalived来两者之间的HA。keepalived本身就是为了LVS为开发的,所以说我们通过keepalived来进行LVS的配置就显得十分的方便。而且keepalived是直接操作ip_vs不用通过ipvsadm,所以更加方便。

1)实验架构图&需求表:

wKiom1LVC6LwkWadAAGyY4ob04w803.jpg

角色IP地址备注
主LVS调度器(MASTER)192.168.41.181使用keepalived配置
备LVS调度器(BACKUP)192.168.41.251
HTTP服务器(RS1)192.168.41.31apache服务器(一般生产环境需要外网IP地址,这里用内网IP地址替代)
HTTP服务器(RS2)192.168.41.33
虚拟IP地址(VIP)192.168.41.249虚拟IP地址

2)部署http服务器,验证能正常访问

这里就不多费篇幅介绍了,就是要保证http能正常访问。

二、配置keepalived实现负载均衡&高可用

先安装 lvs

命令yum  -y intall ipvsadm

        ipvsadm --help 可以测试是否安装成功

[root@master keepalived]# lsmod ip_vs  查看模块是否加载成功
Usage: lsmod

 使用modprobe ip_vs挂载模块

[root@master keepalived]# service ipvsadm save      保存
ipvsadm: Saving IPVS table to /etc/sysconfig/ipvsadm: [  OK  ]


service ipvsadm start

 

1)安装keepalived软件

wget http://www.keepalived.org/software/keepalived-1.2.8.tar.gz

tar -zxf keepalived-1.2.8.tar.gz

cd keepalived-1.2.8

./configure --prefix=/usr/local/keepalived

这个时候会报插件大家yum安装一下就行 yum install gcc

make

编译的时候会一直提示

make: *** No targets specified and no makefile found. Stop.

这个我也百度了一下 说是要安装ncurses-5.6.tar.gz

1、wget http://ftp.gnu.org/pub/gnu/ncurses/ncurses-5.6.tar.gz

2.、tar zxvf ncurses-5.6.tar.gz

3、 ./configure -prefix=/usr/local -with-shared -without-debug

4、make

5、make install

后来才知道 才安装东西了 在./configure的时候

wKiom1Q8y_Ggf_F6AAJVXZWA04M039.jpg

解决方法

yum install -y openssl openssl-devel

接下来在安装的时候 会报共享库没有安装

wKioL1Q8zoOS1Lk1AALA8WvTgXg650.jpg

 yum -y install popt-devel

接下来 我们在安装

wKioL1Q8z9-w1LqOAAJz8qEaAIk222.jpg

这个如果是NO 的话 就是lvs 和 keeplived没关联成功 你们可以看到我的关联了 加入没有关联的话 我教你们

ln -s /usr/src/kernels/内核版本 /usr/src/linx

然后我们使用 make -j4 是以4个cpu的速度编译的

 

make install

   ipvsadm 重启

#配置keepalived设置成服务

cd /usr/local/keepalived/

cp etc/rc.d/init.d/keepalived /etc/rc.d/init.d/

cp etc/sysconfig/keepalived /etc/sysconfig/

mkdir /etc/keepalived

cp etc/keepalived/keepalived.conf /etc/keepalived/

cp sbin/keepalived /usr/sbin/


启动服务


#开启内核的转发功能

vi /etc/sysctl net.ipv4.ip_forword = 1

sysctl -p 不重启生效

 

cd /etc/keepalived/

 

2)配置LVS-DR-MASK的keepalived.conf配置文件

! Configuration File for keepalived

 

global_defs {

notification_email {

752119102@qq.com #设置报警邮箱,一般不再这做,而是用其他方式报警。

}

notification_email_from keepalived@localhost #设定发送邮件地址

smtp_server 127.0.0.1 #设定发送邮件服务器

smtp_connect_timeout 30 #设定SMTP连接超时时间

router_id LVS_181 #负载均衡器标示,在局域网内是唯一的

}

 

vrrp_instance VI_1 { #定义虚拟路由实例,不同实例ID不同。

state MASTER #定义服务器在keepalived中的角色主服务器

interface eth0 #定义进行检测的端口eth0

virtual_router_id 51 #定义虚拟路由ID,同一个实例的主从一样。

priority 100 #定义在虚拟路由器组的权限,越大越高

advert_int 1 #定义检测时间间隔

authentication { #定义认证方式密码,主从必须一样

auth_type PASS

auth_pass 1111

}

virtual_ipaddress { #指定虚拟IP地址

192.168.41.249

 

}

}

 

virtual_server 192.168.41.249 80 { #定义虚拟服务,需指定IP地址和端口,空格隔开。

delay_loop 6 #定义RS运行情况监测时间间隔

lb_algo rr #定义负载调度算法

lb_kind DR #定义LVS的工作模式

nat_mask 255.255.255.0 #定义虚拟服务的mask

persistence_timeout 50 #定义会话保持时间,S为单位

protocol TCP #指定转发协议

real_server 192.168.41.31 80 { #定义真实服务器IP地址和端口

weight 1 #定义RS的权重

TCP_CHECK{ #RS server健康检查部分

connect_timeout 10 #定义超出10s连接超时

nb_get_retry 3 #定义重试次数

delay_before_retry 3 #定义重试时间间隔

connect_port 80 #定义健康检查端口

}

real_server 192.168.41.33 80 {

weight 1

TCP_CHECK{

connect_timeout 10

nb_get_retry 3

delay_before_retry 3

connect_port 80

}

}

3)配置LVS-DR-BACKUP的keepalived.conf配置文件

! Configuration File for keepalived

 

global_defs {

notification_email {

752119102@qq.com #设置报警邮箱,一般不再这做,而是用其他方式报警。

}

notification_email_from keepalived@localhost #设定发送邮件地址

smtp_server 127.0.0.1 #设定发送邮件服务器

smtp_connect_timeout 30 #设定SMTP连接超时时间

router_id LVS_251 #负载均衡器标示,在局域网内是唯一的

}

 

vrrp_instance VI_1 { #定义虚拟路由实例,不同实例ID不同。

state BACKUP #定义服务器在keepalived中的角色

interface eth0 #定义进行检测的端口eth0

virtual_router_id 51 #定义虚拟路由ID,同一个实例的主从一样。

priority 50 #定义在虚拟路由器组的权限,越大越高

advert_int 1 #定义检测时间间隔

authentication { #定义认证方式密码,主从必须一样

auth_type PASS

auth_pass 1111

}

virtual_ipaddress { #指定虚拟IP地址

192.168.41.249

 

}

}

 

virtual_server 192.168.41.249 80 { #定义虚拟服务,需指定IP地址和端口,空格隔开。

delay_loop 6 #定义RS运行情况监测时间间隔

lb_algo rr #定义负载调度算法

lb_kind DR #定义LVS的工作模式

nat_mask 255.255.255.0 #定义虚拟服务的mask

persistence_timeout 50 #定义会话保持时间,S为单位

protocol TCP #指定转发协议

real_server 192.168.41.31 80 { #定义真实服务器IP地址和端口

weight 1 #定义RS的权重

TCP_CHECK{ #RS server健康检查部分

connect_timeout 10 #定义超出10s连接超时

nb_get_retry 3 #定义重试次数

delay_before_retry 3 #定义重试时间间隔

connect_port 80 #定义健康检查端口

}

real_server 192.168.41.33 80 {

weight 1

TCP_CHECK{

connect_timeout 10

nb_get_retry 3

delay_before_retry 3

connect_port 80

}

说明:这里主LVS-DR-MASTER和LVS-DR-BACKUP之间的配置的差别就只有红色部分:HA的角色(MASTER,BACKUP)和优先级不同,还有router_id。

4)客户端配置LVS参数

客户端需要做的工作就是绑定我们的VIP在lo口,并且进行ARP抑制,之前的文章已经提过此方法咯。现在我们就换成将配置写成脚本来执行。

脚本内容:

[root@RS2 ~]# cat lvs-client.sh

#!/bin/bask

# 752119102@qq.com

#

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

VIP=(

192.168.40.17

)

function start(){

for ((i=0;i<`echo ${#VIP[*]}`;i++))

do

echo ${i} ${VIP[$i]}

ifconfig lo:${i} ${VIP[$i]} netmask 255.255.255.255 up

route add -host ${VIP[$i]} dev lo

done

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_announce

echo "2">/proc/sys/net/ipv4/conf/all/arp_announce

}

function stop(){

for ((i=0;i<${#VIP[*]};i++))

do

echo ${i} ${VIP[$i]}

ifconfig lo:${i} ${VIP[$i]} netmask 255.255.255.255 up

route del -host ${VIP[$i]} dev lo:${i}

done

}

case "$1" in

start)

start

exit

;;

stop)

stop

exit

;;

*)

echo "You must use $0:stop|start"

;;

esac

 如果照我的方法不成功 关闭下防火墙在试试


手工在web rs端绑定vip 的方法

ifconfig lo:01 10.0.0.29 netmask 255.255.255.255 up

route add -host 10.0.0.29 dev lo

抑制arp响应方法如下

[root@web1 ~]# echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore

[root@web1 ~]# echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce

[root@web1 ~]# echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore

[root@web1 ~]# echo "2" > /proc/sys/net/ipv4/conf/all//arp_announce

windows  web 绑定vip 的方法

WINDOWS 2008 SERVER R2 配置

1. 创建windows环回网卡(如何创建,请自己Google)
2. 设置环回网卡IP地址
    > IP地址:    192.168.1.10
    > 子网掩码: 255.255.255.255
    其它不用设置了
3. 修改客户端网卡接口、环回接口连接模式(至关重要)
    > netsh interface ipv4 set interface "网卡名称" weakhostreceive=enabled
    > netsh interface ipv4 set interface "网卡名称" weakhostsend=enabled
    > netsh interface ipv4 set interface "环回网卡名称" weakhostreceive=enabled
    > netsh interface ipv4 set interface "环回网卡名称" weakhostsend=enabled


5)测试实验结果

如果测试部成功可以按照三角的排查原理来进行排查,显示client到RS端是否能通讯,LB到RS能否通讯,client到LB是否能通讯,client到VIP是否能够通讯。并且查看LVS的运行状态。一定要确保keepalived.conf这个配置文件是正确的