设为首页 收藏本站
查看: 1114|回复: 0

[经验分享] keepalived入门之配置文件详解(3)

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2018-12-29 10:50:22 | 显示全部楼层 |阅读模式

前面我们介绍了keepalived的安装与部署,对于keepalived还有一个很重要的部分:keepalived的配置,下面我们讲讲keepalived配置文件相关配置项说明。
keepalived的配置文件说明
一.全局定义部分全局配置又包括两个子配置1.全局定义(global definition) ;2.静态路由配置(static ipaddress/routes)1. 全局定义(global definition)
global_defs {                     
   notification_email {      
   acassen@firewall.loc     
   failover@firewall.loc
   sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc   
   smtp_server 192.168.200.1                        
   smtp_connect_timeout 30                                 
   router_id LVS_DEVEL     
}
notification_email: 表示keepalived在发生诸如切换操作时需要发送email通知以及email发送给哪些邮件地址邮件地址可以多个每行一个
notification_email_from admin@example.com:
表示发送通知邮件时邮件源地址是谁
smtp_server 127.0.0.1: 表示发送email时使用的smtp服务器地址这里可以用本地的sendmail来实现
smtp_connect_timeout 30: 连接smtp连接超时时间
router_id node1: 机器标识,fa

  2.静态地址和路由配置范例
static_ipaddress
{
192.168.1.1/24 brd + dev eth0 scope global
192.168.1.2/24 brd + dev eth1 scope global
}
static_routes
{
src $SRC_IP to $DST_IP dev $SRC_DEVICE
src $SRC_IP to $DST_IP via $GW dev $SRC_DEVICE
}
这里实际上和系统里面命令配置IP地址和路由一样例如
192.168.1.1/24 brd + dev eth0 scope global 相当于: ip addr add 192.168.1.1/24 brd + dev eth0 scope global
就是给eth0配置IP地址路由同理,一般这个区域不需要配置
这里实际上就是给服务器配置真实的IP地址和路由的在复杂的环境下可能需要配置一般不会用这个来配置我们可以直接用vi /etc/sysconfig/network-script/ifcfg-eth1来配置切记这里可不是VIP不要搞混淆了切记切记



二.VRRPD配置
包括三个类:1.VRRP同步组(synchroization group) 2.VRRP实例(VRRP Instance) 3.VRRP脚本
  2.1.VRRP同步组(synchroization group)配置范例
vrrp_sync_group VG_1 {   //注意vrrp_sync_group  后面可自定义名称如lvs_httpd ,httpd
group {
http
mysql
}
notify_master /path/to/to_master.sh
notify_backup /path_to/to_backup.sh
notify_fault "/path/fault.sh VG_1"
notify /path/to/notify.sh
smtp_alert
}
  其中http和mysql是实例名和下面的实例名一致

notify_master /path/to/to_master.sh //表示当切换到master状态时要执行的脚本
notify_backup /path_to/to_backup.sh //表示当切换到backup状态时要执行的脚本
notify_fault "/path/fault.sh VG_1"  // keepalived出现故障时执行的脚本
notify /path/to/notify.sh  
smtp_alert           //表示切换时给global defs中定义的邮件地址发送邮件通知
  2.2 VRRP实例(instance)配置范例
vrrp_instance http {  //注意vrrp_instance 后面可自定义名称如lvs_httpd ,httpd
state MASTER
interface eth0
dont_track_primary
track_interface {
eth0
eth1
}
mcast_src_ip
garp_master_delay 10
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
autp_pass 1234
}
virtual_ipaddress {
#/ brd  dev  scope  label
192.168.200.17/24 dev eth1
192.168.200.18/24 dev eth2 label eth2:1
}
virtual_routes {
# src  [to] / via|gw  dev  scope  tab
src 192.168.100.1 to 192.168.109.0/24 via 192.168.200.254 dev eth1
192.168.110.0/24 via 192.168.200.254 dev eth1
192.168.111.0/24 dev eth2
192.168.112.0/24 via 192.168.100.254
}
nopreempt
preemtp_delay 300
debug
}



state: state指定instance(Initial)的初始状态就是说在配置好后这台
服务器的初始状态就是这里指定的但这里指定的不算还是得要通过竞选通过优先级来确定里如果这里设置为master但如若他的优先级不及另外一台
那么这台在发送通告时会发送自己的优先级另外一台发现优先级不如自己的高那么他会就回抢占为master



interface: 实例绑定的网卡因为在配置虚拟VIP的时候必须是在已有的网卡上添加的



dont track primary: 忽略VRRP的interface错误



track interface: 跟踪接口设置额外的监控里面任意一块网卡出现问题都会进入故障(FAULT)状态例如用nginx做均衡器的时候内网必须正常工作如果内网出问题了这个均衡器也就无法运作了所以必须对内外网同时做健康检查
mcast src ip: 发送多播数据包时的源IP地址这里注意了这里实际上就是在那个地址上发送VRRP通告这个非常重要一定要选择稳定的网卡端口来发送这里相当于heartbeat的心跳端口如果没有设置那么就用默认的绑定的网卡的IP也就是interface指定的IP地址
garp master delay: 在切换到master状态后延迟进行免费的ARP(gratuitous ARP)请求,默认5s

virtual router id: 这里设置VRID这里非常重要相同的VRID为一个组他将决定多播的MAC地址
priority 100: 设置本节点的优先级优先级高的为master
advert int: 设置MASTER与BACKUP负载均衡之间同步即主备间通告时间检查的时间间隔,单位为秒,默认1s


virtual ipaddress: 这里设置的就是VIP也就是虚拟IP地址他随着state的变化而增加删除当state为master的时候就添加当state为backup的时候删除这里主要是有优先级来决定的和state设置的值没有多大关系这里可以设置多个IP地址
virtual routes: 原理和virtual ipaddress一样只不过这里是增加和删除路由
lvs sync daemon interface: lvs syncd绑定的网卡,类似HA中的心跳检测绑定的网卡
authentication: 这里设置认证
auth type: 认证方式可以是PASS或AH两种认证方式

auth pass: 认证密码
nopreempt: 设置不抢占master,这里只能设置在state为backup的节点上而且这个节点的优先级必须别另外的高,比如master因为异常将调度圈交给了备份serve,master serve检修后没问题,如果不设置nopreempt就会将调度权重新夺回来,这样就容易造成业务中断问题
preempt delay: 抢占延迟多少秒,即延迟多少秒后竞选master
debug: debug级别
notify master: 和sync group这里设置的含义一样可以单独设置例如不同的实例通知不同的管理人员http实例发给网站管理员mysql的就发邮件给DBA




3. VRRP脚本
如下所示为相关配置示例

vrrp_script check_running {
   script "/usr/local/bin/check_running"
   interval 10
   weight 10
}
vrrp_instance http {
   state BACKUP
   smtp_alert
   interface eth0
   virtual_router_id 101
   priority 90
   advert_int 3
   authentication {
   auth_type PASS
   auth_pass whatever
   }
   virtual_ipaddress {
   1.1.1.1
   }
   track_script {
   check_running
   }
}
首先在vrrp_script区域定义脚本名字和脚本执行的间隔和脚本执行的优先级变更,如下所示:

vrrp_script check_running {
            script "/usr/local/bin/check_running"
            interval 10     #脚本执行间隔
            weight 10       #脚本结果导致的优先级变更10表示优先级+10-10则表示优先级-10
            }
  然后在实例(vrrp_instance)里面引用有点类似脚本里面的函数引用一样先定义后引用函数名
  
track_script {
      check_running
}
  注意:
  VRRP脚本(vrrp_script)和VRRP实例(vrrp_instance)属于同一个级别
  keepalived会定时执行脚本并对脚本执行的结果进行分析,动态调整vrrp_instance的优先级。一般脚本检测返回的值为0,说明脚本检测成功,如果为非0数值,则说明检测失败
  如果脚本执行结果为0,并且weight配置的值大于0,则优先级相应的增加, 如果weight为非0,则优先级不变
  如果脚本执行结果非0,并且weight配置的值小于0,则优先级相应的减少, 如果weight为0,则优先级不变
  其他情况,维持原本配置的优先级,即配置文件中priority对应的值。
  这里需要注意的是:
  1) 优先级不会不断的提高或者降低
  2) 可以编写多个检测脚本并为每个检测脚本设置不同的weight
  3) 不管提高优先级还是降低优先级,最终优先级的范围是在[1,254],不会出现优先级小于等于0或者优先级大于等于255的情况
  这样可以做到利用脚本检测业务进程的状态,并动态调整优先级从而实现主备切换。
  

三.virtual_server配置virtual_server配置分为两大部分:1.虚拟主机组配置; 2.虚拟主机配置
1.虚拟主机组配置文件详解
这个配置是可选的根据需求来配置吧这里配置主要是为了让一台realserver上的某个服务可以属于多个Virtual Server并且只做一次健康检查

virtual_server_group  {
# VIP port


fwmark
}  

2. 虚拟主机配置

  关于keeplived的虚拟主机配置有三种如下所示

virtual server IP port
virtual server fwmark int
virtual server group string  通常我们比较常用的是第一种配置语法下面以第一种比较常用的方式来配详细解说一下相关配置项说明
  
virtual_server 192.168.1.2 80 {        
delay_loop 3                          
lb_algo rr|wrr|lc|wlc|lblc|sh|dh   
lb_kind NAT|DR|TUN                                    
persistence_timeout 120               
persistence_granularity      
protocol TCP                           
ha_suspend                           
virtualhost                  
sorry_server            
real_server    {
weight 1                              
inhibit_on_failure                  
notify_up  |   
notify_down  |  
HTTP_GET                              
{
url {                                 
path /                                
digest                                             
status_code 200                        
}
connect_port 80                        
bindto                          
connect_timeout   3                  
nb_get_retry 3                        
delay_before_retry 2                  
}

  配置项说明
virtual_server 192.168.1.2 80          

  含义设置一个virtual server: VIP:Vport
  

  delay_loop 3                                  
  含义:设置service polling的delay时间即服务轮询的时间间隔
  
lb_algo rr|wrr|lc|wlc|lblc|sh|dh       

  含义:设置LVS调度算法
  

  lb_kind NAT|DR|TUN
  含义:设置LVS集群模式  
                      
persistence_timeout 120                                

  含义:设置会话保持时间秒为单位即以用户在120秒内被分配到同一个后端realserver,超过此时间就重新分配
  

  persistence_granularity              

  含义:设置LVS会话保持粒度ipvsadm中的-M参数默认是0xffffffff即每个客户端都做会话保持
  
protocol TCP                                                  

  含义:设置健康检查用的是TCP还是UDP
  
ha_suspend                                                   

  含义:suspendhealthchecker’s activity
  

  virtualhost                                        

  含义:HTTP_GET做健康检查时检查的web服务器的虚拟主机即host头
sorry_server                  
  含义:设置backupserver就是当所有后端realserver节点都不可用时就用这里设置的也就是临时把所有的请求都发送到这里
real_server       
  含义:设置后端真实节点主机的权重等设置主要后端有几台这里就要设置几个
weight 1                               
  含义:设置给每台的权重0表示失效(不知给他转发请求知道他恢复正常)默认是1
  

  inhibit_on_failure                              
  含义:表示在节点失败后把他权重设置成0而不是冲IPVS中删除
notify_up  |  
  含义:设置检查服务器正常(UP)后要执行的脚本
notify_down  |
  含义:设置检查服务器失败(down)后要执行的脚本

  注:keepalived检查机制说明
  keepalived健康检查方式有:HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHECK几种如下所示
#HTTP/HTTPS方式
HTTP_GET|SSL_GET {    设置健康检查方式

url {            
设置要检查的URL可以有多个
path /             设置URL具体路径
digest        #检查后的摘要信息这些摘要信息可以通过genhash命令工具获取                                   
status_code 200       设置返回状态码
}
connect_port 80       设置监控检查的端口
bindto        设置健康检查的IP地址
connect_timeout   3   设置连接超时时间
nb_get_retry  3      设置重连次数
delay_before_retry  2  设置重连间隔
}

  
#TCP方式  
TCP_CHECK     {


  connect_port 80       设置监控检查的端口
bindto        设置健康检查的IP地址
connect_timeout   3   设置连接超时时间
nb_get_retry  3      设置重连次数
delay_before_retry  2  设置重连间隔
  
  }

  #SMTP方式 (这个可以用来给邮件服务器做集群)
SMTP_CHECK {
host {
connect_ip
connect_port      #默认检查25端口
14 KEEPALIVED
bindto
}
connect_timeout
retry
delay_before_retry
# "smtp HELO"|·-ê§à"

helo_name |
}

  
#MISC方式 这个可以用来检查很多服务器只需要自己会些脚本即可
MISC
_CHECK {
  misc_path |  #外部程序或脚本
misc_timeout             #脚本或程序执行超时时间
misc_dynamic
                                             

  #这个就很好用了可以非常精确的来调整权重是后端每天服务器的压力都能均衡调配这个主要是通过执行的程序或脚本返回的状态代码来动态调整weight值使权重根据真实的后端压力来适当调整不过这需要有过硬的脚本功夫才行哦
#返回0健康检查没问题不修改权重
#返回1健康检查失败权重设置为0
#返回2-255健康检查没问题但是权重却要根据返回代码修改为返回码-2例如如果程序或脚本执行后返回的代码为200#那么权重这回被修改为 200-2
}
以上就是keepalived的配置项说明虽然配置项很多但很多时候很多配置项保持默认即可。如下为一个keepalived的配置参考模板样例

global_defs {
       notification_email {
       admin@example.com
          }
       notification_email_from admin@example.com
       smtp_server 127.0.0.1
       stmp_connect_timeout 30
       router_id web_cluster
}
#static_ipaddress {
#192.168.1.1/24 brd + dev eth0 scope global
#192.168.1.2/24 brd + dev eth1 scope global
#}
#static_routes {
#src $SRC_IP to $DST_IP dev $SRC_DEVICE
#src $SRC_IP to $DST_IP via $GW dev $SRC_DEVICE
#}
#vrrp_sync_group lvsg_1 {
#group {
#lvs_http
#}
#notify_master /path/to/to_master.sh
#notify_backup /path_to/to_backup.sh
#notify_fault "/path/fault.sh VG_1"
#notify /path/to/notify.sh
#smtp_alert
#}
vrrp_script check_running {
   script "/usr/local/bin/check_running"
   interval 10
   weight 10
}
vrrp_instance lvs_http {
state MASTER
interface eth0
#dont_track_primary
track_interface {
eth0
eth1
}
mcast_src_ip 127.0.0.1
garp_master_delay 10
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
autp_pass 1234
}
virtual_ipaddress {
#/ brd  dev  scope  label
192.168.200.17/24 dev eth1
#192.168.200.18/24 dev eth2 label eth2:1
}
#virtual_routes {
# src  [to] / via|gw  dev  scope  tab
#src 192.168.100.1 to 192.168.109.0/24 via 192.168.200.254 dev eth1
#192.168.110.0/24 via 192.168.200.254 dev eth1
#192.168.111.0/24 dev eth2
#192.168.112.0/24 via 192.168.100.254
#}
track_script {
      check_running
}
nopreempt
preemtp_delay 300
#debug
}
#virtual_server_group  {
# VIP port
#
#
#fwmark
#}
virtual_server 192.168.1.2 80 {
delay_loop 3
lb_algo rr
lb_kind DR
persistence_timeout 120
#persistence_granularity
protocol TCP
#ha_suspend
#virtualhost
sorry_server 127.0.0.1
real_server 192.168.0.100 80 {
weight 1
#inhibit_on_failure
#notify_up  |
#notify_down  |
HTTP_GET  {
     url {
       path /
       digest                                             
       status_code 200
       }
     connect_port 80
     #bindto
     connect_timeout   3
     nb_get_retry 3
     delay_before_retry 2
     }
   }
}   
  





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-657167-1-1.html 上篇帖子: PGSQL主从+keepalived高可用配置 下篇帖子: keepalived 主从配置日志报错:one or more vip associated with vrid mismatch actual master
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表