第一章:keepalived介绍
VRRP协议 目的就是为了解决静态路由单点故障问题的 第二章: keepalived工作原理
2.1 作为系统网络服务的高可用功能(failover)
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广播包,告诉备他还活着,此时备不会抢占主,当主不可用时,即备监听不到主发送的广播包时,就会启动相关服务接管资源,保证业务的连续性,接管速度最快可以小于一秒
第三章: VRRP协议 VRRP通过竞选机制来实现虚拟路由器的功能 所有的协议报文都是通过IP多播(Multicast)包 默认的多播地址224.0.0.18 VIP前提条件: 1.虚拟公网IP必须是真实可用的 2.虚拟公网IP不能重复 3.组播地址必须是可以通讯的 第四章:keepalived安装配置
1.安装keepalived
yum install keepalived -y 2.配置文件解释
global_defs { router_id lb01 #设置路由ID,每个主机不一样} vrrp_instance VI_1 { #设置VRRP组名,同一组组名相同 state MASTER #设置角色状态,分为MASTER BACKUP interface eth0 #VIP绑定的网卡 virtual_router_id 50 #虚拟路由id,同一组一样 priority 150 #权重,权重越高,优先级越高 advert_int 1 #发送组播间隔 authentication { #设置验证,密码为明文 auth_type PASS auth_pass 1111 } virtual_ipaddress { #设定的虚拟IP,这个虚拟IP必须是存在且合法且没有被使用的。 10.0.0.3 }} 3.lb01配置
[root@lb01 ~]# cat /etc/keepalived/keepalived.conf global_defs { router_id lb01}vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 50 priority 150 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.0.0.3 }} 4.lb02配置
[root@lb02 ~]# cat /etc/keepalived/keepalived.conf global_defs { router_id lb02}vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 50 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.0.0.3 }} 5.启动
systemctl start keepalived 6.测试 关掉任意一台,观察VIP是否会漂移 恢复MASTER观察BACKUP的VIP是否会消失 第五章:脑裂现象
1.安装抓包工具
2.lb02抓包查看
tcpdump -nn -i any host 224.0.0.18 3.lb02新开一个终端,然后开启防火墙
systemctl start firewalld.service 4.lb02观察抓包现象 观察是否两边都有VIP 5.添加放行规则
firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --in-interface eth0 --destination 224.0.0.18 --protocol vrrp -j ACCEPTfirewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --in-interface eth1 --destination 224.0.0.18 --protocol vrrp -j ACCEPTsystemctl reload firewalld 6.lb02观察抓包现象 观察是否两边都有VIP 第六章:keepalived双主实验 1.lb01配置文件
[root@lb01 ~]# cat /etc/keepalived/keepalived.conf global_defs { router_id lb01}vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 50 priority 150 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.0.0.3 }}vrrp_instance VI_2 { state BACKUP interface eth0 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 2222 } virtual_ipaddress { 10.0.0.4 }} 2.lb02配置文件
[root@lb02 ~]# cat /etc/keepalived/keepalived.conf global_defs { router_id lb02}vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 50 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.0.0.3 }}vrrp_instance VI_2 { state MASTER interface eth0 virtual_router_id 51 priority 150 advert_int 1 authentication { auth_type PASS auth_pass 2222 } virtual_ipaddress { 10.0.0.4 }} 3.重启keepalived并观察现象
systemctl restart keepalived 第七章:keepalived结合nginx反向代理负载均衡 lb服务器的Nginx配置: 注意!两台lb服务器的Nginx配置一模一样 1.备份原有配置
mkdir /backupcd /etc/nginx/conf.dmv * /backup 2.编写Nginx配置文件
[root@lb01 /etc/nginx/conf.d]# cat proxy.conf upstream web_pools { server 172.16.1.7; server 172.16.1.8;}server { listen 80; server_name (www|bbs).mysun.com ; location / { proxy_pass http://web_pools; include proxy_params; }} 3.测试并重启nginx
nginx -tsystemctl restart nginx lb服务器的keepalived配置:
1.lb01的keepalived配置
[root@lb01 ~]# cat /etc/keepalived/keepalived.conf global_defs { router_id lb01}vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 50 priority 150 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.0.0.3 }} 2.lb02的keepalived配置
[root@lb02 ~]# cat /etc/keepalived/keepalived.conf global_defs { router_id lb02}vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 50 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.0.0.3 }} web服务器配置:
注意!两台web服务器配置一模一样 1.nginx配置
[root@web01 ~]# cat /etc/nginx/conf.d/www.conf server { listen 80; server_name www.mysun.com; location / { root /code; index www.html; }} 2.写入测试文件
echo "$(hostname)" >/code/index.html 第八章: 防裂脑脚本
1.问题现象: 1.nginx挂了,但是keep还活着 2.两边都有VIP 2.思路: 解决nginx挂了问题: 1.编写一个脚本 - 启动nginx
- 如果启动2次都失败了,停掉自己的keepalived
2.keepalived定时去调用这个脚本 3.实现: 1.命令如何实现 2.检查nginx进程 [root@lb01 ~]# ps -ef|grep nginx|grep -v "grep"root 1210 1 0 11:21 ? 00:00:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.confnginx 1211 1210 0 11:21 ? 00:00:00 nginx: worker process[root@lb01 ~]# ps -ef|grep nginx|grep -v "grep"|wc -l2[root@lb01 ~]# ps -ef|grep nginx|grep -v "grep"|wc -l0 脚本内容: [root@lb01 ~]# cat check_web.sh !/bin/bashnginx_status=$(ps -C nginx --no-header|wc -l)if [[ ${nginx_status} == 0 ]]then systemctl start nginx &> /dev/null sleep 1 nginx_status=$(ps -C nginx --no-header|wc -l) if [[ ${nginx_status} == 0 ]] then systemctl stop keepalived fifi keepalived调用脚本: [root@lb01 ~]# cat /etc/keepalived/keepalived.conf global_defs { router_id lb01}vrrp_script check_web { script "/server/scripts/check_web.sh" interval 5 weight 50}vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 50 priority 150 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.0.0.3 } track_script { check_web }} 4.第二个问题:脑裂问题 两边都有VIP 现象: 2边都有VIP 2边Nginx都活着 对面的MASTER的Nginx还活着 curl -I -s -w "%{http_code}/n" -o /dev/null 10.0.0.5 但是我又有了VIP ip a |grep "10.0.0.3"|wc -l 我就把自己干掉 systemctl stop nginx systemctl stop keepalived 脚本内容: [root@lb02 /server/scripts]# cat check_vip.sh #!/bin/bashmaster_status=$(curl -I -s -w "%{http_code}/n" -o /dev/null 10.0.0.5)my_vip=$(ip a |grep "10.0.0.3"|wc -l)if [ ${master_status} == 200 -a ${my_vip} == 1 ]then systemctl stop nginx systemctl stop keepalived fi keepalived配置: [root@lb02 ~]# cat /etc/keepalived/keepalived.conf global_defs { router_id lb02}vrrp_script check_web { script "/server/scripts/check_web.sh" interval 5 weight 50}vrrp_script check_vip { script "/server/scripts/check_vip.sh" interval 5 weight 50}vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 50 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.0.0.3 } track_script { check_web check_vip }} 下载地址: Linux 通过Rsync+Inotify实现本、异地远程数据实时同步功能 idea打包成war包部署到tomcat及访问路径问题(图文详解) |