一、搭建环境

  CentOS7 64位

    Keepalived  1.3.5

    Haproxy 1.5.18

  后端负载主机:192.168.166.21 192.168.166.22 两台节点上安装rabbitmq服务

    Haproxy 也是安装在 192.168.166.21 和 192.168.166.22 上,用于对外提供 RabbitMQ 均衡

    Keepalived实现haproxy的主备,高可用(避免单点问题),192.168.166.21(主)192.168.166.22(备),虚拟地址VIP 192.168.166.29

rabbitmq配置可以参看

http://blog.csdn.net/sj349781478/article/details/78841382

http://blog.csdn.net/sj349781478/article/details/78845852

二、HAproxy简介

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

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

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

4)HAProxy实现了一种事件驱动, 单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制 、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户空间(User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以 使每个CPU时间片(Cycle)做更多的工作。

三、HAproxy配置

1、安装haproxy

yum install haproxy -y

2、编辑配置文件

vi /etc/haproxy/haproxy.cfg 之后添加:

listen rabbitmq_local_cluster 0.0.0.0:56722

  #配置TCP模式

  mode tcp

  option tcplog

  #简单的轮询

  balance roundrobin

  #rabbitmq集群节点配置

  server mq01 192.168.166.21:5672 check inter 5000 rise 2 fall 2

  server mq02 192.168.166.22:5672 check inter 5000 rise 2 fall 2

因为我是在同一台服务器上,如果haproxy与后端服务器分开,建议端口一致。

3、启动

haproxy -f /etc/haproxy/haproxy.cfg

4、重启动

service haproxy restart

5、查看haproxy是否已经启动

6、haproxy启用监控页面

编辑haproxy.cfg 加上下面参数

listen admin_stats

stats enable

bind *:9090 //监听的ip端口号

mode http //开关

option httplog

log global

maxconn 10

stats refresh 30s //统计页面自动刷新时间

stats uri /admin //访问的uri ip:8080/admin

stats realm haproxy

stats auth admin:Redhat //认证用户名和密码

stats hide-version //隐藏HAProxy的版本号

stats admin if TRUE //管理界面,如果认证成功了,可通过webui管理节点

保存退出后

重起service haproxy restart

然后访问 http://ip:9090/admin 用户名:admin 密码:Redhat


参数举例说明:【/usr/local/haproxy/haproxy.cfg】

###########全局配置#########

global

  log 127.0.0.1 local0 #[日志输出配置,所有日志都记录在本机,通过local0输出]

  log 127.0.0.1 local1 notice #定义haproxy 日志级别[error warringinfo debug]

  daemon #以后台形式运行harpoxy

  nbproc 1 #设置进程数量

  maxconn 4096 #默认最大连接数,需考虑ulimit-n限制

  #user haproxy #运行haproxy的用户

  #group haproxy #运行haproxy的用户所在的组

  #pidfile /var/run/haproxy.pid #haproxy 进程PID文件

  #ulimit-n 819200 #ulimit 的数量限制

  #chroot /usr/share/haproxy #chroot运行路径

  #debug #haproxy 调试级别,建议只在开启单进程的时候调试

  #quiet

########默认配置############

defaults

  log global

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

  option httplog #日志类别,采用httplog

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

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

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

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

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

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

  maxconn 4096 #默认的最大连接数

  timeout connect 5000ms #连接超时

  timeout client 30000ms #客户端超时

  timeout server 30000ms #服务器超时

  #timeout check 2000 #心跳检测超时

  #timeout http-keep-alive10s #默认持久连接超时时间

  #timeout http-request 10s #默认http请求超时时间

  #timeout queue 1m #默认队列超时时间

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

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

  #balnace leastconn #设置默认负载均衡方式,最小连接数

########统计页面配置########

listen stats

  bind 0.0.0.0:1080 #设置Frontend和Backend的组合体,监控组的名称,按需要自定义名称

  mode http #http的7层模式

  option httplog #采用http日志格式

  #log 127.0.0.1 local0 err #错误日志记录

  maxconn 10 #默认的最大连接数

  stats refresh 30s #统计页面自动刷新时间

  stats uri /stats #统计页面url

  stats realm XingCloud\ Haproxy #统计页面密码框上提示文本

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

  stats auth Frank:Frank #设置监控页面的用户和密码:Frank

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

  stats admin if TRUE #设置手工启动/禁用,后端服务器(haproxy-1.4.9以后版本)

########设置haproxy 错误页面#####

errorfile 403 /home/haproxy/haproxy/errorfiles/403.http

errorfile 500 /home/haproxy/haproxy/errorfiles/500.http

errorfile 502 /home/haproxy/haproxy/errorfiles/502.http

errorfile 503 /home/haproxy/haproxy/errorfiles/503.http

errorfile 504 /home/haproxy/haproxy/errorfiles/504.http

########frontend前端配置##############

frontend main

  bind *:80 #这里建议使用bind *:80的方式,要不然做集群高可用的时候有问题,vip切换到其他机器就不能访问了。

  acl web hdr(host) -i www.abc.com #acl后面是规则名称,-i为忽略大小写,后面跟的是要访问的域名,如果访问www.abc.com这个域名,就触发web规则,。

  acl img hdr(host) -i img.abc.com #如果访问img.abc.com这个域名,就触发img规则。

  use_backend webserver if web #如果上面定义的web规则被触发,即访问www.abc.com,就将请求分发到webserver这个作用域。

  use_backend imgserver if img #如果上面定义的img规则被触发,即访问img.abc.com,就将请求分发到imgserver这个作用域。

  default_backend dynamic #不满足则响应backend的默认页面

########backend后端配置##############

backend webserver #webserver作用域

  mode http

  balance roundrobin #balance roundrobin 负载轮询,balance source 保存session值,支持static-rr,leastconn,first,uri等参数

  option httpchk /index.html HTTP/1.0 #健康检查, 检测文件,如果分发到后台index.html访问不到就不再分发给它

  server web1 10.16.0.9:8085 cookie 1 weight 5 check inter 2000 rise 2 fall 3

  server web2 10.16.0.10:8085 cookie 2 weight 3 check inter 2000 rise 2 fall 3

  #cookie 1表示serverid为1,check inter 1500 是检测心跳频率

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

backend imgserver

  mode http

  option httpchk /index.php

  balance roundrobin

  server img01 192.168.137.101:80 check inter 2000 fall 3

  server img02 192.168.137.102:80 check inter 2000 fall 3

backend dynamic

  balance roundrobin

  server test1 192.168.1.23:80 check maxconn 2000

  server test2 192.168.1.24:80 check maxconn 2000

listen tcptest

  bind 0.0.0.0:5222

  mode tcp

  option tcplog #采用tcp日志格式

  balance source

  #log 127.0.0.1 local0 debug

  server s1 192.168.100.204:7222 weight 1

  server s2 192.168.100.208:7222 weight 1

四、Keepalived介绍

keepalived是一个免费开源的,用C编写的类似于layer3, 4 & 7交换机制软件,具备我们平时说的第3层、第4层和第7层交换机的功能。主要提供loadbalancing(负载均衡)和 high-availability(高可用)功能,负载均衡实现需要依赖Linux的虚拟服务内核模块(ipvs),而高可用是通过VRRP协议实现多台机器之间的故障转移服务。

五、Keepalived配置

1、安装haproxy

yum install keepalived -y

2、配置文件

利用keepalived做主备,避免单点问题,实现高可用,在192.168.166.21和192.168.166.22节点上安装最新版keepalived

192.168.166.21(主)修改keepalived.conf为:Primary配置:

global_defs {

router_id mq01

}

vrrp_script chk_haproxy

{

script "/etc/keepalived/scripts/haproxy_check.sh"

interval 2

timeout 2

fall 3

}

vrrp_instance haproxy {

state MASTER

interface eth1

virtual_router_id 29

priority 150

authentication { auth_type PASS auth_pass 29 }

virtual_ipaddress {

192.168.166.29

}

track_script {

chk_haproxy

}

notify_master "/etc/keepalived/scripts/haproxy_master.sh"

}

192.168.166.22(备)修改keepalived.conf为:Secondary配置:

global_defs {

router_id mq02

}

vrrp_script chk_haproxy

{

script "/etc/keepalived/scripts/haproxy_check.sh"

interval 2

timeout 2

fall 3

}

vrrp_instance haproxy {

state BACKUP

interface eth1

virtual_router_id 29

priority 100

authentication { auth_type PASS auth_pass 29 }

virtual_ipaddress {

192.168.166.29

}

track_script {

chk_haproxy

}

notify_master "/etc/keepalived/scripts/haproxy_master.sh"

}

【haproxy_check.sh文件内容】

#!/bin/bash

LOGFILE="/var/log/keepalived-haproxy-state.log"

date >> $LOGFILE

if [ ps -C haproxy --no-header |wc -l -eq 0 ];then

echo "fail: check_haproxy status" >> $LOGFILE

exit 1

else

echo "success: check_haproxy status" >> $LOGFILE

exit 0

fi

【haproxy_master.sh文件内容】

#!/bin/bash

LOGFILE="/var/log/keepalived-haproxy-state.log"

echo "Being Master ..." >> $LOGFILE

赋权限 chmod 777 haproxy_check.sh haproxy_master.sh

  启动keepalived即可,192.168.166.29是对外提供的统一地址。通过192.168.166.29:56722就可以访问rabbitmq服务。

3、启动keepalived

keepalived -D

4、查看keepalived是否启动

六、切换测试

1)关闭主keepalived,VIP是否切换至备机,业务是否正常,恢复原状;(验证keepalived高可用)

2)关闭主HAproxy,VIP是否切换至备机,业务是否正常,恢复原状;(验证HAproxy高可用)

3)关闭后台服务器mq01,业务是否正常。(验证HAproxy状态检查)

keepalived参考:http://blog.51cto.com/lanlian/1303195

haproxy监控页面配置参考:http://blog.csdn.net/dylan_csdn/article/details/51261421

CentOS7 haproxy+keepalived实现高可用集群搭建的更多相关文章

  1. rabbitmq+haproxy+keepalived实现高可用集群搭建

    项目需要搭建rabbitmq的高可用集群,最近在学习搭建过程,在这里记录下可以跟大家一起互相交流(这里只是记录了学习之后自己的搭建过程,许多原理的东西没有细说). 搭建环境 CentOS7 64位 R ...

  2. CentOS7/RHEL7 pacemaker+corosync高可用集群搭建

     TOC \o "1-3" \h \z \u 一.集群信息... PAGEREF _Toc502099174 \h 4 08D0C9EA79F9BACE118C8200AA004B ...

  3. Linux centosVMware 集群介绍、keepalived介绍、用keepalived配置高可用集群

    一.集群介绍 根据功能划分为两大类:高可用和负载均衡 高可用集群通常为两台服务器,一台工作,另外一台作为冗余,当提供服务的机器宕机,冗余将接替继续提供服务 实现高可用的开源软件有:heartbeat. ...

  4. LVS+Keepalived实现高可用集群

    LVS+Keepalived实现高可用集群来源: ChinaUnix博客 日期: 2009.07.21 14:49 (共有条评论) 我要评论 操作系统平台:CentOS5.2软件:LVS+keepal ...

  5. 集群相关、用keepalived配置高可用集群

    1.集群相关 2.keepalived相关 3.用keepalived配置高可用集群 安装:yum install keepalived -y   高可用,主要是针对于服务器硬件或服务器上的应用服务而 ...

  6. .Net Core2.1 秒杀项目一步步实现CI/CD(Centos7.2)系列一:k8s高可用集群搭建总结以及部署API到k8s

    前言:本系列博客又更新了,是博主研究很长时间,亲自动手实践过后的心得,k8s集群是购买了5台阿里云服务器部署的,这个集群差不多搞了一周时间,关于k8s的知识点,我也是刚入门,这方面的知识建议参考博客园 ...

  7. Nginx(四):Keepalived+Nginx 高可用集群

    Keepalived+Nginx 高可用集群 (主从模式) 集群架构图 安装keepalived [root@localhost ~]# yum install -y keepalived 查看状态 ...

  8. 实现CI/CDk8s高可用集群搭建总结以及部署API到k8s

    实现CI/CD(Centos7.2)系列二:k8s高可用集群搭建总结以及部署API到k8s 前言:本系列博客又更新了,是博主研究很长时间,亲自动手实践过后的心得,k8s集群是购买了5台阿里云服务器部署 ...

  9. Hadoop 3.1.2(HA)+Zookeeper3.4.13+Hbase1.4.9(HA)+Hive2.3.4+Spark2.4.0(HA)高可用集群搭建

    目录 目录 1.前言 1.1.什么是 Hadoop? 1.1.1.什么是 YARN? 1.2.什么是 Zookeeper? 1.3.什么是 Hbase? 1.4.什么是 Hive 1.5.什么是 Sp ...

随机推荐

  1. ShopNC B2B2C多用户商城网站系统源码

    直接正常安装就行哦 注意有服务器的安装可以更下安装时间的长度 也就是说进行跳转的 如果时间太少 这样会安装不成 数据导入不完成 所以就会安装不成功安装好后打开data\config\config.in ...

  2. IOS 图形上下文栈

    - (void)drawRect:(CGRect)rect { // 获取上下文 CGContextRef ctx = UIGraphicsGetCurrentContext(); // 保存一份最纯 ...

  3. NOIP2018提高组Day2 解题报告

    前言 关于\(NOIP2018\),详见此博客:NOIP2018学军中学游记(11.09~11.11). \(Day2\)的题目和\(Day1\)比起来,真的是难了很多啊. \(T1\):旅行(点此看 ...

  4. python_9_for

    #1 for i in range(10):#默认从0开始,步长为1 print("loop",i) #2 for i in range(0,10,1):#步长为1 print(& ...

  5. C#逻辑运算符

    一.C#逻辑运算符 C#语言的逻辑运算符是对变量的值.表达式的运算结果进行比较,基比较结果为True或False. 二.示例 using System;using System.Collections ...

  6. solr dataimport

    solrconfig.xml <requestHandler name="/dataimport" class="org.apache.solr.handler.d ...

  7. axios使用思路总结

    一.Axios是什么?用来发送请求的对象,类似之前的ajax 二.如何使用? 目前只说get和post的使用方式.一共有两种. 直接使用配置项的方式,发送请求: 2.使用别名来发送请求 参考: htt ...

  8. 一、Linux 安装

    Linux 安装 本章节我们将为大家介绍Linux的安装. 本章节以 centos6.4 为例. centos 下载地址: 可以去官网下载最新版本:https://www.centos.org/dow ...

  9. 十二、MySQL 查询数据

    MySQL 查询数据 MySQL 数据库使用SQL SELECT语句来查询数据. 你可以通过 mysql> 命令提示窗口中在数据库中查询数据,或者通过PHP脚本来查询数据. 语法 以下为在MyS ...

  10. tcl之变量-unset 简单变量和数组