目录
(1)配置虚拟IP地址(VIP:192.168.109.188)
(2)调整内核的ARP响应参数以阻止更新VIP的MAC地址,避免发生冲突
前言
企业应用中,单台服务器承担应用存在单点故障的危险,单点故障一旦发生,企业服务将发生中断,造成极大的危害,所以我们需要配置高可用群集。
群集的特点:
- 负载均衡
- 健康检查(高可用)
- 故障切换
一、Keepalived实现原理剖析
1.1 VRRP(虚拟路由冗余协议)
- 是针对路由器的一种备份解决方案,由多台路由器组成一个热备组,通过共用虚拟IP地址对外提供服务;
- 每个热备组内同时只有一台主路由器提供服务,其他路由器处于冗余状态;
- 若当前在线的路由器失效,则其他路由器会根据设置的优先级自动接替虚拟IP地址,继续提供服务
- 通过优先级决定主节点
1.2 Keepalived 原理
Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案,可以解决静态路由出现的单点故障问题。
在一个LVS服务集群中通常有主服务器(MASTER)和备份服务器(BACKUP)两种角色的服务器,但是对外表现为一个浮动IP(VIP),主服务器会发送VRRP通告信息给备份服务器,当备份服务器收不到VRRP消息的时候,即主服务器异常的时候,备份服务器就会接管浮动IP,继续提供服务,从而保证了高可用性。
主服务器作用:转发数据;发送报文告诉备服务器自己在线
备服务器作用:监听主服务器发来的数据;收不到消息的时候就接替主服务器
1.3 Keepalived 工具介绍
- 支持故障自动切换(Failover)
- 支持节点健康状态检查(Health Checking)
是专为LVS和HA设计的一款健康检查工具,判断LVS负载调度器、节点服务器的可用性,当master 主机出现故障及时切换到backup节点保证业务正常,当master故障主机恢复后将其重新加入群集并且业务重新切换回master节点。
官方网站:http://www.keepalived.org/
1.4 Keepalived 模块
Keepalived体系主要模块及其作用:
keepalived体系架构中主要有三个模块,分别是core、check和vrrp。
- core模块:为keepalived的核心,负责主进程的启动、维护及全局配置文件的加载和解析。
- vrrp模块:是来实现VRRP协议的。
- check模块:负责健康检查,常见的方式有端口检查及URI检查。
二、LVS+Keepalived群集部署
实验拓扑
主DR服务器:7-4 192.168.109.134
备DR服务器:7-5 192.168.109.135
web1:7-2 192.168.109.132
web2:7-3 192.168.109.133
客户端:w7 192.168.109.200
#每台机子关闭防火墙和selinux
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
2.1 配置负载均衡器(主备相同)
主DR服务器:7-4 192.168.109.134
备DR服务器:7-5 192.168.109.135
1.下载相应的软件包
yum install -y ipvsadm keepalived
2.修改keepalived配置文件
#找到配置文件位置
[root@localhost ~]# rpm -qc keepalived
/etc/keepalived/keepalived.conf
/etc/sysconfig/keepalived
[root@localhost ~]# cd /etc/keepalived/
[root@localhost keepalived]# ls
keepalived.conf
#备份配置文件
[root@localhost keepalived]# cp keepalived.conf keepalived.conf.bak
[root@localhost keepalived]# ls
keepalived.conf keepalived.conf.bak
#修改配置文件
[root@localhost keepalived]# vim keepalived.conf
! Configuration File for keepalived
#全局配置
global_defs {
notification_email {
[email protected]
[email protected]
[email protected]
}
notification_email_from [email protected]
smtp_server 127.0.0.1 #将邮箱地址改为本地
smtp_connect_timeout 30
router_id LVS_01 #设置名称,便于区分
#vrrp_skip_check_adv_addr #将四行vrrp的配置删掉
#vrrp_strict
#vrrp_garp_interval 0
#vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state MASTER #主备服务器的名称,但真正区分主备是用优先级区分
interface ens33 #改为ens33,跟自己的机子对应
virtual_router_id 51 #主备保持一致,默认51
nopreempt #添加这行,意味着非抢占模式,抢占模式下宕机后恢复的主服务器会将备服务器挤掉继续自己执行,
#来回切换会造成脑裂,出现网络波动现象
priority 100 #优先级越大就是主
advert_int 1 #报文间隔时间
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.109.188
}
}
#配置虚拟服务器实例
#virtual_server 192.168.200.100 443 {
#指定虚拟IP和端口号,443是https协议,80是http协议
virtual_server 192.168.109.188 80 {
delay_loop 6 #健康检查的时间,检查节点服务器
lb_algo rr #调度算法,默认轮询算法
lb_kind DR #LVS工作模式,默认是NAT,我们实验用DR
persistence_timeout 0 #长连接,默认50s,不想这么长改成0
protocol TCP #健康检查的协议
#配置真实服务器
real_server 192.168.109.132 80 {
weight 1 #权重,采用加权轮询算法时要改
# SSL_GET { #健检查的方式,默认SSL_GET ,我们采用TCP_CHECK
#url {
# path /
# digest ff20ad2481f97b1754ef3e12ecd3a9cc
# }
# url {
# path /mrtg/
# digest 9b3a0c85a887a256d6939da88aabd8cd
# }
TCP_CHECK{
connect_port 80#指定端口号
connect_timeout 3 #超时时间
nb_get_retry 3 #重试次数
delay_before_retry 3 #间隔时间
}
}
#再添加一台真实服务器配置
real_server 192.168.109.133 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
#下面其余的内容全部删掉
#保存后重启
[root@localhost keepalived]# systemctl restart keepalived.service
#传给备服务器
[root@localhost keepalived]# scp keepalived.conf 192.168.109.135:`pwd`
#开启ipvsadm工具(两台一样)
[root@localhost ~]# ipvsadm-save > /etc/sysconfig/ipvsadm
[root@localhost ~]# systemctl start ipvsadm
[root@localhost ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.109.188:80 rr
-> 192.168.109.132:80 Route 1 0 0
-> 192.168.109.133:80 Route 1 0 0
主要改的地方:
邮箱地址
router_id
状态:主MASTER 备BACKUP
网卡名称
keepalived是通过ip命令生成VIP,使用ip命令查看
3.调整 proc 响应参数
#调整 proc 响应参数,关闭Linux 内核的重定向参数响应
vim /etc/sysctl.conf
......
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
......
sysctl -p
2.2 http服务器配置
web服务器1centos7-2 192.168.109.132
web服务器2centos7-3 192.168.109.133
#下载http服务并开启
yum install -y httpd
systemctl start httpd
systemctl enable httpd
#web1加入这行网页内容
echo "<h1>web1</h1>" > /var/www/html/index.html
#web2加入这行网页内容
echo "<h1>web2</h1>" > /var/www/html/index.html
(1)配置虚拟IP地址(VIP:192.168.109.188)
#此地址仅用作发送Web响应数据包的源地址,并不需要监听客户机的访问请求(改由调度器监听并分发)。因此使用虚接口1o:0来承载VIP地址,并为本机添加一条路由记录,将访问VIP的数据限制在本地,以避免通信紊乱。
[root@web1 ~]# cd /etc/sysconfig/network-scripts/
[root@web1 network-scripts]# cp ifcfg-lo ifcfg-lo:0
[root@web1 network-scripts]# vim ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.109.188
NETMASK=255.255.255.255 #注意:子网掩码必须全为1
[root@web1 network-scripts]# ifup lo:0 #开启虚拟网卡
[root@web1 network-scripts]# ifconfig lo:0
lo:0: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 192.168.109.188 netmask 255.255.255.255
loop txqueuelen 1 (Local Loopback)
#临时添加路由
[root@web1 network-scripts]# route add -host 192.168.109.188 dev lo:0
#-host 添加一个主机
#-net添加一个网段
#dev代表出站网卡
[root@web1 network-scripts]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.109.2 0.0.0.0 UG 100 0 0 ens33
192.168.109.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33
192.168.109.188 0.0.0.0 255.255.255.255 UH 0 0 0 lo
192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0
#开机自动加入路由
[root@web1 network-scripts]# vim /etc/rc.local
[root@web1 network-scripts]# cat /etc/rc.local |grep route
/sbin/route add -host 192.168.109.188 dev lo:0
[root@web1 network-scripts]# chmod +x /etc/rc.d/rc.local
(2)调整内核的ARP响应参数以阻止更新VIP的MAC地址,避免发生冲突
vim /etc/sysctl.conf
......
net.ipv4.conf.lo.arp_ignore=1 #系统只响应目的IP为本地IP的ARP请求
net.ipv4.conf.lo.arp_announce=2 #系统不使用IP包的源地址来设置ARP请求的源地址,而选择发送接口的IP地址
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.all.arp_announce=2
......
sysctl -p
2.3 客户端测试
总结
Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案,可以解决静态路由出现的单点故障问题。
在一个LVS服务集群中通常有主服务器(MASTER)和备份服务器(BACKUP)两种角色的服务器,但是对外表现为一个浮动IP(VIP),主服务器会发送VRRP通告信息给备份服务器,当备份服务器收不到VRRP消息的时候,即主服务器异常的时候,备份服务器就会接管浮动IP,继续提供服务,从而保证了高可用性。