天天看点

linux内核vrrp配置,Keepalive配置文件说明和实现高可用

Keepalive概述:

Keepalived是一个免费开源的,用C编写的,具备第3层、第4层和第7层交换机的功能。主要提供loadbalancing(负载均衡)和 high-availability(高可用)功能,负载均衡实现需要依赖Linux的虚拟服务内核模块(ipvs),而高可用是通过VRRP协议实现多台机器之间的故障转移服务。

linux内核vrrp配置,Keepalive配置文件说明和实现高可用

上图是Keepalived的功能体系结构,大致分两层:用户空间(user space)和内核空间(kernel space)。 内核空间:主要包括IPVS(IP虚拟服务器,用于实现网络服务的负载均衡)和NETLINK(提供高级路由及其他相关的网络功能)两个部分。

用户空间:

WatchDog:负载监控checkers和VRRP进程的状况

VRRP Stack:负载负载均衡器之间的失败切换FailOver,如果只用一个负载均稀器,则VRRP不是必须的。

Checkers:负责真实服务器的健康检查healthchecking,是keepalived最主要的功能。换言之,可以没有

VRRP Stack,但健康检查healthchecking是一定要有的。

IPVS wrapper:用户发送设定的规则到内核ipvs代码

Netlink Reflector:用来设定vrrp的vip地址等。

Keepalived的所有功能是配置keepalived.conf文件来实现的。

安装

[[email protected] ~]# yum install keepalived ipvsadm

[[email protected] ~]# rpm -ql keepalived

/etc/keepalived/keepalived.conf 主配置文件

/etc/sysconfig/keepalived

/usr/bin/genhash

/usr/lib/systemd/system/keepalived.service 启动脚本

配置文件说明

[[email protected] ~]# cat /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {

router_id maiya      #路由id,不能重复

}

vrrp_instance lvs_inst {          #定义vrrp实例名

state BACKUP            #定义vrrp角色,分为MASTER/BACKUP两种

interface ens33            #指定网络接口名

virtual_router_id 51        #同一组的vrrp成员,该id需要一致

priority 150                      #优先级,范围(0-255)

nopreempt                        #不抢占(只针对BACKUP生效)

advert_int 1                      #发送hello的时间间隔

authentication {                #通过密码身份验证

auth_type PASS

auth_pass 1111

}

virtual_ipaddress {  #定义虚拟IP(VIP)

10.18.42.123

}

}

virtual_server 10.18.42.123 80 {          #定义VIP相关配置

delay_loop 6

lb_algo rr                  #使用rr调度算法(rr|wrr|lc |wlc|lblc|sh|dh)

lb_kind DR                #使用DR模式 (DR/NAT/TUN)

persistence_timeout 50      #定义persistence保持时间

protocol TCP                          #tcp协议

real_server 10.18.42.42 80 {        #定义real_server

weight 1              #weight权重为1

TCP_CHECK {                  #定义checker的方法(TCP/HTTP/SSL/MISC)

connect_port 80              #定义tcp的port

connect_timeout 3            #定义本次连接的超时时长为3s

nb_get_retry 3              #定义尝试3次,如果3次都失败则宣告本real_server失效

delay_before_retry 3        #定义重连接间隔时间为3s

}

}

real_server 10.18.42.6 80 {

weight 1

TCP_CHECK {

connect_port 80

connect_timeout 3

nb_get_retry 3

delay_before_retry 3

}

}

}

关于配置文件中的其它项:

HTTP_GET | SSL_GET{

url{                #根据url check,可以指定多个

path /            #定义要检查的URI地址

digest             #检查后的摘要信息

#(可以使用genhash -s 目标服务器ip  -p 端口号  status_code 200  -u  uri地址得到摘要信息)

status_code 200                          #检查的返回状态码

}

}

notify_master /path/xx.sh                    #指定当切换到master 时执行的脚本

notify_backup /path/xx.sh                  #指定当切换到backup 时执行的脚本

notify_fault "path/xx.sh VG_1"            #故障时执行的脚本

notify  /path/xx.sh

virtualhost                     #检查的web服务器的虚拟主机

sorry_server         #备用机的IP,所有的realserver失效后启用

notify_up                         #检测到服务器up后执行的脚本

notify_down                 #检测到服务器down后执行的脚本

实现MySQL的故障转移

1)、实现master与slave1两台主机的复制(AA复制)

2)、利用keepalived 的健康检查功能,检测本机的3306端口是否存活,如果端口失效,则自动执行自定义脚本

3)、自定义脚本的内容为:kill 本机的keepalived进程,并删除本机VIP;当本机keepalived进程被kill掉之后,另一台主机的keepalived进程即可获得虚拟IP,实现的故障转移

4)、测试:客户端连接keepalived提供的虚拟IP(mysql需要事先授权grant连接)

[[email protected] ~]# cat /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {

router_id teacher

}

vrrp_instance lvs_inst {

state MASTER

interface ens33

virtual_router_id 51

priority 250

nopreempt

advert_int 1

authentication {

auth_type PASS

auth_pass 1111

}

virtual_ipaddress {

10.18.42.123

}

}

virtual_server 10.18.42.123 3306 {

delay_loop 6

lb_algo rr

lb_kind DR

#persistence_timeout 50

protocol TCP

real_server 10.18.42.251 3306 {

weight 1

notify_down /etc/keepalived/kill.sh

TCP_CHECK {

connect_port 3306

connect_timeout 3

nb_get_retry 3

delay_before_retry 3

}

}

}

[[email protected] ~]# cat /etc/keepalived/kill.sh

#!/bin/bash

pkill keepalived

#systemctl stop keepalived #尽量使用此方式关闭keepalived

ip addr del dev ens33 10.18.42.123/32

haproxy的故障转移

[[email protected] ~]# cat /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {

router_id teacher

}

vrrp_script chk_haproxy {

script "lsof -i:80 | grep haproxy || exit 1"

interval 2

fail 1

}

vrrp_instance lvs_inst {

state MASTER

interface ens33

virtual_router_id 51

priority 250

nopreempt

advert_int 1

authentication {

auth_type PASS

auth_pass 1111

}

track_script {

chk_haproxy

}

virtual_ipaddress {

10.18.42.124

}

}

linux内核vrrp配置,Keepalive配置文件说明和实现高可用