【keepalived】配置文件

2022-05-06 15:15:54 浏览数 (2)

keepalived服务安装完成之后,后面的主要工作就是在keepalived.conf文件中配置HA和负载均衡。一个功能比较完整的常用的keepalived配置文件,主要包含三块:全局定义块、VRRP实例定义块和虚拟服务器定义块。全局定义块是必须的,如果keepalived只用来做ha,虚拟服务器是可选的。下面是一个功能比较完整的配置文件模板:

代码语言:javascript复制
#全局定义块
global_defs {
    # 用于服务有故障时发送邮件报警,可选项,不建议用。需要系统开启sendmail服务,建议用第三独立监控服务
    notification_email {
        email1
        email2
    }
    notification_email_from email
    smtp_server host
    smtp_connect_timeout num

    # lvs负载均衡器标识,在一个网络内,它的值应该是唯一的。 
    lvs_id string
    router_id string    #用户标识本节点的名称,通常为hostname 
}

#同步vrrp级,用于确定失败切换(FailOver)包含的路由实例个数。即在有2个负载均衡器的场景,一旦某个负载均衡器失效,需要自动切换到另外一个负载均衡器的实例是哪
vrrp_sync_group string { 
    # 至少要包含一个vrrp实例,vrrp实例名称必须和vrrp_instance定义的一致
    group {
        string
        string
    }
}

# 定义一个虚拟路由器的实例,实例名称VI_1
vrrp_instance VI_1 {
    # 状态只有MASTER和BACKUP两种,并且要大写,MASTER为工作状态,BACKUP是备用状态。
    state MASTER|BACKUP

    # 虚拟路由ID,如果是一组虚拟路由就定义一个ID,如果是多组就要定义多个,
	# 而且这个虚拟ID还是虚拟MAC最后一段地址的信息,取值范围0-255
	# 同一个vrrp_instance的MASTER和BACKUP的vitrual_router_id 是一致的。
    virtual_router_id num

    # 对外提供服务的网卡接口,即VIP绑定的网卡接口。如:eth0,eth1。
    # 当前主流的服务器都有2个或2个以上的接口(分别对应外网和内网),在选择网卡接口时,一定要核实清楚。 
    interface string

    # 本机IP地址 
    mcast_src_ip @IP 

    # 优先级,同一个vrrp_instance的MASTER优先级必须比BACKUP高。
    priority num

    # MASTER 与BACKUP 负载均衡器之间同步检查的时间间隔,单位为秒。
    advert_int num
    nopreempt
    smtp_alert
    
    # 这个默认没有,负载均衡器之间的监控接口,类似于 HA HeartBeat 的心跳线。
    # 但它的机制优于 Heartbeat,因为它没有“裂脑”这个问题,它是以优先级这个机制来规避这个麻烦的。
    # 在 DR 模式中,lvs_sync_daemon_inteface与服务接口interface使用同一个网络接口
    lvs_sync_daemon_interface string 
    authentication {
        auth_type PASS|AH
        auth_pass string
    }

    # 虚拟VIP地址,可以有多个地址,每个地址占一行,不需要子网掩码
	# 同时这个ip 必须与我们在lvs 客户端设定的vip 相一致!
    virtual_ipaddress {  # Block limited to 20 IP addresses @IP
        @IP
        @IP
    }

    # 监控本机上的哪个网卡,网卡一旦故障则需要把VIP转移出去
	track_interface {
		eth0
		ens33
	}
    # 虚拟路由,在需要的情况下可以设置lvs主机 数据包在哪个网卡进来从哪个网卡出去
	virtual_routes {
		192.168.110.0/24 dev eth2
	}

	# 工作模式,nopreempt表示工作在非抢占模式,默认是抢占模式 preempt
	nopreempt|preempt

	# 如果是抢占默认则可以设置等多久再抢占,默认5分钟
	preempt delay 300

	# 追踪脚本,通常用于去执行上面的vrrp_script定义的脚本内容
	track_script {
		#调用检测脚本
		check_nginx

		#chk_http_port
	}

	# 三个指令,如果主机状态变成Master|Backup|Fault之后会去执行的通知脚本,脚本要自己写
	notify_master ""
	notify_backup ""
	notify_fault ""

}

# 定义LVS集群服务,名称可以是IP PORT,也可以是fwmark 数字,也就是防火墙规则 
virtual_server (@IP PORT)|(fwmark num) { 
    delay_loop num	# 健康检查时间间隔,单位:秒 
    
    lb_algo rr|wrr|lc|wlc|sh|dh|lblc  # 负载均衡调度算法,互联网应用常用方式为wlc或rr 
     
    lb_kind NAT|DR|TUN  # 负载均衡转发规则。包括DR、NAT、TUN 3种,一般使用路由(DR)转发规则。
    
    persistence_timeout num # 子网掩码,这个掩码是VIP的掩码
    
    # 子网掩码,这个掩码是VIP的掩码
	nat_mask 255.255.255.0

    protocol TCP|UDP  # http服务会话保持时间,单位:秒 
    
    # 如果后端应用服务器都不可用,就会定向到那个服务器上
	sorry_server 192.168.200.200 1358

    # 真实服务器IP和端口,可以定义多个 
    real_server 192.168.200.2 1358 {
		# 负载权重,值越大,转发的优先级越高 
        weight 1

        # MSIC_CHECK|SMTP_CHEKC|TCP_CHECK|SSL_GET|HTTP_GET这些都是,针对应用服务器做健康检查的方法  
        MISC_CHECK {}

        # 用于检查SMTP服务器的
        SMTP_CHEKC {}

        # 如果应用服务器不是WEB服务器,就用TCP_CHECK检查
        TCP_CHECK {
			
			# 向哪一个端口检查,如果不指定默认使用上面定义的端口
			connect_port <PORT>
			
			# 向哪一个IP检测,如果不指定默认使用上面定义的IP地址
			bindto <IP>
			
			# 连接超时时间
			connect_timeout 3

        }

        # 如果对方是HTTPS服务器就用SSL_GET方法去检查,里面配置的内容和HTTP_GET一样
        SSL_GET {}

        # 应用服务器UP或者DOWN,就执行那个脚本
        notify_up "这里写的是路径,如果脚本后有参数,整体路径 参数引起来"
        notify_down "/PATH/SCRIPTS.sh 参数"

        # 使用HTTP_GET方法去检查
        HTTP_GET {
				# 检测URL
			url { 
				# 具体检测哪一个URL
				path /testurl/test.jsp

				# 检测内容的哈希值
				digest 640205b7b0fc66c1ea91c463fac6334d

				# 除了检测哈希值还可以检测状态码,比如HTTP的200 表示正常,两种方法二选一即可
				status_code 200
			}
            url { 
				path /testurl2/test.jsp
				digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url { 
				path /testurl3/test.jsp
				digest 640205b7b0fc66c1ea91c463fac6334d
            }
            # 向哪一个端口检查,如果不指定默认使用上面定义的端口
            connect_port <PORT>

            # 向哪一个IP检测,如果不指定默认使用上面定义的IP地址
            bindto <IP>

            # 连接超时时间
            connect_timeout 3

            # 服务连接失败重试次数 
            nb_get_retry 3

            # 重试连接间隔,单位:秒
            delay_before_retry 3
        }
    } 

    real_server @IP PORT {
        weight num
        MISC_CHECK {
            misc_path /path_to_script/script.sh(or misc_path “/path_to_script/script.sh <arg_list>”)
        }
    }

    real_server @IP PORT {
        weight num
        HTTP_GET|SSL_GET {
            url { 
                # You can add multiple url block path alphanum
                digest alphanum
            }
            connect_port num
            connect_timeout num 
            nb_get_retry num 
            delay_before_retry num
        }
    }
}

0 人点赞