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)实验架构图&需求表:
角色 | IP地址 | 备注 |
主LVS调度器(MASTER) | 192.168.41.181 | 使用keepalived配置 |
备LVS调度器(BACKUP) | 192.168.41.251 | |
HTTP服务器(RS1) | 192.168.41.31 | apache服务器(一般生产环境需要外网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的时候
解决方法
yum install -y openssl openssl-devel
接下来在安装的时候 会报共享库没有安装
yum -y install popt-devel
接下来 我们在安装
这个如果是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 { [email protected] #设置报警邮箱,一般不再这做,而是用其他方式报警。 } 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 { [email protected] #设置报警邮箱,一般不再这做,而是用其他方式报警。 } 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这个配置文件是正确的
本文出自 “�潘咳松�” 博客,谢绝转载!