keepalied和haproxy的部署及配置

Keepalived部署

编译keepalived

#cd /opt/soft

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

#tar zxvf keepalived-1.2.12.tar.gz

#cd keepalived-1.2.12

# ./configure && make && make install

将keepalived做成启动脚务

#cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/

#cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/

#mkdir /etc/keepalived/

#cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/

#cp /usr/local/sbin/keepalived /usr/sbin/

# chkconfig keepalived on

主备机间时间要同步

##############实现双机互信#######

#########node1#######

ssh-keygen -t rsa -P ‘‘

ssh-copy-id-i.ssh/id_rsa.pub [email protected]

#########node2#######

ssh-keygen -t rsa -P ‘‘

ssh-copy-id-i .ssh/[email protected]

##############查看时间###########

[[email protected] ~]#date;ssh node2 ‘date‘

#####为实现同步可使用下面同步#####

crontab-e

*/5* * * * /usr/sbin/ntpdate172.16.0.1 &< /dev/nul

Keepalived配置

配置文件说明

global_defs { #全局配置,这里额外的静态路由并未添加因为它是非必要的,除非我们在当前或特定的主机上生成特殊的静态路由等

notification_email {
#收件人信息

[email protected]

[email protected]

}

notification_email_fromsmtp.21cn.com
#发件人信息(可以随意伪装)

smtp_server 192.168.200.1#发邮件的服务器(一定不可为外部地址)

smtp_connect_timeout 30
#连接超时时间

router_id LVS_21cn1
#路由器的标识(可以随便改动)

}

/*keepalived会定时执行脚本并对脚本执行的结果进行分析,动态调整vrrp_instance的优先级。

如果脚本执行结果为0,并且weight配置的值大于0,则优先级相应的增加

如果脚本执行结果非0,并且weight配置的值小于0,则优先级相应的减少

其他情况,维持原本配置的优先级,即配置文件中priority对应的值。

这里需要注意的是:

1) 优先级不会不断的提高或者降低

2) 可以编写多个检测脚本并为每个检测脚本设置不同的weight

3) 不管提高优先级还是降低优先级,最终优先级的范围是在[1,254],不会出现优先级小于等于0或者优先级大于等于255的情况

这样可以做到利用脚本检测业务进程的状态,并动态调整优先级从而实现主备切换。*/

vrrp_scriptchk_ha {  //定义检查脚本

script"/root/chk_ha.sh"  //要执行的脚本

interval1  //多长时间执行一次(s)

weight-10  //如果执行出现情况,优先级相应增减

}

vrrp_instance VI_1 {
#配置虚拟路由器的(VI_1是实例名称)

state BACKUP #初始状态,master|backup,当state指定的instance的初始化状态,在两台服务器都启动以后,马上发生竞选,优先级高的成为MASTER,所以这里的MASTER并不是表示此台服务器一直是MASTER

interface eth0 #通告选举所用端口

virtual_router_id 151 
#虚拟路由的ID号(一般不可大于255)(同网段不同主备值不应相同,同一主备相同)

priority 100 #优先级信息,这个值与备机是不同的,备机可以设置为90

nopreempt #state都设置为Backup,在先级高的那台设置参数nopreempt,可以避免master宕掉恢复后再次接管业务,如果state区分了master和slaver则可不配置此项

advert_int 1 #初始化通告几个

authentication { 
#认证

auth_type PASS 
#认证机制

auth_pass 21cnlvs 
#密码(尽量使用随机

}

virtual_ipaddress {

121.14.120.162

121.14.120.176}

track_script{  //执行检查脚本

chk_ha

}

}

virtual_server 121.14.120.162 80 {

delay_loop6

lb_algowlc

lb_kind DR

persistence_timeout 3600

protocolTCP

real_server 121.14.120.193 80 {

weight3

TCP_CHECK {

connect_timeout 15

nb_get_retry 2

delay_before_retry 2

connect_port 80

}

}

real_server121.14.120.192 80 {

weight3

TCP_CHECK {

connect_timeout 15

nb_get_retry 2

delay_before_retry 2

connect_port 80

}

}

}

virtual_server 121.14.120.176 8080 {

delay_loop6

lb_algowlc

lb_kind DR

persistence_timeout 3600

protocolTCP

real_server121.14.120.193 8080 {

weight 3

TCP_CHECK {

connect_timeout 15

nb_get_retry 2

delay_before_retry 2

connect_port 8080

}

}

real_server121.14.120.192 8080 {

weight3

TCP_CHECK {

connect_timeout 15

nb_get_retry 2

delay_before_retry 2

connect_port 8080

}

}

}

Haproxy部署

#cd /opt/soft

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

#tar zxf haproxy-1.4.25.tar.gz

#cd haproxy-1.4.25

uname -a //查看linux内核版本

# make TARGET=linux26 PREFIX=/opt/haproxy-1.4.25

# make install PREFIX=/opt/haproxy-1.4.25

# useradd haproxy

#passwd haproxy

#mkdir /opt/haproxy-1.4.25/conf

#mkdir /opt/haproxy-1.4.25/logs

#touch /opt/haproxy-1.4.25/conf/haproxy.cfg

#chown -R haproxy.haproxy /opt/haproxy-1.4.25

启动haproxy服务

/opt/haproxy/sbin/haproxy -f /opt/haproxy/conf/haproxy.cfg

启动成功

关闭haproxy服务

pkill haproxy

重启haproxy

/usr/local/haproxy/sbin/haproxy - f/usr/local/haproxy/haproxy.cfg -st cat /usr/local/haproxy/haproxy.pid

制作haproxy启动脚本

Vi /etc/init.d/haproxy

#!/bin/bash

BASE_DIR="/opt/haproxy"

ARGV="[email protected]"

start()

{

$BASE_DIR/sbin/haproxy -f$BASE_DIR/conf/haproxy.cfg

}

stop()

{

echo "STOP HAPoxy Listen"

kill -TTOU $(cat $BASE_DIR/haproxy.pid)

echo "STOP HAPoxy process"

kill -USR1 $(cat $BASE_DIR/haproxy.pid)

}

case $ARGV in

start)

start

ERROR=$?

;;

stop)

stop

ERROR=$?

;;

restart)

stop

start

ERROR=$?

;;

*)

echo "hactl.sh[start|restart|stop]"

esac

exit $ERROR

Haproxy配置

global   # 全局参数的设置 

log 127.0.0.1 local0 info 

# log语法:log [max_level_1] 

全局的日志配置,使用log关键字,指定使用127.0.0.1上的syslog服务中的local0日志设备,

记录日志等级为info的日志 

user haproxy 

group haproxy 

设置运行haproxy的用户和组,也可使用uid,gid关键字替代之 

daemon 

以守护进程的方式运行 

nbproc 16

设置haproxy启动时的进程数,根据官方文档的解释,我将其理解为:该值的设置应该和服务

#器的CPU核心数一致,即常见的2颗8核心CPU的服务器,即共有16核心,则可以将其值设置为:

#< code>

#的崩溃。这里我设置为16 

maxconn 4096 

定义每个haproxy进程的最大连接数 ,由于每个连接包括一个客户端和一个服务器端,所以单

#个进程的TCP会话最大数目将是该值的两倍。 

#ulimit -n 65536 

设置最大打开的文件描述符数,在1.4的官方文档中提示,该值会自动计算,所以不建议进行

#设置 

pidfile /var/run/haproxy.pid 

定义haproxy的pid

defaults # 默认部分的定义

mode http

# mode语法:mode {http|tcp|health} 。http是七层模式,tcp是四层模式,health是健康检测

#,返回OK

log 127.0.0.1 local3 err

使用127.0.0.1上的syslog服务的local3设备记录错误信息

retries 3

定义连接后端服务器的失败重连次数,连接失败次数超过此值后将会将对应后端服务器标记为

#不可用

option httplog

启用日志记录HTTP请求,默认haproxy日志记录是不记录HTTP请求的,只记录“时间[Jan 5 13

#:23:46] 日志服务器[127.0.0.1] 实例名已经pid[haproxy[25218]] 信息[Proxy http_80_in s

#topped.]”,日志格式很简单。

option redispatch

当使用了cookie时,haproxy将会将其请求的后端服务器的serverID插入到cookie中,以保证

#会话的SESSION持久性;而此时,如果后端的服务器宕掉了,但是客户端的cookie是不会刷新的

#,如果设置此参数,将会将客户的请求强制定向到另外一个后端server上,以保证服务的正常

option abortonclose

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

option dontlognull

启用该项,日志中将不会记录空连接。所谓空连接就是在上游的负载均衡器或者监控系统为了

#探测该服务是否存活可用时,需要定期的连接或者获取某一固定的组件或页面,或者探测扫描

#端口是否在监听或开放等动作被称为空连接;官方文档中标注,如果该服务上游没有其他的负

#载均衡器的话,建议不要使用该参数,因为互联网上的恶意扫描或其他动作就不会被记录下来

option httpclose

这个参数我是这样理解的:使用该参数,每处理完一个request时,haproxy都会去检查http头

#中的Connection的值,如果该值不是close,haproxy将会将其***,如果该值为空将会添加为:

#Connection: close。使每个客户端和服务器端在完成一次传输后都会主动关闭TCP连接。与该

#参数类似的另外一个参数是“option forceclose”,该参数的作用是强制关闭对外的服务通道

#,因为有的服务器端收到Connection: close时,也不会自动关闭TCP连接,如果客户端也不关

#闭,连接就会一直处于打开,直到超时。

contimeout 5000

设置成功连接到一台服务器的最长等待时间,默认单位是毫秒,新版本的haproxy使用timeout

#connect替代,该参数向后兼容

clitimeout 3000

设置连接客户端发送数据时的成功连接最长等待时间,默认单位是毫秒,新版本haproxy使用

#timeout client替代。该参数向后兼容

srvtimeout 3000

设置服务器端回应客户度数据发送的最长等待时间,默认单位是毫秒,新版本haproxy使用

#timeout server替代。该参数向后兼容

listen status 

定义一个名为status的部分,可以在listen指令指定的区域中定义匹配规则和后端服务器ip,

#相当于需要在其中配置frontend,backend的功能。一般做tcp转发比较合适,不用太多的规则

#匹配。

bind 0.0.0.0:1080

定义监听的套接字

mode http

定义为HTTP模式

log global

继承global中log的定义

stats refresh 30s

# stats是haproxy的一个统计页面的套接字,该参数设置统计页面的刷新间隔为30s

stats uri /admin?stats

设置统计页面的uri为/admin?stats

stats realm Private lands

设置统计页面认证时的提示内容

stats auth admin:password

设置统计页面认证的用户和密码,如果要设置多个,另起一行写入即可

stats hide-version

隐藏统计页面上的haproxy版本信息

frontend http_80_in # 定义一个名为http_80_in的前端部分,haproxy会监听bind的端口

bind 0.0.0.0:80

# http_80_in定义前端部分监听的套接字

mode http

定义为HTTP模式

log global

继承global中log的定义

option forwardfor

启用X-Forwarded-For,在requests头部插入客户端IP发送给后端的server,使后端server获

#取到客户端的真实IP

acl static_down nbsrv(static_server) lt 1

定义一个名叫static_down的acl,当backend static_sever中存活机器数小于1时会被匹配到

acl php_web url_reg /*.php$

#acl php_web path_end .php

定义一个名叫php_web的acl,当请求的url末尾是以.php结尾的,将会被匹配到,上面两种写

#法任选其一

acl static_web url_reg /*.(css|jpg|png|jpeg|js|gif)$

#acl static_web path_end .gif .png .jpg .css .js .jpeg

定义一个名叫static_web的acl,当请求的url末尾是以.css、.jpg、.png、.jpeg、.js、.gif

结尾的,将会被匹配到,上面两种写法任选其一

use_backend php_server ifstatic_down

如果满足策略static_down时,就将请求交予backend php_server

use_backend php_server ifphp_web

如果满足策略php_web时,就将请求交予backend php_server

use_backend static_server ifstatic_web

如果满足策略static_web时,就将请求交予backend static_server

backend php_server #定义一个名为php_server的后端部分,frontend定义的请求会到到这里处理

mode http

设置为http模式

balance source

设置haproxy的调度算法为源地址hash

cookie SERVERID

允许向cookie插入SERVERID,每台服务器的SERVERID可在下面使用cookie关键字定义

option httpchk GET /test/index.php

开启对后端服务器的健康检测,通过GET /test/index.php来判断后端服务器的健康情况

server php_server_1 10.12.25.68:80 cookie 1 check inter 2000 rise 3 fall 3 weight 2

server php_server_2 10.12.25.72:80 cookie 2 check inter 2000 rise 3 fall 3 weight 1

server php_server_bak 10.12.25.79:80 cookie 3 check inter 1500 rise 3 fall 3 backup

# server语法:server [:port] [param*]

使用server关键字来设置后端服务器;为后端服务器所设置的内部名称[php_server_1],该名

#称将会呈现在日志或警报中、后端服务器的IP地址,支持端口映射[10.12.25.68:80]、指定该

#服务器的SERVERID为1[cookie 1]、接受健康监测[check]、监测的间隔时长,单位毫秒[inter 

#2000]、监测正常多少次后被认为后端服务器是可用的[rise 3]、监测失败多少次后被认为后端

#服务器是不可用的[fall 3]、分发的权重[weight 2]、最为备份用的后端服务器,当正常的服

#务器全部都宕机后,才会启用备份服务器[backup]

backend static_server

mode http

option httpchk GET /test/index.html

server static_server_1 10.12.25.83:80 cookie 3 check inter 2000 rise 3 fall 3

一个端口只能被一个frontend监听,但是可以被多个listen标签监听

 

Haproxy的acl规则使用

acl is_e_redirect_ssl1 path_end -ichangePwd.do login.do getPassword.do findPwd.do register.do registerMobile.doiframe/modifyPassword.do addRegisterInfo.do

acl is_e_redirect_ssl2 url      -i /index.do

acl is_e_not_redirect_ssl2 path_end -iheadPic.do uploadFlash.do cropZoomFlash.do

acl is_open hdr_beg(host) -i open.e.189.cn10.235.1.83

acl is_message  path_beg -i /message

Haproxy对后端机器的健康监听

1、通过监听端口进行健康检测

这种检测方式,haproxy只会去检查后端server的端口,并不能保证服务的真正可用。

listen http_proxy 0.0.0.0:80

mode http

cookie SERVERID

balance roundrobin

option httpchk

server web1192.168.1.1:80 cookie server01 check

server web2192.168.1.2:80 cookie server02 check inter 500 rise 1 fall 2

2、通过URI获取进行健康检测

这种检测方式,是用过去GET后端server的的web页面,基本上可以代表后端服务的可用性。

listen http_proxy 0.0.0.0:80

mode http

cookie SERVERID

balance roundrobin

option httpchk GET/index.html

server web1192.168.1.1:80 cookie server01 check

server web2 192.168.1.2:80cookie server02 check inter 500 rise 1 fall 2

3、通过request获取的头部信息进行匹配进行健康检测

这种检测方式,则是基于高级,精细的一些监测需求。通过对后端服务访问的头部信息进行匹配检测。

listen http_proxy 0.0.0.0:80

mode http

cookie SERVERID

balance roundrobin

option httpchk HEAD/index.jsp HTTP/1.1\r\nHost: www.xxx.com

server web1192.168.1.1:80 cookie server01 check

server web2192.168.1.2:80 cookie server02 check inter 500 rise 1 fall 2

Haproxy实现持久化链接

1 调度算法source

haroxy 将用户IP经过hash计算后 指定到固定的真实服务器上(类似于nginx 的IP hash 指令)

配置指令       balance source

2 cookie 识别

haproxy 将WEB服务端发送给客户端的cookie中插入(或添加加前缀)haproxy定义的后端的服务器COOKIE ID。

配置指令例举  cookie SESSION_COOKIE  insert indirect nocache

服务器定义  server s1 192.168.1.168:7003cookieA checkinter 1500 rise 3 fall 3 weight10

3 session 识别

haproxy 将后端服务器产生的session和后端服务器标识存在haproxy中的一张表里。客户端请求时先查询这张表。然后根据session分配后端server。

配置指令:appsession len timeout

Haproxy日志

vi /etc/sysconfig/syslog把SYSLOGD_OPTIONS="-m0" 改成 SYSLOGD_OPTIONS="-r -m 0"让syslogd接受远程的日志输出/etc/init.d/syslog restart然后就可以看到日志输出了

redhat6.0为/etc/rsyslog.conf

时间: 2024-10-01 03:44:35

keepalied和haproxy的部署及配置的相关文章

haproxy 安装部署文档

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

saltstack 的web平台集群部署(2)---haproxy的部署

上篇文章讲了saltstack的初始化基础安装. 咱们在这里讲讲项目的部署.咱们以haproxy+keepalive+httpd 来实现web平台的集群部署. 1. 部署yum安装环境 这个安装环境是除了上一节初始化之外的yum安装包 [[email protected] pkg]# pwd/srv/salt/prod/pkg[[email protected] pkg]# cat pkg-init.sls pkg-init:  pkg.installed:    - names:      -

理解 OpenStack Swift (1):OpenStack + 三节点Swift 集群+ HAProxy + UCARP 安装和配置

本系列文章着重学习和研究OpenStack Swift,包括环境搭建.原理.架构.监控和性能等. (1)OpenStack + 三节点Swift 集群+ HAProxy + UCARP 安装和配置 (2)Swift 原理和架构 (3)Swift 监控 (4)Swift 性能 要实现的系统的效果图: 特点: 使用三个对等物理节点,每个节点上部署所有Swift 服务 使用开源的 UCARP 控制一个 VIP,它会被绑定到三个物理网卡中的一个. 使用开源的 HAProxy 做负载均衡 开启 Swift

Haproxy的部署安装

Haproxy详解HAProxy: 是法国人Willy Tarreau开发的一个开源软件,是一款应对客户端10000以上的同时连接的高性能的TCP和 HTTP负载均衡器.其功能是用来提供基于cookie的持久性, 基于内容的交换,过载保护的高级流量管制,自动故障切换 ,以正则表达式为基础的标题控制运行时间,基于Web的报表,高级日志记录以帮助排除故障的应用或网络及其他功能.代理?正向代理,反向代理?代理服务器,可以提供缓存功能加速客户端访问,同时可以对缓存数据进行有效性检查?内容路由:根据流量以

HAproxy的安装与配置讲解

1,安装 1 官网下载 2 http://www.haproxy.org/#down 3 cd /usr/local/src/ 4 wget http://www.haproxy.org/download/1.4/src/haproxy-1.4.27.tar.gz 5 tar -zxvf haproxy-1.4.27.tar.gz 6 cd haproxy-1.4.27 7 make TARGET=linux26 PREFIX=/usr/local/haproxy 8 make install

Tigase XMPP Server在CentOS部署与配置

Tigase XMPP Server在CentOS部署与配置 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs 下面讲述Tigase XMPP Server在Linux服务器上的安装,Tigase包含了所有的标准模块,且后端存储使用了MySQL数据库. 服务器CentOS 6.5Final x64 1.安装JDK Tigase需要JDK 1.6以上版本.另外,需配置JAVA_HOME环境变量.JDK7的安装过程省略. 2.安装MySQL 过程省略. 3

redis服务部署及配置详解

Redis是一种高级key-value数据库.它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富.有字符串,链表,集合和有序集合.支持在服务器端计算集合的并,交和补集(difference)等,还支持多种排序功能.所以Redis也可以被看成是一个数据结构服务器. Redis的所有数据都是保存在内存中,然后不定期的通过异步方式保存到磁盘上(这称为"半持久化模式"):也可以把每一次数据变化都写入到一个append only file(aof)里面(这称为"全

WDS服务器的部署与配置

WDS服务器的部署与配置 一. 环境介绍 服务器端系统环境:windows2012 客户端环境:windows2012及win xp系统 二. 部署先决条件 1. 服务器端先决条件 (1)WDS服务器所在环境是域环境,可以是域控服务器或域成员(此条件非必须,可选择独立模式的WDS): (2)服务器需添加WDS角色 (3)网络中必须有DHCP服务器: (4)添加系统镜像 注意,本例为创建DHCP,是由于使用了Vmware自带的NAT的DHCP. 2. 客户端先决条件 客户机网卡支持PXE 三. 服

高负载均衡学习haproxy之安装与配置

http://www.52codes.net/article/3117.html 1.1.haproxy原理 haproxy提供高可用性.负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案. haproxy特别适用于那些负载特别大的web站点,这些站点通常又需要会话保持或七层处理.haproxy运行在时下的硬件上,完全可以支持数以万计的并发连接,并且它的运行模式使得它可以很简单安全的整合进您当前的架构中,同时可以保护你的web服务器