模拟LVS的DR模式下的HA高可用
1,实验环境:
Keepalived服务器(两个设置一致)设置:
1,安装包下载编译安装
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 # 安装管理工具
注意:只需要进行安装工具,不需要进行策略设置。
3 设置链接,方便访问keepalived配置文件
ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/keepalived/etc/keepalived/ /etc
ln -s /usr/local/keepalived/sbin/keepalived /sbin
4 编辑keepalived配置文件
172.25.13.110
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost #节点宕机了将会接收到异常邮件的主机
}
notification_email_from keepalived@localohost #邮件发送人
smtp_server 127.0.0.1 #发送的服务器
smtp_connect_timeout 30 #指定连接超时时间
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state MASTER #主节点表示
interface eth0
virtual_router_id 13
priority 100 #权重
advert_int 1 #检查的间隔1s
authentication {
auth_type PASS #认证方式
auth_pass 1111 #认证的密码
}
virtual_ipaddress {
172.25.13.100
}
}
virtual_server 172.25.13.100 80 {
delay_loop 6 #连接失败六次之后,发送邮件
lb_algo rr #lvs调度算法
lb_kind DR #lvs该工作方式
protocol TCP # 端口
real_server 172.25.13.130 80 {
TCP_CHECK {
weight 1
connect_port 80
connect_timeout 3
}
}
real_server 172.25.13.140 80 {
TCP_CHECK {
weight 1
connect_port 80
connect_timeout 3
}
}
}
172.25.13.120
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost #节点宕机了将会接收到异常邮件的主机
}
notification_email_from keepalived@localohost #邮件发送人
smtp_server 127.0.0.1 #发送的服务器
smtp_connect_timeout 30 #指定连接超时时间
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state BACKUP #主节点表示
interface eth0
virtual_router_id 13
priority 50 #权重
advert_int 1 #检查的间隔1s
authentication {
auth_type PASS #认证方式
auth_pass 1111 #认证的密码
}
virtual_ipaddress {
172.25.13.100
}
}
virtual_server 172.25.13.100 80 {
delay_loop 6 #连接失败六次之后,发送邮件
lb_algo rr #lvs调度算法
lb_kind DR #lvs该工作方式
protocol TCP # 端口
real_server 172.25.13.130 80 {
TCP_CHECK {
weight 1
connect_port 80
connect_timeout 3
}
}
real_server 172.25.13.140 80 {
TCP_CHECK {
weight 1
connect_port 80
connect_timeout 3
}
}
}
5 开启服务,并设置服务开机自动启动
systemctl start keepalived
systemctl enable keepalived
真实服务器设置
1 安装httpd 启动设置访问页面
注意:该处为了验证负载均衡的效果,后端真实服务器设置不同的访问内容,明显标示内容来自不同的后端服务器。
2 添加VIP到各自的物理网卡中
ip addr add 172.25.13.100/24 dev eth0 # 临时添加ip到eth0网卡
3 设置arptable策略,解决将用户所有针对VIP的请求发送到DS 而不是RS
yum install arptables -y # 安装管理工具
arptables -A INPUT -d 172.25.47.100 -j DROP # 设置不回应对自己VIP的请求
arptables -A OUTPUT -s 172.25.47.100 -j mangle --mangle-ip-s 172.25.47.120
#设置将发送出去的数据包的源ip修改成VIP
测试:
1 设置完成真实服务器之后,在两个调度器上查看ipvsadm 全部自动生成负载均衡策略:
[root@toto2 keepalived-2.0.6]# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 172.25.13.100:http rr
-> 172.25.13.130:http Route 1 0 0
-> 172.25.13.140:http Route 1 0 0
2 使用客户端主机测试:
负载均衡正常
[kiosk@foundation13 Desktop]$ curl 172.25.13.100
toto3————real_server
[kiosk@foundation13 Desktop]$ curl 172.25.13.100
toto4————real_server
[kiosk@foundation13 Desktop]$ curl 172.25.13.100
toto3————real_server
[kiosk@foundation13 Desktop]$ curl 172.25.13.100
toto4————real_server
3 关闭真实服务器172.25.13.140的http的服务。模拟该服务器故障,测试该真实服务器被踢除出列表,当服务正常的时候会自动添加到列表中
[root@toto4 ~]# systemctl stop httpd # 关闭一个真实服务器
[root@toto2 keepalived-2.0.6]# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 172.25.13.100:http rr
-> 172.25.13.130:http Route 1 0 0 # 已经关闭的服务器被移除出列表。
客户访问:
[kiosk@foundation13 Desktop]$ curl 172.25.13.100
toto3————real_server
[kiosk@foundation13 Desktop]$ curl 172.25.13.100
toto3————real_server
[kiosk@foundation13 Desktop]$ curl 172.25.13.100
toto3————real_server
故障服务器恢复之后,自动检测将其加入列表:
[root@toto4 ~]# systemctl start httpd
[root@toto2 keepalived-2.0.6]# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 172.25.13.100:http rr
-> 172.25.13.130:http Route 1 0 0
-> 172.25.13.140:http Route 1 0 0 #恢复之后自动添加
4 目前负载均衡服务器工作在主服务器,主服务器上会添加vip,关闭主服务器的keepalived,模拟负载均衡主服务器异常,这时候会切换到由服务器提供负载均衡服务,并且vip会主动漂移到副服务器。
172.25.13.110:主服务器
[root@toto1 samples]# ip addr show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 52:54:00:ca:52:c8 brd ff:ff:ff:ff:ff:ff
inet 172.25.13.110/24 brd 172.25.13.255 scope global eth0
valid_lft forever preferred_lft forever
inet 172.25.13.100/32 scope global eth0 # 添加vip自动
valid_lft forever preferred_lft forever
inet6 fe80::5054:ff:feca:52c8/64 scope link
valid_lft forever preferred_lft forever
#关闭keepalived 模拟主服务器异常,
[root@toto1 samples]# systemctl stop keepalived
#再次查看ip,vip已经不在该主机上面
[root@toto1 samples]# ip addr show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 52:54:00:ca:52:c8 brd ff:ff:ff:ff:ff:ff
inet 172.25.13.110/24 brd 172.25.13.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::5054:ff:feca:52c8/64 scope link
valid_lft forever preferred_lft forever
负载均衡主服务器异常,将会由副服务器提供服务,vip会自动漂移到副服务器:
[root@toto2 keepalived-2.0.6]# ip addr show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 52:54:00:43:f6:eb brd ff:ff:ff:ff:ff:ff
inet 172.25.13.120/24 brd 172.25.13.255 scope global eth0
valid_lft forever preferred_lft forever
inet 172.25.13.100/32 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::5054:ff:fe43:f6eb/64 scope link
valid_lft forever preferred_lft forever
#客户端测试服务正常:
[kiosk@foundation13 Desktop]$ curl 172.25.13.100
toto4————real_server
[kiosk@foundation13 Desktop]$ curl 172.25.13.100
toto3————real_server
[kiosk@foundation13 Desktop]$ curl 172.25.13.100
toto4————real_server
[kiosk@foundation13 Desktop]$ curl 172.25.13.100
toto3————real_server
分析: 当master负载均衡器挂掉之后,backup负载均衡器负责起负载均衡的功能,避免了单点故障,实现了负载均衡的高可用!!!