软件包:ipvsadm-1.24.tar.gz keepalived-1.2.24.tar.gz
Lb1: 172.25.77.7 base_07
Lb2: 172.25.77.8 base_08
Rs1: 172.25.77.9 base_09
Rs2: 172.25.77.10 base_10
分别在 backup lvs 和 master lvs 上安装
tar zxvf ipvsadm-1.24.tar.gz
yum install kernel-devel
ln -s /usr/src/kernels/2.6.32-431.el6.x86_64/ /usr/src/linux
cd ipvsadm-1.24
yum install -y gcc openssl openssl-devel
./configure --prefix=/usr/local/keepalived
make & make install
mkdir /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf
/etc/keepalived/keepalived.conf
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
[root@base_07 keepalived]# lsmod | grep ip_vs
ip_vs_rr 1420 1
ip_vs 125220 3 ip_vs_rr
libcrc32c 1246 1 ip_vs
ipv6 317340 16
ip_vs,ip6t_REJECT,nf_conntrack_ipv6,nf_defrag_ipv6
修改 MASTER 配置文件:
Vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS1
}
vrrp_instance VI_1 {
state MASTER
interface eth0
lvs_sync_daemon_inteface eth0 #设置 lvs 监听的接口
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
}
virtual_ipaddress {
172.25.77.100
}
virtual_server 172.25.77.100 80 {
delay_loop 6
lb_algo rr
lb_kind DR
persistence_timeout 50
protocol TCP
real_server 172.25.77.9 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 172.25.77.10 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
修改 BACKUP 配置文件:
需要修改的:
router_id LVS2
state BACKUP
priority 80
分别启动 MASTER,BACKUP;
Rs1,rs2:分别安装 apache/nginx
[root@base_10 ~]# ip addr add 172.25.77.100 dev lo label lo:1
[root@base_10 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@base_10 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@base_10 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@base_10 ~]# echo 1 >/proc/sys/net/ipv4/conf/lo/arp_ignore
进行 arp 抑制
测试:
[root@base_07 ~]# ipvsadmIP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port
Forward Weight ActiveConn InActConn
TCP 172.25.77.100:http rr persistent 50
-> base_10:http
Route
1 0 0
-> base_09:http
Route
1 0 0
[root@foundation77 ~]# curl 172.25.77.100
<h1>base_09</h1>
[root@foundation77 ~]# curl 172.25.77.100
<h1>base_10</h1>
vrrp_sync_group:同步 vrrp 级,用于确定失败切换(FailOver)包含的路由实例个数。
即在有 2 个负载均衡器的场景,一旦某个负载均衡器失效,需要自动切换到另外一个负载均衡
器的实例是哪
group:至少要包含一个 vrrp 实例,vrrp 实例名称必须和 vrrp_instance 定义的一致
vrrp_instance:vrrp 实例名
1> state:实例状态,只有 MASTER 和 BACKUP 两种状态,并且需要全部大写。抢占
模式下,其中 MASTER 为工作状态, BACKUP 为备用状态。当 MASTER 所在的服务器失效时,
BACKUP 所在的服务会自动把它的状态由 BACKUP 切换到 MASTER 状态。
当失效的 MASTER
所在的服务恢复时,BACKUP 从 MASTER 恢复到 BACKUP 状态。
2> interface:对外提供服务的网卡接口,即 VIP 绑定的网卡接口。如:eth0,eth1。
当前主流的服务器都有 2 个或 2 个以上的接口(分别对应外网和内网),在选择网卡接口时,
一定要核实清楚。
3> mcast_src_ip:本机 IP 地址
4> virtual_router_id:虚拟路由的 ID 号,每个节点设置必须一样,可选择 IP 最后一段
使用,相同的 VRID 为一个组,他将决定多播的 MAC 地址。
5> priority:节点优先级,取值范围 0~254,MASTER 要比 BACKUP 高
6> advert_int:MASTER 与 BACKUP 节点间同步检查的时间间隔,单位为秒
7> lvs_sync_daemon_inteface:负载均衡器之间的监控接口,类似于 HA HeartBeat
的心跳线。但它的机制优于 Heartbeat,因为它没有“裂脑”这个问题,它是以优先级这个机制
来规避这个麻烦的。在 DR 模式中,lvs_sync_daemon_inteface 与服务接口 interface 使
用同一个网络接口
8> authentication:验证类型和验证密码。类型主要有 PASS、 AH 两种,通常使用 PASS
类型,据说 AH 使用时有问题。验证密码为明文,同一 vrrp 实例 MASTER 与 BACKUP 使用
相同的密码才能正常通信。
9> smtp_alert:有故障时是否激活邮件通知
10> nopreempt:禁止抢占服务。默认情况,当 MASTER 服务挂掉之后,BACKUP 自
动升级为 MASTER 并接替它的任务,当 MASTER 服务恢复后,升级为 MASTER 的 BACKUP
服务又自动降为 BACKUP,把工作权交给原 MASTER。当配置了 nopreempt,MASTER 从
挂掉到恢复,不再将服务抢占过来。
11> virtual_ipaddress:虚拟 IP 地址池,可以有多个 IP,每个 IP 占一行,不需要指定
子网掩码。注意:这个 IP 必须与我们的设定的 vip 保持一致。
virtual_server:定义一个虚拟服务器,这个 ip 是 virtual_ipaddress 中定义的其中一个,后面一个空格,然后加上虚拟服务的端口号。
1> delay_loop:健康检查时间间隔,单位:秒
2> lb_algo:负载均衡调度算法,互联网应用常用方式为 wlc 或 rr
3> lb_kind:负载均衡转发规则。包括 DR、NAT、TUN 3 种,一般使用路由(DR)转发规
则。
4> persistence_timeout:http 服务会话保持时间,单位:秒
5> protocol:转发协议,分为 TCP 和 UDP 两种
real_server:真实服务器 IP 和端口,可以定义多个
1> weight:负载权重,值越大,转发的优先级越高
2> notify_down:服务停止后执行的脚本
3> TCP_CHECK:服务有效性检测
* connect_port:服务连接端口
* connect_timeout:服务连接超时时长,单位:秒
* nb_get_retry:服务连接失败重试次数
* delay_before_retry:重试连接间隔,单位:秒
负载均衡调度算法:
1)轮叫调度(Round Robin)(简称 rr)
调度器通过"轮叫"调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对
待每一台服务器,而不管服务器上实际的连接数和系统负载.
2)加权轮叫(Weighted Round Robin)(简称 wrr)
调度器通过"加权轮叫"调度算法根据 real server 的加权值(weight)来计算权值比例,最终将请
求更多的发向哪台 real server.
如果没有定义加权值,也就是加权值默认为 1,这时的 wrr 同 rr 调度算法一样.
3)最小连接调度(lc)
该算法是把新的连接请求分配到当前连接数最小的服务器.最小连接调度是一种动态调度算法,
它通过服务器当前所活跃的连接数来估计服务器的负载情况.
4)加权最小连接调度(wlc)
该算法是最小连接调度的超集,各个服务器用相应的权值表示其处理性能.所以这里可以更好的
处理 real server 处理能力不一致的情况.
5)基于局部性的最少链接调度算法(lblc)
该算法的前提假设是:任意一台服务器都可以处理任一请求.算法的设计目标是在服务器的负载
基本平衡情况下,
将相同目标 IP 地址的请求调度到同一台服务器,来提高各台服务器的访问局部性和主存 Cache
命中率,从而整个集群系统的处理能力.
若被选择服务器超载则用”最少链接”的原则选出一个可用的服务器,将请求发送到该服务器.
6)带复制的基于局部性最少链接(lblcr)
7)目标地址散列调度(dh)
该算法也是针对目标 IP 地址的负载均衡,但它是一种静态映射算法,通过一个散列(Hash)函数将
一个目标 IP 地址映射到一台服务器.
目标地址散列调度算法先根据请求的目标 IP 地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空.
8)源地址散列调度(sh)
该算法正好与目标地址散列调度算法相反,它根据请求的源 IP 地址,作为散列键(Hash Key)从静
态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空
Lvs+keepalived 实现服务的负载均衡与高可用
最新推荐文章于 2022-10-18 19:55:43 发布