Keepalived高可用软件概述:
1)互联网主要的高可用软件:Keepalived、Hearttbeat、其中Keepalived是轻量级的,Keepalived是一款开源、免费的实现网站、数据库、业务系统之间的高可用软件,是目前企业中使用最广泛的软件。
2)Keepalived实现高可用,主要考两个功能实现:
- 健康检查:
Keepalived可以去检查后端nginx、MySQL、NFS、redis、服务器的运行状态,具体可以类似交换机制 3层(网络层ping)、4层(传输层:telnet port)、7层(应用层:URL、HTTP、FTP)检查。
- VRRP技术:
Keepalived可以使用VRRP(虚拟路由器冗余技术),可以将两台物理机封装称为路由器集群,根据优先级选举产生master和backup,成为master的路由器(主机)会产生VIP地址,并且由VIP地址(路由器)负责用户的请求或者路由转发。
成为master的路由器(主机)之后,会定时向集群内部组发送组播信息(包),backup接收到组播信息之后,会认为master还是存活的,此时不会参与竞选或者抢占为master,没有收到组播包之后会参与集群内部竞选,竞选通常是以优先级来决定,优先级高则为master,低则为backup。
3)
4)配置Keepalived,两台服务器keepalived.conf常用内容如下:
! Configuration File for keepalived global_defs { notification_email { support@jfedu.net } notification_email_from wgkgood@163.com smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS_DEVEL } vrrp_script chk_nginx { script "/data/sh/check_nginx.sh" interval 2 weight 2 } # VIP1 vrrp_instance VI_1 { state BACKUP interface eth0 lvs_sync_daemon_inteface eth0 virtual_router_id 151 priority 100 advert_int 5 nopreempt authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.0.198 } track_script { chk_nginx } }
5)配置文件参数详解:
完整的keepalived的配置文件,其配置文件keepalived.conf可以包含三个文本块:全局定义块、VRRP实例定义块机虚拟服务器定义块。全局定义块和虚拟服务器定义块是必须的,如果在只有一个负载均衡器的场合,就不需要VRRP实例定义块。
#全局定义块:
! Configuration File for keepalived # !改行表示注释; global_defs { notification_email { # 指定keepalived在发生切换时需要发送email到的对象,一行一个; support@jfedu.net } notification_email_from wgkgood@163.com # 指定发件人; smtp_server 127.0.0.1 # 指定smtp服务器地址; smtp_connect_timeout 30 # 指定smtp连接超时时间; router_id LVS_DEVEL # 运行keepalived机器的标识; }
#监控nginx进程:
vrrp script chk_nginx { script "/data/script/nginx.sh" # 监控服务脚本路径,脚本需要有x执行权限; interval 2 # 检测时间隔(执行脚本间隔); weight 2 }
#VRRP实例定义块:
vrrp sync group VG_1{ # 监控多个网段的实例; group{ VI_1 # 实例名; VI_2 } notify master /data/sh/nginx.sh # 指定当时切换到master时,执行脚本; notify backup /data/sh/nginx.sh # 指定当时切换到backup时,执行脚本; notify /data/sh/nginx.sh # 发生任何切换,均执行的脚本; smtp alert; # 使用global defs中提供的邮件地址和smtp服务器发送邮件通知; } vrrp instance VI_1{ state BACKUP # 设置主机状态; MASTER/BACKUP nopreempt # 设置为不抢占; interface ens33 # 对外提供服务的网络接口; lvs sync daemon interface ens33 # 负载均衡器之间监控接口; track interface { # 设置额外的监控,网卡出现问题都会切换; ens33 eth0 } macast src ip # 发送多播包的地址,如果不设置默认使用绑定网卡的primary ip; garp master delay # 在切换到master状态后,延迟进行gratuitous ARP请求; virtual router id 50 # VRID标记,路由ID可通过#tcpdump vrrp查看; priority 90 # 优先级,高优先级竞选为master; advert int 5 # 检查间隔,默认5秒; preempt delay # 抢占延时,默认5秒; debug # debug日志级别; authentication { # 设置认证; auth type PASS # 认证方式; auth pass 1111 # 认证密码; } track script{ # 以脚本为监控; chk nginx; chk_nginx } virtual ipaddress { #设置vip 192.168.1.188 } }
注意: 使用了脚本监控nginx或者MySQL,不需要如下虚拟服务器设置块。
#全局定义块:
virtual server 192.168.1.188 3306 { delay loop 6 # 健康检查时间间隔; lb_algo rr # 调度算法rr|wrr|lc|wlc|lblc|sh|dh; lb kind DR # 负载均衡转发规则 ; NAT|DR|TUN persistence timeout 5 # 会话保持时间; porsistence TCP # 使用的协议; real server 192.168.1.199 3306 { weight 1 # 默认为1,0为失效; notify up <string> | <quoted-string> # 在检测到server up后执行脚本; notify down <string> | <quoted-string> # 在检测到server down后执行脚本; TCP_CHECK { connect_timeout 3 # 连接超时时间; nb_get_retry 1 # 重连次数; delay_before_retry 1 # 重连间隔时间; connect_port 3306 # 健康检查的端口; } HTTP_GET { url { path /index.html # 检测url,可写多个 digest 24326582a86bee478bac72d5af25089e # 检测效验码; genhash -s IP -p 80 -u http://IP/index.html # digest效验码获取方法: status_code 200 # 检测返回http状态码 } } }
查看日志:
tail -fn 30 /var/log/messages