###LVS中DR模式简介###
一.LVS中DR模式简介:
TUN模式下,由于需要在LVS调度器与真实服务器之间创建隧道连接,这同样会增加服务器的负担。与TUN类似,DR模式也叫直接路由模式,其体系结构如图4所示,该模式中LVS依然仅承担数据的入站请求以及根据算法选出合理的真实服务器,最终由后端真实服务器负责将响应数据包发送返回给客户端。与隧道模式不同的是,直接路由DR模式要求调度器与后端服务器必须在同一个局域网内,VIP地址需要在调度器与后端所有的服务器间共享,因为最终的真实服务器给客户端回应数据包时需要设置源IP为VIP地址,目标IP为客户端IP,这样客户端访问的是调度器的VIP地址,回应的源地址也依然是该VIP地址(真实服务器上的VIP),客户端是感觉不到后端服务器存在的。
###Keepalived###
Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。
负载平衡是一种跨真实服务器集群分布IP流量的方法,提供一个或多个高可用虚拟服务。在设计负载平衡拓扑时,必须考虑负载均衡器本身的可用性以及它背后的真实服务器。
Keepalived为负载平衡和高可用性提供了框架。负载平衡框架依赖于著名且广泛使用的Linux虚拟服务器(IPV)内核模块,该模块提供第4层负载平衡。Keepalived实现了一组健康检查程序,根据服务器池的健康状况动态、自适应地维护和管理负载平衡的服务器池。虚拟冗余路由协议(VRRP)实现了高可用性。VRRP是路由器故障转移的基础。此外,Keepalived还实现了一组到VRRP有限状态机的钩子,提供了低级别和高速的协议交互。每个保持连接的框架可以单独使用,也可以一起使用,以提供弹性的基础设施。
在这种情况下,负载均衡器也可以称为控制器或LVS路由器。简而言之,keepalived提供两个主要功能:
LVS系统的健康检查
实现VRRPv2堆栈以处理负载平衡器故障转移
配置高可用负载均衡集群
使用LVS—DR模式实现负载均衡
配置环境:
服务器 | ip地址 | vip |
---|---|---|
keepalived服务器1 | 172.25.46.1 | 172.25.46.100 |
keepalived服务器2 | 172.25.46.2 | 172.25.46.100 |
真实服务器1 | 172.25.46.3 | 172.25.46.100 |
真实服务器2 | 172.25.46.4 | 172.25.46.100 |
keepalived服务器(两个设置一致)设置:
1.安装包下载编译安装
1.)配置高级yum 源(sever1和server2)
2.)安装包解压编译安装
keepalived-2.0.6.tar.gz #源码包需要先进行编译然后进行安装。
tar -zxf keepalived-2.0.6.tar.gz # 解压压缩文件
cd keepalived-2.0.6 # 进入解压开的文件
yum install gcc openssl-devel -y # 安装对源码包进行编译的辅助软件
./configure --prefix=/usr/local/keepalived --with-init=systemd # 编译
make && make install # 安装
2 安装lvs管理工具ipvsadm
yum install ipvsadm -y # 安装管理工具
注意:只需要进行安装工具,不需要进行策略设置。
[root@server2 keepalived-2.0.6]# cd /etc/yum.repos.d/
[root@server2 yum.repos.d]# ls
redhat.repo yum.repo
[root@server2 yum.repos.d]# cat yum.repo
[rhel7.3]
name=rhel7.3
baseurl=http://172.25.46.250/westos
gpgcheck=0
[HighAvailability]
name=HighAvailability
baseurl=http://172.25.46.250/westos/addons/HighAvailability
gpgcheck=0
[ResilientStorage]
name=ResilientStorage
baseurl=http://172.25.46.250/westos/addons/ResilientStorage
gpgcheck=0
2.虚拟机服务器获得keepalived安装包解压并安装(sever1和server2)
[root@server2 ~]# ls
keepalived-2.0.6.tar.gz
[root@server2 ~]# tar zxf keepalived-2.0.6.tar.gz
[root@server2 ~]# ls
keepalived-2.0.6 keepalived-2.0.6.tar.gz
[root@server2 ~]# cd keepalived-2.0.6
[root@server2 keepalived-2.0.6]# yum install -y gcc openssl-devel
[root@server2 keepalived-2.0.6]# ./configure --prefix=/usr/local/keepalived --with-init=systemd
[root@server2 keepalived-2.0.6]# make && make install
[root@server2 keepalived-2.0.6]# yum install -y ipvsadm
设置软连接,方便访问keepalived
[root@server2 keepalived-2.0.6]# ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
[root@server2 keepalived-2.0.6]# ln -s /usr/local/keepalived/etc/keepalived/ /etc/
[root@server2 keepalived-2.0.6]# ln -s /usr/local/keepalived/sbin/keepalived /sbin/
服务机server1 编辑keepalived配置文件
[root@server1 keepalived-2.0.6]# cd /usr/local/
[root@server1 local]# ls
bin etc games include keepalived lib lib64 libexec sbin share src
[root@server1 local]# cd keepalived/
[root@server1 keepalived]# ls
bin etc sbin share
[root@server1 keepalived]# cd /etc/keepalived
[root@server1 keepalived]# ls
keepalived.conf samples
[root@server1 keepalived]# vim keepalived.conf
Configuration File for keepalived
global_defs {
notification_email {
root@localhost #节点宕机了将会接收到异常邮件的主机
}
notification_email_from keepalived@localhost #邮件发送人
smtp_server 127.0.0.1 #发送的服务器
smtp_connect_timeout 30 #指定连接超时时间
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
#vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state MASTER #主节点表示
interface eth0
virtual_router_id 151
priority 100#权重
advert_int 1 #检查的间隔1s
authentication {
auth_type PASS #认证方式
auth_pass 1111 #认证的密码
}
virtual_ipaddress {
172.25.46.100
}
}
virtual_server 172.25.46.100 80 {
delay_loop 6 #连接失败六次之后,发送邮件
lb_algo rr #lvs调度算法
lb_kind DR #lvs该工作方式
#persistence_timeout 50
protocol TCP #端口
real_server 172.25.46.3 80 {
TCP_CHEAK {
connect_port 80
weight 1
connect_timeout 3
}
}
real_server 172.25.46.4 80 {
TCP_CHEAK {
connect_port 80
weight 1
connect_timeout 3
}
}
}
服务机server2
[root@server2 keepalived]# vim keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost
}
notification_email_from keepalived@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
#vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state Backup ##副节点表示
interface eth0
virtual_router_id 151
priority 50 #权重
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.25.46.100
}
}
virtual_server 172.25.46.100 80 {
delay_loop 6
lb_algo rr
lb_kind DR
#persistence_timeout 50
protocol TCP
real_server 172.25.46.3 80 {
TCP_CHEAK {
connect_port 80
weight 1
connect_timeout 3
}
}
real_server 172.25.46.4 80 {
TCP_CHEAK {
connect_port 80
weight 1
connect_timeout 3
}
}
}
server1和server2开启服务,设置开机自启
systemctl start keepalived
systemctl enable keepalived
真机服务器设置
.1 安装httpd 启动设置访问页面
注意:该处为了验证负载均衡的效果,后端真实服务器设置不同的访问内容,明显标示内容来自不同的后端服务器。
2 添加VIP到各自的物理网卡中
ip addr add 172.25.46.100/24 dev eth0 # 临时添加ip到eth0网卡
3 设置arptable策略,解决将用户所有针对VIP的请求发送到DS 而不是RS
yum install arptables -y # 安装管理工具
arptables -A INPUT -d 172.25.46.100 -j DROP # 设置不回应对自己VIP的请求
arptables -A OUTPUT -s 172.25.46.100 -j mangle --mangle-ip-s 172.25.46.3
#设置将发送出去的数据包的源ip修改成VIP
[root@server3 ~]# cd /var/www/html/
[root@server3 html]# ls
[root@server3 html]# vim index.html
[root@server3 html]# systemctl start httpd
[root@server3 html]# systemctl enable httpd
[root@server3 html]# ip addr add 172.25.46.100/24 dev eth0
[root@server3 html]# yum install -y arptables
[root@server3 html]# arptables -A INPUT -d 172.26.46.100 -j DROP
[root@server3 html]# arptables -A OUTPUT -s 172.25.46.100 -j mangle --mangle-ip-s 172.25.46.3
[root@server3 html]# arptables -L
[root@server3 html]# ip addr show
测试:
[root@server2 keepalived]# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 172.25.46.100:http rr
-> 172.25.46.3:http Route 1 0 0
-> 172.25.46.4:http Route 1 0 0
客户机访问
[root@foundation46 ~]# curl 172.25.46.100
server3
[root@foundation46 ~]# curl 172.25.46.100
server4
[root@foundation46 ~]# curl 172.25.46.100
server3
[root@foundation46 ~]# curl 172.25.46.100
server4
关闭server3httpd模拟服务器故障
[root@server3 ~]# systemctl stop httpd
[root@server1 keepalived]# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP server1:http rr
-> 172.25.46.4:http Route 1 0 0
客户访问
[root@foundation46 ~]# curl 172.25.46.100
server4
[root@foundation46 ~]# curl 172.25.46.100
server4
[root@foundation46 ~]# curl 172.25.46.100
server4