目录
4)高可用服务安全访问配置(负载均衡服务)(lb01和lb02均需配置)
一、 高可用服务介绍说明
keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点状态,后来又加入了可以实现高可用的VRRP功能.此,keepalived除了能够管理LVS软件外,还可以作为其他服务(例如:Nginx,Haproxy,MySQL等)的高可用解决方案软件.
keepalived软件主要是通过VRRP协议实现高可用功能的.VRRP是Virtual Router Redundancy Protocol(虚拟路由器冗余协议)的缩写,VRRP出现的目的就是为了解决静态路由单点故障问题的,他能够保证当个别节点宕机时,整个网络可以不间断地运行.Keepalived一方面具有配置管理LVS的功能,同时还具有对LVS下面节点进行健康检查的功能,另一方面也可实现系统网络服务的高可用功能.
二、keepalived的重要功能
2.1 作为系统网络服务的高可用功能(failover)
keepalived可以实现任意两台主机之间,例如Master和Backup主机之间的故障转移和自动切换,这个主机可以使普通的不能停机的业务服务器,也可以是LVS负载均衡,Nginx反向代理这样的服务器.
keepalived高可用功能实现的基本原理为:
两台主机同时安装好keepalived软件并启动服务,开始正常工作时
角色为Master的主机获得所有资源并对用户提供服务
角色为Backup的主机作为Master主机的热备;
当角色为Master的主机失效或出现故障时
角色为Backup的主机将自动接管Master主机的所有工作,包括接管VIP资源及相应资源服务
而当角色为Master的主机故障修复后,又会自动接管回他原来处理的工作
角色为Backup的主机则同时释放Master主机失效时他接管的工作
此时,两台主机将恢复到启动时各自的原始角色及工作状态
2.2 什么是VRRP
VRRP,全称Virtual Router Redundancy Protocol,中文名为虚拟路由冗余协议
VRRP的出现就是为了解决静态路由的单点故障问题
VRRP是通过一种竞选机制来将路由的任务交给某台VRRP路由器的.
VRRP通过竞选机制来实现虚拟路由器的功能,所有的协议报文都是通过IP多播(Multicast)包(默认的多播地址224.0.0.18)形式发送的
虚拟路由器由VRID(范围0-255)和一组IP地址组成,对外表现为一个周知的MAC地址,:00-00-5E-00-01-{VRID}.
所以,在一个虚拟路由器中,不管谁是Master,对外都是相同的MAC和IP(称之为VIP).
客户端主机并不需要因Master的改变修改自己的路由配置.对它们来说,这种切换是透明的.
在一组虚拟路由器中,只有作为Master的VRRP路由器会一直发送VRRP广播包,此时Backup不会抢占Master
当Master不可用时,Backup就收不到来自Master的广播包了,此时多台Backup中优先级最高的路由器会抢占为Master.
这种抢占是非常快速的(可能只有1秒甚至更少),以保证服务的连续性,处于安全性考虑,VRRP数据包使用了加密协议进行了加密.
2.3 面试的时候怎么说
keepalived高可用对之间是通过VRRP通信的,因此,我从VRRP开始给您讲起.
1)VRRP,全称Virtual Router Reduancy Protocol,中文名为虚拟路由器冗余协议,VRRP的出现是为了解决静态路由的单点故障,
2)VRRP是通过一种竞选协议来将路由任务交给某台VRRP路由器的,
3)VRRP用IP多播的方式,(默认多播地址(224.0.0.18))实现高可用对之间通信.
4)工作时主节点发包,备节点接包,当备节点接收不到主节点发的包的时候,就启动接管程序接管主节点的资源.备节点可以有多个,通过优先级竞选,但一般keepalived系统运维工作中都是一对.
5)VRRP使用了加密协议加密数据,但keepalived官方目前还是推荐用明文的方式配置认证类型和密码.
介绍完了VRRP,接下来我在介绍一下keepalived服务的工作原理;
keepalived高可用对之间是通过VRRP进行通信的,VRRP是通过竞选机制来确定主备的,主的优先级高于备,因此,工作时会优先获得所有的资源,备节点处于等待状态,当主挂了的时候,备节点就会接管主节点的资源,然后顶替主节点对外提供服务.
在keepalived服务对之间,只有作为主的服务器会一直发送VRRP广播包,告诉备他还活着,此时备不会抢占主,当主不可用时,即备监听不到主发送的广播包时,就会启动相关服务接管资源,保证业务的连续性,接管速度最快可以小于一秒
三、 高可用keepalived服务部署流程
经过了前面对Keepalived的介绍和原理讲解,相信读者已经初步了解了Keepalived这个高可用软件,下面开始实施之旅.
下面是是对负载均衡服务器实现高可用
第一个历程: 准备两台服务器并且均配置好负载均衡服务 (lb01 lb02)
第二个历程: 安装部署keepalived软件 (lb01 lb02)
yum install -y keepalived
第三个历程: 编写keepalived配置文件(lb01 lb02)
lb01配置信息: --此处配置文件同ansible配置文件一样都需要注意格式,否则不会被执行
[root@lb01 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id lb01
}
vrrp_instance oldboy {
state MASTER
interface eth0
virtual_router_id 51
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3/24
}
}
lb02配置信息: --此处配置文件同ansible配置文件一样都需要注意格式,否则不会被执行
! Configuration File for keepalived
global_defs {
router_id lb02
}
vrrp_instance oldboy {
state BACKUP
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3/24
}
}
第四个历程: 启动keepalived服务
systemctl start keepalived
systemctl enable keepalived
systemctl status keepalived
第五个历程: 修改域名和IP地址解析关系
windows修改hosts主机文件
10.0.0.3 www.test.com
第六个历程:测试
当lb01的keepalived服务停止运行时,lb02收不到来自lb01的组播信息会夺取vip地址信息10.0.0.3成为新的主,保证负载均衡正常运作。
补充:keepalived服务配置文件介绍
vim /etc/keepalived/keepalived.conf
GLOBAL CONFIGURATION --- 全局配置部分
VRRPD CONFIGURATION --- VRRP协议配置部分
LVS CONFIGURATION --- LVS服务管理配置部分
[root@lb01 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs { --- 全局配置部分
notification_email { --- 设置发送邮件信息的收件人
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from oldboy@163.com --- 设置连接的邮件服务器信息
smtp_server 163.smtp.xxx_
smtp_connect_timeout 30
router_id LVS_DEVEL --- 高可用集群主机身份标识(集群中主机身份标识名称不能重复)
}
vrrp_instance oldboy { --- Vrrp协议家族 oldboy
state MASTER --- 标识所在家族中的身份 (MASTER/BACKUP)
interface eth0 --- 指定虚拟IP地址出现在什么网卡上
virtual_router_id 51 --- 标识家族身份信息 多台高可用服务配置要一致
priority 100 --- 设定优先级 优先级越高,就越有可能成为主
advert_int 1 --- 定义组播包发送的间隔时间(秒) 主和备配置一样 1
authentication { --- 实现通讯需要有认证过程
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { --- 配置虚拟IP地址信息
192.168.200.16
192.168.200.17
192.168.200.18
}
}
四、 高可用服务企业应用
1)高可用服务常见异常问题---脑裂问题
出现原因:
高可用备服务器接收不到主服务器发送的组播包,备服务器上会自动生成VIP地址
物理原因:
高可用集群之间通讯线路出现问题
逻辑原因:
有安全策略阻止
如何解决脑裂问题:
01. 进行监控,发出告警
备服务器出现VIP地址的原因:
a 主服务器出现故障
b 出现脑裂问题
监控脑裂的shell脚本:
[root@lb02 ~]# vim /server/scripts/naolie.sh
#!/bin/bash
ip a s eth0|grep "10.0.0.3" >/dev/null
if [ $? -eq 0 ]
then
echo "keepalived服务出现异常,请进行检查"|mail -s 异常告警-keepalived 330882721@qq.com
fi
加入定时任务每隔一分钟执行一次
补充:shell脚本进行比较判断
-eq 等于
-ne 不等于
-lt 小于
-gt 大于
-le 小于等于
-ge 大于等于
02. 直接关闭一台服务器的keepalived服务
2)如何实现keepalived服务自动释放vip地址资源
nginx(皇帝) + keepalived(妃子): nginx服务停止(皇帝死了),keepalived也必须停止(殉情)
第一个历程: 编写监控nginx服务状态监控
vim /server/scripts/check_web.sh
#!/bin/bash
num=`ps -ef|grep -c [n]ginx`
if [ $num -lt 2 ]
then
systemctl stop keepalived
fi
第二个历程: 测试监控脚本
keepalived信息配置 --(以这个为主)
[root@lb01 scripts]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id lb01
}
vrrp_script check_web {
script "/server/scripts/check_web.sh"
interval 3
weight 2
}
vrrp_instance oldboy {
state MASTER
interface eth0
virtual_router_id 51
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3/24
}
track_script {
check_web
}
}
第三个历程: 测试
停掉nginx服务的同时keepailved服务也会自动停掉
这样vip地址资源会释放给备,备会成为新的主,保证用户可以正常访问
systemctl stop nginx
systemctl status keepalived
补充:配置文件介绍
check_web.sh --(记得给脚本可执行权限)
systemctl status keepalived --(检查keepalived服务是否停止运行)
第三个历程: 实时监控nginx服务状态---keepalived配置文件
check_web=/server/scripts/check_web.sh
vrrp_script check_web {
script "/server/scripts/check_web.sh" --- 定义需要监控脚本(脚本是执行权限)
interval 2 --- 执行脚本的间隔时间(秒)
weight 2 --- ???
}
$check_web
track_script {
check_web --- 调用执行你的脚本信息
}
3) 如何高可用集群双主配置
第一个历程: 编写lb01服务器keepalived配置文件
[root@lb01 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id lb01
}
vrrp_instance oldboy {
state MASTER
interface eth0
virtual_router_id 51
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3/24
}
}
vrrp_instance oldgirl {
state BACKUP
interface eth0
virtual_router_id 52
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.4/24
}
}
第二个历程: 编写lb02服务器keepalived配置文件
[root@lb02 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id lb02
}
vrrp_instance oldboy {
state BACKUP
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3/24
}
}
vrrp_instance oldgirl {
state MASTER
interface eth0
virtual_router_id 52
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.4/24
}
}
第三个历程: 编写域名和IP地址解析信息
进行抓包查看:
www.test.com --- 10.0.0.3(10.0.0.5)
10.0.0.1 --- 10.0.0.3
10.0.0.5 --- 10.0.0.7
10.0.0.7 --- 10.0.0.5
10.0.0.3 --- 10.0.0.1
bbs.test.com --- 10.0.0.4(10.0.0.6)
10.0.0.1 --- 10.0.0.4
10.0.0.6 --- 10.0.0.7
10.0.0.7 --- 10.0.0.6
10.0.0.4 --- 10.0.0.1
![](https://i-blog.csdnimg.cn/blog_migrate/6e1b21372f613479bd661e894043d856.png)
4)高可用服务安全访问配置(负载均衡服务)(lb01和lb02均需配置)
通过设置监听地址限制用户访问通道:
外网接口只开通10.0.0.3/10.0.0.4
第一个历程: 修改内核文件
异常问题:
01. 如何设置监听网卡上没有的地址
解决: 需要修改内核信息
echo 'net.ipv4.ip_nonlocal_bind = 1' >>/etc/sysctl.conf
sysctl -p
第二个历程: 修改nginx负载均衡文件
lb01/lb02
vim /etc/nginx/conf.d/lb.conf
upstream oldboy {
server 10.0.0.7:80;
server 10.0.0.8:80;
server 10.0.0.9:80;
}
server {
listen 10.0.0.3:80;
server_name www.test.com;
location / {
proxy_pass http://oldboy;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_next_upstream error timeout http_404 http_502 http_403;
}
}
server {
listen 10.0.0.4:80;
server_name bbs.test.com;
location / {
proxy_pass http://oldboy;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
第三个历程: 重启nginx负载均衡服务
systemctl restart nginx --涉及到ip地址的修改要用restart重启
五、 高可用服务总结
1) 高可用服务作用(避免出现单点故障)
2) keepalived高可用服务
1. 管理LVS负载均衡软件
2. 实现高可用功能(vrrp原理)
3) keepalived服务配置文件
4) keepalived服务企业应用
1. 可能出现脑裂问题 --- 脚本编写
2. 如何实现自动释放资源 --- 脚本(监控web服务) 修改keepalived文件
3. 如何实现双主配置 --- 编写keepalived配置文件 编写多个vrrp实例
4. 如何实现负载均衡安全访问 --- 编写负载均衡nginx配置文件 配置监听vip地址信息