2

        作为微服务的消息中心,单节点一定支撑不住庞大的压力,本节,笔者带大家去搭建一套rabbitmq集群,以及用HaProxy去代理集群节点。

一、erlang环境
别去搞什么yum安装了,很慢很慢,这是最新的源码地址
http://erlang.org/download/otp_src_19.3.tar.gz
建议迅雷或者其他工具先下载下来,然后用rz(没有安装的同学可以yum install lrzsz -y)上传到服务器。
/* 安装依赖 */
yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel unixODBC-devel
/* 编译安装 */
tar -xzvf otp_src_19.3.tar.gz
cd ./otp_src_19.3
./configure --prefix=/usr/erlang --without-javac 
make && make install
二、rabbitmq单节点安装
/* rabbitmq下载地址 */
https://dl.bintray.com/rabbitmq/rabbitmq-server-rpm/rabbitmq-server-3.6.14-1.el7.noarch.rpm

/* 导入 */
rpm --import https://www.rabbitmq.com/rabbitmq-release-signing-key.asc

/* 安装 */
yum install rabbitmq-server-3.6.14-1.el7.noarch.rpm

/* 开启web管理界面 */
rabbitmq-plugins enable rabbitmq_management

/* 开启15672 web端口 */
firewall-cmd --zone=public --add-port=15672/tcp --permanent
firewall-cmd —reload

/* 用户命令相应的命令 */
(1) 新增一个用户rabbitmqctl add_user Username Password
(2) 删除一个用户rabbitmqctl delete_user Username
(3) 修改用户的密码rabbitmqctl change_password Username Newpassword
(4) 查看当前用户列表rabbitmqctl list_users

/* 允许用户远程访问 */
rabbitmqctl set_permissions -p "/" User ".*" ".*" ".*"

/* 设置用户角色的命令 */
rabbitmqctl set_user_tags User Tag
User为用户名, Tag为角色名(对应于上面的administrator,monitoring,policymaker,management,或其他自定义名称)。
三、rabbitmq集群搭建

       建议将1节点虚拟机复制两份 这样可以保证rabbitmq cookie一致,不用做变更。然后再分别编辑三台节点的hosts文件,三台节点hosts文件一致。

vi /etc/hosts
/* 加入三个节点 */
192.168.41.140   rabbitmq-node1.com rabbitmq-node1
192.168.41.141   rabbitmq-node2.com rabbitmq-node2
192.168.41.142   rabbitmq-node3.com rabbitmq-node3

重启三台服务器

/* 分别以detached方式启动三台rabbitmq */
rabbitmq-server -detached
// 如果提示PID FILE不能写入,可以关闭应用,直接以服务方式启动,关闭之后重启仍然提示有实例正在运行可以强制杀死线程
ps aux | grep rabbitmq
kill -9 xxxx
/* 启动服务 */
service rabbitmq-server start

让node2、node3加入集群

/* 将node2节点加入node1 作为RAM类型节点 */
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@rabbitmq-node1 --ram
rabbitmqctl start_app

/* 将node3节点加入node1 作为disc类型节点 */
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@rabbitmq-node1
rabbitmqctl start_app

/* 查看集群信息 */
rabbitmqctl cluster_status

打开web管理界面查看,三台节点已经成功启动

安装HAProxy来代理三台节点

/* haproxy下载链接 */
http://www.haproxy.org/download/1.7/src/haproxy-1.7.9.tar.gz
/* 根据平台选择编译参数 */
uname -r

/* 安装c/c++ */
yum install gcc gcc-c++

/* 笔者平台 */
3.10.0-693.5.2.el7.x86_64
// 所以编译参数为
make TARGET=linux2628 PREFIX=/usr/local/haproxy
make install PREFIX=/usr/local/haproxy

/* 添加环境变量 */
vi /etc/profile
export PATH=$PATH:/usr/local/haproxy/sbin
source /etc/profile

/* 复制bin文件,后续启动需要 */
cp /usr/local/haproxy/sbin/haproxy /usr/sbin/
haproxy -v 后显示如下则表示成功

HA-Proxy version 1.7.9 2017/08/18
Copyright 2000-2017 Willy Tarreau <willy@haproxy.org>
/* 拷贝启动文件 */
cp examples/haproxy.init /etc/init.d/haproxy
chmod 755 /etc/init.d/haproxy

/* 创建系统账号 */
groupadd haproxy
useradd -g haproxy -M -s /sbin/nologin haproxy

/* 创建配置文件 */
mkdir /etc/haproxy
vi /etc/haproxy/haproxy.cfg
====
global
    #设置日志
    log 127.0.0.1 local3 info
    chroot /usr/local/haproxy
    #用户与用户组
    user haproxy
    group haproxy
    #守护进程启动
    daemon
    #最大连接数
    maxconn 4000
listen rabbitmq_local_cluster
   bind 0.0.0.0:5672
   #配置TCP模式
   mode tcp
   option tcplog
   #简单的轮询
   balance roundrobin
  #rabbitmq集群节点配置
  # inter 2000 健康检查时间间隔2秒
  # rise 3 检测多少次才认为是正常的
  # fall 3 失败多少次才认为是不可用的
  # weight 30 权重
  # 需要转发的ip及端口
    server rabbitmq-node1 192.168.41.140:5672 check inter 2000 rise 3 fall 3 weight 30
    server rabbitmq-node2 192.168.41.141:5672 check inter 2000 rise 3 fall 3 weight 30
    server rabbitmq-node3 192.168.41.142:5672 check inter 2000 rise 3 fall 3 weight 30

#配置haproxy web监控,查看统计信息
listen private_monitoring
    bind :1080
    mode http
    option httplog
    stats enable
    #设置haproxy监控地址为http://localhost:8100/stats
    stats uri /stats
    stats refresh 30s
    #添加用户名密码认证
    stats auth admin:admin
    
/* 编辑rsyslog */
vi /etc/rsyslog.conf

// 去掉下面两行前的#
$ModLoad imudp
$UDPServerRun 514

// 添加下面一行保存
local3.*  /var/log/haproxy.log

// 重启rsyslog
systemctl restart rsyslog
启动haproxy
service haproxy start

/* 开放1080端口 */
firewall-cmd --zone=public --add-port=1080/tcp --permanent
firewall-cmd --reload

访问http://ip:1080/stats,输入账号密码 admin admin 如下图

用我们上一节搭建的微服务去链接HaProxy
这是配置信息
module.exports = Object.assign({
  rabbitMq_host: '192.168.41.140', // 替换成haproxy的ip
  rabbitMq_port: '5672', // haproxy代理端口
  rabbitMq_user: '***', // 这里替换成自己rabbitmq-server上的用户
  rabbitMq_password: '*****', // 这里替换成自己rabbitmq-server上的密码
  // server_host: '106.14.77.183',
  server_host: '127.0.0.1',
  server_port: 8889,
  rabbitMq_queue: {
    logic01: 'server',
    logic02: 'server_test'
  }
});
再去查看rabbitmq集群监控界面,已经多出了一个连接一个queue和一个chanel

查看queue,发现名字和我们配置的是一样的,链接成功

启动三个同样的微服务后,发现链接变成3,消费者也变成了3

        至此rabbitmq集群以及HaProxy负载均衡搭建完毕。如果各位看官对笔者的文章感兴趣的话,希望关注下笔者的个人公众号,大家一起交流探讨,如有写的不对的地方,还希望各位指正,笔者深感荣幸,最后感谢大家的阅读。


burning0xb
137 声望4 粉丝

全栈工程师