rabbitmq安装与测试

1 Erlang旧版卸载:
cluster集群中的所有节点的erlang版本和rabbitmq版本必须一致, 否则无法加入cluster
on Ubuntu sudo apt-get purge erlang*
on Fedora :sudo yum remove erlang*
installed erlang from source :rm -rf {erlang  home directory}.
2 源码安装Erlang
sudo tar -zxvf otp_src_20.1.tar.gz
cd  otp_src_20.1
export  ERL_TOP=` pwd `
sudo ./configure //ps:默认安装在 /usr/local/{bin,lib/erlang}
sudo make
sudo make release_tests
cd  release/tests/test_server
sudo $ERL_TOP /bin/erl -s ts install -s ts smoke_test batch -s init stop
cd    $ERL_TOP
sudo make install
sudo ln -s /usr/local/lib/erlang/bin/erl /usr/bin/erl  //非root用户也可以访问

浏览器打开查看test结果: $ERL_TOP/release/tests/test_server/index.html


3 安装rabbitmq二进制包
sudo xz -d rabbitmq-server-generic-unix-3.6.14.tar.xz
sudo tar -xvf rabbitmq-server-generic-unix-3.6.14.tar
添加环境变量:sudo vi /etc/profile,最末尾添加,保存后source /etc/profile
RABBITMQ_HOME=/data/project/soft/rabbitmq_server-3.6.14
export PATH=${PATH}:${RABBITMQ_HOME}/sbin
常用命令:
后台运行:sudo rabbitmq-server -detached
停止服务:sudo rabbitmqctl stop
启动/停止应用运行(进程还在,主要用于执行其他变更管理命令如reset):
sudo rabbitmqctl stop_app
sudo rabbitmqctl start_app
查询状态:sudo rabbitmqctl status
用户管理:
sudo rabbitmqctl add_user admin admin_159753
sudo rabbitmqctl delete_user usename
sudo rabbitmqctl change_password usename newpass
清除密码后该用户将无法登录:
sudo rabbitmqctl clear_password usename
sudo rabbitmqctl authenticate_user usename passw
设置用户标签,可以设置多个,空格分隔 标签用于控制用户的管理功能。
sudo rabbitmqctl set_user_tags usename administrator
激活管理组件:
sudo rabbitmq-plugins enable rabbitmq_management
默认guest/guest 用户只能在localhost登录,需要新建一个用户,并赋予管理员标签。

删除默认用户:
sudo rabbitmqctl delete_user guest
管理后台地址: http:// ip:15672/
修改nodename(vi rabbitmq-env):
#Rename the node
NODENAME='rabbit1'
#Config file location and new filename CONFIG_FILE=/data/project/soft/rabbitmq_server-3.6.14/etc/rabbitmq/rabbitmq.config
4 同一台主机启动多节点(方便测试集群配置):
sudo RABBITMQ_NODE_PORT=5672 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15672}]" RABBITMQ_NODENAME=rabbit1 rabbitmq-server -detached
sudo RABBITMQ_NODE_PORT=5673 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15673}]" RABBITMQ_NODENAME=rabbit2 rabbitmq-server -detached
rabbit2 与rabbit1组成集群(join_cluster --ram   指定结点类型 为ram,默认为disc,集群中至少要有一个disc结点):
sudo rabbitmqctl -n rabbit2 stop_app
sudo rabbitmqctl -n rabbit2 join_cluster rabbit1@`hostname -s`
sudo rabbitmqctl -n rabbit2 start_app
rabbit1脱离集群:
sudo rabbitmqctl -n rabbit1 stop_app
sudo rabbitmqctl -n rabbit1 reset
sudo rabbitmqctl -n rabbit1 start_app
查询集群状态:
sudo rabbitmqctl -n rabbit1 cluster_status
sudo rabbitmqctl -n rabbit2 cluster_status
变更rabbit1 node types为ram:
sudo rabbitmqctl -n rabbit1 stop_app
sudo rabbitmqctl -n rabbit1 change_cluster_node_type ram
sudo rabbitmqctl -n rabbit1 start_app
测试环境:
4核心 Intel(R) Xeon(R) CPU E5-2630 0 @ 2.30GHz
8G内存 126G硬盘
x86_64 GNU/Linu
单机测试数据(100w条20字节内的文本数据):

 

生产者数量
消费者数量
autoAck
发送速率(/s)
接收速率(/s)
MQ服务器cpu
1
0
1
11495
0
130%
1
1
1
36230
35098
280%
1
2
1
35293
17032/个
300%
2
1
1
23932/个
47984
348%
1
1
0
20045
19,800
270%
1
2
0
19691
9,774/个
323%
      

 

集群测试数据(100w条20字节内的文本数据):
集群结点 :rabbit1(hello队列在此结点) rabbit2

 

生产者数量
消费者数量
autoAck
发送速率(/s)
接收速率(/s)
MQ服务器cpu
备注
1
0
1
13666
0
130%
(rabbit2没有cpu消耗)
生产者连接到rabbit1
1
0
1
16983
0
200%
(rabbit2高于rabbit1)
生产者连接到rabbit2
1
1
1
19121
19,245
280%
生产者连接到rabbit1
消费者连接到rabbit2
1
1
1
13835
13,964
160%(相当)
生产者连接到rabbit2
消费者连接到rabbit1
1
1
1
14769
14,813
240%
(rabbit2高于rabbit1)
生产者连接到rabbit2
消费者连接到rabbit2
1
1
1
36142
35980
282%
生产者连接到rabbit1
消费者连接到rabbit1
1
2
1
29456
15408/个
300%(rabbit1高)
生产者连接到rabbit1
消费者分别连接到
rabbit1 rabbit2
1
2
1
35166
17809/个
320%
生产者连接到rabbit1
消费者全部连接到
rabbit1 rabbit1
1
2
1
17104
8,893/个
270%(rabbit2高)
生产者连接到rabbit2
消费者全部连接到rabbit2
2
2
1
17914
13005
15875
14768
310%(rabbit1高)
生产者、消费者分别
连接到rabbit1、rabbit2
       
       

 

结论:单机mq性能最高,当消费者消费的消息不在当前节点,TPS会下降的30%-50%.
集群主要用于高可用部署以及简化客户端接入逻辑。
对于追求吞吐量,数据不要求强一致性的业务来说,使用kafka会更适合。
要求高可用强一致性的业务,如果业务并发量过大, 可采用按业务分离mq,分散流量。
无法拆分的业务,则可以部署多个独立mq节点,非cluster,通过在mq客户端做负载均衡,
确保每个节点的连接数是均衡的。
使用HAproxy可以简单实现负载,但无法保证所有节点都有合适数量的生产者和消费者。

关于autoAck参数,如果设置为true,则服务器发送之后自动确认,无需等待客户端确认。这种方式TPS最高,但容易出现消息丢失。

autoAck设置为false,则消息不会丢失,客户端还有可能会收到重复消息,需要在客户端做好幂等逻辑。这种情况下,TPS会下降50%

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值