Nginx高可用Keepalived(十六)

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

文章目录

1. https知识点回顾


四层负载均衡
动静分离
rewrite    rewrite 正则 替换的字符串  flag标记    跳转
https   单台https  多台  SLB

2. 高可用VRRP原理

高可用通常情况下都是启动2台相同的业务系统一台故障另外一台自动接管。

高可用实现的工具服务高可用keepalived软件实现

keepalived实现高可用keepalived基于VRRP协议虚拟路由冗余协议。

VRRP解决问题

3. 高可用keepalived安装

为什么能通过10.0.0.3这个虚拟ip能访问服务

keepalived虚拟地址漂移与Nginx服务进行关联
	1.Nginx默认监听在所有的IP地址上。
	2.用户将域名解析到VIP上面即可。

1提供环境

状态	IP	角色
节点1	10.0.0.5	Master
节点2	10.0.0.6	Backup
VIP	    10.0.0.3

2安装keepalived

yum install keepalived -y

3两台web配置keeplived配置文件

web01配置Master的Keepalived中配置/etc/keepalived/keepalived.conf

global_defs {     				#全局配置
    router_id lb01				#表示身份->名称
}

vrrp_instance VI_1 {
    state MASTER				#标识角色状态
    interface eth0				#网卡绑定接口
    virtual_router_id 50		#虚拟路由id
    priority 150				#优先级
    advert_int 1				#监测间隔时间
    authentication {			#认证
        auth_type PASS			#明文认证 
# 虚拟的ip地址会流转到能够使用的一个网关上明文密码和明文认证是一样的这样才能监控
        auth_pass 1111			#明文密码
}
    virtual_ipaddress {			
        10.0.0.3				#虚拟的VIP地址
    }
}

配置Backup的Keepalivedweb02

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
    }
}

4启动keepalived

[root@lb01 ~]# systemctl enable  keepalived
[root@lb01 ~]# systemctl start  keepalived

5进行测试

停止一台keeplived服务同时查看10.0.0.3的虚拟ip如何切换

在这里插入图片描述

对比keepalived的master与backup配置的区别

Keepalived配置区别		Master配置		Backup节配置
route_id(唯一标识)		 lb01			 lb02
state(角色状态)			 Master			 Backup
priority(竞选优先级)      150			 100

4. 高可用keepalived抢占式与非抢占式

要设置非抢占的原因
因为在业务高峰期频繁的切换不好
主备的硬件设施一样
在这里插入图片描述

web01配置

Master
	vrrp_instance VI_1 {
		state BACKUP
		priority 150
		nopreempt
	}

web02配置

Backup
	vrrp_instance VI_1 {
		state BACKUP
		priority 100
		nopreempt
	}

小总结

1两个节点的state都必须配置为BACKUP

2两个节点都必须加上配置 nopreempt

3其中一个节点的优先级必须要高于另外一个节点的优先级。

4两台服务器都角色状态启用nopreempt后必须修改角色状态统一为BACKUP唯一的区分就是优先级。

操作技巧

1通过windows的arp去验证是否会切换MAC地址

2ctrl + r 搜索历史命令

3set paste 这样复制没有格式错误

4ping 10.0.0.3 -t 在windows中可以一直的ping下去

5重启keeplived服务的时候如果使用restart相当于先关闭后启动如果是强占式的会通过这个间隙会把虚拟ip抢走

6如果切换了虚拟ip通过arp广播告诉windowsmac地址改变了arp -a可以看Windows的arp缓存

5. 高可用keepalived脑裂故障产生原因

由于某些原因导致两台keepalived高可用服务器在指定时间内无法检测到对方的心跳消息各自取得资源及服务的所有权而此时的两台高可用服务器又都还活着。如果发生闹裂则随机kill掉一台即可。

1服务器网线松动等网络故障
2服务器硬件故障发生损坏现象而崩溃
3主备都开启firewalld防火墙(为什么开了防火墙会出现脑裂)
  (4) Nginx服务死掉(nginx死掉keeplived不死相当于还会接收用户的请求但是接收到请求后
不提供服务)

	1.会导致用户无法正常的访问到网站。
	2.该服务器的VIp也不会进行漂移(因为keepalived与nginx是两个不同的软件)    
	
	解决手段
	1.写个监控脚本如果nginx停止运行则尝试启动如果尝试失败则停止keepalived

注意事项

1在测试的时候要注意两台负载均衡上的环境一样

在这里插入图片描述
2防火墙默认拒绝arrp协议所以开启防火墙两台机子不能通过arrp协议通信会产生脑裂

6. 高可用keepalived保证Nginx服务可用

1在备上编写检测脚本, 测试如果能ping通主并且备节点还有VIP的话则认为产生了脑裂 如果发生闹裂则随机kill掉一台即可。
2224.0.0.18是一个组播10.0.0.5和10.0.0.6在一个组里面虚拟路由id 50如果vip在谁那里谁发送组播告诉另一台机子。如果自己挂了会把虚拟ip漂移到另一台机子上。

[root@lb02 ~]# cat check_split_brain.sh
#!/bin/sh
lb01_vip=10.0.0.3
lb01_ip=10.0.0.5
while true;do
    ping -c 2 -W 3 $lb01_ip &>/dev/null
    if [ $? -eq 0 -a `ip add|grep "$lb01_vip"|wc -l` -eq 1 ];then
        echo "ha is split brain.warning."
# 可以使用mail邮箱的方式来告知管理员服务挂掉了
    else
        echo "ha is ok"
    fi
sleep 5
done
#!/bin/sh
#用远程的方式统计ssh远程任务统计10.0.0.5的03是否存在
lb01=$(ssh 10.0.0.5 'ip add|grep 10.0.0.3'|wc -l)
#测试己方的03是否存在
lb02=`ip add|grep 10.0.0.3|wc -l`
#判断 如果lb01是1 并且 lb02也是1 就执行输出有问题并且关闭keepalived。
[ $lb01 -eq 1 -a $lb02 -eq 1 ] && echo "have bad" && \
systemctl stop keepalived

2Nginx服务死掉

产生问题

1.会导致用户无法正常的访问到网站。  
	
2.该服务器的VIp也不会进行漂移(因为keepalived与nginx是两个不同的软件)  

解决手段

1.写个监控脚本如果nginx停止运行则尝试启动如果尝试失败则停止keepalived

编写脚本

编写脚本
	[root@lb01 ~]# mkdir /server/scripts
	[root@lb01 ~]# vim /server/scripts/check_web.sh
	#!/bin/sh
	nginxpid=$(ps -C nginx --no-header|wc -l)

	#1.判断Nginx是否存活,如果不存活则尝试启动Nginx
	if [ $nginxpid -eq 0 ];then
		systemctl start nginx
		sleep 3
		#2.等待3秒后再次获取一次Nginx状态
		nginxpid=$(ps -C nginx --no-header|wc -l) 
		#3.再次进行判断, 如Nginx还不存活则停止Keepalived,让地址进行漂移,并退出脚本  
		if [ $nginxpid -eq 0 ];then
			systemctl stop keepalived
	   fi
	fi

	#给脚本增加执行权限
	[root@lb01 ~]# chmod +x /server/scripts/check_web.sh


在Master的keepalived中调用脚本抢占式仅需在master配置即可。注意如果配置为非抢占式那么需要两台服务器都使用该脚本

	
[root@lb01 ~]# cat /etc/keepalived/keepalived.conf
global_defs {
         router_id LVS_01
}

#1.每5秒执行一次脚本, 脚本执行内容不能超过5秒,否则会被中断再次重新运行脚本
vrrp_script check_web {
   script "/server/scripts/check_web.sh"
   interval 5
}

vrrp_instance VI_1 {
    nopreempt
    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.调用并运行该脚本
    track_script {
        check_web
    }
}

7. 高可用keepalived总结

1keeplived必须是在硬件服务器上的公有云不支持keepalived公有云不支持组播提供自己的高可用服务底层lvs+keep live组成的在公有云上配置不了keeplived

2银行、金融、证券、国企用的是硬件服务器用keeplived这个服务。互联网公司用公有云

3如果两台硬件节点是一样的话那么就用非抢占式的。
如果两台硬件节点不是一样的话那么就用抢占式的

4nginx和keeplived两者是分开的不是捆绑的关系。nginx需要借助keeplived的vip来组成高可用

5配合文件中几个重要的地方

在这里插入图片描述

6防火墙默认拒绝arrp所以开启防火墙两台机子不能通过arrp协议通信会产生脑裂

7@java_page 代表内部跳转能匹配到下面的location

8就是用户请求要给文件如果没有这个文件的话会返回给要给错误页面这个错误页面error_page是存在于web服务器。【所有的请求负载帮我们往后抛error_page放在web上面这个数据包是web给负载均衡又由负载均衡重新的传给了
客户端】

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: nginx

“Nginx高可用Keepalived(十六)” 的相关文章