keepalived介绍,安装,及配置文件说明

文章目录

  • 一、keepalived 介绍
      • 1. 故障排查
      • 2. 故障切换
      • 3. VRRP:虚拟路由冗余协议
      • 4. 运行状态与隔离
      • 5. keepalived核心组件
      • 6. keepalived 配置文件详解
          • 全局配置:
          • VRRPD配置:
          • VRRP实例配置
          • LVS配置:
  • 二、keepalived安装与配置
      • 二进制安装:
        • 配置规范启动
        • 配置启动项
        • 修改配置文件
        • 启动
        • 验证:停止master端keepalived服务
      • 配置双主高可用方案:
        • mysql01端配置文件
        • mysql02端配置文件
        • 验证:两端都启动keepalived
          • mysql01端结果
          • mysql02端结果
        • 模拟mysql01端宕机
        • mysql01端开启keepalived,mysql02端关闭keepalived
        • mysql01端keepalived启动后

一、keepalived 介绍

1. 故障排查

keepalived起初是为LVS设计的,用来监控集群系统中各个服务节点的状态,根据TCP/IP参考模型的第三,第四层,第五层交换机制检测每个服务节点的状态,若出现异常、或工作出现故障,则会将故常服务器节点从集群系统中剔除,以免影响集群效率。故障机器需要人工完成修复。

2. 故障切换

后来keepalived加入VRRP功能(VritrualRouterRedundancy Protocol:虚拟路由冗余协议),目的是为了解决静态路由出现单点故障的问题。利用VRRP位置主备负载均衡器的心跳检测,当负载均衡器出现问题时,由备用负载均衡器承载对应的业务,从而最大限度减少流量损失,并提供服务器的稳定性。VRRP可以实现网络不间断稳定运行。因此keepalived具有服务器检测和故障隔离功能,还有HAcluster功能

3. VRRP:虚拟路由冗余协议

实现路由高可用协议。将N台提供相同功能的路由器组成一个路由器组 ,其中由一个master和多个backup,master有对外提供服务的vip(此局域网内其他机器默认该路由为vip),master会发组播(心跳),当backup接收不到vrrp包时则会认为master宕掉。这是会根据vrrp的优先级来从backup服务组中选举一个来替换宕掉的master,当主节点恢复故障时,北街店会释放主节点故障时接管的IP资源级服务,恢复到自身的备用角色。

4. 运行状态与隔离

健康检查

说明
网络层 通过ICMP协议向服务器集群中的每个节点发送一个ICMP数据包,如果某个节点没有返回相应数据包,那么认为该节点发生了故障,keepalived将报告这个节点失效,并从集群中剔除此节点
物理层 利用TCP协议的端口链接和扫描技术来判断集群节点的端口是否正常,keepalived一旦在传输层探测到某端口没有数据相应或数据返回,则默认发生异常,会强制剔除所对应的节点
链路层 用户通过自定义keepalived工作方式,例如程序或脚本来运行keepalived,keepalived根据用户设定的参数来检测各程序或服务是否正常,若检测结果和用户设定的不一致,则会剔除该节点

5. keepalived核心组件

keepalived是模块化设计:core;check;vrrp;libipfwc;libipvs-2.4 libipvs-2.6

core : 是keepalived的核心,负责主程序的启动和维护,全局配置文件的加载解析等。 
check:负责healchecker(健康监测),包括各种健康检查方式,以及对应的配置解析,
包括lvs配置解析 Vrrp:vrrpd的子进程,用来实现vrrp协议的 libipfwc:iptables
(ipchains)库,配置lvs会用到 libipvs*:配置lvs使用

注:keepalived启动后会有三个子进程
父进程:内存管理,子进程管理
子进程:vrrp子进程,收到healtchecker子进程发来的故障信息,则会产出通告,去除虚拟ip,转换为backup状态
子进程:healthchecker子进程,负责检查各自服务器的健康程度,检测到故障,会告知vrrp子进程
两个子进程都各自负责自己的事情,且都被系统watchDog看管。

6. keepalived 配置文件详解

配置文件分为三类:
全局配置;VRRPD配置;LVS配置
配置文件以配置块的形式存在,每个配置块都在一个闭合的{}内。

全局配置:
global_defs {
   notification_email {		#设置keepalived在发生事件的时候需要发送email的地址,可以设置多个
     [email protected]
     [email protected]
     [email protected]
   }
   notification_email_from [email protected]
  #设置通知邮件发送来自于哪里,若本地开启了发送邮件的话,可以使用默认值
   smtp_server 192.168.200.1	#指定发送邮件的smtp服务器
   smtp_connect_timeout 30	   # 设置smtp的链接超时时间(秒)
   router_id LVS_DEVEL				#  运行keepalived的一个表示。多个集群设置不同
   vrrp_skip_check_adv_addr		# 默认是不跳过检查,检查收到VRRP通告的所有地址可能会比较耗时。此命令的意思为:如果通告与接受的上一个通告来自于相同的master路由器,则不执行检查(跳过检查)
   vrrp_strict		#严格遵守vrrp协议,下面情况会组织启动keepalived:1. 没有vip地址 2. 单播令居 3. 在vrrp2版本中有ipv6地址
   vrrp_garp_interval 0   #在一个借口发送的两个免费app之间的延迟,可以精确到毫秒。默认是0
   vrrp_gna_interval 0
}
VRRPD配置:

主要分为VRRP同步组和VRRP实例
VRRP同步组:sync group,若机器有两个网段。一个内网一个外网,每个网段开启一个实例,当外网出现问题时,若没有配置VRRP同步组。VRRPD则会认为自己仍然健康,不会发生master和backup的切换,从而出现问题。若两个实例都放进一个sync group中,就不会出现此问题
VRRP实例:用来定义ip和服务器角色的

vrrp_sync_group VG_1{ #监控多个网段的实例
	group {
		VI_1 #实例名
		VI_2
		......
	}
	notify_master /path/xx.sh #指定当切换到master时,执行的脚本
	netify_backup /path/xx.sh #指定当切换到backup时,执行的脚本
	notify_fault "path/xx.sh VG_1"  #故障时执行的脚本
	notify /path/xx.sh
	smtp_alert #使用global_defs中提供的邮件地址和smtp服务器发送邮件通知
}
VRRP实例配置

VRRP实例就是开启 一个VRRP协议, 说明一些特征:主从,VRID。

vrrp_instance VI_1 {
    state MASTER 	#实例初始状态,master和backup
    interface ens33	 #指实例绑定的网卡
    virtual_router_id 51	#设置vrid标记,多个集群不能重复(0..255)
    priority 100		#设置优先级,优先级高的将选举为master,master要高于backup
    advert_int 1		#检查间隔时间,默认1s
  	# nopreempt		  #设置不枪战,说明此配置只能在backup主机上设置
    #preempt_delay	#抢占延迟,默认5分钟
    #debug 				  #debug级别
    authentication {	#设置认证
        auth_type PASS	#认证方式,支持pass和ah,官方建议pass
        auth_pass 1111	#认证密码
    }
    virtual_ipaddress {	 #设置vip,可以设置多个,用于切换时的地址绑定,格式:/ brd  dev  scope  label 
         192.168.200.16/24 dev eth0 label eth0:1
         192.168.100.100
    }
}
LVS配置:

虚拟服务器virtual_server定义块 ,虚拟服务器定义是keepalived框架最重要的项目了,是keepalived.conf必不可少的部分。 该部分是用来管理LVS的,是实现keepalive和LVS相结合的模块。ipvsadm命令可以实现的管理在这里都可以通过参数配置实现,注意:real_server是被包含在viyual_server模块中的,是子模块。

virtual_server 192.168.202.200 23 {    //VIP地址,要和vrrp_instance模块中
	virtual_ipaddress地址一致
		  delay_loop 6  #健康检查时间间隔
		  lb_algo rr #lvs调度算法rr|wrr|lc|wlc|lblc|sh|dh
    	  lb_kind DR  #负载均衡转发规则NAT|DR|RUN
		  persistence_timeout 5 #会话保持时间
		  protocol TCP  #使用的协议
		  persistence_granularity <NETMASK> #lvs会话保持粒度
		  virtualhost <string>  #检查的web服务器的虚拟主机(host:头)
		  sorry_server<IPADDR> <port> #备用机,所有realserver失效后启用

  real_server 192.168.200.5 23 {       //RS的真实IP地址
     				weight 1 #默认为1,0为失效
    				 inhibit_on_failure #在服务器健康检查失效时,将其设为0,而不是直接从ipvs中删除
    				 notify_up <string> | <quoted-string> #在检测到server up后执行脚本
     				 notify_down <string> | <quoted-string> #在检测到server down后执行脚本
     
    TCP_CHECK {          //常用
   				     connect_timeout 3 #连接超时时间
    				 nb_get_retry 3 #重连次数
   				     delay_before_retry 3 #重连间隔时间
     				 connect_port 23 #健康检查的端口的端口
     				 bindto <ip> 
   					 }
    HTTP_GET | SSL_GET{     //不常用  做ssl认证配置
    	url{ #检查url,可以指定多个
        		path /
    			digest <string> #检查后的摘要信息
    			status_code 200 #检查的返回状态码
  				 }
		 connect_port <port>
		 bindto <IPADD>
 		connect_timeout 5
		 nb_get_retry 3
 		delay_before_retry 2
		 }
    SMTP_CHECK{         //不常用
		 host{
 				connect_ip <IP ADDRESS>
 				connect_port <port> #默认检查25端口
 				bindto <IP ADDRESS>
   		 }
 		connect_timeout 5
		 retry 3
 		delay_before_retry 2
 		helo_name <string> | <quoted-string> #smtp helo请求命令参数,可选
	 }

    MISC_CHECK{         //不常用
		 misc_path <string> | <quoted-string> #外部脚本路径
 		misc_timeout #脚本执行超时时间
		 misc_dynamic #如设置该项,则退出状态码会用来动态调整服务器的权重,返回0 正常,不修改;返回1,
检查失败,权重改为0;返回2-255,正常,权重设置为:返回状态码-2
	}
}

二、keepalived安装与配置

安装包获取:https://www.keepalived.org

二进制安装:

# 同步时钟源
# yum -y install ntp ntpdate
# ntpdate cn.pool.ntp.org
# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
#获取安装包
[root@mysql01 ~]# ls
keepalived-2.0.20.tar.gz
[root@mysql01 ~]# tar xzf keepalived-2.0.20.tar.gz -C /usr/local/src/
# 配置编译环境
# yum install openssl-devel gcc gcc-c++ make
# 创建安装目录
# mkdir -p /data/keepalived
# cd /usr/local/src/keepalived-2.0.20/
# ./configure --prefix=/data/keepalived
# echo $?
0
# make
# echo $?
0
# make install
# echo $?
0

配置规范启动

# cd /usr/local/src/keepalived-2.0.20/keepalived/etc/
# cp -R init /data/keepalived/
# cp -R init /data/keepalived/etc/
# cp -R init.d /data/keepalived/etc/
# ll /data/keepalived/etc/
总用量 0
drwxr-xr-x. 2 root root  86 7月  31 21:58 init
drwxr-xr-x. 2 root root 135 7月  31 21:58 init.d
drwxr-xr-x. 3 root root  44 7月  31 18:01 keepalived
drwxr-xr-x. 2 root root  24 7月  31 17:59 sysconfig

配置启动项

# cp /data/keepalived/etc/init.d/keepalived /etc/init.d/
# cp /data/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
# mkdir /etc/keepalived
# cp /data/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
# cp /data/keepalived/sbin/keepalived /usr/sbin/

修改配置文件

# master 端配置文件
!Configuration File for keepalived

global_defs {
   notification_email {
     [email protected]
     [email protected]
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state MASTER     # master|backup
    interface ens33   #修改网卡
    virtual_router_id 51
    priority 100		 #优先级
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.100.100    #虚拟ip
    }
}

# backup端配置文件
! Configuration File for keepalived

global_defs {
   notification_email {
     [email protected]
     [email protected]
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 50
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.100.100
    }
}

启动

[root@mysql01 etc]# systemctl start keepalived
[root@mysql01 etc]# ps -ef | grep keepalived
root      18071      1  0 16:42 ?        00:00:00 /data/keepalived/sbin/keepalived -D
root      18072  18071  0 16:42 ?        00:00:00 /data/keepalived/sbin/keepalived -D
root      18086  17809  0 16:42 pts/0    00:00:00 grep --color=auto keepalived
[root@mysql01 etc]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000
    link/ether 00:0c:29:a2:87:bf brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.102/24 brd 192.168.10.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet 192.168.100.100/32 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::3205:7fc7:e04b:5e2e/64 scope link noprefixroute
       valid_lft forever preferred_lft forever

验证:停止master端keepalived服务

keepalived介绍,安装,及配置文件说明_第1张图片
backup端ip出现
keepalived介绍,安装,及配置文件说明_第2张图片

配置双主高可用方案:

mysql01端配置文件

! Configuration File for keepalived

global_defs {
   notification_email {
     [email protected]
     [email protected]
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.100.100
    }
}

vrrp_instance VI_2 {
    state BACKUP
    interface ens33
    virtual_router_id 55
    priority 50
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.100.200
    }
}

mysql02端配置文件

! Configuration File for keepalived

global_defs {
   notification_email {
     [email protected]
     [email protected]
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 50
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.100.100
    }
}
vrrp_instance VI_2 {
    state MASTER
    interface ens33
    virtual_router_id 55
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.100.200
    }
}

验证:两端都启动keepalived

mysql01端结果

keepalived介绍,安装,及配置文件说明_第3张图片

mysql02端结果

keepalived介绍,安装,及配置文件说明_第4张图片

模拟mysql01端宕机

keepalived介绍,安装,及配置文件说明_第5张图片
keepalived介绍,安装,及配置文件说明_第6张图片

mysql01端开启keepalived,mysql02端关闭keepalived

keepalived介绍,安装,及配置文件说明_第7张图片
keepalived介绍,安装,及配置文件说明_第8张图片

mysql01端keepalived启动后

keepalived介绍,安装,及配置文件说明_第9张图片
keepalived介绍,安装,及配置文件说明_第10张图片
------------------------------------------------------------------------------------------------------- 返回目录

你可能感兴趣的:(服务,linux)