1.1  Haproxy+keepalived高可用集群实战

随着互联网火热的发展,开源负载均衡器的大量的应用,企业主流软件负载均衡如LVS、Haproxy、Nginx等,各方面性能不亚于硬件负载均衡F5,Haproxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。

1.1.1  Haproxy入门简介

HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。负载均衡LVS是基于四层,新型的大型互联网公司也在采用Haproxy,了解了Haproxy大并发、七层应用等,Haproxy高性能负载均衡优点:

q HAProxy是支持虚拟主机的,可以工作在4、7层;

q 能够补充Nginx的一些缺点比如Session的保持,Cookie的引导等工作;

q 支持url检测后端的服务器;

q 它跟LVS一样,只是一款负载均衡软件,单纯从效率上来讲HAProxy更会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的;

q HAProxy可以对Mysql读进行负载均衡,对后端的MySQL节点进行检测和负载均衡,HAProxy的支持多种算法。

Haproxy+Keepalived企业高性能WEB能够支持千万级并发网站,实现Haproxy高性能WEB网站架构配置步骤如下:

1.1.2  Haproxy安装配置

Haproxy安装配置步骤相对比较简单,跟其他源码软件安装方法大致相同,如下为Haproxy配置方法及步骤:

(1) Haproxy编译及安装

cd /usr/src

wget http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.21.tar.gz

tar xzf haproxy-1.4.21.tar.gz

cd haproxy-1.4.21

make  TARGET=linux26  PREFIX=/usr/local/haproxy/

make  install  PREFIX=/usr/local/haproxy

(2) 配置Haproxy服务

cd /usr/local/haproxy ;mkdir -p etc/

touch /usr/local/haproxy/etc/haproxy.cfg

(3) Haproxy.cfg配置文件内容如下:

global

log 127.0.0.1 local0

log 127.0.0.1 local1 notice

maxconn 4096

uid 99

gid 99

daemon

defaults

log global

mode http

option httplog

option dontlognull

retries 3

option redispatch

maxconn 2000

contimeout 5000

clitimeout 50000

srvtimeout 50000

frontend http-in

bind *:80

acl is_www.jf1.com hdr_end(host) -i  jf1.com

acl is_www.jf2.com hdr_end(host) -i  jf2.com

use_backend  www.jf1.com  if  is_www.jf1.com

use_backend  www.jf2.com  if  is_www.jf2.com

default_backend  www.jf1.com

backend www.jf1.com

balance roundrobin

cookie SERVERID insert nocache indirect

option httpchk HEAD /index.html HTTP/1.0

option httpclose

option forwardfor

server  jf1  192.168.33.11:80  cookie  jf1  check inter 1500 rise 3 fall 3 weight 1

backend www.jf2.com

balance roundrobin

cookie SERVERID insert nocache indirect

option httpchk HEAD /index.html HTTP/1.0

option httpclose

option forwardfor

server  jf2  192.168.33.11:81  cookie  jf2  check inter 1500 rise 3 fall 3 weight 1

(4) 启动Haproxy服务

/usr/local/haproxy/sbin/haproxy   -f   /usr/local/haproxy/etc/haproxy.cfg

启动Haproxy报错如下:

[WARNING] 217/202150 (2857) : Proxy 'chinaapp.sinaapp.com': in multi-process mode, stats will be limited to process assigned to the current request.

修改源码配置src/cfgparse.c找到如下行,调整nbproc > 1数值即可:

if (nbproc > 1) {

if (curproxy->uri_auth) {

- Warning("Proxy '%s': in multi-process mode, stats will be limited to process assigned to the current request.\n",

+ Warning("Proxy '%s': in multi-process mode, stats will be limited to the process assigned to the current request.\n",

1.1.3  Haproxy配置文件详解

Hproxy配置文件内容详解如下:

######全局配置信息#######

global

maxconn 20480 #默认最大连接数

log 127.0.0.1 local3 #[err warning info debug]

chroot /usr/local/haproxy #chroot运行的路径

uid 99 #所属运行的用户uid

gid 99 #所属运行的用户组

daemon #以后台形式运行haproxy

nbproc 8 #进程数量(可以设置多个进程提高性能)

pidfile /usr/local/haproxy/haproxy.pid #haproxy的pid存放路径,启动进程的用户必须有权限访问此文件

ulimit-n 65535 #ulimit的数量限制

###########默认的全局设置##########

##这些参数可以被利用配置到frontend,backend,listen组件##

defaults

log global

mode http #所处理的类别 (#7层 http;4层tcp )

maxconn 20480 #最大连接数

option httplog #日志类别http日志格式

option httpclose #每次请求完毕后主动关闭http通道

option dontlognull #不记录健康检查的日志信息

option forwardfor #如果后端服务器需要获得客户端真实ip需要配置的参数,可以从Http Header中获得客户端ip

option redispatch #serverId对应的服务器挂掉后,强制定向到其他健康的服务器

option abortonclose #当服务器负载很高的时候,自动结束掉当前队列处理比较久的连接

stats refresh 30 #统计页面刷新间隔

retries 3 #3次连接失败就认为服务不可用,也可以通过后面设置

balance roundrobin #默认的负载均衡的方式,轮询方式

#balance source #默认的负载均衡的方式,类似nginx的ip_hash

#balance leastconn #默认的负载均衡的方式,最小连接

contimeout 5000 #连接超时

clitimeout 50000 #客户端超时

srvtimeout 50000 #服务器超时

timeout check 2000 #心跳检测超时

##############监控页面的设置###########

listen admin_status #Frontend和Backend的组合体,监控组的名称,按需自定义名称

bind 0.0.0.0:65532 #监听端口

mode http #http的7层模式

log 127.0.0.1 local3 err #错误日志记录

stats refresh 5s #每隔5秒自动刷新监控页面

stats uri /admin?stats #监控页面的url

stats realm jfedu\ jfedu #监控页面的提示信息

stats auth admin:admin #监控页面的用户和密码admin,可以设置多个用户名

stats hide-version #隐藏统计页面上的HAproxy版本信息

stats admin if TRUE #手工启用/禁用,后端服务器;

##########监控haproxy后端服务器的状态############

listen site_status

bind 0.0.0.0:1081 #监听端口

mode http #http的7层模式

log 127.0.0.1 local3 err #[err warning info debug]

monitor-uri /site_status #网站健康检测URL,用来检测HAProxy管理的网站是否可以用,正常返回200,不正常返回503

acl site_dead nbsrv(server_web) lt 2 #定义网站down时的策略当挂在负载均衡上的指定backend的中有效机器数小于1台时返回true

monitor fail if site_dead #当满足策略的时候返回503,网上文档说的是500,实际测试为503

monitor-net 192.168.149.129/32 #来自192.168.149.129的日志信息不会被记录和转发;

monitor-net 192.168.149.130/32 #来自192.168.149.130的日志信息不会被记录和转发;

########frontend配置############

#####注意,frontend配置里面可以定义多个acl进行匹配操作########

frontend http_80_in

bind 0.0.0.0:80 #监听端口,即haproxy提供web服务的端口,和lvs的vip端口类似

mode http #http的7层模式

log global #应用全局的日志配置

option httplog #启用http的log

option httpclose #每次请求完毕后主动关闭http通道,HA-Proxy不支持keep-alive模式

option forwardfor #如果后端服务器需要获得客户端的真实IP需要配置次参数,将可以从Http Header中获得客户端IP

########acl策略配置#############

acl jfedu_web hdr_reg(host) -i ^(www1.jfedu.net|www2.jfedu.net)$

#如果请求的域名满足正则表达式中的2个域名返回true -i是忽略大小写

#如果请求的域名满足www.jfedu.net返回true -i是忽略大小写

#acl jfedu hdr(host) -i jfedu.net

#如果请求的域名满足jfedu.net返回true -i是忽略大小写

#acl file_req url_sub -i killall=

#在请求url中包含killall=,则此控制策略返回true,否则为false

#acl dir_req url_dir -i allow

#在请求url中存在allow作为部分地址路径,则此控制策略返回true,否则返回false

#acl missing_cl hdr_cnt(Content-length) eq 0

#当请求的header中Content-length等于0时返回true

########acl策略匹配相应#############

#block if missing_cl

#当请求中header中Content-length等于0阻止请求返回403

#block if !file_req || dir_req

#block表示阻止请求,返回403错误,当前表示如果不满足策略file_req,或者满足策略dir_req,则阻止请求

use_backend server_web if jfedu_web

#当满足jfedu_web的策略时使用server_web的backend

##########backend的设置##############

backend server_web

mode http #http的7层模式

balance roundrobin #负载均衡的方式,roundrobin平均方式

cookie SERVERID #允许插入serverid到cookie中,serverid后面可以定义

option httpchk GET /index.html #心跳检测的文件

server web1 192.168.149.129:80 cookie web1 check inter 1500 rise 3 fall 3 weight 1

#服务器定义,cookie 1表示serverid为web1,check inter 1500是检测心跳频率rise 3是3次正确认为服务器可用,

#fall 3是3次失败认为服务器不可用,weight代表权重

server web2 192.168.149.130:80 cookie web2 check inter 1500 rise 3 fall 3 weight 2

#服务器定义,cookie 1表示serverid为web2,check inter 1500是检测心跳频率rise 3是3次正确认为服务器可用,

#fall 3是3次失败认为服务器不可用,weight代表权重。

1.1.4  安装Keepalived服务

cd /usr/src ;

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

tar xzf keepalived-1.2.1.tar.gz

cd keepalived-1.2.1 &&

./configure --with-kernel-dir=/usr/src/kernels/2.6.32-71.el6.x86_64/

make &&make install

DIR=/usr/local/ ;cp $DIR/etc/rc.d/init.d/keepalived  /etc/rc.d/init.d/

cp $DIR/etc/sysconfig/keepalived /etc/sysconfig/

mkdir -p /etc/keepalived  && cp $DIR/sbin/keepalived /usr/sbin/

1.1.5  配置Haproxy+keepalived

Haproxy+keealived Master端keepalived.conf配置文件如下:

! Configuration File for keepalived

global_defs {

notification_email {

xxx@139.com

}

notification_email_from wgkgood@139.com

smtp_server 127.0.0.1

smtp_connect_timeout 30

router_id LVS_DEVEL

}

vrrp_script chk_haproxy {

script "/data/sh/check_haproxy.sh"

interval 2

weight 2

}

# VIP1

vrrp_instance VI_1 {

state  MASTER

interface eth0

lvs_sync_daemon_inteface eth0

virtual_router_id 151

priority 100

advert_int 5

nopreempt

authentication {

auth_typePASS

auth_pass 2222

}

virtual_ipaddress {

192.168.0.133

}

track_script {

chk_haproxy

}

}

1.1.6  创建haproxy脚本

设置可执行权限chmod +x check_haproxy.sh,脚本内容如下:

#!/bin/bash

#auto check haprox process

killall -0 haproxy

if

[[ $? -ne 0 ]];then

/etc/init.d/keepalived stop

fi

Haproxy+keealived Backup端keepalived.conf配置文件如下:

! Configuration File for keepalived

global_defs {

notification_email {

xxx@139.com

}

notification_email_from wgkgood@139.com

smtp_server 127.0.0.1

smtp_connect_timeout 30

router_id LVS_DEVEL

}

vrrp_script chk_haproxy {

script "/data/sh/check_haproxy.sh"

interval 2

weight 2

}

# VIP1

vrrp_instance VI_1 {

state  BACKUP

interface eth0

lvs_sync_daemon_inteface eth0

virtual_router_id 151

priority  90

advert_int 5

nopreempt

authentication {

auth_typePASS

auth_pass 2222

}

virtual_ipaddress {

192.168.0.133

}

track_script {

chk_haproxy

}

}

1.1.7  测试Haproxy+Keepalived服务

手动kill掉131的haproxy进程后,130的keepalived后台日志显示如下,并且访问133 VIP正常访问,提供服务,则证明Haproxy+keepalived高可用架构配置完毕,如图23-4(a)、23-4(b)、23-24(c)、23-24(d)所示:

图23-4(a) Haproxy+Keepalived网站架构

图23-4(b) Haproxy+Keepalived网站架构

图23-4(c) Haproxy+Keepalived网站架构

图23-4(d) Haproxy+Keepalived网站架构

Haproxy+keepalived高可用集群实战的更多相关文章

  1. rabbitmq+haproxy+keepalived高可用集群环境搭建

    1.先安装centos扩展源: # yum -y install epel-release 2.安装erlang运行环境以及rabbitmq # yum install erlang ... # yu ...

  2. HAProxy + keepalived 高可用集群代理

    HAProxy + keepalived # 1 安装keepalived: yum install keepalived -y # 2 修改KEEPalived配置文件: vim /etc/keep ...

  3. Keepalived高可用集群应用

    Keepalived高可用集群应用 1.keepalived服务说明 1.1.keepalived介绍 Keepalived是一个用C语言编写的路由软件.该项目的主要目标是为Linux系统和基于Lin ...

  4. Nginx+Keepalived高可用集群应用实践

    Nginx+Keepalived高可用集群应用实践 1.Keepalived高可用软件 1.1 Keepalived服务的三个重要功能 1.1.1管理LVS负载均衡软件 早期的LVS软件,需要通过命令 ...

  5. Keepalived高可用集群搭建(转载linuxIDC)

    1.Keepalived简介 Keepalived是一个基于VRRP协议来实现的WEB服务高可用方案,可以利用其来避免单点故障.使用多台节点安装keepalived.其 他的节点用来提供真实的服务,同 ...

  6. 基于Keepalived高可用集群的MariaDB读写分离机制实现

    一 MariaDB读写分离机制 在实现读写分离机制之前先理解一下三种主从复制方式:1.异步复制:MariaDB默认的复制即是异步的,主库在执行完客户端提交的事务后会立即将结果返给给客户端,并不关心从库 ...

  7. Linux 笔记 - 第十八章 Linux 集群之(一)Keepalived 高可用集群

    一.前言 Linux 集群从功能上可以分为两大类:高可用集群和负载均衡集群.此处只讲高可用集群,负载均衡放在下一篇博客讲解. 高可用集群(High Availability Cluster,简称 HA ...

  8. Linux实战教学笔记31:Keepalived高可用集群应用实践

    1.1 Keepalived高可用软件 1.1.1 Keepalived介绍 Keepalived软件起初是专门为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入 ...

  9. nginx Keepalived高可用集群

    一.Keepalived高可用 1.简介 Keepalived软件起初是专为LvS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能.因此, ...

随机推荐

  1. Ubuntu 系统安装ssh的命令

    更新源列表 打开"终端窗口",输入"sudo apt-get update"-->回车-->"输入当前登录用户的管理员密码"-- ...

  2. 【一起来烧脑】一步学会AngularJS系统

    AngularJS是一个JavaScript框架 一个用JavaScript编写的库 [外链图片转存失败(img-JUTh171K-1563341248796)(https://upload-imag ...

  3. (18)打鸡儿教你Vue.js

    介绍一下怎么安装Vue.js vue.js Vue 不支持 IE8 及以下版本,因为 Vue 使用了 IE8 无法模拟的 ECMAScript 5 特性. Vue.js是一个渐进的,可逐步采用的Jav ...

  4. UOJ#316. 【NOI2017】泳池 动态规划,Berlekamp-Massey,Cayley-Hamilton定理

    原文链接www.cnblogs.com/zhouzhendong/p/UOJ316.html 题解 首先,我们将答案转化成最大矩形大小 \(\leq k\) 的概率 减去 \(\leq k-1\) 的 ...

  5. C语言 memset函数及其用法

    定义 void *memset(void *s, int c, unsigned long n); 描述 将指针变量 s 所指向的前 n 字节的内存单元用一个“整数” c 替换,注意 c 是 int ...

  6. 数据量与半监督与监督学习 Data amount and semi-supervised and supervised learning

    机器学习工程师最熟悉的设置之一是访问大量数据,但需要适度的资源来注释它.处于困境的每个人最终都会经历逻辑步骤,当他们拥有有限的监督数据时会问自己该做什么,但很多未标记的数据,以及文献似乎都有一个现成的 ...

  7. k8s概念入门

    k8s是一个编排容器的工具,其实也是管理应用的全生命周期的一个工具,从创建应用,应用的部署,应用提供服务,扩容缩容应用,应用更新,都非常的方便,而且可以做到故障自愈,例如一个服务器挂了,可以自动将这个 ...

  8. vim 文本替换讲解

    在VIM中进行文本替换: 1. 替换当前行中的内容: :s/from/to/ (s即substitude) :s/from/to/ : 将当前行中的第一个from,替换成to.如果当前行含有多个 fr ...

  9. PC 端常用软件

    WPS  金山文档  有道云笔记  格式工厂 运行精灵 UC 遨游 360 Firefox 浏览器 光影魔术手 美图秀秀 2345好压 火绒安全软件 有道云笔记 悟空游戏厅 微信 QQ 迅雷 百度网盘 ...

  10. google chrome 浏览器插件

    如果感觉浏览器(chrome)的背景是白色太亮太刺眼,可以先在 设置->外观->主题背景 里选择 oceanic,将浏览器头部颜色设置为海蓝色.然后再安装插件 “眼睛护航”,改变所有网页的 ...