1.Keepalived的设计目标是构建高可用的LVS负载均衡群集,可以调用ipvsadm工具来创建虚拟服务器、管理服务器池,而不仅仅是双机热备。优点:keepalived对lvs负载调度器实现热备切换,提高可用性,对服务器池中的节点进行健康检查,自动移除失效节点,恢复后再重新加入。
2.基于lvs+keepalived实现的lvs群集结构中,至少包含两台热备的负载调度器。使用keepalived构建lvs群集时,也需要用到ipvsadm管理工具,但是大部分工作会由keepalived自动完成,不需要手动执行ipvsadm(除了查看和监控群集以外)。
3.LVS群集是针对Linux内核开发的一个负载均衡项目,基于IP地址虚拟化应用VIP,为基于IP地址和内容请求分发的负载均衡提出了一种高效的解决办法。可使用ipvsadm管理工具。通过整合多台相对廉价的普通服务器,以同一个地址对外提供相同的服务。
4.负载均衡的直接路由工作模式。简称DR工作模式,负载调度器仅作为客户机的访问入口,各节点服务器与调度器位于同一个物理网络,节点服务器直接回应客户机的请求,而不再经过负载调度器。
5.Keepalived是专门针对LVS设计的一款强大的辅助工具,主要用来提供故障切换(Failover)和健康检查(Health Checking)功能–判断LVS负载调度器,节点服务器的可用性,及时隔离并替换为新的服务器,当故障主机恢复后将其重新加入集群
6.keepalived主要有三个模块,分别是core、check和vrrp。core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式
配置信息
7.vrrp:虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样的话就可以保证路由器的高可用了。
Master:192.168.176.138
Backup:192.168.176.139
Vip:192.168.176.100
//两台都需要安装
yum -y install ipvsadm keepalived
yum -y install httpd
[root@138 ~]# vim lvs.sh
[root@138 ~]# cat lvs.sh
#!/bin/bash
vip=192.168.176.100
ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip dev lo:0
//在真实服务器上对arp_ignore和arp_announce参数进行配置,主要是实现禁止响应对VIP的ARP请求(修改内核参数)
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
//arp_ignore:定义对目标地址为本地IP的ARP询问不同的应答模式0
//0 - (默认值): 回应任何网络接口上对任何本地IP地址的arp查询请求
//1 - 只回答目标IP地址是来访网络接口本地地址的ARP查询请求
//2 -只回答目标IP地址是来访网络接口本地地址的ARP查询请求,且来访IP必须在该网络接口的子网段内
//3 - 不回应该网络界面的arp请求,而只对设置的唯一和连接地址做出回应
//4-7 - 保留未使用
//8 -不回应所有(本地地址)的arp查询
//arp_announce:对网络接口上,本地IP地址的发出的,ARP回应,作出相应级别的限制: 确定不同程度的限制,宣布对来自本地源IP地址发出Arp请求的接口
//0 - (默认) 在任意网络接口(eth0,eth1,lo)上的任何本地地址
//1 -尽量避免不在该网络接口子网段的本地地址做出arp回应. 当发起ARP请求的源IP地址是被设置应该经由路由达到此网络接口的时候很有用.此时会检查来访IP是否为所有接口上的子网段内ip之一.如果改来访IP不属于各个网络接口上的子网段内,那么将采用级别2的方式来进行处理.
//2 - 对查询目标使用最适当的本地地址.在此模式下将忽略这个IP数据包的源地址并尝试选择与能与该地址通信的本地地址.首要是选择所有的网络接口的子网中外出访问子网中包含该目标IP地址的本地地址. 如果没有合适的地址被发现,将选择当前的发送网络接口或其他的有可能接受到该ARP回应的网络接口来进行发送.
[root@138 ~]# sh lvs.sh
lvs.sh:行3: ifconfig: 未找到命令
lvs.sh:行4: route: 未找到命令 ###因为最小化所以需要安装net-tools
[root@138 ~]# yum -y install net-tools
[root@138 ~]# sh lvs.sh
[root@138 ~]# scp lvs.sh 192.168.176.139:/root/
[root@139 ~]# ls
anaconda-ks.cfg lvs.sh
[root@139 ~]# sh lvs.sh
//ip a查看
[root@139 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet 192.168.176.100/32 brd 192.168.176.100 scope global lo:0
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:63:45:5f brd ff:ff:ff:ff:ff:ff
inet 192.168.176.139/24 brd 192.168.176.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet6 fe80::8fe4:3a26:c12a:47ab/64 scope link noprefixroute
valid_lft forever preferred_lft forever
主节点(master)配置文件
[root@138 ~]# vim /etc/keepalived/keepalived.conf
[root@138 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL # 路由器标识
}
vrrp_instance VI_1 { # 一个vrrp_instance就是定义一个虚拟路由器的,实例名称
state MASTER # 定义初始状态,可以是MASTER或者BACKUP
interface ens33 # 工作接口
virtual_router_id 51 # 虚拟路由ID,ID还是虚拟MAC最后一段地址的信息,取值范围0-255
priority 100 # 如果你上面定义了MASTER,这里的优先级就需要定义的比其他的高
advert_int 1 # 通告频率,单位为秒
authentication { # 通信认证机制,这里是明文认证还有一种是加密认证
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { # 设置虚拟VIP地址,一般就设置一个,在LVS中这个就是为LVS主机设置VIP的,这样你就不用自己手动设置了
192.168.176.100
}
}
# 定义LVS集群服务,可以是IP+PORT;也可以是fwmark 数字,也就是防火墙规则
virtual_server 192.168.176.100 80 {
delay_loop 6
lb_algo rr # 算法
lb_kind DR # LVS的模式
persistence_timeout 0 # 持久连接超时时间
protocol TCP # 定义协议
real_server 192.168.176.138 80 { # 后端应用服务器 IP PORT
weight 1 # 权重
TCP_CHECK { # MSIC_CHECK|SMTP_CHEKC|TCP_CHECK|SSL_GET|HTTP_GET这些都是针对应用服务器做健康检查的方法
connect_timeout 3 # 连接超时时间
nb_get_retry 3 # 尝试次数
delay_before_retry 3 # 每次尝试之间间隔几秒
connect_port 80 # 向哪一个端口检查,如果不指定默认使用上面定义的端口
}
}
real_server 192.168.176.139 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
从节点(backup)配置文件
//拷贝主节点的配置文件keepalived.conf:
[root@138 ~]# scp /etc/keepalived/keepalived.conf root@192.168.176.139:/etc/keepalived/keepalived.conf
//把以下内容给修改
state MASTER -> state BACKUP
priority 100 -> priority 90
两个节点开启转发功能(两台)
echo 1 > /proc/sys/net/ipv4/ip_forward
启动keepalived
systemctl start keepalived
修改日志保存路径
vim /etc/sysconfig/keepalived
把KEEPALIVED_OPTIONS="-D" 修改为:KEEPALIVED_OPTIONS="-D -d -S 0"
在/etc/rsyslog.conf 末尾添加
local0.* /var/log/keepalived.log
重启日志服务
systemctl restart rsyslog
//查看日志是否启动成功
[root@138 ~]# tailf /var/log/keepalived.log
//查看是否正常
[root@138 ~]# 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.176.100:80 rr
-> 192.168.176.138:80 Route 1 0 0
-> 192.168.176.139:80 Route 1 0 1
[root@138 ~]# vim /var/www/html/index.html
[root@138 ~]# cat /var/www/html/index.html
<h1>lee1</h1>
[root@139 ~]# vim /var/www/html/index.html
[root@139 ~]# cat /var/www/html/index.html
<h1>lee2</h1>
防火墙关闭
systemctl stop firewalld
setenforce 0
//关闭keepalived,再测试页面
[root@139 ~]# systemctl stop keepalived