Keepalived+HAproxy实现高可用负载均衡
总概:
Keepalived是一个类似于layer3, 4 & 5交换机制的软件,也就是我们平时说的第3层、第4层和第5层交换。Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器
HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。
这里我利用HAproxy对多台redis服务器进行负载,然后用Keepalived对HAproxy进行监控:
(主)服务器A:10.10.51.231
(从)服务器B:10.10.51.232
VIP:10.10.51.230
Keepalived监控A、B上的HAproxy,利用Keepalived的VIP漂移技术,若A、B上的HAprox都工作正常,则VIP与优先级别高的服务器(主服务器)绑定,当主服务器当掉时,则与从服务器绑定,而VIP则是暴露给外部访问的ip;HAproxy利用Keepalived生产的VIP对多台redis(从)进行读负载,当某台redis当掉,则将其移除,回复后加入集群。
一、安装keepalived
1、下载后解压 tar zxvf keepalived-1.2.7.tar.gz 到任意目录
[root@Centos-Server ~]# tar zxvf keepalived-1.2.7.tar.gz -C /usr/local/keepalived
解压后,进入keepalived目录
[root@Centos-Server ~]# cd /usr/local/keepalived
[root@Centos-Server ~]# ./configure
[root@Centos-Server ~]# make && make install
注:若这里报错提示没有装openssl,则执行[root@Centos-Server ~]# yum –y install openssl-devel安装,若还有其他的包没装,则执行yum命令进行安装。
2、配置keepalived
[root@Centos-Server ~]# cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/
[root@Centos-Server ~]# cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
[root@Centos-Server ~]# mkdir /etc/keepalived
[root@Centos-Server ~]# cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/
[root@Centos-Server ~]# ln -s /usr/local/sbin/keepalived /usr/sbin/
[root@Centos-Server ~]# vi /etc/keepalived/keepalived.conf ! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL
} vrrp_script chk_haproxy { #Haproxy服务启动
script "/etc/keepalived/check_haproxy.sh" #监控haproxy进程的脚本, 根据自己的实际路径放置
interval 2
weight -4
}
vrrp_instance VI_1 {
state MASTER #主机为MASTER,备机为BACKUP
interface eth0 #监测网络端口,用ipconfig查看
virtual_router_id 51 #主备机必须相同
priority 150 #主备机取不同的优先级,主机要大。从服务器上改为120
advert_int 1 #VRRP Multicast广播周期秒数 authentication {
auth_type PASS #VRRP认证方式
auth_pass 1111 #VRRP口令 主备机密码必须相同
}
track_script { #调用haproxy进程检测脚本
chk_haproxy
} virtual_ipaddress {
10.10.51.230 #VIP 漂移地址 即集群IP地址
}
}
[root@Centos-Server ~]# vim /etc/keepalived/check_haproxy.sh #!/bin/bash
if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ]; then
/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg
sleep 3
if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ]; then
/etc/init.d/keepalived stop
fi
fi
此文件root组读写权限,并且允许程序执行此文件。
[root@Centos-Server ~]# chmod 777 /etc/keepalived/check_haproxy.sh
三、安装HAproxy
1、下载后解压 tar zxvf haproxy-1.4.24.tar.gz 到任意目录
解压后,进入Haproxy目录
[root@Centos-Server ~]# cd /usr/local/haproxy-1.4.24
[root@Centos-Server ~]# make TARGET=linux26 PREFIX=/usr/local/haproxy
[root@Centos-Server ~]# make install PREFIX=/usr/local/haproxy #将Haproxy安装到/usr/local/haproxy
2、配置HAproxy
[root@Centos-Server ~]# cd /usr/local/haproxy
[root@Centos-Server ~]# vim haproxy.cfg
注:这里是没有haproxy.cfg文件的,可以回到安装文件目录下将examples下的haproxy.cfg拷贝到usr/local/haproxy下。
[root@Centos-Server haproxy-1.5.11]# cp /usr/local/mypackages/haproxy-1.5.11/examples/haproxy.cfg /usr/local/haproxy
####################HAProxy配置中分成五部分内容,当然这些组件不是必选的,可以根据需要选择部分作为配置。
#global :参数是进程级的,通常和操作系统(OS)相关。这些参数一般只设置一次,如果配置无误,就不需要再次配置进行修改
#defaults:配置默认参数的,这些参数可以被利用配置到frontend,backend,listen组件
#frontend:接收请求的前端虚拟节点,Frontend可以根据规则直接指定具体使用后端的 backend(可动态选择)。
#backend :后端服务集群的配置,是真实的服务器,一个Backend对应一个或者多个实体服务器。
#listen :Frontend和Backend的组合体。 global
log 127.0.0.1 local0 #日志输出配置,所有日志都记录在本机,通过local0输出
maxconn 4096 #限制单个进程的最大连接数
chroot /usr/local/haproxy #Haproxy安装目录
uid 99 #所属运行用户,默认99为nobody
gid 99 #所属运行用户组,默认99为nobody
daemon #让进程作为守护进程在后台运行
nbproc 1 #指定作为守护进程运行时的进程数
pidfile /usr/local/haproxy/haproxy.pid #将所有进程写入pid文件 defaults
log global
mode tcp #所处理的类别,默认采用http模式,可配置成tcp作4层消息转发
maxconn 4096 #限制单个进程的最大连接数
option httplog #http 日志格式
option dontlognull #不记录空连接
option forwardfor #如果后端服务器需要获得客户端真实ip需要配置的参数,可以从Http Header中获得客户端ip
option httpclose #每次请求完毕后主动关闭http通道,haproxy不支持keep-alive,只能模拟这种模式的实现
option abortonclose #当服务器负载很高的时候,自动结束掉当前队列处理比较久的连接
option redispatch #在连接失败或断开的情况下,允许当前会话被重新分发
retries 3 #设置在一个服务器上链接失败后的重连次数
balance source #表示根据请求源IP,这个跟Nginx的IP_hash机制类似,我们用其作为解决session问题的一种方法。
timeout client 30s #设置客户端的最大超时时间(毫秒)
timeout connect 5s #设置等待连接到服务器成功的最大时间
timeout server 30s #设置服务器端的最大超时时间
timeout check 5s #心跳检测时间 #前端代理 Redis
frontend Redis
bind *:6379
default_backend RedisServer #后端分发 Redis
backend RedisServer
mode tcp
balance source
server redis-233 10.10.51.233:6379 check inter 2000 fall 5
server redis-234 10.10.51.234:6379 check inter 2000 fall 5
server redis-235 10.10.51.235:6379 check inter 2000 fall 5 #前端代理 Web
frontend WebSite
bind 10.10.51.230:80 #这里建议使用bind *:80的方式,要不然做集群高可用的时候有问题,vip切换到其他机器就不能访问了。
acl WwwSite hdr(host) -i www.ccav.com #acl后面是规则名称,-i是要访问的域名,如果访问www.zhirs.com这个域名就分发到下面的webserver 的作用域。
acl ImgSite hdr(host) -i res.ccav.com #如果访问img.baison.com.cn就分发到imgserver这个作用域。
use_backend WwwSiteServer if WwwSite
use_backend ImgSiteServer if ImgSite #后台分发 Web
backend WwwSiteServer
mode http
balance source #banlance roundrobin 轮询,balance source 保存session值,支持static-rr,leastconn,first,uri等
option httpchk /index.html #检测文件,如果分发到后台index.html 访问不到就不再分发给它
server web01 10.10.51.241:80 check inter 2000 fall 3 weight 30
server web02 10.10.51.242:80 check inter 2000 fall 3 weight 20 backend ImgSiteServer
mode http
option httpchk /index.html
balance roundrobin
server web03 10.10.51.243:80 check inter 2000 fall 3 weight 10 # weight - 调节服务器的负重
# check - 允许对该服务器进行健康检查
# inter - 设置连续的两次健康检查之间的时间,单位为毫秒(ms),默认值 2000(ms)
# rise - 指定多少次连续成功的健康检查后,可认定该服务器处于可操作状态,默认值 2
# fall - 指定多少次不成功的健康检查后,认为服务器为当掉状态,默认值 3
# maxconn - 指定可被发送到该服务器的最大并发连接数 #状态检测
listen status 10.10.51.231:8080 #监控页面的端口
mode http
stats enable
stats refresh 10s #统计页面自动刷新时间
stats uri /haproxy-admin #监控页面的访问地址
stats realm Haproxy\ Statistics #统计页面密码框上提示文本
stats auth ccav:123456 #统计页面用户名和密码设置
stats hide-version #隐藏统计页面上HAProxy的版本信息
3、加上日志支持
[root@Centos-Server ~]# vim /etc/rsyslog.conf #在最下边增加
local3.* /var/log/haproxy.log
local0.* /var/log/haproxy.log
[root@Centos-Server ~]# vim /etc/sysconfig/rsyslog
修改: SYSLOGD_OPTIONS="-r -m 0" [root@Centos-Server ~]# service rsyslog restart #重启日志服务
三、测试
1、启动Keepalived:
[root@Centos-Server ~]# /usr/local/keepalived/bin/keepalived -D -f /etc/keepalived/keepalived.conf #指定启动配置文件
正在启动 keepalived: [确定] #说明:Keepalived启动后会去检查HAproxy,若HAproxy未启动,则启动HAproxy,若启动HAproxy失败,则关闭Keepalived
2、启动Haproxy:
[root@Centos-Server ~]# /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg #启动
[root@Centos-Server ~]# /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg -st `cat /usr/local/haproxy/logs/haproxy.pid` #重启
[root@Centos-Server ~]# killall haproxy #停止
PS:haproxy启动故障:Starting proxy cluster: cannot bind socket
[root@Centos-Server ~]# /etc/sysctl.conf #修改内核参数
net.ipv4.ip_forward = 1
net.ipv4.ip_nonlocal_bind=1 #没有就新增此条记录 [root@Centos-Server ~]# sysctl -p #保存结果,使结果生效。
3、查看keepalived状况:
[root@alex]# service keepalived status keepalived (pid 5420) 正在运行...
4、查看HAproxy状况:
[root@alex]# ps -aux|grep haproxy Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
nobody 5430 0.0 0.0 11980 944 ? Ss 16:37 0:00 /usr/local/haproxy/sbin/haproxy –f /usr/local/haproxy/haproxy.conf
nobody 5431 0.0 0.0 11980 944 ? Ss 16:37 0:00 /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.conf
root 5618 0.0 0.0 103252 844 pts/2 S+ 16:38 0:00 grep haproxy
Keepalived启动后自动将HAproxy启动了。
5、查看Keepalived生成的VIP是否与主服务器绑定
[root@alex]# ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
link/ether 08:00:27:42:71:2d brd ff:ff:ff:ff:ff:ff
inet 10.10.51.231/24 brd 192.168.4.255 scope global eth5
inet 10.10.51.230/32 scope global eth5
inet6 fe80::a00:27ff:fe42:712d/64 scope link
valid_lft forever preferred_lft forever
VIP绑定OK!
6、打开HAproxy的图形管理界面:
浏览器输入http://localhost:8080/haproxy-admin
用户名:ccav 密码:123456
这时候我们Kill掉HAproxy,Keepalived检查到后会重新将HAproxy启动。
[root@alex sysconfig]# killall haproxy
刷新页面,可以看到HAproxy的pid改变了。
7、这时我们将主服务器上的keepalived当掉,看VIP是否漂移到了从服务器上,从服务器接管服务。
A、主服务器上:
[root@Centos-Server ~]# killall keepalived
[root@Centos-Server ~]# ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
link/ether 08:00:27:42:71:2d brd ff:ff:ff:ff:ff:ff
inet 10.10.51.231/24 brd 192.168.4.255 scope global eth5
inet6 fe80::a00:27ff:fe42:712d/64 scope link
valid_lft forever preferred_lft forever
B、从服务器上:
[root@Centos-Server ~]# ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
link/ether 08:00:27:be:47:90 brd ff:ff:ff:ff:ff:ff
inet 10.10.51.232/24 brd 192.168.4.255 scope global eth6
inet 10.10.51.230/32 scope global eth6
inet6 fe80::a00:27ff:febe:4790/64 scope link
valid_lft forever preferred_lft forever
VIP漂移OK!
8、这时候重启主服务器的Keepalived,查看VIP是否漂移回来。
[root@Centos-Server ~]# service keepalived start
正在启动 keepalived: [确定] [root@Centos-Server ~]# ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
link/ether 08:00:27:42:71:2d brd ff:ff:ff:ff:ff:ff
inet 10.10.51.231/24 brd 192.168.4.255 scope global eth5
inet 10.10.51.230/32 scope global eth5
inet6 fe80::a00:27ff:fe42:712d/64 scope link
valid_lft forever preferred_lft forever
VIP漂移到主服务器!
Keepalived+HAproxy实现高可用负载均衡的更多相关文章
- Keepalived+HAProxy 搭建高可用负载均衡
转载自:https://mp.weixin.qq.com/s/VebiWftaRa26x1aA21Jqww 1. 概述 软件负载均衡技术是指可以为多个后端服务器节点提供前端IP流量分发调度服务的软件技 ...
- Keepalived+Haproxy搭建高可用负载均衡
Keepalived 简单的是一个路由的软件用C写的这个项目的主要目标是提供简单而强大的设施的负载均衡和高可用性对Linux系统和基于Linux的基础设施.负载均衡架构依赖于众所周知的和广泛使用的Li ...
- keepalived+haproxy构建高可用负载均衡
一.环境介绍 我用的是centos6.7,内核版本为2.6.32-573.el6.x86_64,keepalived版本为keepalived-1.2.22,haproxy版本为haproxy-1.6 ...
- docker下用keepalived+Haproxy实现高可用负载均衡集群
启动keepalived后宿主机无法ping通用keepalived,报错: [root@localhost ~]# ping 172.18.0.15 PING () bytes of data. F ...
- Haproxy+Keepalived搭建Weblogic高可用负载均衡集群
配置环境说明: KVM虚拟机配置 用途 数量 IP地址 机器名 虚拟IP地址 硬件 内存3G 系统盘20G cpu 4核 Haproxy keepalived 2台 192.168.1.10 192 ...
- LVS+Keepalived搭建MyCAT高可用负载均衡集群
LVS+Keepalived 介绍 LVS LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统.本项目在1998年5月由章文嵩博士成立,是中国 ...
- CentOS 6.3下部署LVS(NAT)+keepalived实现高性能高可用负载均衡
一.简介 VS/NAT原理图: 二.系统环境 实验拓扑: 系统平台:CentOS 6.3 Kernel:2.6.32-279.el6.i686 LVS版本:ipvsadm-1.26 keepalive ...
- 转载--CentOS 6.3下部署LVS(NAT)+keepalived实现高性能高可用负载均衡
源地址:http://www.cnblogs.com/mchina/archive/2012/08/27/2644391.html 一.简介 VS/NAT原理图: 二.系统环境 实验拓扑: 系统平台: ...
- RHEL 5.4下部署LVS(DR)+keepalived实现高性能高可用负载均衡
原文地址:http://www.cnblogs.com/mchina/archive/2012/05/23/2514728.html 一.简介 LVS是Linux Virtual Server的简写, ...
随机推荐
- Linux下安装PHP 5.4.3(以Apache为WebServer)
转载http://www.cnblogs.com/rainisic/archive/2012/05/23/Apache_PHP_Install.html 下载PHP 官方下载:http://www.p ...
- es6 - class的学习
http://es6.ruanyifeng.com/#docs/class:class Person { constructor{ //构造函数,里边放不被继承的私有属性和方法 this.proper ...
- Express+Less+Gulp配置高效率开发环境
版权声明:本文由金朝麟原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/627049001486519548 来源:腾云阁 h ...
- Webpack 备忘录
Webpack 属于在项目中配置一次就很少改动的那种工具,但这样就导致新项目再配置 Webpack 时会有些生疏,所以将 Webpack 核心概念及常用配置记录如下. 1)核心概念 Webpack 4 ...
- laravel部署常用命令
php composer install composer dump-autoload php artisan key:generate .env 及 config/database.php里的数据库 ...
- 异构GoldenGate 12c 双向复制配置
1.配置window,添加checkpoint表(本文windows和linux互为source和target) GGSCI (WIN-GM5PVS1CILH) 1> view param ./ ...
- 第一步 使用sencha touch cmd 4.0 创建项目、打包(加入全局变量、公用类、自定义扩展、资源文件)
参考资料: http://www.cnblogs.com/qqloving/archive/2013/04/25/3043606.html http://www.admin10000.com/docu ...
- 几个解决k染色问题的指数级做法
几个解决k染色问题的指数级做法 ——以及CF908H题解 给你一张n个点的普通无向图,让你给每个点染上k种颜色中的一种,要求对于每条边,两个端点的颜色不能相同,问你是否存在一种可行方案,或是让你输出一 ...
- Python2.7设置在shell脚本中自动补全功能的方法
1.新建tab.py文件 #!/usr/bin/env python # python startup file import sys import readline import rlcomplet ...
- Python面向对象之成员修饰符
对于这些类成员有修饰符 之前定义字段country任何对象都可以访问,是公有的 可以定义为私用属性,只有类内部的方法可以调用,外部不能直接调用,但是可以间接调用 vim day7-10.py #!/u ...