Haproxy安装部署文档

栏目: 服务器 · 发布时间: 7年前

内容简介:一、HAproxy简介1)HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。2)HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。

一、HAproxy简介

1)HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。

2)HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。

3)HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。

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

二、环境配置

服务器系统:debian 8  jessie

nginx: nginx/1.14.0

服务器模拟:  分别使用本机的8080和9080端口

ip地址: 192.168.1.124

mysql: 192.168.1.124:3307  192.168.1.39:3306(我此处设置的账号密码一致ops:ops1300.)

、安装haproxy

    下载: http://www.haproxy.org/download/1.7/src/haproxy-1.7.9.tar.gz

编译安装

       root@centos-mysql01:/data#tar zxf haproxy-1.7.9.tar.gz

root@centos-mysql01:/data#cd haproxy-1.7.9

root@centos-mysql01:/data#make TARGET=linux31 prefix=/usr/local/haproxy

root@centos-mysql01:/data#make install PREFIX=/usr/local/haproxy

四、配置haproxy

创建haproxy用户

root@centos-mysql01:/data#userdel  -g 1004  haproxy

root@centos-mysql01:/data#useradd  haproxy -u 1004 -d /usr/local/haproxy -s /sbin/nologin  -g haproxy

创建对应文件目录

        root@centos-mysql01:/data#mkdir  /usr/local/haproxy/conf

root@centos-mysql01:/data#mkdir  /usr/local/haproxy/logs

整理配置文件

Haproxy配置中分成五部分内容,当然这些组件不是必选的,可以根据需要选择作为配置。

global:参数是进程级的,通常和操作系统(OS)相关。这些参数一般只设置一次,如果配置无误,就不需要再次配置进行修改;

default:配置默认参数的,这些参数可以被利用配置到frontend,backend,listen组件;

frontend:接收请求的前端虚拟节点,Frontend可以根据规则直接指定具体使用后端的backend(可动态选择);

backend:后端服务集群的配置,是真实的服务器,一个Backend对应一个或者多个实体服务器;

listen:Frontend和Backend的组合体。

mode http #默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK

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

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

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

timeout connect 5000ms #连接超时

timeout client 30000ms #客户端超时

timeout server 30000ms #服务器超时

#timeout check 2000 #=心跳检测超时

log 127.0.0.1 local0 err #[err warning info debug]

balance roundrobin                     #负载均衡算法

#option  httplog                        #日志类别,采用httplog

#option  httpclose   #每次请求完毕后主动关闭http通道,ha-proxy不支持keep-alive,只能模拟这种模式的实现

#option  dontlognull

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

root@centos-mysql01:/usr/local/haproxy# cat conf/haproxy.cfg 

#haproxy.cfg

global

log 127.0.0.1   local0

maxconn 4096              #最大连接数

chroot /usr/local/haproxy #安装目录

uid 1004                    #用户haproxy

gid 1004                   #组haproxy

daemon                    #守护进程运行

nbproc 1                  #进程数量

pidfile /usr/local/haproxy/logs/haproxy.pid #haproxy pid

defaults

log     global

mode    http               #7层 http;4层tcp  如果要让haproxy支持虚拟主机,mode 必须设为http 

# option  httplog            #http 日志格式   如果后面listen代理tcp的需要注释掉此项目

log 127.0.0.1 local6

option  httpclose          #主动关闭http通道

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

retries 1

option  dontlognull

maxconn 2000                     #最大连接数

timeout connect      3600000     #连接超时(毫秒)

timeout client      3600000      #客户端超时(毫秒)

timeout server      3600000      #服务器超时(毫秒)

frontend  default

option httplog

option httpclose

bind 0.0.0.0:8888

acl haproxy_stats   path_beg /haproxy

use_backend haproxy_stats if haproxy_stats

backend haproxy_stats

stats uri /haproxy

stats enable

stats refresh 60s

#stats auth admin:admin  # 状态页面认证配置

stats admin if TRUE  

frontend hanye

option httplog

option httpclose

mode http

option forwardfor

option forwardfor header Client-IP

option http-server-close

bind *:80

acl web hdr(host) -i web.hz7726.com

acl img hdr(host) -i img.hz7726.com

use_backend webserver if web

use_backend imgserver if img

default_backend  nginx

backend  nginx

balance roundrobin 

server nginx1 192.168.1.124:8080  check inter 2s rise 3 fall 3 weight 3

server nginx2 192.168.1.124:9080  check inter 2s rise 3 fall 3 weight 

backend  webserver

balance roundrobin

option httpchk HEAD /index.html HTTP/1.1\r\nHost:\ web.hz7726.com

server web1 192.168.1.124:8080 cookie   check inter 2s rise 3 fall 3 weight 3

backend imgserver

balance roundrobin

option httpchk HEAD /index.html HTTP/1.1\r\nHost:\ img.hz7726.com

server img1 192.168.1.124:9080 cookie  check inter 2s rise 3 fall 3 weight 3

listen mysql_demo

bind 0.0.0.0:3306

mode tcp

balance roundrobin

server mysql1  192.168.1.39:3306   weight 1 check inter 1s rise 2 fall 2

server mysql2  192.168.1.124:3307  weight 1 check inter 1s rise 2 fall 2

整理启动脚本

我这里是直接复制的张哥的(来自:https://zhangge.net/5125.html)

#!/bin/bash

###################################################################

###################################################################

# chkconfig: 35 10 90

export PATH =/ sbin :/ usr / sbin :/ usr / local / sbin :/ usr / local / bin :/ usr / bin :/ bin : $PATH

PROCESS_NAME = haproxy

BASE_DIR =/ usr / local / haproxy

EXEC = $BASE_DIR / sbin / haproxy

PID_FILE = $BASE_DIR / logs / haproxy .pid

DEFAULT_CONF = $BASE_DIR / conf / haproxy .cfg

MONLOG_PATH = "$BASE_DIR/logs/${PROCESS_NAME}_mon.log"

# COLOR print

COLOR_RED = $(     echo - e "\e[31;49m" )

COLOR_GREEN = $(   echo - e "\e[32;49m" )

COLOR_RESET = $(   echo - e "\e[0m"      )

info () { echo "${COLOR_GREEN}$*${COLOR_RESET}"    ;}

warn () { echo "${COLOR_RED}$*${COLOR_RESET}"      ;}

do_log ()

{

local log_fpath = $ 1

local log_content = $ 2

echo "$(date '+%F %T') $log_content" >> $log_fpath

}

print_usage ()

{

echo

info " Usage: $(basename $0) [start|stop|restart|mon|test]"

echo

}

#get Expanding configuration

ext_configs ()

{

CONFIGS =

if [[ - d $BASE_DIR / conf / enabled ]]; then

for FILE in $( find $BASE_DIR / conf / enabled - type l | sort - n )

do

CONFIGS = "$CONFIGS -f $FILE" ;

done

echo $CONFIGS

else

echo

fi

}

# check process status

check_process ()

{

PID = ` get_pid `

if ps aux | awk '{print $2}' | grep - qw $PID 2 >/ dev / null ; then

true

else

false

fi

}

# check Configuration file

check_conf ()

{

$EXEC - c - f $DEFAULT_CONF ` ext_configs ` >/ dev / null 2 >& 1

return $?

}

get_pid ()

{

if [[ - f $PID_FILE ]]; then

cat $PID_FILE

else

warn " $PID_FILE not found!"

exit 1

fi

}

start ()

{

echo

if check_process ; then

warn " ${PROCESS_NAME} is already running!"

else

$EXEC - f $DEFAULT_CONF ` ext_configs ` && \

echo - e " ${PROCESS_NAME} start                        [ `info OK` ]" || \

echo - e " ${PROCESS_NAME} start                        [ `warn Failed` ]"

fi

echo

}

stop ()

{

echo

if check_process ; then

PID = ` get_pid `

kill - 9 $PID >/ dev / null 2 >& 1

echo - e " ${PROCESS_NAME} stop                         [ `info OK` ]"

else

warn " ${PROCESS_NAME} is not running!"

fi

echo

}

restart ()

{

echo

if check_process ; then

:

else

warn " ${PROCESS_NAME} is not running! Starting Now..."

fi

if ` check_conf `; then

PID = ` get_pid `

$EXEC - f $DEFAULT_CONF ` ext_configs ` - st $PID && \

echo - e " ${PROCESS_NAME} restart                      [ `info OK` ]" || \

echo - e " ${PROCESS_NAME} restart                      [ `warn Failed` ]"

else

warn " ${PROCESS_NAME} Configuration file is not valid, plz check!"

echo - e " ${PROCESS_NAME} restart                      [ `warn Failed` ]"

fi

echo

}

mon ()

{

if check_process ; then

info "${PROCESS_NAME} is running OK!"

do _ log $MONLOG_PATH "${PROCESS_NAME} is running OK!"

else

start

warn " ${PROCESS_NAME} not running, start it!"

do _ log $MONLOG_PATH "${PROCESS_NAME} not running, plz check"

fi

}

if [[ $ # != 1 ]]; then

print_usage

exit 1

else

case $ 1 in

"start" | "START" )

start

;;

"stop" | "STOP" )

stop

;;

"restart" | "RESTART" | "-r" )

restart

;;

"status" | "STATUS" )

if check_process ; then

info "${PROCESS_NAME} is running OK!"

else

warn " ${PROCESS_NAME} not running, plz check"

fi

;;

"test" | "TEST" | "-t" )

echo

if check _ conf ; then

info " Configuration file test Successfully."

else

warn " Configuration file test failed."

fi

echo

;;

"mon" | "MON" | "-m" )

mon

;;

* )

print_usage

exit 1

esac

fi

注册系统服务

root@centos-mysql01:chmod +x /usr/local/haproxy/sbin/ctrl.sh

root@centos-mysql01:ln -sf /usr/local/haproxy/sbin/ctrl.sh  /etc/init.d/haproxy

root@centos-mysql01:chkconfig haproxy on

启动:service haproxy start

停止:service haproxy stop

重载:service haproxy restart

状态:service haproxy status

检查:service haproxy test

监控:service haproxy mon  # 进程自拉起,如有告警通道可自行加入

配置自动拉起

* * * * * bash /usr/local/haproxy/ctrl.sh mon >/dev/null 2>&1

注意:开启rsyslog的local6日志存放

vim /etc/rsyslog.conf 

#新增配置

local6.* /usr/local/haproxy/logs/rsyslog_haproxy.log

#取消如下2行注释

$ModLoad imudp

$UDPServerRun 514

#重启syslog服务

启动测试

1. stats状态:

Haproxy安装部署文档

2.nginx负载状态

自己多刷新几次对比下

3.mysql负载

listen mysql_demo

bind 0.0.0.0:3306

mode tcp

balance roundrobin

server mysql1  192.168.1.39:3306   weight 1 check inter 1s rise 2 fall 2

server mysql2  192.168.1.124:3307  weight 1 check inter 1s rise 2 fall 2

访问对比

Haproxy安装部署文档


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Realm of Racket

Realm of Racket

Matthias Felleisen、Conrad Barski M.D.、David Van Horn、Eight Students Northeastern University of / No Starch Press / 2013-6-25 / USD 39.95

Racket is the noble descendant of Lisp, a programming language renowned for its elegance and power. But while Racket retains the functional goodness of Lisp that makes programming purists drool, it wa......一起来看看 《Realm of Racket》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

html转js在线工具
html转js在线工具

html转js在线工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具