LVS + Keepalived 高可用集群搭建
LVS + Keepalived 高可用负载均衡集群搭建,涵盖 DR/NAT 模式、健康检查和故障转移配置。
环境搭建- -LVS + keepalived
通过 LVS+keepalived 对调度服务器进行双机热备,利用高可用(HA)技术提供持续不间断的服务。
keepalived双机热备
利用高可用(HA)技术提供持续的、不间断的计算机系统或网络服务。
使用keepalived实现双击热备,包括针对IP地址的故障切换,以及在LVS高可用群集中的热备应用。
Keepalived双击热备基础知识
专为LVS和HA设计的一款健康检查工具
- 支持故障自动切换(Failover)
- 支持节点健康状态检查(Health Checking)
Keepalived的热备方式
VRRP:一主+多备 ,公用同一个IP地址,但优先级不同
LVS+Keepalived 高可用群集
Keepalived的实际目标是构建高可用的LVS负载均衡群集,可以调用ipvsadm工具来创建虚拟服务,管理服务器池,而不仅仅用作双机热备。使用keepalived
构建LVS群集更加简便易用。主要优势体现在:对LVS负载调度器实现热备切换,提高可用性;对服务器池中的节点进行健康检查,自动移除失效节点,恢复后在重新加入。
负载均衡 + 高可用群集
- 针对LVS调度器实现双机热备
- 能够管理服务器池,自动隔离失效节点
安装及服务控制
安装支持软件
rpm -q kernel-devel
# kernel-devel-2.6.32-431.el6.x86_64
rpm -q ipvsadm
# ipvsadm-1.26-2.el6.x86_64
yum -y install openssl-devel
yum -y install popt-devel
rpm -q openssl-devel popt-devel
# openssl-devel-1.0.1e-15.el6.x86_64
# popt-devel-1.13-7.el6.x86_64
# 安装keepalived
tar zxf keepalived-1.2.13.tar.gz
cd keepalived-1.2.13
./configure --prefix=/ --with-kernel-dir=/usr/src/kernels/2.6.32-431.el6.x86_64/
make
make install
ll /etc/init.d/keepalived
chkconfig --add keepalived
chkconfig keepalived on
# 从服务器与上安装一样
# 修改配置文件
# 备份
cd /etc/keepalived/
cp keepalived.conf keepalived.conf.bak
配置主服务器
- 主从调度器配置要点
- DR模式必须调整/proc参数
- 清除VIP地址、清除ipvsadm策略
- 配置keepalived双击热备,并添加服务器池设置
- Web节点注意事项
- DR模式必须调整/proc参数、清除VIP地址及路由
# 全局配置、热备配置同上
cat > keepalived.conf <<EOF
! Configuration File for keepalived
global_defs {
router_id TEST
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
192.168.104.210
}
}
EOF
配置从服务器
cat > keepalived.conf <<EOF
! Configuration File for keepalived
global_defs {
router_id TEST
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
192.168.104.210
}
}
EOF
# 查看日志文件(当主服务器未启动时,从服务器为主服务器,当主服务器启动时,从服务器交出虚拟IP,从新变为BACKUP)
tail -f /var/log/messages
# 主服务器
Apr 17 16:51:48 wcq10 Keepalived_vrrp[32233]: VRRP_Instance(VI_1) Entering MASTER STATE
Apr 17 16:51:48 wcq10 Keepalived_vrrp[32233]: VRRP_Instance(VI_1) setting protocol VIPs.
Apr 17 16:51:48 wcq10 Keepalived_vrrp[32233]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.104.210
Apr 17 16:51:48 wcq10 Keepalived_healthcheckers[32232]: Netlink reflector reports IP 192.168.104.210 added
Apr 17 16:51:53 wcq10 Keepalived_vrrp[32233]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.104.210
# 从服务器
Apr 17 16:51:47 wcq03 Keepalived_vrrp[4646]: VRRP_Instance(VI_1) Received higher prio advert
Apr 17 16:51:47 wcq03 Keepalived_vrrp[4646]: VRRP_Instance(VI_1) Entering BACKUP STATE
Apr 17 16:51:47 wcq03 Keepalived_vrrp[4646]: VRRP_Instance(VI_1) removing protocol VIPs.
Apr 17 16:51:47 wcq03 Keepalived_healthcheckers[4645]: Netlink reflector reports IP 192.168.104.210 removed
lvs+Keppalived高可用群集
配置双机热备,并添加服务器池设置,主从服务器服务器池设置一样
virtual_server 192.168.104.210 80 {
delay_loop 6
lb_algo rr
lb_kind DR
nat_mask 255.255.255.0
persistence_timeout 50
protocol TCP
real_server 192.168.104.20 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.104.30 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
主从服务器的优化设置
# 主服务器新增配置
cat >> /etc/sysctl.conf <<EOF
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.eth0.send_redirects = 0
net.ipv4.conf.eth1.send_redirects = 0
EOF
# 从服务器新增配置
ifconfig lo:0 192.168.104.210/32
cat >> /etc/sysctl.con <<EOF
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
EOF
# 重启 keepalived
service keepalived restart
Haproxy搭建web集群
Haproxy是目前比较流行的一种集群调度工具,同类的集群调度工具很多,如 LVS 和 Nginx。相比较而言,LVS 性能最好,但是搭建相对复杂,Nginx 的
upstream 模块支持集群功能,但是对集群节点健康检查功能不强,性能没有 Haproxy 好。
Http请求
- 请求方式:
- GET方式:GET方法是默认的HTTP请求方法,我们日常用 GET 方法来提交表单数据,然而用 GET 方法提交的表单数据只经过了简单的编码,同时它将
作为 URL 的一部分向 Web 服务器发送,因此,如果使用 GET 方法来提交表单数据就存在安全隐患。 - POST方式:POST 方法是 GET 方法的一个替代方法,它主要是向 web 服务器提交表单数据,尤其是大批量的数据。POST 方法克服了 GET 方法的缺点。
通过 POST 方法提交表单数据时,数据不是作为 URL 请求的一部分而是作为标准数据传送给 web 服务器,这也克服了 GET 方法中的信息无法保密和数据量
太小的缺点。因此,出于安全考虑以及对用户信息的考虑,通常表单提交时采用 POST 方法。
- GET方式:GET方法是默认的HTTP请求方法,我们日常用 GET 方法来提交表单数据,然而用 GET 方法提交的表单数据只经过了简单的编码,同时它将
- 返回状态码
- 正常的状态吗为2xx、3xx
- 异常的状态码为4xx、5xx
负载均衡常用的调度算法:
- RR:轮询查询(加权轮询)
- LC:最小连接数(加权最小链接)
- SH:基于来源访问调度
搭建负载均衡高可用环境相对简单,主要是要理解其中原理。 三种负载均衡器的优缺点说明如下:
-
LVS的优点:
- 抗负载能力强、工作在第4层仅作分发作用,没有流量的产生,这个特点决定了它在负载均衡软件里的性能最强;无流量,同时保证了均衡器IO的性能不会受到
大流量的影响; - 工作稳定,自身有完整的双击热备方案,如 LVS+Keepalived 和 LVS+hertbeat
- 应用范围比较广,可以对所有应用作负载均衡;
- 配置型比较低,这是一个缺点,也是一个优点,因为没有太多可配置的东西,所以并不需要太多更改,大大减少了人为出错的几率
- 抗负载能力强、工作在第4层仅作分发作用,没有流量的产生,这个特点决定了它在负载均衡软件里的性能最强;无流量,同时保证了均衡器IO的性能不会受到
-
LVS的缺点:
- 软件本身不支持正则处理,不能做动静分离,这就凸显了 Nginx/HAProxy+keepalived 的优势
- 如果网站应用比较大,LVS/DR + Keepalived 就比较复杂,特别是后面有 Windows Server 应用的机器,实施及配置还有维护过程比较麻烦,相对而言,
Nginx/HAProxy+keepalived 就简单多了。
-
Nginx的优点:
- 工作在 OSI 第七层,可以针对 HTTP 应用做一些分流的策略,比如针对域名、目录结构。它的正则比 HAProxy 更为强大和灵活;
- Nginx 对网络的依赖非常小,理论上能 ping 通就能就行负载功能,这个也是它的优势所在;
- Nginx 安装和配置比较简单,测试起来比较方便;
- 可以承担高的负载压力且稳定,一般能支撑超过几万次的并发量;
- Nginx 可以通过端口检测到服务器内部的故障,比如根据服务器处理网页返回的状态码、超时等等,并且会把返回错误的请求重新提交到另一个节点;
- Nginx 不仅仅是一款优秀的负载均衡器/反向代理软件,它同时也是强大的 Web 应用服务器。LNMP 现在也是非常流行的 web 环境,大有和 LAMP 环境
分庭抗礼之势。Nginx 在处理静态页面、特别是提高并发方面相对 Apache 有优势; - Nginx 现在作为 web 反向加速缓存越来越成熟了。速度比传统的 squid 服务器更快,有需求的朋友可以考虑用其作为反向代理极速器;
-
Nginx的缺点:
- Nginx 不支持 url 检测;
- Nginx 仅能支持 http 和 email,这是它的弱势;
- Nginx 的 session 的保持,cookie 的引导能力相对欠缺。
-
HAProxy的优点:
- HAProxy 是支持虚拟主机的,可以在4/7层上工作(支持多网段);
- 能够补充 nginx 的一些缺点比如 session 的保持,cookie 的引导等工作;
- 支持 url 检测后端的服务器;
- 它跟 LVS 一样,本身仅仅就只是一款负载均衡软件;单纯从效率上来讲 HAProxy 比 nginx 有更出色的负载均衡速度,在并发处理上也是优于 nginx 的;
- HAProxy 可以对 mysql 读进行负载均衡,对后端的 mysql 节点进行检测和负载均衡,不过在后端的 mysql slaves 数量超过 10 台时性能不如 LVS;
- HAProxy 的算法较多,达到8种。
案例
安装haproxy
- 软件支持包
# 查看是否安装如下依赖
rpm -qa pcre-devel bzip2-devel
# 安装
yum -y install pcre-devel bzip2-devel
# 上传 haproxy安装包,并解压源码编译安装
tar zxf haproxy-1.4.24.tar.gz
cd haproxy-1.4.24
make TARGET=Linux26
make install
- 修改配置文件
mkdir /etc/haproxy
cp examples/haproxy.cfg /etc/haproxy/
vim /etc/haproxy/haproxy.cfg
# this config needs haproxy-1.1.28 or haproxy-1.2.1
global
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
#log loghost local0 info
maxconn 4096
#chroot /usr/share/haproxy
uid 99
gid 99
daemon
#debug
#quiet
defaults
log global
mode http
option httplog
option dontlognull
retries 3
#redispatch
maxconn 2000
contimeout 5000
clitimeout 50000
srvtimeout 50000
listen web-insert 0.0.0.0:80
option httpchk GET /index.html
balance roundrobin
server inst1 192.168.104.20:80 check inter 2000 fall 3
server inst2 192.168.104.30:80 check inter 2000 fall 3
- 启动服务
cp examples/haproxy.init /etc/init.d/haproxy
ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy
# 添加执行权限
chmod +x /etc/init.d/haproxy
# 启动服务
service haproxy start
# Starting haproxy: [确定]
# 添加开机启动
chkconfig haproxy on
chkconfig --list haproxy
# haproxy 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭
- Haproxy日志设置
vim /etc/haproxy/haproxy.cfg
global
log /dev/log local1 notice
log /dev/log local0 info
maxconn 4096
#chroot /usr/share/haproxy
uid 99
gid 99
daemon
#debug
#quiet
# 重启服务
service haproxy restart