简介
rabbitmq依赖于erlang虚拟机,因此需要先安装erlang虚拟机。需要注意的是erlang虚拟机与rabbitmq是有对应关系的,所以安装的时候注意版本匹配。具体可以查看如下的链接:
http://www.rabbitmq.com/which-erlang.html
我所使用的版本是rabbitmq3.7.8以及otp_src_21.0
可以直接在 http://erlang.org/download/ 下载
erlang安装
在安装erlang之前,需要先安装一下以下的几个包:
yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel
./configure --prefix=/data/program/erlang-21.0 --with-ssl --enable-threads --enable-smp-support --enable-kernel-poll --enable-hipe --without-javac
make -j4 & make install
安装完erlang之后,可以配置以下的环境变量。如果只是提供rabbitmq的运行环境,也可以不进行配置
vim /etc/profile
export ERL_HOME=/data/program/erlang-21.0/
export PATH=$PATH:$ERL_HOME/bin
rabbitmq安装
下载Binary包,解压到指定的目录下,并rabbitmq用户。修改sbin/rabbitmq-defaults文件,指定安装目录。在文件的最开始增加
RABBITMQ_HOME="/data/program/rabbitmq-server-3.7.8"
ERL_DIR="/data/program/erlang-21.0/bin/"
这两个目录分别指定了rabbitmq的安装目录以及erlang的程序可执行目录。
除了这两个参数,也可以指定其他的必要参数.此外,也可以在如下的配置文件中进行配置.从3.7.0开始,配置文件改为key-value的格式,以下链接是一个样例配置
https://github.com/rabbitmq/rabbitmq-server/blob/master/docs/rabbitmq.conf.example
vim etc/rabbitmq/rabbitmq.conf
#文件内容如下
log.file.level = warning
#也可以对IP进行监听
listeners.tcp.local = 127.0.0.1:5672
etc/rabbitmq/rabbitmq-env.conf是一个shell文件,用于覆盖变量
启动:
sudo adduser -s /sbin/nologin rabbitmq
sudo chown -R rabbitmq /data/program/rabbitmq-server-3.7.8/
sudo -u rabbitmq /data/program/rabbitmq-server-3.7.8/sbin/rabbitmq-server
增加-detached参数,可以以deamon的方式运行
状态查看:
sudo -u rabbitmq /data/program/rabbitmq-server-3.7.8/sbin/rabbitmqctl status
停止:
sudo -u rabbitmq /data/program/rabbitmq-server-3.7.8/sbin/rabbitmqctl stop
ps
如果出现ERROR: epmd error for host "yourhostname": timeout
原因是:主机名和ip不匹配,需要更改hostname或者/etc/hosts文件
使用客户端时,记得使用相同的用户,例如rabbitmq,否则会导致erlang cookie不一致,客户端无法连接
集群搭建
假定有两个机器,分别为host1和host2,ip分别为ip1和ip2。首先需要分别在两台机器上面配置host,使得这两个机器可以通过hostname直接互相通信。分别在两个机器上面添加如下的host
ip1 host1
ip2 host2
将host2加入host1组成一个集群,安装上面的命令启动rabbitmq的话可以在rabbitmq账号的home目录下获取到一个.erlang.cookie文件,该文件是隐藏的。将host1的该文件拷贝到host2的对应目录下,只有rabbitmq启动之后,该文件才会生成。该文件是用来做集群间的通讯认证的。如果有多个结点,确保多个结点的该文件内容一致。在各个结点上面启动rabbitmq之后,需要在从节点上面执行如下的命令,在本文中是在host2上面执行:
sudo -u rabbitmq /data/program/rabbitmq-server-3.7.8/sbin/rabbitmqctl stop_app
sudo -u rabbitmq /data/program/rabbitmq-server-3.7.8/sbin/rabbitmqctl reset
sudo -u rabbitmq /data/program/rabbitmq-server-3.7.8/sbin/rabbitmqctl join_cluster rabbit@host1 --ram
sudo -u rabbitmq /data/program/rabbitmq-server-3.7.8/sbin/rabbitmqctl start_app
其中--ram参数用于指定队列保存在内存中,这种方式性能会好一些,默认是保存在disc中,将会进行持久化。配置之后可以通过如下命令
sudo -u rabbitmq /data/program/rabbitmq-server-3.7.8/sbin/rabbitmqctl cluster_status
通过这种方式设置之后的集群,主要是起到了分散压力的作用。客户端连上之后,rabbitmq将自动将不同的队列分散到不同的节点。对于一些较为敏感的数据,需要确保数据的安全性,可以通过rabbitmq提供的镜像模式确保高可用。为了达到该目的,在继续搭建完成之后,可以通过如下的命令搭建镜像机器
sudo -u rabbitmq /data/program/rabbitmq-server-3.7.8/sbin/rabbitmqctl set_policy ha-all-policy "^" '{"ha-mode":"all", "ha-sync-mode":"automatic"}'
该命令可以根据不同的参数,指定具体的队列是否采用镜像,或者将队列同步到多少个子节点。
此外,对于该命令的一些详细的配置可以参考http://www.rabbitmq.com/ha.html