HAProxy双机高可用方案之HAProxy+Keepalived

创新互联公司坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都网站建设、成都做网站、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的惠城网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!HAProxy双机高可用方案之HAProxy+Keepalived

一、keepalived高可用

Keepalived 的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除, 当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的 web服务器。

系统环境: RHEL6.5x86_64small install selinux and iptables disabled

Virtual IP 192.168.2.254

192.168.2.162server62.exampl.com (master)

192.168.2.163server63.example.com(backup)

192.168.2.52 desktop52.example.com(real server)

192.168.2.53 desktop53.example.com(real server)

编辑/etc/hoststs做以上解析

1.keepalived的安装配置

主备机上的软件包安装与配置

#yum install ipvsadm kernel-devel openssl-devel popt-devel libnl-devel gcc make -y

源码编译安装keepalived:

#wget http://www.keepalived.org/software/keepalived-1.2.12.tar.gz

#tar zxf keepalived-1.2.12.tar.gz

#cd keepalived-1.2.12

#./configure --prefix=/usr/local/keepalived (安装目录)

... Keepalived configuration

------------------------

Keepalived version : 1.2.5

Compiler : gcc

Compiler flags : -g -O2

Extra Lib : -lpopt -lssl -lcrypto -lnl

Use IPVS Framework : Yes

IPVS sync daemon support : Yes

IPVS use libnl : Yes

Use VRRP Framework : Yes

Use VRRP VMAC : Yes

SNMP support : No

Use Debug flags : No

#make && make install

创建链接:

#ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/

#ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/

#ln -s /usr/local/keepalived/etc/keepalived /etc/

#ln -s /usr/local/keepalived/sbin/keepalived /sbin

keepalived主配置文件的修改:

#vi /etc/keepalived/keepalived.conf

! Configuration File for keepalived
global_defs {

notification_email {
root@localhost #接收警报的 email 地址,可以添加多个

}
notification_email_from keepalived@server62.example.com #设置邮件的发送地址

smtp_server 127.0.0.1 #设置邮件的发送地址

smtp_connect_timeout 30 #设置连接 smtp 服务器超时时间

router_id LVS_DEVEL #load balancer 的标识 ID,用于 email 警报

}
vrrp_instance VI_1 {
stateMASTER #备机改为 BACKUP,此状态是由 priority 的值来决定的,当前priority 的值小于备机的值,那么将会失去 MASTER 状态

interface eth0 #HA 监测网络接口

virtual_router_id 200 #主、备机的 virtual_router_id 必须相同,取值 0-255

priority78#主机的优先级,主机优先级一定要大于备机

advert_int 1 #主备之间的通告间隔秒数

authentication {#主备切换时的验证

auth_type PASS #设置验证类型,主要有 PASS 和 AH 两种

auth_pass 1111 #设置验证密码,在一个 vrrp_instance 下,MASTER 与 BACKUP 必须使用相同的密码才能正常通信
}
virtual_ipaddress {
192.168.2.254#设置虚拟 IP 地址,可以设置多个虚拟 IP 地址,每行一个

}
virtual_server 192.168.2.254 80 {#定义虚拟服务器

delay_loop 6 #每隔 6 秒查询 realserver 状态

lb_algo rr #lvs 调度算法,这里使用轮叫

lb_kind DR #LVS 是用 DR 模式

#persistence_timeout 50 #会话保持时间,单位是秒,这个选项对于动态网页是非常有用的,为集群系统中 session 共享提供了一个很好的解决方案。有了这个会话保持功能,用户的请求会被一直分发到某个服务节点,直到超过这个会话保持时间。需要注意的是,这个会话保持时间,是无响应超时时间,也就是说用户在操作动态页面时,如果在 50 秒内没有执行任何操作,那么接下来的操作会被分发到另外节点,但是如果一直在操作动态页面,则不受 50 秒的时间限制。(默认是打开的,要禁掉哦)

protocol TCP #指定转发协议类型,有 tcp 和 udp 两种

real_server 192.168.2.52 80 { #配置服务节点

weight 1 #配置服务节点的权值,权值大小用数字表示,数字越大,权值越高,设置权值的大小可以为不同性能的服务器分配不同的负载,可以对性能高的服务器设置较高的权值,而对性能较低的服务器设置相对较低的权值,这样就合理的利用和分配了系统资源

TCP_CHECK { #realserve 的状态检测设置部分,单位是秒

connect_timeout 3 #10 秒无响应超时

nb_get_retry 3 #重试次数

delay_before_retry 3 #重试间隔

}

}
real_server 192.168.2.53 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}

#/etc/init.d/keepalived restart 启动keepalived

2.realserver的配置

#分别在 realserver 上执行以下命令添加策略

192.168.2.53

#ifconfig eth0:0 192.168.2.254 netmask 255.255.255.255 up 添加虚拟ip

#arptables -A IN -d 192.168.2.254 -j DROP

#arptables -A OUT -s 192.168.2.254 -j mangle --mangle-ip-s 192.168.2.53

这些配置会写入文件/etc/sysconfig/arptables

#/etc/init.d/arptables_jf save

#/etc/init.d/arptables_jf start

#echo `hostname` > /var/www/html/index.html

#service httpd start

192.168.2.52

#ifconfig eth0:0 192.168.2.254 netmask 255.255.255.255 up

#arptables -A IN -d 192.168.2.254 -jDROP

#arptables -A OUT -s 192.168.2.254 -j mangle --mangle-ip-s 192.168.2.52

这些配置会写入文件/etc/sysconfig/arptables

#/etc/init.d/arptables_jf save

#/etc/init.d/arptables_jf start

#echo `hostname` > /var/www/html/index.html

#service httpd start

最后在master主机查看是否添加成功

# ipvsadm -l
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.2.254:http rr
-> server52.example.com:http Route 1 0 7
-> server53.example.com:http Route 1 0 8

4.测试:
1.高可用测试:停止 master 上的 keepalived 服务,看 backup 是否接管。
2. 负载均衡测试:访问 http://192.168.2.254,看到页面在两个 realserver 上切换表示成功你也可以通过 ipvsadm -Lnc 查看详细连接情况!
3. 故障切换测试:任意关闭 realserver 上的 httpd 服务,Keepalived 监控模块是否能及时发现,然后屏蔽故障节点,同时将服务转移到正常节点来执行。

5.添加ftp服务:(理论需要再加一个需拟IP,可是一个IP也可以)

在两个服务节点安装vsftpd服务

[root@server52 ~]# yum install -y vsftpd

[root@server52 ftp]# ls在ftp的发布目录里写东西测试;

pub server52(server53)

[root@server52 ftp]#service vsftpd restart 开启服务

修改两台调度器的配置文件:

master和backup主机修改住配置文件

# vim /etc/keepalived/keepalived.conf 在其后添加

virtual_server 192.168.2.254 21 (ftp端口号是21){
delay_loop 3
lb_algo rr
lb_kind DR
persistence_timeout 50 -----》持续链接(!很重要哦)
protocol TCP

real_server 192.168.2.52 21 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}

real_server 192.168.2.53 21 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}

reload两台调度器

# /etc/init.d/keepalived reload

!注意:如果使用的是另一个虚拟ip,要在real server主机上用arptables分别添加进去(本实验为了方便不做演示,具体过程如上)。

测试:先用浏览器测试httpd服务是否能正常启动,再用真机终端测ftp服务
# lftp 192.168.2.254
lftp 192.168.2.254:~> ls
drwxr-xr-x 2 0 0 4096 Feb 12 2013 pub
-rw-r--r-- 1 0 0 0 May 31 08:02 server52
lftp 192.168.2.254:/> quit

查看是否添加成功

# ipvsadm -L
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.2.254:ftp rr persistent 50
-> server52.example.com:ftp Route 1 0 0
-> server53.example.com:ftp Route 1 0 0
TCP 192.168.2.254:http rr
-> server52.example.com:http Route 1 0 0
-> server53.example.com:http Route 1 0 0

二、haproxy负载均衡

HAProxy 提供高可用性、负载均衡以及基于 TCP 和 HTTP 应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy 特别适用于那些负载特大的 web 站点, 这些站点通常又需要会话保持或七层处理。HAProxy 运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整 合进您当前的架构中, 同时可以保护你的 web 服务器不被暴露到网络上。

节点主机:192.168.2.162 haproxy 、keepalived

192.168.2.163 haproxy、keepalived

realserver:192.168.2.52 web1

192.168.2.53 web2

vip : 192.168.2.254

1.haproxy的安装配置

1.1、rpm 包方式:rpmbuild -tb haproxy-1.4.23.tar.gz

rpm -ivh /root/rpmbuild/RPMS/x86_64/haproxy-1.4.23-1.x86_64.rpm

1.2、源码方式:

tar zxf haproxy-1.4.23.tar.gz

cd haproxy-1.4.23

make TARGET=linux26 ARCH=x86_64 USE_PCRE=1 PREFIX=/usr/local/haproxy install

2、修改配置文件:

#vi /etc/haproxy/haproxy.cfg

global

log 127.0.0.1 local0#指定日志设备

#log 127.0.0.1 local1 notice

log loghost local0 info #指定日志类型,还有 err warning debug

maxconn 65535 #并发连接数量

chroot /usr/share/haproxy #jail 目录

uid 99 #用户

gid 99 #组

daemon #后台运行

#debug

#quiet

defaults

logglobal

mode http #默认使用 http 的 7 层模式 tcp: 4 层

option httplog #http 日志格式

option dontlognull #禁用空链接日志

retries 3 #重试 3 次失败认为服务器不可用

option redispatch #当 client 连接到挂掉的机器时,重新分配到健康的主机

maxconn 65535

contimeout 5000 #连接超时

clitimeout 50000 #客户端超时

srvtimeout 50000 #服务器端超时

stats uri/status#haproxy 监控页面

listen www.example.com *:80#监听的实例名称,地址和端口

balance roundrobin#负载均衡算法

server web1 192.168.2.52:80 cookie app1inst1 check inter 2000 rise 2 fall 5

server web2 192.168.2.53:80 cookie app1inst2 check inter 2000 rise 2 fall 5

#cookie app1inst1:表示 serverid 为 app1inst1#check inter 2000:检测心跳频率

#rise 2:表示 2 次正确认为服务器可用#fall 5:表示 5 次失败认为服务器不可用

# mkdir /usr/share/haproxy

# /etc/init.d/haproxy start

当 haproxy启动报错——Starting proxy www.example.com: cannot bind socket这个问题,其实就是因为你的haproxy没有得到VIP的原因,而你的配置文件又绑定了VIP地址,所以会提示以上错误当然,你也要确保你 的haproxy服务器做了hearbeat或keepalived,绑定VIP,要不就无法高可用了。
解决方法:

修改内核参数: /etc/sysctl.conf

net.ipv4.ip_nonlocal_bind=1

保存结果,使结果生效

sysctl –p

或者使用echo进去,前提是sysctl.conf文件中没有本条参数:

echo \'net.ipv4.ip_nonlocal_bind = 1\'>>/etc/sysctl.conf##net.ipv4.ip_nonlocal_bind=1 意思是启动haproxy的时候,允许忽视VIP的存在

除上面的原因之外,还有可能造成Starting proxy www.example.com: cannot bind socket确定你的haproxy服务器中是否开启有apache或nginx等WEB服务,如果有,请先停掉这些服务否则就出现以上故障。

顺便提醒下,haproxy代理服务器同时也要打开内核的转发功能,如下参数:

net.ipv4.ip_forward = 1

2.测试:

访问 http://www.example.com 测试负载,访问 haproxy 监控页面:http://192.168.2.162/status

监控页面添加认证:

listen stats_auth *:80

stats enable

stats uri /status #监控页面地址

stats auth admin:westos #管理帐号和密码

stats refresh 5s #刷新频率

haproxy 日志:

# vi /etc/rsyslog.conf #接受 haproxy 日志

$ModLoad imudp

$UDPServerRun 514

local0.* /var/log/haproxy.log#日志文件位置

# /etc/init.d/rsyslog restart

三、haproxy+keepalived的整合

MASTER:

#vim /etc/keepalived/ keepalived.conf

# cat keepalived.conf

! Configuration File for keepalived

vrrp_script check_haproxy {

script "/etc/keepalived/check_haproxy.sh"

interval 2

weight 2

}

global_defs {

notification_email {

root@localhost

}

notification_email_from keepalived@server62.example.com

smtp_server 127.0.0.1

smtp_connect_timeout 30

router_id LVS_DEVEL

}

vrrp_instance VI_1 {

state MASTER

interface eth0

virtual_router_id 151

priority 100

advert_int 1

authentication {

auth_type PASS

auth_pass 1111

}

virtual_ipaddress {

192.168.2.254

}

track_script {

check_haproxy

}

}

BACKUP:

# cat keepalived.conf

! Configuration File for keepalived

vrrp_script check_haproxy {

script "/etc/keepalived/check_haproxy.sh"

interval 2

weight 2

}

global_defs {

notification_email {

root@localhost

}

notification_email_from keepalived@server63.example.com

smtp_server 127.0.0.1

smtp_connect_timeout 30

router_id LVS_DEVEL

}

vrrp_instance VI_1 {

state BACKUP

interface eth0

virtual_router_id 151

priority 50

advert_int 1

authentication {

auth_type PASS

auth_pass 1111

}

virtual_ipaddress {

192.168.2.254

}

track_script {

check_haproxy

}

}

检测脚本:

# cat /etc/keepalived/check_haproxy.sh(记得加可执行权限哦)

#!/bin/bash

/etc/init.d/haproxy status &> /dev/null || /etc/init.d/haproxy restart &> /dev/null

if [ $? -ne 0 ];then

/etc/init.d/keepalived stop &> /dev/null

fi

到此整个架构搭建完成,这时可以通过haproxy的监控页面来监控负载均衡

四、验证此架构及注意事项

我们可以关闭主HAProxy机器或重新启动,看在此过程中,VIP地址有没有正确的转移到从HAProxy机器上,影响我们访问网站没,以上步骤我自己测试过多次,而且线上环境的稳定行,证明HAProxy+Keeaplived双机方案确实是有效的。

关于HAProxy+Heartbeat这种负载均衡高可用架构,有些情况我也跟大家说明一下:

◆在此HAProxy+Keepalivp负载均衡高可用架构中,我们是如何解决session的问题呢?我们这里采用的是它自身的balance source(负载均衡)机制,它跟Nginx的ip_hash机制原理类似,是让客户机访问时始终访问后端的某一台真实的web服务器,这样让session就固定 下来了;

◆有网友配置HAProxy时喜欢用listen xxx.xxx.xxx.xxx:80这样的格式,这样其实不好,做负载均衡高可用时由于从机分配不到VIP地址,会导致从机启动不了,我建议用bind *:80的方式来代替。

网站栏目:HAProxy双机高可用方案之HAProxy+Keepalived
网页地址:https://www.cdcxhl.com/article18/cggcdp.html

成都网站建设公司_创新互联,为您提供网站收录营销型网站建设软件开发微信公众号网站设计公司自适应网站

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

成都网站建设