haproxy +keepalived 原创
Haproxy+keepalived
原理:
HAProxy介绍及其定位
HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。根据官方数据,其最高极限支持10G的并发。
HAProxy特别适用于那些负载特大的web站点, 这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中,同时可以保护你的web服务器不被暴露到网络上。
其支持从4层至7层的网络交换,即覆盖所有的TCP协议。就是说,Haproxy 甚至还支持 Mysql 的均衡负载。
如果说在功能上,能以proxy反向代理方式实现WEB均衡负载,这样的产品有很多。包括 Nginx,ApacheProxy,lighttpd,Cheroke等。
但要明确一点的,Haproxy 并不是 Http 服务器。以上提到所有带反向代理均衡负载的产品,都清一色是 WEB 服务器。简单说,就是他们能自个儿提供静态(html,jpg,gif..)或动态(php,cgi..)文件的传输以及处理。而Haproxy仅仅,而且专门是一款的用于均衡负载的应用代理。其自身并不能提供http服务。
keepalived理论工作原理
keepalived可提供vrrp以及health-check功能,可以只用它提供双机浮动的vip(vrrp虚拟路由功能),这样可以简单实现一个双机热备高可用功能。
keepalived是一个类似于layer3, 4 & 5交换机制的软件,也就是我们平时说的第3层、第4层和第5层交换。Keepalived的作用是检测web 服务器的状态。 Layer3,4&5工作在IP/TCP协议栈的IP层,TCP层,及应用层,原理分别如下:
Layer3:Keepalived使用Layer3的方式工作式时,Keepalived会定期向服务器群中的服务器
发送一个ICMP的数据包(既我们平时用的Ping程序),如果发现某台服务的IP地址没有激活,Keepalived便报告这台服务器失效,并将它从服务器群中剔除,这种情况的典型例子是某台服务器被非法关机。Layer3的方式是以服务器的IP地址是否有效作为服务器工作正常与否的标准。在本文中将采用这种方式。
Layer4:如果您理解了Layer3的方式,Layer4就容易了。Layer4主要以TCP端口的状态来决定服务器工作正常与否。如web server的服务端口一般是80,如果Keepalived检测到80端口没有启动,则Keepalived将把这台服务器从服务器群中剔除。
Layer5:Layer5就是工作在具体的应用层了,比Layer3,Layer4要复杂一点,在网络上占用的带宽也要大一些。Keepalived将根据用户的设定检查服务器程序的运行是否正常,如果与用户的设定不相符,则Keepalived将把服务器从服务器群中剔除。
vip即虚拟ip,是附在主机网卡上的,即对主机网卡进行虚拟,此IP仍然是占用了此网段的某个IP。
拓扑图
1 安装
#若tar -C无效,可以用tar -xzf mysql.tar.gz -C /usr/local/mysql --strip-components=1,这个从github上看到的一个实例
#wget 现在好像不能下载了,只能去haproxy 的GitHub上下载了
cd /mnt/ &&wget http://www.haproxy.org/download/1.6/src/haproxy-1.6.5.tar.gz && tar zxf /mnt/haproxy-1.6.5.gz –C /mnt/
make TARGET=linux2628
make install PREFIX=/usr/local/haproxy
mkdir /usr/local/haproxy/conf
2配置
cat >> /usr/local/haproxy/conf/haproxy.cfg<<EOF
global
maxconn 51200
chroot /usr/local/haproxy
uid 99
gid 99
daemon
#quiet
nbproc 1
pidfile /var/run/haproxy.pid
defaults
mode http
#优化选项
retries 3
option redispatch
#option abortonclose
timeout connect 5000ms
timeout client 30000ms
timeout server 30000ms
#timeout check 2000
log 127.0.0.1 local0 info
balance roundrobin
listen admin_stats
bind 0.0.0.0:8888
option httplog
stats refresh 30s
stats uri /stats #监控页面的url
stats realm Haproxy Manager
stats auth admin:admin #监控页面的用户名和密码
stats hide-version
frontend http-in
bind *:8889
mode http
option httplog
log global
default_backend httpserver
backend httpserver
balance roundrobi
#server web1 192.168.0.78:80 cookie 1 weight 1 check inter 2000 rise 2 fall 3
#server web2 192.168.0.28:80 cookie 1 weight 1 check inter 2000 rise 2 fall 3
option httpchk GET /index.html #后端服务器检测
#使用stick-table管理客户端session,保持session会话
stick-table type ip size 5000k expire 5m store conn_cur
stick match src table httpserver
stick on src table httpserver
server s8001 192.168.0.227:800 maxconn 500 weight 10 cookie s8001 check
server s8002 192.168.0.229:800 maxconn 500 weight 10 cookie s8002 check
EOF
3 haproxy日志
sed -i '13,14 s/^#//' /etc/rsyslog.conf
cat >> /etc/rsyslog.conf <<EOF
local3.* /var/log/haproxy.log
local0.* /var/log/haproxy.log
EOF
service rsyslog restart
4 启动haproxy
cat >>/etc/init.d/haproxy <<EOF
#!/bin/sh
#chkconfig: 2345 10 90 #description:haproxy
# confit: /usr/local/haproxy/conf/haproxy.cfg
# pidfile: /usr/local/haproxy/logs/haproxy.pid
# source function library.
. /etc/rc.d/init.d/functions
# source networking configuration.
. /etc/sysconfig/network
# check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0
config="/usr/local/haproxy/conf/haproxy.cfg"
exec="/usr/local/haproxy/sbin/haproxy"
prog=$(basename $exec)
[ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog
lockfile=/var/lock/subsys/haproxy
check(){
$exec -c -V -f $config
}
start() {
$exec -c -q -f $config
if [ $? -ne 0 ]; then
echo "Errors in configuration file, check with $prog check."
return 1
fi
echo -n $"Starting $prog: "
# start it up here, usually something like "daemon $exec"
daemon $exec -D -f $config -p /var/run/$prog.pid
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval
}
stop() {
echo -n $"Stopping $prog: "
# stop it here, often "killproc $prog"
killproc $prog
retval=$?
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
}
restart() {
$exec -c -q -f $config
if [ $? -ne 0 ]; then
echo "Errors in configuration file, check with $prog check."
return 1
fi
stop
start
}
reload() {
$exec -c -q -f $config
if [ $? -ne 0 ]; then
echo "Errors in configuration file, check with $prog check."
return 1
fi
echo -n $"Reloading $prog: "
$exec -D -f $config -p /var/run/$prog.pid -sf $(cat /var/run/$prog.pid)
retval=$?
echo
return $retval
}
force_reload() {
restart
}
fdr_status() {
status $prog
}
case "$1" in
start|stop|restart|reload)
$1
;;
force-reload)
force_reload
;;
checkconfig)
check
;;
status)
fdr_status
;;
condrestart|try-restart)
[ ! -f $lockfile ] || restart
;;
*)
echo $"Usage: $0 {start|stop|status|checkconfig|restart|try-restart|reload|force-reload}"
exit 2
esac
EOF
chmod u+x /etc/init.d/haproxyService haproxy start
Chkconfig haproxy on
5.keepalived
yum install openssl openssl-devel ipvsadm gcc gcc-c++ kernel-devel install libnl* popt* libnfnetlink-devel -y
cd /mnt && wget http://www.keepalived.org/software/keepalived-1.2.20.tar.gz &&tar zxf keepalived-1.2.20.tar.gz -C /mnt
cd keepalived-1.2.20
./configure --prefix=/usr/local/keepalived --sysconf=/etc --with-kernel-dir=/usr/src/kernels/2.6.32-573.22.1.el6.x86_64/
make && make install
ll /usr/local/keepalived/
ln -s /usr/local/keepalived/sbin/keepalived /usr/sbin/
cat >>/etc/keepalived/keepalived.conf <<EOF
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost #设置邮件
}
notification_email_from root@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id HAProxy_DEVEL
vrrp_skip_check_adv_addr
vrrp_strict
}
vrrp_script check_haproxy {
script "/mnt/shell/check_haproxy.sh"
#interval 2
#weight 2
}
vrrp_instance VI_1 {
state BACKUP #两边state 都为BACKUP
interface eth0
virtual_router_id 78 #id 必须唯一,且不可冲突
priority 100 #优先级不一样,数字越大,优先级越高nopreempt #不主动抢占资源,只在master这台优先级高的设置,backup不设置
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.0.24
}
track_script {
check_haproxy
}
}
EOF
service keepalived start
chkconfig keepalived on
keepalived 检测haproxy脚本,两种方式取其一:
#!/bin/bash
A=`ps -C haproxy --no-header|wc -l`
if [ $A -eq 0 ];then
/etc/init.d/haproxy start
sleep 3
if [ `ps -C haproxy --no-header|wc -l` -eq 0 ];then
/etc/init.d/keepalived stop
fi
fi
#add new other method
A=`curl -I http://192.168.0.24:8888/stats -u admin:admin|grep HTTP|awk '{print $2}'`
if [ $A -ne 200 ];then
/etc/init.d/haproxy start
sleep 3
if [ `curl -I http://192.168.0.24:8888/stats -u admin:admin|grep HTTP|awk '{print $2}'` -ne 200 ];then
/etc/init.d/keepalived sotp
fi
fi
转载于:https://www.cnblogs.com/yang68h/p/5511040.html
haproxy +keepalived 原创相关推荐
- Haproxy+keepalived高可用集群实战
前言 随着互联网火热的发展,开源负载均衡器的大量的应用,企业主流软件负载均衡如LVS.Haproxy.Nginx等,各方面性能不亚于硬件负载均衡F5,Haproxy提供高可用性.负载均衡以及基于TCP ...
- saltstack实现haproxy+keepalived负载均衡+高可用(二)
一键部署haproxy+keepalived实现负载均衡+高可用 实验环境: !!!! 特别注意: www.westos.org为test1的minion名字 test1: 172.25.1.1 ...
- CentOS7+MySQL/MariaDB+Galera+HAProxy+Keepalived构建高可用数据库集群
方案优势: Galera能够实现MySQL/MariaDB数据库的主主复制和多主复制等模式,这些复制模式都是同步进行的,同步时间非常短 每一个节点都可以同时写入和读取,当某一节点发生故障时,可自动从集 ...
- haproxy+keepalived应用实战
1.四层与七层负载均衡的区别 所谓的四层就是 ISO 参考模型中的第四层.四层负载均衡也称为四层交换机,它主要是通过分析 IP 层及 TCP/UDP 层的流量实现的基于 IP 加端口的负载均衡.常见的 ...
- 用HAproxy+keepalived+mysql Replication 构建基于企业级负载均衡
最近用HAproxy+keepalived+mysql复制测试高可用性Linux系统集群. HAProxy是一款免费的提供高可用性.负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理 ...
- haproxy + keepalived “一键安装包” 配置与测试HOWTO
本文为 "haproxy + keepalived 一键安装包" 的 第四篇 目的:帮助快速设置haproxy 与 keepalived 配置文档 第一篇 haproxy 安装 ...
- haproxy + keepalived 安装配置
haproxy + keepalived 安装配置 备注: web server:192.168.10.53 web server:192.168.10.81 haproxy + keepalived ...
- Redis集群方案之Twemproxy+HAProxy+Keepalived+Sentinel+主从复制(待实践)
首先说明一下,Twemproxy+HAProxy+Keepalived+Sentinel+主从复制-这里提到的技术不一定全部都用上,但是全部用上之后可以达到高可用. 主从复制:实现数据一式多份的保障. ...
- HAProxy Keepalived L4-L7 高可用负载均衡解决方案
目录 文章目录 目录 HAProxy 负载均衡器 应用特性 性能优势 会话保持 健康检查 配置文件 负载均衡策略 ACL 规则 Web 监控平台 Keepalived 虚拟路由器 核心组件 VRRP ...
最新文章
- Android反编译
- kaggle上面的score以及ROC_AUC数值咋回事
- 平衡二叉树的自顶向下递归和自底向上递归
- 选择版本Win7系统VS2010下搭建qt开发环境
- RBSP、SODB、EBSP三者的区别和联系 SPS: sequence parameter sets
- 手机apk签名工具安卓版_小飞鱼APK签名工具使用方法
- (21)css3盒模型box-sizing属性
- 【考研】考研5大分数线——国家线、院校线、自划线、单科线、录取线的区别
- selenium中的window handle
- 用 JMeter 测试 MySQL 数据库
- java 7zip分卷压缩_7zip分卷压缩,rar分卷压缩文件
- 计算机cpu占用率高,CPU占用率高怎么解决?Win10系统电脑CPU占用率100%的解决方法...
- 兰斯洛特·δ零式·开发计划
- Python全栈笔记(三)
- win7安装JAVA程序闪退怎么办_win7打开软件闪退如何解决
- java定义两个动物抽象类 程序_java抽象类和接口详解
- 动物识别系统的规则库
- html中url英文全称,URL的英文全称
- 期货市场的投资者适当性原则
- 莫比乌斯反演专题题解