rabbitmq+haproxy+keepalived实现高可用集群搭建
项目需要搭建rabbitmq的高可用集群,最近在学习搭建过程,在这里记录下可以跟大家一起互相交流(这里只是记录了学习之后自己的搭建过程,许多原理的东西没有细说)。
搭建环境
CentOS7 64位
RabbitMQ 3.6.2
Keepalived 1.2.21
主机:192.168.0.1 192.168.0.2 192.168.0.3 三台节点上安装rabbitmq服务
Haproxy 安装在 192.168.1.1 和 192.168.1.2 上,用于对外提供 RabbitMQ 均衡
Keepalived实现haproxy的主备,高可用(避免单点问题),192.168.1.1(主)192.168.1.2(备)
全局图如下:
RabbitMQ集群搭建
单机上安装
分别在192.168.0.1 192.168.0.2 192.168.0.3 节点上安装rabbitmq server。
- 1.Install Erlang
# yum install erlang
测试erlang是否安装成功,输入:
# erl //进入erl窗口则表示安装成功
- 2.Install RabbitMQ Server
# wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.2/rabbitmq-server-3.6.2-1.noarch.rpm
# yum install rabbitmq-server-3.6.2-1.noarch.rpm
- 3.启动
# /etc/init.d/rabbitmq-server start
- 4.开机启动
# chkconfig rabbitmq-server on
测试是否安装成功:
# rabbitmqctl status //查看rabbitmq的运行状态信息
- 5.启用插件rabbitmq management
# rabbitmq-plugins enable rabbitmq_management
# /etc/init.d/rabbitmq-server restart
输入http://ip:15672可以登录管理界面,默认账户guest/guest只能使用http://localhost:15672登录,要想远程登录,需要添加一个新的用户:
# rabbitmqctl add_user admin 1234
#用户设置为administrator才能远程访问
$ sudo rabbitmqctl set_user_tags admin administrator
$ sudo rabbitmqctl set_permissions -p / admin ".*" ".*" ".*" //该命令使用户admin具有‘/’这个virtual host中所有资源的配置、写、读权限以便管理其中的资源
查看所有用户#rabbitmqctl list_users
镜像集群搭建
将192.168.0.1上的/var/lib/rabbitmq/.erlang.cookie中的内容复制到158和159上的/var/lib/rabbitmq/.erlang.cookie文件中, 即三台服务器必须具有相同的cookie,如果不相同的话,无法搭建集群
192.168.0.2和192.168.0.3节点上分别执行命令,加入到集群
# rabbitmqctl stop_app
# rabbitmqctl join_cluster --ram rabbit@h-ncdrdcs7
# rabbitmqctl start_app
其中--ram代表是内存节点,如果希望是磁盘节点则不用加--ram,在rabbitmq集群中,至少需要一个磁盘节点
查看集群的状态
# rabbitmqctl cluster_status
设置成镜像队列
# rabbitmqctl set_policy ha-all "^ha\." '{"ha-mode":"all"}' //意思表示以ha.开头的queue都会复制到各个节点 ["^"匹配所有]
Haproxy负载代理
利用haproxy做负载均衡
在192.168.1.1和192.168.1.2节点上
安装haproxy
# yum install haproxy
vi /etc/haproxy/haproxy.cfg 之后添加:
- listen rabbitmq_local_cluster 0.0.0.0:
- #配置TCP模式
- mode tcp
- option tcplog
- #简单的轮询
- balance roundrobin
- #rabbitmq集群节点配置
- server rabbit1 192.168.0.1: check inter rise fall
- server rabbit2 192.168.0.2: check inter rise fall
- server rabbit3 192.168.0.3: check inter rise fall
- #配置haproxy web监控,查看统计信息
- listen private_monitoring :
- mode http
- option httplog
- stats enable
- #设置haproxy监控地址为http://localhost:8100/stats
- stats uri /stats
- stats refresh 30s
- #添加用户名密码认证
- stats auth admin:
#启动
# haproxy -f haproxy.cfg
#重启动
# service haproxy restart
Keepalived安装
利用keepalived做主备,避免单点问题,实现高可用
在192.168.1.1和192.168.1.2节点上安装最新版keepalived
192.168.1.1(主)修改keepalived.conf为:Primary配置:
- vrrp_script chk_haproxy {
- script "pidof haproxy"
- interval
- }
- vrrp_instance VI_1 {
- interface ens192
- state MASTER
- priority
- virtual_router_id
- unicast_src_ip 192.168.1.1
- unicast_peer {
- 192.168.1.2
- }
- authentication {
- auth_type PASS
- auth_pass password
- }
- virtual_ipaddress {
- 192.168.1.10 //虚拟ip,对外提供服务
- }
- track_script {
- chk_haproxy
- }
- notify_master /loadbtify_master.sh
- }
192.168.1.2(备)修改keepalived.conf为:Secondary配置:
- vrrp_script chk_haproxy {
- script "pidof haproxy"
- interval
- }
- vrrp_instance VI_1 {
- interface ens192
- state BACKUP
- priority
- virtual_router_id
- unicast_src_ip 192.168.1.2
- unicast_peer {
- 192.168.1.1
- }
- authentication {
- auth_type PASS
- auth_pass password
- }
- virtual_ipaddress {
- 192.168.1.10
- }
- track_script {
- chk_haproxy
- }
- notify_master /loadbtify_master.sh
- }
启动keepalived即可,192.168.1.10是对外提供的统一地址。
通过192.168.1.10:5672就可以访问rabbitmq服务。
参考资料:
https://www.digitalocean.com/community/tutorials/how-to-set-up-highly-available-haproxy-servers-with-keepalived-and-floating-ips-on-ubuntu-14-04#userconsent#
http://www.rabbitmq.com/install-rpm.html
http://www.keepalived.org/download.html //keepalived下载地址
rabbitmq+haproxy+keepalived实现高可用集群搭建的更多相关文章
- CentOS7 haproxy+keepalived实现高可用集群搭建
一.搭建环境 CentOS7 64位 Keepalived 1.3.5 Haproxy 1.5.18 后端负载主机:192.168.166.21 192.168.166.22 两台节点上安装rabbi ...
- RabbitMQ高级指南:从配置、使用到高可用集群搭建
本文大纲: 1. RabbitMQ简介 2. RabbitMQ安装与配置 3. C# 如何使用RabbitMQ 4. 几种Exchange模式 5. RPC 远程过程调用 6. RabbitMQ高可用 ...
- Linux centosVMware 集群介绍、keepalived介绍、用keepalived配置高可用集群
一.集群介绍 根据功能划分为两大类:高可用和负载均衡 高可用集群通常为两台服务器,一台工作,另外一台作为冗余,当提供服务的机器宕机,冗余将接替继续提供服务 实现高可用的开源软件有:heartbeat. ...
- LVS+Keepalived实现高可用集群
LVS+Keepalived实现高可用集群来源: ChinaUnix博客 日期: 2009.07.21 14:49 (共有条评论) 我要评论 操作系统平台:CentOS5.2软件:LVS+keepal ...
- 集群相关、用keepalived配置高可用集群
1.集群相关 2.keepalived相关 3.用keepalived配置高可用集群 安装:yum install keepalived -y 高可用,主要是针对于服务器硬件或服务器上的应用服务而 ...
- RabbitMQ和Kafka的高可用集群原理
前言 小伙伴们,通过前边文章的阅读,相信大家已经对RocketMQ的基本原理有了一个比较深入的了解,那么大家对当前比较常用的RabbitMQ和Kafka是不是也有兴趣了解一些呢,了解的多一些也不是坏事 ...
- Nginx(四):Keepalived+Nginx 高可用集群
Keepalived+Nginx 高可用集群 (主从模式) 集群架构图 安装keepalived [root@localhost ~]# yum install -y keepalived 查看状态 ...
- MHA 高可用集群搭建(二)
MHA 高可用集群搭建安装scp远程控制http://www.cnblogs.com/kevingrace/p/5662839.html yum install openssh-clients mys ...
- .Net Core2.1 秒杀项目一步步实现CI/CD(Centos7.2)系列一:k8s高可用集群搭建总结以及部署API到k8s
前言:本系列博客又更新了,是博主研究很长时间,亲自动手实践过后的心得,k8s集群是购买了5台阿里云服务器部署的,这个集群差不多搞了一周时间,关于k8s的知识点,我也是刚入门,这方面的知识建议参考博客园 ...
随机推荐
- ListView美化:去阴影、底色、选中色
原文:http://blog.csdn.net/wxg630815/article/details/6987305 1.去滑动到顶点和底边时的黑色阴影 [html] view plaincopy ...
- IOS AutoLayout 文章
开始iOS 7中自动布局教程(一) 开始iOS 7中自动布局教程(二) 代码的方式自动布局 自动布局时计算Cell高度
- HDU3572 Task Schedule 【最大流】
Task Schedule Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) To ...
- .net控件Control透明
public partial class tspControl : UserControl { public tspControl() { InitializeComponent(); SetStyl ...
- php的引用&(就是在变量或者函数、对象等前面加上&符号)
官方文档: 1.引用是什么:http://www.php.net/manual/zh/language.references.whatare.php 2.引用做什么:http://www.php.ne ...
- string2array($value);
/*** 将字符串转换为数组** @param string $data 字符串* @return array 返回数组格式,如果,data为空,则返回空数组*/if ( !function_exis ...
- ASP.NET获取URL
//获取完整url (协议名+域名+站点名+文件名+参数) string fullUrl = Request.Url.ToString(); //获取客户端请求的URL信息(不包括主机和端口) str ...
- 纯JS操作服务器绑定控件(Repeat)实现表头升降排序
JS实现功能 var obj = function (id) { return "string" == typeof id ? document.getElementById(id ...
- Android进阶笔记16:ListView篇之ListView刷新显示(全局 和 局部)
一.ListView内容变化后,动态刷新的步骤(全局刷新): (1)更新适配器Adapter数据源:(不要使用匿名内部类) (2)调用适配器Adapter的刷新方法notifyDataSetChang ...
- android的个人代码总结
1.关于一个动作的实现,在Activity中可以用实现一个接口的方式来实现,在实现代码时可用IF进行判断是那个要执行的动作: 2.在软件开发过程中,软件界面的布局也非常重要:还是要多看看: