准备工作
搭建 RabbitMQ Server 单机版
搭建 RabbitMQ Server 高可用集群
搭建 HAProxy 负载均衡
一、准备工作
最好三台服务器都可以连网
1.node1:172.16.253.57
1.1修改主机名并修改hosts文件
hostnamectl set-hostname node1
echo "172.16.253.57 node1" >> /etc/hosts
echo "172.16.253.14 node2" >> /etc/hosts
echo "172.16.253.62 node3" >> /etc/hosts
1.2配置时间同步服务器
yum -y install ntp
vi /etc/ntp.conf
取消注释21-24行
#添加以下两行在25-26行
server 127.127.1.0
fudge 127.127.1.0 stratum 10
取消注释并修改17行 (允许网段)
restrict 172.16.253.0 mask 255.255.255.0 nomodify notra
#date -s 设置时间
systemctl restart ntpd
systemctl enable ntpd
reboot
2.node2:172.16.253.14
2.1修改主机名并修改hosts文件
hostnamectl set-hostname node2
echo "172.16.253.57 node1" >> /etc/hosts
echo "172.16.253.14 node2" >> /etc/hosts
echo "172.16.253.62 node3" >> /etc/hosts
2.2node2节点同步时间服务器
yum -y install ntp
ntpdate -u 172.16.253.57
echo "ntpdate -u 172.16.253.57" >> /etc/rc.d/rc.local
systemctl restart ntpd
systemctl enable ntpd
crontab -e
*/3 * * * * /usr/sbin/ntpdate -u 172.16.253.57 &> /dev/null
systemctl restart crond
systemctl enable crond
3.node3参照node2
reboot
二、搭建 RabbitMQ Server 单机版 (node1节点)
1.更新yum源
yum clean all
yum makecache
yum -y upgrade # 更新完之后内核版本本变为 7.4.1708
2.基础服务
2.1 安装RabbitMQ基础服务
wget /pub/epel/epel-release-latest-7.noarch.rpm
yum -y install epel-release-latest-7.noarch.rpm
yum -y install erlang
2.2安装RabbitMQ:
wget /releases/rabbitmq-server/v3.6.6/rabbitmq-server-3.6.6-1.el7.noarch.rpm
yum -y install rabbitmq-server-3.6.6-1.el7.noarch.rpm
2.3启动mq
systemctl start rabbitmq-server
systemctl enable rabbitmq-server
systemctl status rabbitmq-server
2.4启动 RabbitMQ Web 管理控制台:
rabbitmq-plugins enable rabbitmq_management
The following plugins have been enabled:mochiwebwebmachinerabbitmq_web_dispatchamqp_clientrabbitmq_management_agentrabbitmq_managementApplying plugin configuration to rabbit@node1... started 6 plugins.
2.5RabbitMQ Server 默认guest用户,只能localhost地址访问,我们还需要创建管理用户:
rabbitmqctl add_user admin admin123 && rabbitmqctl set_user_tags admin administrator && rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
Creating user "admin" ...Setting tags for user "admin" to [administrator] ...Setting permissions for user "admin" in vhost "/" ...
2.6开启防火墙并添加规则
systemctl start firewalld
systemctl status firewalld
firewall-cmd --zone=public --permanent --add-port=4369/tcp && \firewall-cmd --zone=public --permanent --add-port=25672/tcp && \firewall-cmd --zone=public --permanent --add-port=5671-5672/tcp && \firewall-cmd --zone=public --permanent --add-port=15672/tcp && \firewall-cmd --zone=public --permanent --add-port=61613-61614/tcp && \firewall-cmd --zone=public --permanent --add-port=1883/tcp && \firewall-cmd --zone=public --permanent --add-port=8883/tcp
一行显示为:firewall-cmd --zone=public --permanent --add-port=4369/tcp && firewall-cmd --zone=public --permanent --add-port=25672/tcp && firewall-cmd --zone=public --permanent --add-port=5671-5672/tcp && firewall-cmd --zone=public --permanent --add-port=15672/tcp && firewall-cmd --zone=public --permanent --add-port=61613-61614/tcp && firewall-cmd --zone=public --permanent --add-port=1883/tcp && firewall-cmd --zone=public --permanent --add-port=8883/tcp
#重启防火墙:
firewall-cmd --reload
#success
2.7测试
修改本地hosts文件 添加 “172.16.253.57 node1 172.16.253.14 node2 172.16.253.62 node3” 三条记录
浏览器输入“172.16.253.57:15672” 或者“node1:15672”进入rabbitmq登陆页面
将上面的搭建过程,在node2、node3服务器上,再做重复一边。
三、搭建 RabbitMQ Server 高可用集群
一定要注意关启服务的顺序,否则很可能会报错!!!
1.将node2和node3 关闭节点和应用
rabbitmqctl stop
2.将node1服务器中的.erlang.cookie文件,拷贝到node2&&node3服务器上,保证相同的Erlang Cookie
find / -name ".erlang.cookie"/var/lib/rabbitmq/.erlang.cookiecat /var/lib/rabbitmq/.erlang.cookieSMQKOGEBQYCPVHIOFANL
scp /var/lib/rabbitmq/.erlang.cookie root@node2:/var/lib/rabbitmq
scp /var/lib/rabbitmq/.erlang.cookie root@node3:/var/lib/rabbitmq
3.node2和node3上重新启动节点和应用
cat /var/lib/rabbitmq/.erlang.cookie 必须和node1一致
rabbitmq-server -detached
4.node2、node3执行---将node2节点加入到node1集群
rabbitmqctl stop_apprabbitmqctl join_cluster rabbit@node1rabbitmqctl start_app
查看各个节点集群状态
rabbitmqctl cluster_statusCluster status of node rabbit@node1 ...[{nodes,[{disc,[rabbit@node1,rabbit@node2,rabbit@node3]}]},{running_nodes,[rabbit@node2,rabbit@node3,rabbit@node1]},{cluster_name,<<"rabbit@node1">>},{partitions,[]},{alarms,[{rabbit@node2,[]},{rabbit@node3,[]},{rabbit@node1,[]}]}]Cluster status of node rabbit@node2 ...[{nodes,[{disc,[rabbit@node1,rabbit@node2,rabbit@node3]}]},{running_nodes,[rabbit@node1,rabbit@node3,rabbit@node2]},{cluster_name,<<"rabbit@node1">>},{partitions,[]},{alarms,[{rabbit@node1,[]},{rabbit@node3,[]},{rabbit@node2,[]}]}]Cluster status of node rabbit@node3 ...[{nodes,[{disc,[rabbit@node1,rabbit@node2,rabbit@node3]}]},{running_nodes,[rabbit@node2,rabbit@node1,rabbit@node3]},{cluster_name,<<"rabbit@node1">>},{partitions,[]},{alarms,[{rabbit@node2,[]},{rabbit@node1,[]},{rabbit@node3,[]}]}]
5.在创建集群前后报错及解决方案
报错信息1:rabbit@node2:* connected to epmd (port 4369) on node2* epmd reports: node 'rabbit' not running at allno other nodes on node2* suggestion: start the node
报错信息:2Stopping and halting node rabbit@node2 ...Error: unable to connect to node rabbit@node2: nodedownDIAGNOSTICS===========attempted to contact: [rabbit@node2]rabbit@node2:* connected to epmd (port 4369) on node2* epmd reports node 'rabbit' running on port 25672* TCP connection succeeded but Erlang distribution failed* suggestion: hostname mismatch?* suggestion: is the cookie set correctly?* suggestion: is the Erlang distribution using TLS?
解决方案:先强制杀死,再重启节点和应用ps -ef |grep rabbitmq|grep -v grep |awk '{print $2}'|xargs kill -9rabbitmq-server -detached
rabbitmqctl stop_app 仅关闭应用,不关闭节点
rabbitmqctl start_app 开启应用
rabbitmq--server -detached 启动节点和应用
rabbitmqctl 关闭节点和应用
6.web页面显示
四、搭建 HAProxy 负载均衡
1.由于RabbitMQ 本身不提供负载均衡,搭建 HAProxy,用作 RabbitMQ 集群的负载均衡。
2.HAProxy 安装在node1服务器上
yum -y install haproxy
3.配置 HAProxy:
#copy配置文件并修改
cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak
vi /etc/haproxy/haproxy.cfg #删除以前代码并添加以下代码
globallog 127.0.0.1 local0 infolog 127.0.0.1 local1 noticedaemonmaxconn 4096defaultslog globalmode tcpoption tcplogoption dontlognullretries 3option abortonclosemaxconn 4096timeout connect 5000mstimeout client 3000mstimeout server 3000msbalance roundrobinlisten private_monitoringbind 0.0.0.0:8100mode httpoption httplogstats refresh 5sstats uri /statsstats realm Haproxystats auth admin:adminlisten rabbitmq_adminbind 0.0.0.0:8102server node1 node1:15672server node2 node2:15672server node3 node3:15672listen rabbitmq_clusterbind 0.0.0.0:8101mode tcpoption tcplogbalance roundrobintimeout client 3htimeout server 3hserver node1 node1:5672 check inter 5000 rise 2 fall 3server node2 node2:5672 check inter 5000 rise 2 fall 3server node3 node3:5672 check inter 5000 rise 2 fall 3
4.启动 HAProxy:
haproxy -f /etc/haproxy/haproxy.cfg
5.外部访问的话,需要关闭下防火墙:
systemctl stop firewalld.service
systemctl disable firewalld.service
6.负载均衡web显示
HAProxy 配置了三个地址:
http://node1:8100/stats:HAProxy 负载均衡信息地址,账号密码:admin/admin。
http://node1:8101:RabbitMQ Server Web 管理界面(基于负载均衡)。
http://node1:8102:RabbitMQ Server 服务地址(基于负载均衡)。
通过访问http://node1:8100/stats,查看 HAProxy 负载均衡信息:
至此,rabbitmq单机、集群、负载均衡都已配置完毕!