centos 6.5 rabbitmq 安装和集群,镜像部署
安装erlang:
yum install gcc glibc-devel make ncurses-devel openssl-devel xmlto
wget http://erlang.org/download/otp_src_20.2.tar.gz
tar -zxvf otp_src_20.2.tar.gz
cd otp_src_20.2
./configure --prefix=/data/soft/erlang
make && make install
# 添加环境变量:
export PATH=$PATH:/data/soft/erlang/bin
安装rabbitmq:
wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.1/rabbitmq-server-generic-unix-3.6.1.tar.xz
xz -d rabbitmq-server-generic-unix-3.6.1.tar.xz
tar -xvf rabbitmq-server-generic-unix-3.6.1.tar
mv rabbitmq_server-3.6.1 /data/soft/rabbitmq
# 启动:
./rabbitmq-server -detached
# 关闭:
./rabbitmqctl stop
# 配置网页插件:
mkdir /etc/rabbitmq
./rabbitmq-plugins enable rabbitmq_management
默认账号:guest 密码:guest
*** 默认账号和密码无法登陆,下面的操作是创建一个可以登陆的账号。
# web 网页登陆:
http:IP:15672/ 回车
## 创建一个账号 admin 密码是admin:
rabbitmqctl add_user admin admin
## 给admin 赋予权限:
rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"
## 给admin 赋予新的身份:
rabbitmqctl set_user_tags admin administrator
## 给admin 更改密码:
rabbitmqctl change_password admin xianlife.com
### 配置文件:
git clone https://github.com/rabbitmq/rabbitmq-server.git
镜像集群配置:
RABBITMQ搭建集群
环境:有二台主机,主机名和IP如下,rabbitmq的执行用户为rabbitmq,所属组为rabbitmq。
IP 主机名
10.81.35.124 rabbitmq-m
10.81.35.119 rabbitmq-s
同步erlang.cookie
杀掉rabbitmq-s 的rabbitmq进程:
ps –ef|grep rab|awk ‘{print $2}’|xargs kill -9。–用service rabbitmq-servier stop停会有遗留进程。
登陆rabbitmq-m(rabbitmq-m上的rabbitmq服务不能关),执行
cd /root/ –进入erlang.cookie所在目录,只有ls –al能看见此文件
chmod 777 .erlang* –该文件默认为400权限,为方便传输,先修改权限,非必须操作
scp .erlang.cookie rabbitmq@10.81.35.119:/root/ –将此文件传给另外两条主机
chmod 400 .er* –恢复文件权限
分别在rabbitmq-s 上执行
chown rabbitmq:rabbitmq .er* –修改文件所属用户和所属组
chmod 400 .er* –修改文件权限
service rabbitmq-server start
# 加入集群
## 查询rabbitmq-m节点名称
rabbitmqctl cluster_status
Cluster status of node rabbit@rabbitmq-m …
[{nodes,[{disc,[rabbit@rabbitmq-m]}]},{running_nodes,[rabbit@ rabbitmq-m]}]
…done.
### rabbitmq-s 加入rabbitmq-m 节点.
#关掉rabbitmq-s服务
rabbitmqctl stop_app
#rabbitmq-s加入rabbitmq-m, rabbitmq-s必须能通过rabbitmq-m的主机名ping通rabbitmq-m。
rabbitmqctl join_cluster rabbit@rabbitmq-m
#启动rabbitmq2服务
rabbitmqctl start_app
查看集群信息
#此时里面就应该能看见其他的多个节点。集群名字为rabbit@rabbitmq。
rabbitmqctl cluster_status
用相同的方法把rabbitmq3 或者其他rabbitmq 主机也加入rabbitmq-m。
更改节点属性:
# –停止rabbitmq服务
rabbitmqctl stop_app
# –更改节点为磁盘或内存节点
rabbitmqctl change_cluster_node_type disc/ram
# –开启rabbitmq服务
rabbitmqctl start_app
# 查看状态:
1 master 上管理页面看
2 rabbitmqctl cluster_status 命令查看
[root@rabbitmq-m rabbitmq]# rabbitmqctl cluster_status
Cluster status of node 'rabbit@rabbitmq-m' ...
[{nodes,[{disc,['rabbit@rabbitmq-m']},{ram,['rabbit@rabbitmq-s']}]},
{running_nodes,['rabbit@rabbitmq-s','rabbit@rabbitmq-m']},
{cluster_name,<<"rabbit@rabbitmq-m">>},
{partitions,[]},
{alarms,[{'rabbit@rabbitmq-s',[]},{'rabbit@rabbitmq-m',[]}]}]
[root@rabbitmq-m rabbitmq]#
创建测试queue:
rabbitmqctl eval 'rabbit_exchange:declare({resource, <<"/">>, exchange, <<"test-topic">>}, topic, true, false, false, []).'
rabbitmqctl eval 'rabbit_amqqueue:declare({resource, <<"/">>, queue, <<"test-queue">>}, true, false, [], none).'
rabbitmqctl eval 'rabbit_binding:add({binding, {resource, <<"/">>, exchange, <<"test-topic">>}, <<"*.com.cn">>, {resource, <<"/">>, queue, <<"test-queue">>}, []}).'
这三条命令执行后的最终结果是:在 / 虚拟主机下创建了topic类型的,持久化的,名为 test-topic的exchange,创建了持久化的,名为 test-queue 的queue,该队列以 *.com.cn 的routing key绑定到了 test-topic这个exchange上。
1 web页面查看是否创建成功。
2 查看从机器的queue 是否同步信息。
使用发现的问题
1 rabbitmq
1.1 hosts 要写主机名和IP的对应关系进去。
1.2 DNS 解析要能解析到rabbitmq-m 的对应ip,否则从启动会很慢,因为要去连接mq的主机,一直找不到就会等到超时。
2 rabbitmq cluster_status
2.1 mq全都挂了,一定是最后退出的,先启动.
2.2 如果主挂了而从还在运行的状况。
2.2.1 等最后退出的mq起来,其他的启动后自动连接cluster。
2.2.2 加入其它的mq-m。
需要确定master 是哪台,如果最后退出的自动升级成 master。