haproxy+keepalived

一、软件的安装
1.ip分配

192.168.242.110	VIP
192.168.242.36	haproxy+keepalived
192.168.242.37	haproxy+keepalived
192.168.242.38	tomcat
192.168.242.39	tomcat

2.软件安装

# yum install -y haproxy keepalived
# systemctl enable haproxy
# systemctl enable keepalived

二、配置haproxy
1 配置haproxy

 HAProxy配置中分五大部分:     
	global:全局配置参数,进程级的,用来控制Haproxy启动前的一些进程及系统设置     
	defaults:配置一些默认的参数,可以被frontend,backend,listen段继承使用     
	frontend:用来匹配接收客户所请求的域名,uri等,并针对不同的匹配,做不同的请求处理     
	backend:定义后端服务器集群,以及对后端服务器的一些权重、队列、连接数等选项的设置
	listen:为frontend和backend的组合体
	
Haproxy有8种负载均衡算法(balance),分别如下:
	1.balance roundrobin		# 轮询,软负载均衡基本都具备这种算法
	2.balance static-rr			# 根据权重,建议使用
	3.balance leastconn 		# 最少连接者先处理,建议使用
	4.balance source 			# 根据请求源IP,建议使用
	5.balance uri				# 根据请求的URI
	6.balance url_param			# 根据请求的URl参数'balance url_param' requires an URL parameter name
	7.balance hdr(name) 		# 根据HTTP请求头来锁定每一次HTTP请求
	8.balance rdp-cookie(name)	# 根据据cookie(name)来锁定并哈希每一次TCP请求

配置如下

# cat /etc/haproxy/haproxy.cfg
global
    log         127.0.0.1 local0 info	#日志输出配置,所有日志都记录在本机,通过local0输出
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon
    stats socket /var/lib/haproxy/stats #基于本地的文件传输
#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
    mode                    http	# mode语法mode {http|tcp|health} http是七层模式 tcp是四层模式 health是健康检测返回OK
    log                     global	# 应用全局的日志配置
    option                  httplog	# 启用日志记录HTTP请求,默认haproxy日志记录是不记录HTTP请求日志,默认的日志格式很简单
    option                  dontlognull	# 启用该项,日志中将不会记录空连接
    option httpclose				# 使用该参数,每处理完一个request时,haproxy都会去检查http头中的Connection的值,如果该值不是close,haproxy将会将其删除
									# 如果该值为空将会添加为:Connection:close 使每个客户端和服务器端在完成一次传输后都会主动关闭TCP连接
									# 与该参数类似的另外一个参数是“option forceclose”,该参数的作用是强制关闭对外的服务通道,
									# 因为有的服务器端收到Connection:close时,也不会自动关闭TCP连接,如果客户端也不关闭,连接就会一直处于打开,直到超时
	option http-server-close		# 在使用长连接时,为了避免客户端超时没有关闭长连接,此功能可以使服务器端关闭长连接
    option forwardfor       except 127.0.0.0/8	# 如果后端服务器需要获得客户端真实ip需要配置的参数,可以从Http Header中获得客户端ip
    option                  redispatch	# 在后端某一个server宕机,允许当前会话被重新分发
	option abortonclose       		# 当服务器负载很高的时候,自动结束掉当前队列处理比较久的连接
    retries                 3 		# 定义连接后端服务器的失败重连次数,连接失败次数超过此值后将会将对应后端服务器标记为不可用
#    balance source            		# 表示根据请求源IP,这个跟Nginx的IP_hash机制类似,我们用其作为解决session问题的一种方法
    timeout http-request    10s		# http请求超时时间
    timeout queue           1m		# 一个请求在队列里的超时时间
    timeout connect         10s		# 连接超时
    timeout client          180s	# 设置客户端的最大超时时间
    timeout server          1m		# 设置服务器端的最大超时时间
    timeout http-keep-alive 10s 	# 设置http-keep-alive的超时时间
    timeout check           10s		# 心跳检测时间
    maxconn                 4096	# 限制单个进程的最大连接数

listen status 0.0.0.0:8888        #监控页面的端口
    mode http
    stats enable
    stats refresh 10s                  #统计页面自动刷新时间
    stats uri /haproxy-admin           #监控页面的访问地址
    stats realm Haproxy\ Statistics    #统计页面密码框上提示文本
    stats auth admin:123456             #统计页面用户名和密码设置
    stats hide-version                 #隐藏统计页面上HAProxy的版本信息

frontend  tomcat_frontend
    bind *:8080
    mode tcp
    option tcplog            #tcp日志格式
    default_backend tomcat_backend

backend tomcat_backend
    mode tcp
    balance source
    server tomcat01 192.168.242.38:8080  check inter 2000 fall 3 weight 30
    server tomcat02 192.168.242.39:8080  check inter 2000 fall 3 weight 30

2 haproxy的日志输出: 默认输出到/var/log/messages 现在我们使之输出到/var/log/haproxy.log

# 修改rsyslog配置
# vim /etc/rsyslog.conf
# Provides UDP syslog reception
$ModLoad imudp				#将这两行的注释去掉
$UDPServerRun 514
local2.*		/var/log/haproxy.log		#最后添加一行

# vim /etc/sysconfig/rsyslog
SYSLOGD_OPTIONS="-r"			#加选项 -r

# 修改ha配置
# vim /etc/haproxy/haproxy.cfg
global
    log         127.0.0.1 local2 info

# 重启服务
# systemctl restart rsyslog
# systemctl restart haproxy
# ls /var/log/haproxy.log 			#查看下 会出现日志
/var/log/haproxy.log

三、配置keepalived

# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   router_id LVS_DEVEL
}

vrrp_script chk_haproxy {
    script "/etc/keepalived/chk_haproxy.sh"
    interval 2
    weight -4
}


vrrp_instance VI_1 {
    state BACKUP					# 	MASTER 
    interface ens34
    virtual_router_id 51
    priority 90						# master的优先级 大于 backup 的优先级
    advert_int 1
    mcast_src_ip 192.168.242.37		# 本机ip
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.242.110
    }
	unicast_peer {
		192.168.242.36          #另外几台keepalived服务器地址
    }
    track_script {
        chk_haproxy
    }

    notify_master "/etc/keepalived/send_mail.sh master"
    notify_down "/etc/keepalived/send_mail.sh down"
    notify_backup "/etc/keepalived/send_mail.sh backup"
}

#检测haproxy的脚本
# cat /etc/keepalived/chk_haproxy.sh
#!/bin/bash

if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ]; then
	echo "here11"
	systemctl start haproxy
	sleep 3

	if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ]; then
		echo "here22"
		systemctl stop keepalived
	fi
fi


# 当keepalived的状态改变时 发邮件 
# cat send_mail.sh 
#!/bin/bash

stat="$1"
ip=`ip addr |grep -w inet|grep -v 127.0.0.1 |awk '{print $2}' |head -1`

d=`date`
case $stat in
	"master")
		echo "$d: backup --> master $ip !" >> /root/mail.txt
	;;

	"baskup")
		echo "$d: master --> backup $ip !" >> /root/mail.txt
	;;
	
	"down")
		echo "$d: something wrong in $ip !" >> /root/mail.txt
	;;
esac


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sun_xuegang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值