专栏首页海仔技术驿站Python自动化运维之Keepalived

Python自动化运维之Keepalived

1 集群基础	
1.1 集群简介【了解】	
	1.1.1 集群分类	
		 高扩展集群
			基于资源横向扩展的一种方式,
				将一个业务中的某个服务,以组件的形式单独部署,实现整个业务的横向扩展,
				特点:所有主机共同支撑同一个业务的运行。
		 高可用集群   ***** 
			场景:核心业务
			特点:
				核心业务以克隆或者复制的形式双机部署,共同支撑一个业务的正常运行。
			
		 高性能集群 
			场景:大规模的计算场景
			特点:
				基于高扩展集群和高可用集群的基础上,通过一定的技术方案或者高性能设备实现有限资源的基础上大规模的计算效果。
				
	1.1.2 高可用指标
		场景需求
			关键的核心的业务出现问题 -- 单点故障 -- 高可用集群 
			克隆或者复制,共同支撑一个服务
			评判方法:
				网络可用性 、 恢复能力
		网站可用性
			场景分类:
				中小场景:时间可用性
					表达式:
						A = MTBF/(MTBF+MTTR)		业务量小
						A = 服务正常时间/总时间		业务量稍大
					区别:
						第一个需要大量的统计
						第二个无需大量的统计
						
				大规模场景:合计可用性
					定位:用户的请求
						A = 成功处理数量/请求总数量
						
			可用性分类:N 个 9 
				基本 较高 故障自动恢复 极高
				
			拓展:
				3个9半  99.95% 
				参考 Google SRE 站点可靠性工程师
		恢复能力
			场景:
				数据场景 
					RPO 数据恢复能力 -- 最大的丢失数据的阶段
				服务场景
					RTO 业务恢复能力 -- 应用服务从故障到开始恢复的时间间隔。
				
			
	1.1.3 高可用方式	
		常见术语
			Vip			统一入后,附加在主节点上
			Master		高可用集群中,处于主导地位的主机角色,一般用于接受用户请求
			Slave		高可用集群中,处于被动地位的主机角色,当主节点故障,slave节点接管vip,处理用户请求
			
		高可用方式
			主备
				两个角色主机处理同一个业务,使用一套主备配置参数
			双主 
				两个角色主机处理不同的业务,互为主备,简单理解为两个反方向的主备叠加场景
				使用两套主备配置参数
			集群
				特点:
					多个备用结点
					多种业务
					
					当主故障后,被动结点通过内部的选举机制,选取临时的主节点来接管vip
					
		关键技术
			时间同步 
				集群中的所有主机的时间状态完全一致
				ntp协议
			心跳检测
				高可用集群中主备结点间知道彼此状态的一种专用通信机制,
				vrrp
				
2 Keepalived快速入门	
2.1 软件基础【了解】	
	2.1.1 keepalived	
		官方介绍
			路由软件、
			负载均衡	来源于对内核中的IPVS增强和封装 
			高可用		来源于VRRP协议及相关插件脚本
			使用范围	可以独立使用,可以组合使用
		发行版本
			2.0.15 
		相关地址
	2.1.2 软件结构【记住】
		软件结构图
			内核空间
			用户空间 -- keepalived的主要工作部分
		结构图简介
			组成:	用户空间 
				核心组件			***** 
				配置文件管理器 
				内存管理器
				调度管理器
		工作流程
			负载均衡的工作流程
				借助于内核中的IPVS来实现负载均衡效果
			高可用的工作流程
				将物理路由器整合在一个路由器池中,以统一的虚拟接口对外提供服务。
				vrrp
		软件理解
			将负载均衡和高可用相关软件整合在一起的软件整合解决方案
			重要功能需要在用户空间安装
			
	2.1.3 LVS	
		项目简介
			Linux虚拟服务器,
			整合大量空闲主机,实现资源的高效使用
			高扩展集群场景   负载均衡--ip
			
		架构简介
			前段负载均衡层		lvs   ipvsadm 
			中间web服务器池		各种服务器
			共享存储层			存储数据 ,推荐使用分布式存储
			
		核心功能
			负载均衡 -- 内核中的ipvs
			转发模型 -- 效率最高DR,使用最广NAT,数据中心TUN,更大网络-FULLNAT(二次编译)
			调度策略 -- 13种,RR WRR LC WLC SH  DH
	2.1.4 VRRP	
		场景需求
			主机配备的网关失效了怎么办?
				1 增加多个物理路由器
				2 主机配置默认路由
			问题:
				静态路由故障,有可能出现多种问题:
					1 线路选择问题
					2 网络中断
			解决方法:
				VRRP
		项目简介
			VRRP 虚拟路由冗余协议
			内容:
				将批量的物理路由器整合在一起,以一个统一的虚拟路由器对外提供服务
				物理路由器基于内部的机制,按优先级排列,最高的为master路由器
				虚拟路由器接受的数据包基于master路由器转发出去
				master故障,其他备用路由器选举最高的为临时主,提供服务
				整个过程,后端真实主机看到的仅仅是虚拟路由,无论真实路由如何变幻,整个网络不受任何影响。
				
2.2 软件部署【应用】	
	2.2.1 安装软件	
		学习环境
			Centos7.5 
			ip:
				主 kpmaster 192.168.8.14
				从 kpslave  192.168.8.15
		软件信息
		安装方法 
			yum install keepalived -y
			yum install nginx -y
			echo 'keepalived slave' > /usr/share/nginx/html/index.html
			systemctl start nginx	
			注意:
				nginx首页在不同主机上不一样
				nginx这里的作用是为了更好的显示keepalived的效果(VIP)
				
	2.2.2 配置文件简介
		软件结构
			/etc/keepalived
			/etc/keepalived/keepalived.conf		最核心配置文件
			/etc/sysconfig/keepalived
			/usr/bin/genhash
			/usr/lib/systemd/system/keepalived.service
			/usr/libexec/keepalived
			/usr/sbin/keepalived				
		配置结构
			keepalived配置文件:
				全局配置段			*****
				VRRP配置段			*****
				虚拟主机配置段
		配置简介
			全局配置段
				router_id
			VRRP配置段
				state
				interface
				virtual_router_id
				priority
				virtual_ipaddress
				
	2.2.3 配置软件	
		 配置效果
			主备是一套配置文件: BACKUP MASTER
			# kpmaster主机配置							kpslave主机配置
			global_defs {                                   global_defs {
			   router_id kpmaster                           	router_id kpslave
			}                                                 	}
															  
			vrrp_instance VI_1 {                          	vrrp_instance VI_1 {
				state MASTER                                 	state BACKUP
				interface eth0                                 	interface eth0
				virtual_router_id 51                           	virtual_router_id 51
				priority 100                                      priority 99
				authentication {                                	authentication {
					auth_type PASS                                    auth_type PASS
					auth_pass 1111                                    auth_pass 1111
				}                                                 	}
				virtual_ipaddress {                            	virtual_ipaddress {
					192.168.8.100                                     192.168.8.100
				}                                                 	}
			}                                                 	}				
			关键点:
				router_id 必须唯一,一般采用主机名
				state 必须配套:必须是MASTER和BACKUP
				virtual_router_id 一套配置参数,此处必须一致
				priority:用于选主
				virtual_ipaddress 设定web访问的vip
				
		 检查效果
			systemctl start keepalive 
			ip信息检查:
				ip addr 命令,ifconfig不管用
			状态信息:
				systemctl status keepalive 
				tail /var/log/messages
				
		注意:
			在初始设置keepalived的时候,最好不要添加 vrrp_strict 属性,因为它会自动帮我们生产keepalived相关的防火墙规则,而这个规则默认情况下是拒绝所有信息访问
				0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            match-set keepalived dst
			
	2.2.4 故障演练	
		主机故障
			当主的keepalived故障后,自动消除master状态,剔除vip
			备结点的keepalived检测到主故障后,会自动进入到master状态并接管vip
			当主节点keepalived恢复后,
				备结点发现有其他结点的路由优先级高,就自动进入backup状态,并剔除vip
				主节点进入master状态,接管vip
			整个过程是以自动的方式操作的。
		服务故障
			vip是keepalived实现的,与后端web没有太大关系,
		演练小结
			keepalived实现高可用网络是分层的:
				前端:负载均衡网络,vip,接受用户请求并转发到后端
				后端:应用负载网络,用户处理转发过来的 用户请求,与vip每太大关系
				
	2.2.5 负载均衡	
		场景需求
			使用keepalived实现lvs的负载均衡效果--DR 
		需求分析
			1 基础的网络环境
			2 lvs的DR环境
			3 keepalived的负载均衡效果
		关键点分析
			1 基础的网络环境
				1 全部单网卡-Nat模型
				2 ip地址配置
			2 lvs的DR环境
				1 nginx服务配置
				2 地址冲突配置
				3 lvs主机DR模式规则
				4 测试
			3 keepalived的负载均衡效果
			
		配置详解
			keepalived中的负载均衡配置 -- lvs规则 
				virtual_server 10.10.10.2 1358 {
					delay_loop 6
					lb_algo rr 
					lb_kind NAT
					protocol TCP
					real_server 192.168.200.2 1358 {
						...
					}

					real_server 192.168.200.3 1358 {
					   ...
					}
				}			
				属性简介
					虚拟主机配置格式:virtual_server <VIP> <port> { ... }
					delay_loop 用于服务轮询的延迟计时器
					lb_algo	设定访问后端服务的调度策略
					lb_kind 	设定数据转发的模型
					protocol 	设定数据通信的协议
					real_server 	设定后端主机的信息
				后端主机配置格式:real_server <RIP> <port> { ... }
					注意:
						以上5项是必须设置的。
						real_server 后面的"{}"中即使没有属性,也不能写成"{}",必须使用Enter换行格式隔开						
		操作实践
			地址冲突配置 
			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
			ifconfig lo 192.168.8.100/32 up
			lvs临时测试
			ipvsadm -A -t 192.168.8.100:80
			ipvsadm -a -t 192.168.8.100:80 -r 192.168.8.16
			ipvsadm -a -t 192.168.8.100:80 -r 192.168.8.17	
			负载均衡配置
			# kpmaster主机									kpslave主机
			global_defs {                                      	global_defs {
			   router_id kpmaster                               		router_id kpslave
			}                                                      	}
			vrrp_instance VI_1 {                              	vrrp_instance VI_1 {
				state MASTER                                         	state BACKUP
				interface eth0                                       	interface eth0
				virtual_router_id 51                                	virtual_router_id 51
				priority 100                                         	priority 99
				virtual_ipaddress {                                 	virtual_ipaddress {
					192.168.8.100 dev eth0 label eth0:0           		192.168.8.100 dev eth0 label eth0:0
				}                                                      	}
			}                                                     	}
			virtual_server 192.168.8.100 80 {                 virtual_server 192.168.8.100 80 {
				delay_loop 2                                         	delay_loop 2
				lb_algo rr                                            	lb_algo rr 
				lb_kind DR                                            	lb_kind DR
				protocol TCP                                          	protocol TCP
				real_server 192.168.8.16 80 {                     	real_server 192.168.8.16 80 {
				}                                                      	}
				real_server 192.168.8.17 80 {                     	real_server 192.168.8.17 80 {
				}                                                      	}
			}                                                      }				
		实践小结
			1 基础的网络环境 
			2 lvs测试负载均衡   
				注意:千万不要省
					原因在于 keepalived实现的是lvs规则效果,不会自动管理后端的web配置
			3 转换keepalived
				keepalived中的负载均衡配置必须按照规矩来,
				
2.3 配置详解【记住】	
	2.3.1 全局配置段
		默认配置
			是常用的,主要包含两块:
				邮件通知
				vrrp的全局属性
		配置详解
			专用查看配置信息: man keepalived.conf
				注意: 只能去 keepalived.conf 所在目录去执行
			全局配置:
				默认配置 :邮件通知 + vrrp的全局属性 	
				静态路由 
				静态规则 
			核心配置:
				router_id 
					惟一的路由标识 
					生产中不推荐使用主机名
						默认的值:主机名
						
	2.3.2 VRRP配置段
		默认配置
			默认显示的 vrrp_instance 的配置信息
		配置详解
			1 vrrp配置内容一共有6种,重要的是
				vrrp_script vrrp_instance
				所有的配置项都可以是多个
			2 vrrp_instance 属性:
				state 	集群的初始化状态,只有 MASTER 和 BACKUP 
							注意:状态是有优先级来确定的,所以需要合理的规划集群的状态,一套高可用集群,只能有一个MASTER
				interface:	保证网卡设备是有效的
				virtual_router_id:	必须是唯一,0~255 
							注意:一套高可用集群的配置必须一致
				priority	用于选择master,必须合理的规划,主备之间的差值尽量大一点,但是要合理
				authentication 	高可用集群间通信的认证,PASS AH 
							注意:
								可用可不用 
				virtual_ipaddress	设置vip的地址范围,可以是一个,可以是列表
					格式:<IP地址>/<掩码> brd <广播地址> dev <网卡名称> scope <作用范围> label <网卡标签>
					推荐: 
						单网卡效果下,直接用ip即可
						多网卡效果下,推荐增加dev和label属性 
						
						
	2.3.3 状态监测【应用】
		场景需求
			基于keepalived的状态检测功能实现某些自动化操作动作
		需求分析
			1 编写监控脚本
			2 keepalived使用监控脚本
			3 测试
		关键点分析
			1 编写监控脚本
				基于文件的判断来检测
			2 keepalived使用监控脚本
				1 检测脚本在 vrrp_script 定义
				2 检测脚本在 vrrp_instance 中使用 
			3 测试				
		配置详解
			定义检测脚本
			vrrp_script <SCRIPT_NAME> {
				   script <STRING>|<QUOTED-STRING> 	# 设定执行脚本的路径,也可以是命令行的检测命令
					interval <INTEGER>  				# 设定脚本执行的间隔时间,默认1s
			}
			关键点:
				<SCRIPT_NAME> 脚本名称必须唯一
				script 需要编写状态监测的命令或者脚本脚本的执行方式
						推荐使用脚本的标准执行方式 
				interval 脚本的执行间隔 
			
			使用监测脚本				
			track_script {
				<SCRIPT_NAME>
			}	
			关键点:
				track_script 在指定 vrrp_instance 中设置
				<SCRIPT_NAME> 必须与 vrrp_script 定义的检测名称一致
				
		操作实践
			1 编写脚本 
				内容:
					# cat check_keepalived.sh 
					#!/bin/bash
					# 检测keepalived的服务状态
					# /tmp/keepalived.fail表示服务故障

					if [ -f /tmp/keepalived ] 
					then
					   weight -30
					fi		
				注意:
					脚本必须编写规范
					脚本能执行 
					脚本在所有的keepalived主机上 都必须存在,而且完全一样
					
			2 修改配置 
				完整内容:
					[root@kpmaster scripts]# 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 Alexandre.Cassen@firewall.loc
					   smtp_server 127.0.0.1
					   smtp_connect_timeout 30
					   router_id kpmaster
					   vrrp_skip_check_adv_addr
					   vrrp_garp_interval 0
					   vrrp_gna_interval 0
					}
					vrrp_script check_keepalived {
					   script "/bin/bash /data/scripts/check_keepalived.sh"
					   interval 1
					}

					vrrp_instance VI_1 {
						state MASTER
						interface eth0
						virtual_router_id 51
						priority 100
						advert_int 1
						authentication {
							auth_type PASS
							auth_pass 1111
						}
						virtual_ipaddress {
							192.168.8.100 dev eth0 label eth0:0
						}
						track_script {
							check_keepalived
						}
					}

					virtual_server 192.168.8.100 80 {
						delay_loop 2
						lb_algo rr
						lb_kind DR
						protocol TCP
						real_server 192.168.8.16 80 {
						}
						real_server 192.168.8.17 80 {
						}
					}					
				关键点:
					顺序:先编写 vrrp_script,再使用 track_script
					vrrp_script 里面的 script 必须是标准的脚本执行方式 
					track_script 一定要写到指定的vrrp_instance中,不要乱用
					track_script 内容一定要是 vrrp_script 定义的名称 
					关于 vrrp_script 和 track_script 的内容在所有的keepalived主机上完全一致。
					
				权重值:weight
					工作目的:自动的切换MASTER和BACKUP
					工作原理:
						有 priority 和 weight 的差值来确定高可用集群主机间的最终优先级
						我们一般将 weight 的值设置为 负值,降低优先级的效果
						weight的值一定要和 主备之间的优先级差值合理的考虑,尽量一次到位
					
			3 测试 
			实践小结
				对于任何场景下的服务检测功能,我们可以结合keepalived的内置属性来完成,完成步骤如下:
						1 规划服务的检测内容
					2 定制服务检测脚本
					3 keepalived使用脚本检测配置
					4 效果测试
				注意:
					keepalived在使用脚本检测配置的时候,一定要注意:
						track_script 中使用的名称,一定要在 vrrp_script 中定义
							vrrp_script中script属性的尽量脚本方式,而且使用标准的"/bin/bash /path/to/file"格式				
	2.3.4 虚拟主机配置段	
		默认配置
			三个virtual_server 
			一个keepalived.conf可以允许出现多个Virtual_server配置信息
				多个lvs集群
			组成:
				虚拟主机组 + 虚拟主机 
		配置详解
			普通属性
				lb_algo		调度算法 7种	rr|wrr|lc|wlc|lbLc|sh|dh
				lb_kind		调度模式 3种	NAT|DR|TUN
				protocol	数据转发协议 3种 TCP|UDP|SCTP
				real_server	后端真实主机配置 
				sorry_server备用真实主机,所有的real_server失效后,它才生效
				
			状态检测
				种类:HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|DNS_CHECK|MISC_CHECK
				重要的:
					HTTP_GET|TCP_CHECK
				HTTP_GET
					url {
						path <path/to/url> 	指定要检查的URL的路径
						status_code <INT>		状态码方式验证,推荐使用这种方法
					}						
				TCP_CHECK
					connect_timeout			连接超时时间
					delay_before_retry		重试间隔时间,默认1s
					
	2.3.5 HTTP健康检测【应用】
		场景需求
			在keepalived的高可用+负载均衡效果下,对后端真实主机进行状态检测,如果检测到后端主机故障,那么数据就不会转发到故障主机
		需求分析
			1 规划服务的检测内容 -- nginx -- http+tcp
			2 keepalived的配置
				HTTP_GET 检测方式
			3 综合测试 
				对RS主机进行故障演练
					测试内容:
						日志效果 
						ipvsadm 规则效果
						curl 访问效果 
						
		关键点分析
		操作实践
			virtual_server 192.168.8.100 80 {
				delay_loop 2
				lb_algo rr
				lb_kind DR
				protocol TCP
				real_server 192.168.8.16 80 {
					HTTP_GET {
						url {
						  path /
						  status_code 200
					   }
						connect_timeout 3
						nb_get_retry 3
						delay_before_retry 3
					}
				}
				real_server 192.168.8.17 80 {
					HTTP_GET {
						url {
						  path /
						  status_code 200
					   }  
						connect_timeout 3
						nb_get_retry 3
						delay_before_retry 3
					}
				}
			}
			
			注意:
				检测方式: HTTP_GET
				检测内容:url
							url的地址一定要合理的规划
							状态监测范式,最好用http状态返回值
				检测效果:
					合理的超时、重试次数、重试间隔 

		实践小结
			对于http场景下的服务检测功能,我们可以结合keepalived的HTTP检测功能来完成,完成步骤如下:
					1 规划服务的检测内容
				2 keepalived使用HTTP检测配置
				3 效果测试
			注意:
				keepalived在使用HTTP检测配置的时候,一定要注意:
						url 中的检测文件路径必须准确
						关于状态检测,我们推荐使用status_code的方式,不推荐使用digest方式				
	2.3.6 TCP健康检测【应用】
		场景需求
			在keepalived的高可用+负载均衡效果下,对后端真实主机进行状态检测,如果检测到后端主机故障,那么数据就不会转发到故障主机
			采用TCP的方式
			
		需求分析
			1 检测方式规划
				使用 TCP 
			2 keepalived使用TCP检测配置
				采用TCP_CHECK检测机制
			3 综合测试 
				同上
		关键点分析
		操作实践

			virtual_server 192.168.8.100 80 {
				delay_loop 2
				lb_algo rr
				lb_kind DR
				protocol TCP
				real_server 192.168.8.16 80 {
					TCP_CHECK {
						connect_timeout 3
						retry 3
						delay_before_retry 2
					}
				}
				real_server 192.168.8.17 80 {
					TCP_CHECK {
						connect_timeout 3
						retry 3
						delay_before_retry 2
					}
				}
			}		
			关键点:
				检测方式:TCP_CHECK 
				属性:	
					可以全部采用默认,如果不想,可以直接定制
		实践小结
			对于http场景下的服务检测功能,我们可以结合keepalived的TCP检测功能来完成,完成步骤如下:
					1 规划服务的检测内容
				2 keepalived使用TCP检测配置
				3 效果测试
			注意:
				keepalived在使用TCP检测配置的时候,一定要注意:
						保证tcp检测的端口和ip地址必须准确
							connect_ip <IP ADDRESS>
							connect_port <PORT>
				我们针对哪个RS主机测试,就在指定的real_server配置段中设置TCP_CHECK
				
	2.3.7 友情提示【应用】
		场景需求
			当keepalived的所有Rs主机出现故障后,提供一个友好页面
		需求分析
			1 方案规划
			2 keepalived的配置修改
				virtual_server 内部的 sorry_server 
			3 综合测试
		技术点分析
		配置详解
			sorry_server的配置必须与virtual_server的调度模型相契合
		操作实践
			virtual_server 192.168.8.100 80 {
				delay_loop 2
				lb_algo rr
				lb_kind DR
				protocol TCP
				sorry_server 127.0.0.1 80
				real_server 192.168.8.16 80 {
					TCP_CHECK {
						connect_timeout 3
						retry 3
						delay_before_retry 2
					}
				}
				real_server 192.168.8.17 80 {
					TCP_CHECK {
						connect_timeout 3
						retry 3
						delay_before_retry 2
					}
				}
			}		
			关键点:
				sorry_server 的位置和配置格式 
		实践小结
			对于http场景下的友情提示功能,我们可以结合keepalived的sorry_server功能来完成,完成步骤如下:
					1 规划服务的检测内容
				2 keepalived使用sorry_server检测配置
				3 效果测试
			注意:
				keepalived在使用sorry_server配置的时候,一定要注意:
						我们keepalived实现负载均衡的效果所采取的转发模式,我们案例中采用的是DR模型,所以必须保证tc		p检测的端口和VIP地址端口必须一致		
						
	2.3.8 日志配置【应用】
		日志现状
			日志查看方法:
				systemctl status keepalived 		少 
				tail /var/log/messages				临时
		环境变量文件
			/etc/sysconfig/keepalived 
			和日志相关的属性:
				-D 
				-S 
				
		日志参数详解
			localn  rsyslog 的用户自定义获取方式 
			
		日志定制实践 
			1  修改keepalived的环境变量配置文件 
				-S 0
			2  修改rsyslog.conf 配置 
				local0.* /var/log/keepalived.log 
				注意:
					localn 的值应该与 keepalived  文件中的-S 指定的值一样。
			3  重启服务 
				顺序很重要:
					先重启rsyslog 
					再重启keepalived 
					
2.4 原理详解【记住】	
	2.4.1 结构详解
		软件结构图
			内核空间
				ipvs 
				netlink
			用户空间
				核心模块
					watchdog 		监控
					vrrp stack		vrrp相关的功能
					checker			状态检测、健康检测
					ipvs wrapper	ipvsadm的封装和加强
					netlink reflecter	网络相关:负载均衡网络、虚拟路由网络
				内存管理 
				调度管理器
				配置管理
		状态检测原理
			1 高可用方面
				watchdog -- vrrp 
					vrrp_script + track_script 
			2 负载均衡方面
				watchdog + checker + ipvs wrapper 
					vrrp_script + track_script
					real_server 内部的 专用检测工具
										HTTP_GET + TCP_CHECK
		虚拟服务原理
			管理方面
				ipvs warpper + IPVS + 配置管理组件 
				ipvs warpper 通过配置管理组件 加载keepalived.conf文件中的各种属性,然后将virtual_server中的配置转换为ipvsadm相关的规则,借助于内核空间中的IPVS模块实现后端真实主机的负载均衡管理。 
			检测方面
				watchdog + checker + ipvs wrapper
				
	2.4.2 路由方式
		转发简介
			用户请求 -- keepalived -- virtual_server -- real_server 
			转发功能实现:
				lb_algo 调度方法 rr|wrr|lc|wlc|lbLc|sh|dh
				lb_kind	转发模式 NAT|DR|TUN
				keepalived默认推荐的转发模式:DR
		NAT路由
			完整:用户请求 -- keepalived -- virtual_server -- real_server
							进入:外部vip -- 转换DNAT -- RS
							出去:RS -- 内部vip -- 转换SNAT -- 客户端
			配置:
				需要同时在keepalived.conf当中设置两个vrrp_instance
					inside_network 和 outside_network
			特点:
				进入和退出都需要经过keepalived集群,所以在大规模场景下,有可能会成为瓶颈
				但是在小场景下,使用范围广
		DR路由
			完整:用户请求 -- keepalived -- virtual_server -- real_server
				进入:外部vip --  RS
				出去:RS -- 互联网 -- 客户端 
			特点:
				在各种场景下,效率高,不适用端口映射场景
				keepalived默认推荐的转发模式:DR
				
2.5 综合实践【应用】	
	2.5.1 双主方式	
		需求案例
			目的:
				双主高可用的负载均衡效果 
			主机环境:
				双vip效果
				后端真实主机是一套nginx环境业务
		需求分析
			1 基础网络配置
				keepalived主机环境无序设置
				后端真实主机:
					需要配置两个vip
					
			2 keepalived环境部署
				需要配置两套vrrp实例
				
			3 综合测试 
		关键点分析
		操作实践
			8.14 配置文件 
				[root@kpmaster keepalived]# cat keepalived.conf
				! Configuration File for keepalived

				global_defs {
				   notification_email {
					 acassen@firewall.loc
					 failover@firewall.loc
					 sysadmin@firewall.loc
				   }
				   notification_email_from Alexandre.Cassen@firewall.loc
				   smtp_server 127.0.0.1
				   smtp_connect_timeout 30
				   router_id kpmaster
				   vrrp_skip_check_adv_addr
				   vrrp_garp_interval 0
				   vrrp_gna_interval 0
				}
				vrrp_script check_keepalived {
				   script "/bin/bash /data/scripts/check_keepalived.sh"
				   interval 1
				}

				vrrp_instance VI_1 {
					state MASTER
					interface eth0
					virtual_router_id 51
					priority 100
					advert_int 1
					authentication {
						auth_type PASS
						auth_pass 1111
					}
					virtual_ipaddress {
						192.168.8.100 dev eth0 label eth0:0
					}
					track_script {
						check_keepalived
					}
				}

				vrrp_instance VI_2{
					state BACKUP
					interface eth0
					virtual_router_id 52
					priority 80
					advert_int 1
					authentication {
						auth_type PASS
						auth_pass 1111
					}
					virtual_ipaddress {
						192.168.8.200 dev eth0 label eth0:1
					}
					track_script {
						check_keepalived
					}
				}
				virtual_server 192.168.8.100 80 {
					delay_loop 2
					lb_algo rr
					lb_kind DR
					protocol TCP
					sorry_server 127.0.0.1 80
					real_server 192.168.8.16 80 {
						TCP_CHECK {
							connect_timeout 3
							retry 3
							delay_before_retry 2
						}
					}
					real_server 192.168.8.17 80 {
						TCP_CHECK {
							connect_timeout 3
							retry 3
							delay_before_retry 2
						}
					}
				}
				virtual_server 192.168.8.200 80 {
					delay_loop 2
					lb_algo rr
					lb_kind DR
					protocol TCP
					sorry_server 127.0.0.1 80
					real_server 192.168.8.16 80 {
						TCP_CHECK {
							connect_timeout 3
							retry 3
							delay_before_retry 2
						}
					}
					real_server 192.168.8.17 80 {
						TCP_CHECK {
							connect_timeout 3
							retry 3
							delay_before_retry 2
						}
					}
				}				
			8.15 配置文件
				[root@kpslave keepalived]# cat keepalived.conf
				! Configuration File for keepalived

				global_defs {
				   notification_email {
					 acassen@firewall.loc
					 failover@firewall.loc
					 sysadmin@firewall.loc
				   }
				   notification_email_from Alexandre.Cassen@firewall.loc
				   smtp_server 127.0.0.1
				   smtp_connect_timeout 30
				   router_id kpslave
				   vrrp_skip_check_adv_addr
				   vrrp_garp_interval 0
				   vrrp_gna_interval 0
				}
				vrrp_script check_keepalived {
				   script "/bin/bash /data/scripts/check_keepalived.sh"
				   interval 1
				}

				vrrp_instance VI_1 {
					state BACKUP
					interface eth0
					virtual_router_id 51
					priority 80
					advert_int 1
					authentication {
						auth_type PASS
						auth_pass 1111
					}
					virtual_ipaddress {
						192.168.8.100 dev eth0 label eth0:0
					}
					track_script {
						check_keepalived
					}
				}
				vrrp_instance VI_2{
					state MASTER
					interface eth0
					virtual_router_id 52
					priority 100
					advert_int 1
					authentication {
						auth_type PASS
						auth_pass 1111
					}
					virtual_ipaddress {
						192.168.8.200 dev eth0 label eth0:1
					}
					track_script {
						check_keepalived
					}
				}
				virtual_server 192.168.8.100 80 {
					delay_loop 2
					lb_algo rr
					lb_kind DR
					protocol TCP
					sorry_server 127.0.0.1 80
					real_server 192.168.8.16 80 {
						TCP_CHECK {
							connect_timeout 3
							retry 3
							delay_before_retry 2
						}
					}
					real_server 192.168.8.17 80 {
						TCP_CHECK {
							connect_timeout 3
							retry 3
							delay_before_retry 2
						}
					}
				}
				virtual_server 192.168.8.200 80 {
					delay_loop 2
					lb_algo rr
					lb_kind DR
					protocol TCP
					sorry_server 127.0.0.1 80
					real_server 192.168.8.16 80 {
						TCP_CHECK {
							connect_timeout 3
							retry 3
							delay_before_retry 2
						}
					}
					real_server 192.168.8.17 80 {
						TCP_CHECK {
							connect_timeout 3
							retry 3
							delay_before_retry 2
						}
					}
				}				
		实践小结
			步骤:
				1 合理的网络规划
				2 后端主机的负载均衡测试
				3 keepalived的双vrrp实例负载均衡+高可用设置
				4 综合测试 
			注意:
				keepalived在配置多vrrp实例的时候,一定要注意: 互为主备效果
						同一实例间的优先级和state必须写清楚
						不同实例的名称和VIP一定要合理的规划					

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • java基础第十五篇之IO流和递归算法

    缓冲区会在内存中创建一个8192容量的字节数组,内存的运算效率比硬盘要高的多所有只要降低到硬盘的读写次数就会提高效率.

    海仔
  • java核心技术第四篇之JDBC第二篇

    01.JDBC连接池_连接池的概念: 1).什么是连接池:对于多用户程序,为每个用户单独创建一个Connection,会使程序降低效率。这时我们可以创建一个"...

    海仔
  • 如何用Zookeeper来实现分布式锁?

    海仔
  • Linux利用keepalived实现lvs的高可用性的操作方法

    keepalived是集群管理中保证集群高可用的一个服务软件,其功能类似于heartbeat,用来防止单点故障。 keepalived是以VRRP协议为实现基础...

    砸漏
  • Keepalived高可用服务解决方案

    Q:什么是高可用集群(Cluster)? 答:高可用集群(High Availability Cluster,简称HA Cluster),是指以减少服务中断时间...

    WeiyiGeek
  • python输出多个变量的值。

    py3study
  • 预警 | JBossAS 5.x和6.x系统存在远程代码执行漏洞

    1. 漏洞描述 8月30日,Red Hat公司发布了一篇关于“JBossAS 5.x系统的远程代码执行严重漏洞”的通告,CVE编号为CVE-2017-12149...

    安恒信息
  • Linux GDB jump 命令介绍

    location 可以是程序的行号或者函数的地址,jump 会让程序执行流跳转到指定位置执行,当然其行为也是不可控制的,例如您跳过了某个对象的初始化代码,直接执...

    范蠡
  • finetune googlenet网络

    前文我们实现了googlenet。想必大家已经有感觉,实现一个神经网络不是很难嘛。但是实现一个神经网络知识深度学习的入门和开始,如何训练和使用一个网络将它使用和...

    用户7680342
  • Android:图文解析带你快速了解RxJava的底层原理

    Carson.Ho

扫码关注云+社区

领取腾讯云代金券