环境:centos 7.4
版本:otp_src_22.3.tar.gz rabbitmq-server-3.7.17-1.el7.noarch.rpm
模式:主备
安装
1 安装erlang
依赖:
yum install lrzsz vim -y yum install ncurses ncurses-base ncurses-devel ncurses-libs ncurses-static ncurses-term ocaml-curses ocaml-curses-devel openssl-devel zlib-devel -y yum install -y gcc gcc-c++ yum install -y unixODBC unixODBC-devel yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel gtk2-devel binutils-devel
RabbitMQ Erlang版本兼容:http://www.rabbitmq.com/which-erlang.html
Erlang各版本下载界面:http://erlang.org/download/
# tar -zxvf otp_src_22.3.tar.gz # cd otp_src_22.3/ # ./configure --prefix=/usr/local/erlang --with-ssl -enable-threads -enable-smmp-support -enable-kernel-poll --enable-hipe --without-javac # make && make install
make报错
下载 wxWidgets-3.0.5.tar.bz2 # yum install bzip2 -y # yum install -y mesa* freeglut* # bzip2 -d wxWidgets-3.0.5.tar.bz2 # tar -xvf wxWidgets-3.0.5.tar # cd wxWidgets-3.0.5 # ./configure --with-opengl --enable-debug --enable-unicode # make && make install 重新编译安装 erlang
配置环境变量
# vim /etc/profile ERL_HOME=/usr/local/erlang export PATH=${ERL_HOME}/bin:$PATH # source /etc/profile # echo $ERL_HOME [root@localhost otp_src_22.3]# erl Erlang/OTP 22 [erts-10.7] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1] [hipe] Eshell V10.7 (abort with ^G) 1> halt().
2 安装 mq
# yum install socat -y [root@localhost opt]# rpm -ivh rabbitmq-server-3.7.17-1.el7.noarch.rpm --nodeps warning: rabbitmq-server-3.7.17-1.el7.noarch.rpm: Header V4 RSA/SHA256 Signature, key ID 6026dfca: NOKEY Preparing... ################################# [100%] Updating / installing... 1:rabbitmq-server-3.7.17-1.el7 ################################# [100%] -- Unit rabbitmq-server.service has begun starting up. Mar 14 22:34:19 mq1 rabbitmq-server[4058]: /usr/lib/rabbitmq/bin/rabbitmq-server: line 187: erl: command not found Mar 14 22:34:19 mq1 systemd[1]: rabbitmq-server.service: main process exited, code=exited, status=127/n/a Mar 14 22:34:19 mq1 rabbitmqctl[4232]: /usr/lib/rabbitmq/bin/rabbitmq-env: line 428: exec: erl: not found Mar 14 22:34:19 mq1 systemd[1]: rabbitmq-server.service: control process exited, code=exited status=127 Mar 14 22:34:19 mq1 systemd[1]: Failed to start RabbitMQ broker. -- Subject: Unit rabbitmq-server.service has failed -- Defined-By: systemd -- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel [root@mq1 ~]# vim /usr/lib/rabbitmq/bin/rabbitmq-server ERL_HOME=/usr/local/erlang export PATH=$PATH:${ERL_HOME}/bin [root@mq1 ~]# systemctl start rabbitmq-server [root@mq1 ~]# systemctl status rabbitmq-server
3 拷贝文件以及启动
[root@mq1 ~]# ll /var/lib/rabbitmq/.erlang.cookie -r--------. 1 rabbitmq rabbitmq 20 Mar 12 00:00 /var/lib/rabbitmq/.erlang.cookie [root@mq1 ~]# scp /var/lib/rabbitmq/.erlang.cookie root@10.15.9.232:/var/lib/rabbitmq/. [root@mq1 ~]# chmod 400 /var/lib/rabbitmq/.erlang.cookie [root@mq1 ~]# systemctl restart rabbitmq-server Mar 14 22:44:47 mq2 rabbitmq-server[3615]: format: "Error when reading /var/lib/rabbitmq/.erlang.cookie: eacces" Mar 14 22:44:47 mq2 rabbitmq-server[3615]: label: {error_logger,error_msg} [root@mq1 ~]# chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie Mar 14 22:48:30 mq2 rabbitmqctl[10395]: /usr/lib/rabbitmq/bin/rabbitmq-env: line 428: exec: erl: not found Mar 14 22:48:30 mq2 systemd[1]: rabbitmq-server.service: control process exited, code=exited status=127 [root@mq2 opt]# erl Erlang/OTP 22 [erts-10.7] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1] [hipe] Eshell V10.7 (abort with ^G) 1> halt(). [root@mq2 opt]# vim /usr/lib/rabbitmq/bin/rabbitmq-server [root@mq2 opt]# vim /usr/lib/rabbitmq/bin/rabbitmq-env [root@mq2 opt]# systemctl restart rabbitmq-server Mar 14 22:51:14 mq2 rabbitmqctl[16135]: attempted to contact: [rabbit@mq2] Mar 14 22:51:14 mq2 rabbitmqctl[16135]: rabbit@mq2: Mar 14 22:51:14 mq2 rabbitmqctl[16135]: * connected to epmd (port 4369) on mq2 Mar 14 22:51:14 mq2 rabbitmqctl[16135]: * epmd reports: node 'rabbit' not running at all Mar 14 22:51:14 mq2 rabbitmqctl[16135]: no other nodes on mq2 Mar 14 22:51:14 mq2 rabbitmqctl[16135]: * suggestion: start the node Mar 14 22:51:14 mq2 rabbitmqctl[16135]: Current node details: Mar 14 22:51:14 mq2 rabbitmqctl[16135]: * node name: 'rabbitmqcli-16135-rabbit@mq2' Mar 14 22:51:14 mq2 rabbitmqctl[16135]: * effective user's home directory: /var/lib/rabbitmq Mar 14 22:51:14 mq2 rabbitmqctl[16135]: * Erlang cookie hash: 8J2OCS/WRyu4c4xt5rmDKw== -- The result is failed. Mar 14 22:51:14 mq2 systemd[1]: Unit rabbitmq-server.service entered failed state. Mar 14 22:51:14 mq2 systemd[1]: rabbitmq-server.service failed. Mar 14 22:51:14 mq2 polkitd[720]: Unregistered Authentication Agent for unix-process:15737:22759747 (system bus name :1.167, object path /org/freedesktop/PolicyKit1/Authen lines 2094-2132/2132 (END) [root@mq1 mnesia]# rabbitmqctl cluster_status Cluster status of node rabbit@mq1 ... [{nodes,[{disc,[rabbit@mq1]}]}, {running_nodes,[rabbit@mq1]}, {cluster_name,<<"rabbit@mq1">>}, {partitions,[]}, {alarms,[{rabbit@mq1,[]}]}]
查看日志
[root@mq1 ~]# ll /var/log/rabbitmq/ [root@mq2 rabbitmq]# tail -n 50 rabbit@mq2.log 2021-03-14 23:19:57.937 [info] <0.267.0> node : rabbit@mq2 home dir : /var/lib/rabbitmq config file(s) : (none) cookie hash : 8J2OCS/WRyu4c4xt5rmDKw== log(s) : /var/log/rabbitmq/rabbit@mq2.log : /var/log/rabbitmq/rabbit@mq2_upgrade.log database dir : /var/lib/rabbitmq/mnesia/rabbit@mq2
这里第二节点加入失败,检查 Erlang cookie hash 始终不正确,
[root@mq2 opt]# systemctl restart rabbitmq-server Mar 14 22:51:14 mq2 rabbitmqctl[16135]: attempted to contact: [rabbit@mq2] Mar 14 22:51:14 mq2 rabbitmqctl[16135]: rabbit@mq2: Mar 14 22:51:14 mq2 rabbitmqctl[16135]: * connected to epmd (port 4369) on mq2 Mar 14 22:51:14 mq2 rabbitmqctl[16135]: * epmd reports: node 'rabbit' not running at all Mar 14 22:51:14 mq2 rabbitmqctl[16135]: no other nodes on mq2 Mar 14 22:51:14 mq2 rabbitmqctl[16135]: * suggestion: start the node Mar 14 22:51:14 mq2 rabbitmqctl[16135]: Current node details: Mar 14 22:51:14 mq2 rabbitmqctl[16135]: * node name: 'rabbitmqcli-16135-rabbit@mq2' Mar 14 22:51:14 mq2 rabbitmqctl[16135]: * effective user's home directory: /var/lib/rabbitmq Mar 14 22:51:14 mq2 rabbitmqctl[16135]: * Erlang cookie hash: 8J2OCS/WRyu4c4xt5rmDKw==
上面我标注的2个地方不正确
搞了一会,我发现我的mq2节点之前再集群启动的时候 ,启动过一次,导致重新加入失败
所以:要清除数据目录,再重新启动
[root@mq2 rabbitmq]# cd mnesia/ [root@mq2 mnesia]# rm -rf * [root@mq2 mnesia]# systemctl start rabbitmq-server [root@mq2 mnesia]# rabbitmqctl cluster_status Cluster status of node rabbit@mq2 ... [{nodes,[{disc,[rabbit@mq2]}]}, {running_nodes,[rabbit@mq2]}, {cluster_name,<<"rabbit@mq2">>}, {partitions,[]}, {alarms,[{rabbit@mq2,[]}]}] [root@mq1 ~]# systemctl enable rabbitmq-server Created symlink from /etc/systemd/system/multi-user.target.wants/rabbitmq-server.service to /usr/lib/systemd/system/rabbitmq-server.service.
后续操作都ok了
# rabbitmq-plugins enable rabbitmq_management [root@mq1 ~]# rabbitmqctl add_user admin ***** Adding user "admin" ... [root@mq1 ~]# rabbitmqctl set_permissions -p / admin ".*" ".*" ".*" Setting permissions for user "admin" in vhost "/" ... [root@mq1 ~]# rabbitmqctl set_user_tags admin administrator Setting tags for user "admin" to [administrator] ... [root@mq1 ~]# netstat -tnlp|grep 5672 tcp 0 0 0.0.0.0:15672 0.0.0.0:* LISTEN 1211/beam.smp tcp 0 0 0.0.0.0:25672 0.0.0.0:* LISTEN 1211/beam.smp tcp6 0 0 :::5672 :::* LISTEN 1211/beam.smp [root@mq2 rabbitmq]# rabbitmqctl stop_app Stopping rabbit application on node rabbit@mq2 ... [root@mq2 rabbitmq]# rabbitmqctl join_cluster rabbit@mq1 Clustering node rabbit@mq2 with rabbit@mq1 [root@mq2 rabbitmq]# rabbitmqctl start_app Starting node rabbit@mq2 ... completed with 3 plugins. [root@mq2 rabbitmq]# rabbitmqctl cluster_status Cluster status of node rabbit@mq2 ... [{nodes,[{disc,[rabbit@mq1,rabbit@mq2]}]}, {running_nodes,[rabbit@mq1,rabbit@mq2]}, {cluster_name,<<"rabbit@mq1">>}, {partitions,[]}, {alarms,[{rabbit@mq1,[]},{rabbit@mq2,[]}]}] [root@mq1 ~]# rabbitmqctl cluster_status Cluster status of node rabbit@mq1 ... [{nodes,[{disc,[rabbit@mq1,rabbit@mq2]}]}, {running_nodes,[rabbit@mq2,rabbit@mq1]}, {cluster_name,<<"rabbit@mq1">>}, {partitions,[]}, {alarms,[{rabbit@mq2,[]},{rabbit@mq1,[]}]}]
如果要配置为镜像模式
可以通过命令行或者web页面配置
[root@rabbit1 ~]# rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'