0%

环境搭建- -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调度器实现双机热备
  • 能够管理服务器池,自动隔离失效节点

安装及服务控制

安装支持软件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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地址及路由
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 全局配置、热备配置同上
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

配置从服务器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
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高可用群集

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
配置双机热备,并添加服务器池设置,主从服务器服务器池设置一样
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
}
}
}

主从服务器的优化设置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 主服务器新增配置
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 方法。
  • 返回状态码
    • 正常的状态吗为2xx、3xx
    • 异常的状态码为4xx、5xx

负载均衡常用的调度算法:

  • RR:轮询查询(加权轮询)
  • LC:最小连接数(加权最小链接)
  • SH:基于来源访问调度

搭建负载均衡高可用环境相对简单,主要是要理解其中原理。 三种负载均衡器的优缺点说明如下:

  • LVS的优点:

    • 抗负载能力强、工作在第4层仅作分发作用,没有流量的产生,这个特点决定了它在负载均衡软件里的性能最强;无流量,同时保证了均衡器IO的性能不会受到
      大流量的影响;
    • 工作稳定,自身有完整的双击热备方案,如 LVS+Keepalived 和 LVS+hertbeat
    • 应用范围比较广,可以对所有应用作负载均衡;
    • 配置型比较低,这是一个缺点,也是一个优点,因为没有太多可配置的东西,所以并不需要太多更改,大大减少了人为出错的几率
  • 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

  • 软件支持包
1
2
3
4
5
6
7
8
9
10
# 查看是否安装如下依赖
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
  • 修改配置文件
1
2
3
mkdir /etc/haproxy
cp examples/haproxy.cfg /etc/haproxy/
vim /etc/haproxy/haproxy.cfg
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# 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
  • 启动服务
1
2
3
4
5
6
7
8
9
10
11
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日志设置
1
vim /etc/haproxy/haproxy.cfg
1
2
3
4
5
6
7
8
9
10
global
log /dev/log local1 notice
log /dev/log local0 info
maxconn 4096
#chroot /usr/share/haproxy
uid 99
gid 99
daemon
#debug
#quiet
1
2
# 重启服务
service haproxy restart