2018-10-16 直播课堂笔记

1.keepalived 配置文件详解

1.2 将keepalived日志单独配置

2.配置通知邮件为第三方邮件

3.监控nginx脚本

4.LVS3种模式

4.1LVS 三种工作模式的优缺点比较

4.2LVS调度算法

5. arp_ignore 与arp_announce

 


1.keepalived 配置文件详解

下面是配置文件的一张结构图,每个节点都有相应的解析。

第一部分:全局定义块 
  1、email通知。作用:有故障,发邮件报警。 
  2、Lvs负载均衡器标识(lvs_id)。在一个网络内,它应该是唯一的。 
  3、花括号“{}”。用来分隔定义块,因此必须成对出现。如果写漏了,keepalived运行时,不会得到预期的结果。由于定义块内存在嵌套关系,因此很容易遗漏结尾处的花括号,这点要特别注意。

global_defs {            
   notification_email {  #指定keepalived在发生切换时需要发送email到的对象,一行一个
    [email protected]
   }
   notification_email_from [email protected] #指定发件人
   smtp_server localhost #指定smtp服务器地址
   smtp_connect_timeout 30 #指定smtp连接超时时间
   router_id LVS_DEVEL #运行keepalived机器的一个标识
}

第二部分:vrrp_sync_group作用:确定失败切换(FailOver)包含的路由实例个数。即在有2个负载均衡器的场景,一旦某个负载均衡器失效,需要自动切换到另外一个负载均衡器的实例是哪些? 实例组group{}至少包含一个vrrp实例


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_instance,实例名出自实例组group所包含的那些名字。  


vrrp_instance VI_1 {
    state BACKUP #指定那个为master,那个为backup,如果设置了nopreempt这个值不起作用,主备考priority决

定
    interface eth0 #设置实例绑定的网卡
    dont_track_primary #忽略vrrp的interface错误(默认不设置)
    track_interface{ #设置额外的监控,里面那个网卡出现问题都会切换
    eth0
    eth1
    }
    mcast_src_ip #发送多播包的地址,如果不设置默认使用绑定网卡的primary ip
    garp_master_delay #在切换到master状态后,延迟进行gratuitous ARP请求
    virtual_router_id 50 #VPID标记
    priority 99 #优先级,高优先级竞选为master
    advert_int 1 #检查间隔,默认1秒
    nopreempt #设置为不抢占 注:这个配置只能设置在backup主机上,而且这个主机优先级要比另外一台高
    preempt_delay #抢占延时,默认5分钟
    debug #debug级别
    authentication { #设置认证
        auth_type PASS #认证方式
        auth_pass 111111 #认证密码
    }
    virtual_ipaddress { #设置vip
        192.168.202.200
    }
}

1.2 将keepalived日志单独配置

修改/etc/sysconfig/keepalived

把KEEPALIVED_OPTIONS="-D" 修改为:KEEPALIVED_OPTIONS="-D -d -S 0"

[root@knightlai01 log]# vim /etc/sysconfig/keepalived
# Options for keepalived. See `keepalived --help' output and keepalived(8) and
# keepalived.conf(5) man pages for a list of all options. Here are the most
# common ones :
#
# --vrrp               -P    Only run with VRRP subsystem.
# --check              -C    Only run with Health-checker subsystem.
# --dont-release-vrrp  -V    Dont remove VRRP VIPs & VROUTEs on daemon stop.
# --dont-release-ipvs  -I    Dont remove IPVS topology on daemon stop.
# --dump-conf          -d    Dump the configuration data.
# --log-detail         -D    Detailed log messages.
# --log-facility       -S    0-7 Set local syslog facility (default=LOG_DAEMON)
#

KEEPALIVED_OPTIONS="-D -d -S 0"

在/etc/rsyslog.conf 末尾添加 配置日志路径

//在最后增加一行
[root@knightlai01 log]# vim /etc/rsyslog.conf 

local0.*                                                /var/log/keepalived.log

重启日志记录服务

[root@knightlai01 etc]# systemctl restart rsyslog

重启keepalived,并查看日志

[root@knightlai01 log]# systemctl restart keepalived

[root@knightlai01 log]# tail keepalived.log 
Oct 16 22:55:07 knightlai01 Keepalived_healthcheckers[15366]: TCP connection to [192.168.139.125]:80 failed.
Oct 16 22:55:09 knightlai01 Keepalived_vrrp[15367]: Sending gratuitous ARP on ens33 for 192.168.139.200
Oct 16 22:55:09 knightlai01 Keepalived_vrrp[15367]: VRRP_Instance(VI_1) Sending/queueing gratuitous ARPs on ens33 for 192.168.139.200
Oct 16 22:55:09 knightlai01 Keepalived_vrrp[15367]: Sending gratuitous ARP on ens33 for 192.168.139.200
Oct 16 22:55:09 knightlai01 Keepalived_vrrp[15367]: Sending gratuitous ARP on ens33 for 192.168.139.200
Oct 16 22:55:09 knightlai01 Keepalived_vrrp[15367]: Sending gratuitous ARP on ens33 for 192.168.139.200
Oct 16 22:55:09 knightlai01 Keepalived_vrrp[15367]: Sending gratuitous ARP on ens33 for 192.168.139.200
Oct 16 22:55:10 knightlai01 Keepalived_healthcheckers[15366]: TCP connection to [192.168.139.170]:80 failed.
Oct 16 22:55:10 knightlai01 Keepalived_healthcheckers[15366]: Check on service [192.168.139.170]:80 failed after 1 retry.
Oct 16 22:55:10 knightlai01 Keepalived_healthcheckers[15366]: Removing service [192.168.139.170]:80 from VS [192.168.139.200]:80

 

2.配置通知邮件为第三方邮件

安装Postfix :

yum install postfix mail cyrus-sasl-* -y

修改postsfix配置文件 /etc/postfix/main.cf(postfix主要配置文件)

在其末尾添加以下内容

#指定默认的邮件发送服务器
relayhost = [smtp.163.com]:25
#激活sasl认证
smtp_sasl_auth_enable = yes
#指定sasl密码配置文件
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
#非匿名登录smtp_sasl_security_options = noanonymous
#指定认证类型 (提示:需要yum安装cyrus-sasl-*组件,否则发邮件时会报错:no mechanism available)
smtp_sasl_type = cyrus
#linux用户与发件人的对应关系配置文件
sender_canonical_maps = hash:/etc/postfix/sender_canonical

编辑 /etc/postfix/sasl_passwd(邮箱账号和密码文件,每行一个。 创建好后需要使用postmap命令使配置文件生效)

添加以下内容

[smtp.163.com]:25   [email protected]:password

编辑 /etc/postfix/sender_canonical(linux用户和发件人对应关系,每行一个)

root   [email protected]

将文本文件转换为hash格式的查找表文件。

#postmap /etc/postfix/sasl_passwd
#postmap /etc/postfix/sender_canonical

重启postfix:

service postfix restart

至此postfix设置完毕,测试keepalived即可正常发送报警邮件。

3.监控nginx脚本

脚本一:

#!/bin/bash
#description:check nginx service

run=`ps -C nginx --no-header | wc -l`
if [ $run -eq 0 ]
then
        /etc/rc.d/init.d/nginx start
        sleep 3
fi

脚本二:

#!/bin/bash
#description:check nginx service

count=0
for (( k=0; k<2; k++ ))
do
    check_code=$( curl --connect-timeout 3 -sL -w "%{http_code}\\n" http://localhost/index.html -o /dev/null )
    if [ "$check_code" != "200" ]; then
        count=$(expr $count + 1)
        sleep 3
        continue
    else
        count=0
        break
    fi
done
if [ "$count" != "0" ]; then
   /etc/init.d/nginx start
    exit 1
else
    exit 0
fi

4.LVS3种模式

4.1LVS 三种工作模式的优缺点比较

一、Virtual server via NAT(VS-NAT)

优点:集群中的物理服务器可以使用任何支持TCP/IP操作系统,物理服务器可以分配Internet的保留私有地址,只有负载均衡器需要一个合法的IP地址。

缺点:扩展性有限。当服务器节点(普通PC服务器)数据增长到20个或更多时,负载均衡器将成为整个系统的瓶颈,因为所有的请求包和应答包都需要经过负载均衡器再生。假使TCP包的平均长度是536字节的话,平均包再生延迟时间大约为60us(在Pentium处理器上计算的,采用更快的处理器将使得这个延迟时间变短),负载均衡器的最大容许能力为8.93M/s,假定每台物理服务器的平台容许能力为400K/s来计算,负责均衡器能为22台物理服务器计算。

解决办法:即使是是负载均衡器成为整个系统的瓶颈,如果是这样也有两种方法来解决它。一种是混合处理,另一种是采用Virtual Server via IP tunneling或Virtual Server via direct routing。如果采用混合处理的方法,将需要许多同属单一的RR DNS域。你采用Virtual Server via IP tunneling或Virtual Server via direct routing以获得更好的可扩展性。也可以嵌套使用负载均衡器,在最前端的是VS-Tunneling或VS-Drouting的负载均衡器,然后后面采用VS-NAT的负载均衡器。

二、Virtual server via IP tunneling(VS-TUN)

我们发现,许多Internet服务(例如WEB服务器)的请求包很短小,而应答包通常很大。

优点:负载均衡器只负责将请求包分发给物理服务器,而物理服务器将应答包直接发给用户。所以,负载均衡器能处理很巨大的请求量,这种方式,一台负载均衡能为超过100台的物理服务器服务,负载均衡器不再是系统的瓶颈。使用VS-TUN方式,如果你的负载均衡器拥有100M的全双工网卡的话,就能使得整个Virtual Server能达到1G的吞吐量。

不足:但是,这种方式需要所有的服务器支持"IP Tunneling"(IP Encapsulation)协议,我仅在Linux系统上实现了这个,如果你能让其它操作系统支持,还在探索之中。

三、Virtual Server via Direct Routing(VS-DR)

优点:和VS-TUN一样,负载均衡器也只是分发请求,应答包通过单独的路由方法返回给客户端。与VS-TUN相比,VS-DR这种实现方式不需要隧道结构,因此可以使用大多数操作系统做为物理服务器,其中包括:Linux 2.0.36、2.2.9、2.2.10、2.2.12;Solaris 2.5.1、2.6、2.7;FreeBSD 3.1、3.2、3.3;NT4.0无需打补丁;IRIX 6.5;HPUX11等。

不足:要求负载均衡器的网卡必须与物理网卡在一个物理段上

4.2LVS调度算法

在内核中的连接调度算法上,IPVS已实现了以下八种调度算法:

  • 轮叫调度(Round-Robin Scheduling)
  • 加权轮叫调度(Weighted Round-Robin Scheduling)
  • 最小连接调度(Least-Connection Scheduling)
  • 加权最小连接调度(Weighted Least-Connection Scheduling)
  • 基于局部性的最少链接(Locality-Based Least Connections Scheduling)
  • 带复制的基于局部性最少链接(Locality-Based Least Connections with Replication Scheduling)
  • 目标地址散列调度(Destination Hashing Scheduling)
  • 源地址散列调度(Source Hashing Scheduling)

固定调度算法:rr,wrr,dh,sh

动态调度算法:wlc,lc,lblc,lblcr

一般应用场景 常用调度算法
一般的网络服务,如 http,mail,mysql 基本轮训、加权最小连接、加权轮训
防火墙集群 源地址散列调度SH和目标地址散列调度DH
web cache和DB cache 局部最小、带复制的局部最小

5. arp_ignore 与arp_announce

在搭建LVS集群的DR模式时,我们需要修改real server的arp_ignore和arp_announce这两个参数。修改这两个参数的主要目的是,当客户端向VIP发送请求时,确保该请求发送至Director上的VIP,而不是Real Server上的VIP。下面就介绍下这两个参数不同的值代表的含义。

arp_ignore参数

设定请求的目标地址为本地ip时,对其arp的查询作不同的应答模式。默认有8个值,我们只使用2个。

arp_ignore为0时,表示无论哪块网卡收到arp查询请求,只要本机有此mac地址的网卡,就给予回应。

arp_ignore为1时,表示只有请求的mac地址是自己的网卡给予回应。比如一台服务器有两块网卡,其中的一块网卡收arp请求,但是请求的mac是本机的另一块网卡。那么这块网卡就一定不会作出应答。

3:如果ARP请求数据包所请求的IP地址对应的本地地址其作用域(scope)为主机(host),则不回应ARP响应数据包,如果作用域为全局(global)或链路(link),则回应ARP响应数据包。

4~7:预留。

8:不回应所有的arp请求。

arp_announce参数: 

设定了网卡在向外部宣告自己IP-MAC时的级别。有3个值。

arp_announce为0时,表示无论哪块网卡收到了arp的请求,只要发现本机有请求的mac,就会响应。

arp_announce为1时,表示尽量避免响应ARP请求中MAC不是本网卡的。如一个主机有多块网卡,其中一块网卡接收到了ARP请求,发现所请求的MAC是本机另一块网卡的,这个时候接收到ARP请求的这块网卡就尽量避免响应。

arp_announce为2时,表示总是使用最合适的网卡来响应。一个主机有多块网卡,其中一块网卡接收到了ARP请求,发现所请求的MAC是本机另一块网卡的,这个时候接收到ARP请求的这块网卡就一定不响应,只有发现请求的MAC是自己的才给与响应。

猜你喜欢

转载自blog.csdn.net/a1779078902/article/details/83104185
今日推荐