1.自动化安装脚本
######下载软件包 wget http://erlang.org/download/otp_src_20.0.tar.gz -P /srv/ wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.9/rabbitmq-server-generic-unix-3.6.9.tar.xz -P /srv/
######安装relang yum install -y gcc glibc-devel make ncurses-devel openssl-devel xmlto tar -zxvf /srv/otp_src_20.0.tar.gz -C /srv cd otp_src_20.0 ./configure --prefix=/srv/erlang make && make install cat >> /etc/profile <<eof export PATH=$PATH:/srv/erlang/bin eof
source /etc/profile
######安装simpleJson cd /srv/ tar zxvf simplejson-3.11.1.tar.gz cd simplejson-3.11.1 python setup.py install
#####安装rabbitmq cd /srv xz -d rabbitmq-server-generic-unix-3.6.9.tar.xz && tar -xvf rabbitmq-server-generic-unix-3.6.9.tar mv rabbitmq_server-3.6.9 rabbitmq cat >> /etc/profile <<eof export PATH=$PATH:/srv/rabbitmq/sbin eof
source /etc/profile ##启动 rabbitmq-server -detached ##查询状态 rabbitmqctl status
##安装web插件 rabbitmq-plugins enable rabbitmq_management
#关闭 rabbitmqctl stop #启动 rabbitmq-server -detached
#web访问地址ip:15672 ##web查询用户 rabbitmqctl list_users ##新建用户并赋予权限 rabbitmqctl add_user root admin-rabbitmq rabbitmqctl set_permissions -p "/" root ".*" ".*" ".*" rabbitmqctl set_user_tags root administrator
|
2.普通模式集群搭建
这里选用三台主机,主机名分别是hidden1, hidden2, hidden3
1 在这三台机器中安装rabbitmq-server, 参考上面。
2 读取其中一个节点的cookie, 并复制到其他节点(节点之间通过cookie确定相互是否可通信)。
cookie存放在/var/lib/rabbitmq/.erlang.cookie或者$HOME/.erlang.cookie中。
3 逐个启动节点 rabbitmq-server -detached
4 查看各节点的状态: rabbitmqctl status, rabbitmqctl cluster_status
5 配置各节点的hosts文件( vim /etc/hosts)
xxx.xxx.xxx.xxx hidden1
xxx.xxx.xxx.xxx hidden2
xxx.xxx.xxx.xxx hidden3
6 建立集群
以hidden1为主节点,在hidden2上:
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@hidden1
rabbitmqctl start_app
hidden3上的操作与hidden2的雷同。
最后通过rabbitmqctl cluster_status查看集群的状态信息:
[{nodes,[{disc,[rabbit@hidden1,'rabbit@hidden2','rabbit@hidden3']}]},
{running_nodes,[rabbit@hidden1,'rabbit@hidden2','rabbit@hidden3']},
{cluster_name,<<"rabbit@hidden1">>},
{partitions,[]}]
3.常用命令
服务启动关闭
启动:rabbitmq-server -detached
关闭:rabbitmqctl stop
集群配置相关命令
rabbitmqctl stop_app
rabbitmqctl reset
在当前集群中加入某节点:rabbitmqctl join_cluster {rabbit_node_name} (某些低版本可以采用rabbitmqctl cluster {rabbit_node_name})
rabbitmqctl start_app
集群状态:rabbitmqctl cluster_status
将某节点剔除出当前集群:rabbitmqctl forget_cluster_node {rabbit_node_name}
插件管理
开启某个插件: rabbitmq-plugins enable {插件名}
关闭某个插件: rabbitmq-plugins disable {插件名}
有关插件名可以在rabbitmq的安装目录下的plugins目录中查看:$RABBITMQ_HOME/plugins
举例:
rabbitmq-plugins enable rabbitmq_management
rabbitmq-plugins list
用户管理
添加用户:rabbitmqctl add_user {username} {password}
删除用户:rabbitmqctl delete_user {username}
修改密码:rabbitmqctl change_password {username} {newpassword}
设置用户角色:rabbitmqctl set_user_tags {username} {tag}
tag可以为administrator, monitoring, management
举例:
rabbitmqctl add_user root root
rabbitmqctl set_user_tags root administrator
rabbitmqctl list_users
权限管理
权限设置:rabbitmqctl set_permissions [-p vhostpath] {user} {conf} {write} {read}
conf:一个正则表达式match哪些配置资源能够被该用户访问。
write:一个正则表达式match哪些配置资源能够被该用户读。
read:一个正则表达式match哪些配置资源能够被该用户访问。
查看(指定vhost)所有用户的权限信息:rabbitmqctl list_permissions [-p vhostPath]
查看指定用户的权限信息:rabbitmqctl list_user_permissions {username}
清除用户的权限信息: rabbitmqctl clear_permissions [-p vhostPath] {username}
举例:
rabbitmqctl set_permissions -p / root “.*” “.*” “.*”
获取服务器状态信息
服务器状态:rabbitmqctl status
队列信息: rabbitmqctl list_queues [-p vhostpath] [queueinfoitem …]
queueinfoitem可以为: name, durable, auto_delete, arguments, messages_ready, messages_unacknowled, messages, consumers, memory.
Exchange信息: rabbitmqctl list_exchanges [-p vhostpath] [exchangeinfoitem …]
exchangeinfoitem有:name, type, durable, auto_delete, internal, arguments.
Binding信息:rabbitmqctl list_bindings [-p vhostpath] [bindinginfoitem …]
bindinginfoitem有:source_name, source_kind, destination_name, destination_kind, routing_key, arguments.等
connection信息:rabbitmqctl list_connections [connectioninfoitem …]
connectioninfoitem有:recv_oct,recv_cnt,send_oct,send_cnt,send_pend等。
channel信息:rabbitmqctl list_channels [channelinfoitem …]
channelinfoitem有:consumer_count,messages_unacknowledged,messages_uncommitted,acks_uncommitted,messages_unconfirmed,prefetch_count,client_flow_blocked
举例:
rabbitmqctl list_queues name messages_ready pid slave_pids
更改节点类型
rabbitmqctl stop_app
rabbitmqctl change_cluster_node_type disc
或
rabbitmqctl change_cluster_node_type ram
rabbitmqctl start_app
vhost管理
添加vhost: rabbitmqctl add vhost {name}
删除vhost: rabbitmqctl delete vhost {name}
镜像队列的设置
镜像队列的配置通过添加policy完成,policy添加的命令为:
rabbitmqctl set_policy [-p Vhost] Name Pattern Definition [Priority]
-p Vhost: 可选参数,针对指定vhost下的queue进行设置
Name: policy的名称
Pattern: queue的匹配模式(正则表达式)
Definition: 镜像定义,包括三个部分 ha-mode,ha-params,ha-sync-mode
ha-mode: 指明镜像队列的模式,有效值为 all/exactly/nodes
all表示在集群所有的节点上进行镜像
exactly表示在指定个数的节点上进行镜像,节点的个数由ha-params指定
nodes表示在指定的节点上进行镜像,节点名称通过ha-params指定
ha-params: ha-mode模式需要用到的参数
ha-sync-mode: 镜像队列中消息的同步方式,有效值为automatic,manually
Priority: 可选参数, policy的优先级
例如,对队列名称以hello开头的所有队列进行镜像,并在集群的两个节点上完成镜像,policy的设置命令为:
rabbitmqctl set_policy hello-ha “^hello” ‘{“ha-mode”:”exactly”,”ha-params”:2,”ha-sync-mode”:”automatic”}’
4.镜像模式集群及高可用
- 普通模式:默认的集群模式,以两个节点(rabbit01、rabbit02)为例来进行说明。对于Queue来说,消息实体只存在于其中一个节点rabbit01(或者rabbit02),rabbit01和rabbit02两个节点仅有相同的元数据,即队列的结构。当消息进入rabbit01节点的Queue后,consumer从rabbit02节点消费时,RabbitMQ会临时在rabbit01、rabbit02间进行消息传输,把A中的消息实体取出并经过B发送给consumer。所以consumer应尽量连接每一个节点,从中取消息。即对于同一个逻辑队列,要在多个节点建立物理Queue。否则无论consumer连rabbit01或rabbit02,出口总在rabbit01,会产生瓶颈。当rabbit01节点故障后,rabbit02节点无法取到rabbit01节点中还未消费的消息实体。如果做了消息持久化,那么得等rabbit01节点恢复,然后才可被消费;如果没有持久化的话,就会产生消息丢失的现象。
- 镜像模式:将需要消费的队列变为镜像队列,存在于多个节点,这样就可以实现RabbitMQ的HA高可用性。作用就是消息实体会主动在镜像节点之间实现同步,而不是像普通模式那样,在consumer消费数据时临时读取。缺点就是,集群内部的同步通讯会占用大量的网络带宽。
参考文献:http://blog.youkuaiyun.com/woogeyu/article/details/51119101
mq-console安装
下载地址
git clone https://github.com/apache/rocketmq-externals.git
源码编译
cd rocketmq-externals/rocketmq-console/
mvn clean package -Dmaven.test.skip=true
运行
screen -S mq
java -jar rocketmq-console-ng-1.0.0.jar --server.port=12580 --rocketmq.config.namesrvAddr=192.168.10.53:9876;192.168.10.54:9876;192.168.10.55:9876;192.168.10.56:9876
ctrl+a+d 退出