资料参考网址
http://blog.youkuaiyun.com/woogeyu/article/details/51119101
http://www.cnblogs.com/lion.net/p/5725474.html
https://segmentfault.com/a/1190000010693696#articleHeader4
https://segmentfault.com/a/1190000010702020
rabbitMQ集群搭建注意问题
不同于单机多节点的情况,在多机环境,如果要在cluster集群内部署多个节点,需要注意两个方面:
1 保证需要部署的这几个节点在同一个局域网内
2 需要有相同的Erlang Cookie,否则不能进行通信,为保证cookie的完全一致,采用从一个节点copy的方式复制到其他节点。
时间同步:
yum install ntpdate
ntpdate time.nist.gov
环境准备
192.168.138.131 centos-01
192.168.138.132 centos-02
192.168.138.133 centos-03
各节点都要安装RabbitMQ(集群前提) RabbitMQ 安装需要依赖 Erlang 环境
yum install wget
$ cd /opt
$ wget http://www.rabbitmq.com/releases/erlang/erlang-19.0.4-1.el7.centos.x86_64.rpm
$ yum install erlang-19.0.4-1.el7.centos.x86_64.rpm
安装 RabbitMQ
$ cd /opt
$ wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.10/rabbitmq-server-3.6.10-1.el7.noarch.rpm
$ yum install rabbitmq-server-3.6.10-1.el7.noarch.rpm
cd /sbin/
rabbitmq-plugins enable rabbitmq_management (管理界面开启)
rabbitmq-server -detached (后台启动)或者 service rabbitmq-server start
service rabbitmq-server status
rabbitmqctl stop
放开5672与15672端口
firewall-cmd --permanent --zone=public --add-port=5672/tcp
firewall-cmd --permanent --zone=public --add-port=15672/tcp
systemctl restart firewalld.service
访问http://ip:15672/ 账户:guest 密码: guest登陆不进去解决
cd /var/log/rabbitmq/
less rabbit@localhost.log
这里显示的是没有找到配置文件,我们可以自己创建这个文件
config file(s) : /etc/rabbitmq/rabbitmq.config (not found)
创建rabbitmq.config
cd /etc/rabbitmq/
touch rabbitmq.config
vi rabbitmq.config
编辑内容如下:
[{rabbit, [{loopback_users, []}]}].
注意:这里的意思是开放使用,rabbitmq默认创建的用户guest,密码也是guest,这个用户默认只能是本机访问,localhost或者127.0.0.1,从外部访问需要添加上面的配置。
开机自启动
chkconfig rabbitmq-server on
设置不同节点间同一认证的Erlang Cookie 使用以下命令将centos-01中的/var/lib/rabbitmq/.erlang.cookie 复制到其他节点。在centos-01节点运行以下命令:
cd /var/lib/rabbitmq/
ll -a .erlang.cookie (该文件是隐藏文件)
scp /var/lib/rabbitmq/.erlang.cookie root@centos-02:/var/lib/rabbitmq/.erlang.cookie
scp /var/lib/rabbitmq/.erlang.cookie root@centos-03:/var/lib/rabbitmq/.erlang.cookie
会提示输入yes 和 密码
由于文件是400的权限,所以在centos-02以及centos-03节点运行以下命令:
chmod 600 /var/lib/rabbitmq/.erlang.cookie
界面
在centos-01节点增加用户,并且为用户赋予权限
rabbitmqctl add_user pyps pyps
rabbitmqctl set_user_tags pyps administrator
rabbitmqctl set_permissions -p / pyps '.*' '.*' '.*'
通过http://192.168.138.131:15672 用户名为:pyps 密码为:pyps联入第一台配置成功的RabbitMQ服务器。其他节点暂不配置
组成集群
这个centos-01节点也可以不执行,直接在节点服务器执行下边的脚本,不过得保证这个rabbitmq服务是正常启动的
centos-01 $ rabbitmqctl stop_app
按照顺序执行 先centos-02,centos-03
centos-02 $ rabbitmqctl stop_app # 停止rabbitmq服务
centos-02 $ rabbitmqctl join_cluster rabbit@centos-01 # centos-02和centos-01构成集群, centos-02必须能通过centos-01的主机名ping通
centos-02 $ rabbitmqctl start_app # 开启rabbitmq服务
centos-03 $ rabbitmqctl stop_app # 停止rabbitmq服务
centos-03 $ rabbitmqctl join_cluster rabbit@centos-01 # centos-03和centos-01构成集群, centos-02必须能通过centos-01的主机名ping通
centos-03 $ rabbitmqctl start_app
#要复制队列内容到集群里的每个节点,需要创建镜像队列
RabbitMQ镜像功能:(在普通集群的中任意节点启用策略,策略会自动同步到集群节点)
rabbitmqctl set_policy -p hrsystem ha-allqueue"^" '{"ha-mode":"all"}'
例如下面的命令,^message 这个规则要根据自己修改,这个是指同步"message"开头的队列名称,我们配置时使用的应用于所有队列,所以表达式为"^"。
rabbitmqctl set_policy -p hrsystem ha-allqueue "^message" '{"ha-mode":"all"}'
分别查看下每个节点
rabbitmqctl cluster_status
每个节点
firewall-cmd --permanent --zone=public --add-port=25672/tcp
systemctl restart firewalld.service
或者关闭防火墙
systemctl stop firewalld.service
安装HAProxy
选择开源的HAProxy为RabbitMQ集群做负载均衡器,在CentOS 7.0中安装HAProxy。
1安装epel(清华大学开源软件镜像站)
rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/epel/6/x86_64/epel-release-6-8.noarch.rpm
2 安装HAProxy
yum list |grep haproxy
yum -y install haproxy.x86_64
HA-Proxy version 1.5.18
3 配置HAProxy(这台机器centos-03 192.168.138.133)
cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak (备份)
vi /etc/haproxy/haproxy.cfg
####################################################################
listen private_monitoring
bind 192.168.138.133:8989
mode http
option httplog
log global
stats enable
stats refresh 30s
stats show-node
stats uri /haproxy?stats
stats realm Haproxy\ Statistics
stats auth admin:admin
####################################################################
listen rabbitmq_local_cluster
bind 192.168.138.133:5670
option tcplog
mode tcp
timeout client 3h
timeout server 3h
option clitcpka
balance roundrobin
server rabbit131 192.168.138.131:5672 check inter 5s rise 2 fall 3
server rabbit132 192.168.138.132:5672 check inter 5s rise 2 fall 3
server rabbit133 192.168.138.133:5672 check inter 5s rise 2 fall 3
启动访问http://192.168.138.133:8989/haproxy?stats无显示页面 解决办法
(当前版本HA-Proxy version 1.5.18) 低于1.7.5版本需要执行
vi /etc/sysconfig/selinux
SELINUX=disabled
:wq! #保存退出
reboot
放开5670与8989端口
firewall-cmd --permanent --zone=public --add-port=5670/tcp
firewall-cmd --permanent --zone=public --add-port=8989/tcp
firewall-cmd --permanent --zone=public --list-ports
systemctl restart firewalld.service
service haproxy status #查看状态
service haproxy start #启动
service haproxy stop #关闭
service haproxy restart #重启
chkconfig haproxy on #设置开机启动
各节点 启用stomp plugin命令代码 websocket使用了rabbitmq stomp协议 需要启动他
rabbitmq-plugins enable rabbitmq_web_stomp
rabbitmq-plugins enable rabbitmq_web_stomp_examples