Keepalived+ipvsadm 的DR模式简介与示例
Posted 一饮孤与悲
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Keepalived+ipvsadm 的DR模式简介与示例相关的知识,希望对你有一定的参考价值。
LVS简介 ILVS,是Linux Virtual Server的简称,也就是Linux虚拟服务器, 是一个由章文嵩博士发起的自由软件项目。LVS由用户空间的ipvsadm和内核空间的IPVS组成,ipvsadm用来定义规则,IPVS利用ipvsadm定义的规则工作。现在LVS已经是 Linux标准内核的一部分,在Linux2.4内核以前,使用LVS时必须要重新编译内核以支持LVS功能模块,但是从Linux2.4内核以后,已经完全内置了LVS的各个功能模块,无需给内核打任何补丁,可以直接使用LVS提供的各种功能。LVS特点:
通过LVS提供的负载均衡技术和Linux操作系统实现一个高性能、高可用的服务器群集,它具有良好可靠性、可扩展性和可操作性。从而以低廉的成本实现最优的服务性能。LVS的主要特点有以下几个方面: 高并发连接:LVS基于内核网络层面工作,有超强的承载能力和并发处理能力。单台LVS负载均衡器,可支持上万并发连接。稳定性强:是工作在网络4层之上仅作分发之用,这个特点也决定了它在负载均衡软件里的性能最强,稳定性最好,对内存和cpu资源消耗极低。 成本低廉:硬件负载均衡器少则十几万,多则几十万上百万,LVS只需一台服务器和就能免费部署使用,性价比极高。 配置简单:LVS配置非常简单,仅需几行命令即可完成配置,也可写成脚本进行管理。 支持多种算法:支持多种论调算法,可根据业务场景灵活调配进行使用 支持多种工作模型:可根据业务场景,使用不同的工作模式来解决生产环境请求处理问题。 应用范围广:因为LVS工作在4层,所以它几乎可以对所有应用做负载均衡,包括http、数据库、DNS、ftp服务等等 缺点:工作在4层,不支持7层规则修改,机制过于庞大,不适合小规模应用。LVS常见术语
LVS中有一些常见的术语,如下表所示:名称 | 解释 |
ipvsadm | 用户空间的命令行工具,用于管理集群服务及集群服务上的RS等; |
IPVS | 工作于内核上的netfilter INPUT HOOK之上的程序,可根据用户定义的集群实现请求转发; |
VS | Virtual Server ,虚拟服务 |
Director, Balancer | 负载均衡器、分发器 |
RS | Real Server 后端请求处理服务器 |
CIP | Client IP,客户端IP |
VIP | Director Virtual IP,负载均衡器虚拟IP |
DIP | Director IP,负载均衡器IP |
RIP | Real Server IP,后端请求处理服务器IP |
![\'Keepalived+ipvsadm](https://image.cha138.com/20210909/77cc34cb40bb4c9d82d05be4d96770e1.jpg?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
DR模式
Virtual Server via Direct Routing(VS-DR):用直接路由技术实现虚拟服务器。当参与集群的计算机和作为控制管理的计算机在同一个网段时可以用此方法,控制管理的计算机接收到请求包时直接送到参与集群的节点。直接路由模式比较特别,很难说和什么方面相似,前种模式基本上都是工作在网络层上(三层),而直接路由模式则应该是工作在数据链路层上(二层)。 工作原理 :![\'Keepalived+ipvsadm](https://image.cha138.com/20210909/702ab937b5f44e64be51a69dc1a637ac.jpg?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
内核参数详解
arp_ignore
arp_announce
不修改的话,回答数据包源ip地址为VIP,mac为发送网卡的mac即途中的eth0,那么交换机上更新mac表之后,就会发现VIP对应两条mac记录,一条对应Director的mac地址,一条对应Real Server的mac地址。就会使真正的VIP得不到正确的请求了 相对于NAT模式来言,DR模式能够较好的解决上述问题,其数据在服务器集群中的流向如上图所示,请求报文经过LVS到达后端真实的WEB服务器,而响应报文,则直接发给客户端,并不需要通过调度器。 数据包流转过程![\'Keepalived+ipvsadm](https://image.cha138.com/20210909/d3bec92e5afb445d81fa9156323c3d1e.jpg?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
| 主机 | 操作系统 |ip地址 |主要软件
| -------- | -------- | -------- |
| keepalivedMaster| Centos7 |192.168.0.10 |keepalived、ipvsadm
| keepalivedBackup| Centos7 |192.168.0.11 |keepalived、ipvsadm
|客户机| win7 |192.168.0.1 |网页浏览器
VIP地址192.168.0.12
案例操作
一、安装两台nginx服务器
1、安装环境包
2、下载nginx包
3、解压编译
4、优化
5、修改网页站点
6、关闭防火墙、开启Nginx服务
7、客户机测试访问
二 配置ipvsadm调度服务器
1.下载keepaliveed 和 ipvsadm
yum -y install keepalived ipvsadm
2.关闭防火墙 开启路由转发功能
[root@bogon ~]# systemctl stop firewalld.service
[root@bogon ~]# systemctl disable firewalld.service
[root@bogon ~]# setenforce 0
[root@bogon ~]# vim /etc/sysctl.conf #添加如下四行内容
net.ipv4.ip_forward=1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects =0
sysctl -p #刷新即时生效
3.复制ens33网卡,是指虚拟IP
[root@bogon ~]# cd /etc/sysconfig/network-scripts/
[root@bogon network-scripts]# cp ifcfg-ens33 ifcfg-ens33:0
[root@bogon network-scripts]# vim ifcfg-ens33:0 #删除原有内容,添加如下4行
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.0.12
NETMASK=255.255.255.0
[root@bogon network-scripts]# ifup ens33:0 #启动ens33:0网卡
4.配置ipvsadm启动脚本
vim /etc/init.d/dr.sh
#!/bin/bash
GW=192.168.0.1
#网关
VIP=192.168.0.12
#虚拟ip
RIP1=192.168.0.10
#nginx1服务器ip
RIP2=192.168.0.11
#nginx2服务器ip
case "$1" in
start)
/sbin/ipvsadm --save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm
/sbin/ifconfig ens33:0 $VIP broadcast $VIP netmask 255.255.255.255 broadcast $VIP up
/sbin/route add -host $VIP dev ens33:0
/sbin/ipvsadm -A -t $VIP:80 -s rr
/sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g
/sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g
echo "ipvsadm starting --------------------[ok]"
;;
stop)
/sbin/ipvsadm -C
systemctl stop ipvsadm
ifconfig ens33:0 down
route del $VIP
echo "ipvsamd stoped----------------------[ok]"
;;
status)
if [ ! -e /var/lock/subsys/ipvsadm ];then
echo "ipvsadm stoped---------------"
exit 1
else
echo "ipvsamd Runing ---------[ok]"
fi
;;
*)
echo "Usage: $0 {start|stop|status}"
exit 1
esac
exit 0
5.添加脚本权限,启动ipvsadm
# chmod+x /etc/init.d/dr.sh
# service dr.sh start
三、回到Nginx节点服务器配置虚拟ip
1、复制ifcfg-lo网卡,进行修改
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp ifcfg-lo ifcfg-lo:0
[root@localhost network-scripts]# vim ifcfg-lo:0 #删除原本内容,添加如下4行
DEVICE=lo:0
IPADDR=192.168.0.12
NETMASK=255.255.255.0
ONBOOT=yes
2.设置ifcfg-lo:0 启动脚本
[root@localhost network-scripts]# cd /etc/init.d/
[root@localhost init.d]# vim lo.sh
#!/bin/bash
VIP=192.168.0.12
#虚拟ip
case "$1" in
start)
ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
/sbin/route add -host $VIP dev lo:0
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_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p >/dev/null 2>&1
echo "RealServer Start OK "
;;
stop)
ifconfig lo:0 down
route del $VIP /dev/null 2>&1
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
echo "RealServer Stopd"
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit 0
3.添加脚本权限,启动lo:0网卡
[root@localhost init.d]# chmod +x lo.sh
[root@localhost init.d]# service lo.sh start
[root@localhost init.d]# ifup lo:0
4、本地再次自测站点
四、配置Keepalived
2、开启keepalived服务
#查看状态
[root@test1 ~]# systemctl status keepalived.service
● keepalived.service - LVS and VRRP High Availability Monitor
Loaded: loaded (/usr/lib/systemd/system/keepalived.service; disabled; vendor preset: disabled)
Active: active (running) since Mon 2021-09-06 23:24:55 CST; 1h 55min ago
Process: 25539 ExecStart=/usr/sbin/keepalived $KEEPALIVED_OPTIONS (code=exited, status=0/SUCCESS)
Main PID: 25540 (keepalived)
以上是关于Keepalived+ipvsadm 的DR模式简介与示例的主要内容,如果未能解决你的问题,请参考以下文章