MyException - 我的异常网
当前位置:我的异常网» 开源软件 » RocketMQ最佳实践(2)4.0版本/集群

RocketMQ最佳实践(2)4.0版本/集群

www.MyException.Cn  网友分享于:2013-09-28  浏览:0次
RocketMQ最佳实践(二)4.0版本/集群

1、还是先理解一些重要概念及说明

  • Disk Flush(磁盘刷新/同步操作):就是将内存的数据落地,存储在磁盘中。RocketMQ提供了以下两种模式:
    • SYNC_FLUSH(同步刷盘):生产者发送的每一条消息都在保存到磁盘成功后才返回告诉生产者成功。这种方式不会存在消息丢失的问题,但是有很大的磁盘IO开销,性能有一定影响。
    • ASYNC_FLUSH(异步刷盘):生产者发送的每一条消息并不是立即保存到磁盘,而是暂时缓存起来,然后就返回生产者成功。随后再异步的将缓存数据保存到磁盘,有两种情况:1是定期将缓存中更新的数据进行刷盘,2是当缓存中更新的数据条数达到某一设定值后进行刷盘。这种方式会存在消息丢失(在还未来得及同步到磁盘的时候宕机),但是性能很好。默认是这种模式。
  • Broker Replication(Broker间数据同步/复制):集群环境下需要部署多个Broker,Broker分为两种角色:一种是master,即可以写也可以读,其brokerId=0,只能有一个;另外一种是slave,只允许读,其brokerId为非0。一个master与多个slave通过指定相同的brokerName被归为一个broker set(broker集)。通常生产环境中,我们至少需要2个broker set。Broker Replication只的就是slave获取或者是复制master的数据。
    • Sync Broker:生产者发送的每一条消息都至少同步复制到一个slave后才返回告诉生产者成功,即“同步双写”。
    • Async Broker:生产者发送的每一条消息只要写入master就返回告诉生产者成功。然后再“异步复制”到slave。
  • 推荐的几种Broker集群方式:(官网提供了下面几种集群方式的配置文件供参考,在$ROCKETMQ_HOME/target/apache-rocketmq-all/conf目录下)
    • 2m-2s-sync:两主两从同步双写(两个master,两个slave,数据同步双写到master和slave)
    • 2m-2s-async:两主两从异步复制(两个master,两个slave,master数据通过异步复制到slave)
    • 2m-noslave:两主(只有两个master,没有slave)
             注意:
1、上述“2”只是说作为一个集群的最低配置数量,可以根据实际情况扩展。
2、所有的刷盘(Dish Flush)操作全部默认为:ASYNC_FLUSH(异步刷盘)。
  • Name Server集群:Name Server集群比较简单,只要部署多个实例就行了,多个实例间不需要进行数据共享,只要保证一个实例存活就可以正常运转。

2、三种Broker集群方式优缺点

上面三种集群方式的优缺点(主要区别在于主从复制方式):

多Master模式(2m-noslave)

一个集群无Slave,全是Master,例如2个Master或者3个Master
优点:配置简单,单个Master宕机或重启维护对应用无影响,在磁盘配置为RAID10时,即使机器宕机不可恢复情况下,由于RAID10磁盘非常可靠,消息也不会丢(异步刷盘丢失少量消息,同步刷盘一条不丢)。性能最高。
缺点:单台机器宕机期间,这台机器上未被消费的消息在机器恢复之前不可订阅,消息实时性会受到受到影响。

多Master多Slave模式,异步复制(2m-2s-async)

每个Master配置一个Slave,有多对Master-Slave,HA采用异步复制方式,主备有短暂消息延迟,毫秒级。
优点:即使磁盘损坏,消息丢失的非常少,且消息实时性不会受影响,因为Master宕机后,消费者仍然可以从Slave消费,此过程对应用透明。不需要人工干预。性能同多Master模式几乎一样。
缺点:Master宕机,磁盘损坏情况,会丢失少量消息。

多Master多Slave模式,同步双写(2m-noslave)

每个Master配置一个Slave,有多对Master-Slave,HA采用同步双写方式,主备都写成功,向应用返回成功。
优点:数据与服务都无单点,Master宕机情况下,消息无延迟,服务可用性与数据可用性都非常高
缺点:性能比异步复制模式略低,大约低10%左右,发送单个消息的RT会略高。目前主宕机后,备机不能自动切换为主机,后续会支持自动切换功能。

3、开始部署

这里使用我觉得最好的方式:多Master多Slave模式,异步复制(2m-2s-async)来进行部署。
注意:上面说到了官方提供了2m-2s-async的参考配置文件,在conf目录下,所以我们这里部署的时候就使用这些配置文件进行部署。

环境准备

  • 准备四台机器(10.89.0.124、10.89.0.63、10.89.0.64、10.89.0.65),用来每台部署一个broker
  • 将上一篇博文中编译好的rocketmq拷贝到其他三台机器上(可以通过rz、sz命令进行上传下载,若不支持请自行百度安装此命令),解压并设置ROCKETMQ_HOME环境变量。我的ROCKETMQ_HOME=/usr/local/rocketmq/incubator-rocketmq/target/apache-rocketmq-all

启动Name server

这里我们分别在10.89.0.64、10.89.0.65两台机器上启动Name server,启动过程参考这里。

启动Broker

1、在10.89.0.65这台机器上,启动第一个Master
[plain] view plain copy
 
  1. nohup sh mqbroker -n '10.89.0.64:9876;10.89.0.65:9876' -c $ROCKETMQ_HOME/conf/2m-2s-async/broker-a.properties &  
[plain] view plain copy
 
  1. tail -f ~/logs/rocketmqlogs/broker.log   
注意:如果日志中输出的启动的broker的ip不正确,是因为机器多网卡的原因,造成了自动获取了另外网卡的Ip地址,这种情况下,就需要手动指定ip:
[plain] view plain copy
 
  1. sudo vi $ROCKETMQ_HOME/conf/2m-2s-async/broker-a.properties  

如果不手动指定IP的话,后面slave获取到此master的地址就是默认地址,导致连接不上master。

2、同上面一样在10.89.0.64这台机器上,启动第二个Master
[plain] view plain copy
 
  1. nohup sh mqbroker -n '10.89.0.64:9876;10.89.0.65:9876' -c $ROCKETMQ_HOME/conf/2m-2s-async/broker-b.properties &  
[plain] view plain copy
 
  1. tail -f ~/logs/rocketmqlogs/broker.log  
3、在10.89.0.63这台机器上,启动第一个Slave
[plain] view plain copy
 
  1. nohup sh mqbroker -n '10.89.0.64:9876;10.89.0.65:9876' -c $ROCKETMQ_HOME/conf/2m-2s-async/broker-a-s.properties &  
如果报如下错误:
需要在10.89.0.64机器上开放10909端口。
4、在10.89.0.124这台机器上,启动第二个Slave
[plain] view plain copy
 
  1. nohup sh mqbroker -n '10.89.0.64:9876;10.89.0.65:9876' -c $ROCKETMQ_HOME/conf/2m-2s-async/broker-b-s.properties &  

Broker配置详解

参数名 默认值 说明
listenPort 10911 Broker对外服务的监听端口
namesrvAddr Null NameServer地址
brokerIP1 本机IP 本机ip地址,默认系统自动识别,但是某些多网卡机器会存在识别错误的情况,这种情况下可以人工配置
brokerName   本机主机名
brokerClusterName DefaultCluster Broker所属那个集群
brokerId 0 BrokerId,必须是大于等于0的整数,0表示Master, 大于0表示Slave, 一个Master可以挂多个Slave,Master和Slave通过BrokerName来配对
storePathCommitLog $HOME/store/commitlog commitLog存储路径
storePathConsumerQueue $HOME/store/consumequeue 消费队列存储路径
storePathIndex $HOME/store/index 消息索引存储队列
deleteWhen 4 删除时间点,默认凌晨4点
fileReserverdTime 48 文件保留时间,默认48小时
maxTransferBytesOnMessageInMemory 262144 单次pull消息(内存)传输的最大字节数
maxTransferCountOnMessageInMemory 32 单次pull消息(内存)传输的最大条数
maxTransferBytesOnMessageInDisk 65535 单次Pull消息(磁盘)传输的最大字节数
maxTransferCountOnMessageInDisk 8 单次pull消息(磁盘)传输的最大条数
messageIndexEnable TRUE 是否开启消息索引功能
messageIndexSafe FALSE 是否提供安全的消息索引机制,索引保证不丢
brokerRole ASYNC_MASTER Broker的角色:ASYNC_MASTER异步复制Master; SYNC_MASTER同步双写MASTER; SLAVE
flushDiskType ASYNC_FLUSH 刷盘方式: ASYNC_FLUSH异步刷盘;SYNC_FLUSH同步刷盘clientFileForciblyEnable

 

 

http://blog.csdn.net/jayjjb/article/details/70140667

文章评论

60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
每天工作4小时的程序员
每天工作4小时的程序员
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
2013年中国软件开发者薪资调查报告
2013年中国软件开发者薪资调查报告
旅行,写作,编程
旅行,写作,编程
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
程序员应该关注的一些事儿
程序员应该关注的一些事儿
10个调试和排错的小建议
10个调试和排错的小建议
代码女神横空出世
代码女神横空出世
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
程序员和编码员之间的区别
程序员和编码员之间的区别
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
 程序员的样子
程序员的样子
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
那些性感的让人尖叫的程序员
那些性感的让人尖叫的程序员
如何成为一名黑客
如何成为一名黑客
中美印日四国程序员比较
中美印日四国程序员比较
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
程序员必看的十大电影
程序员必看的十大电影
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
老程序员的下场
老程序员的下场
漫画:程序员的工作
漫画:程序员的工作
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
我的丈夫是个程序员
我的丈夫是个程序员
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
我是如何打败拖延症的
我是如何打败拖延症的
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
2013年美国开发者薪资调查报告
2013年美国开发者薪资调查报告
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
为什么程序员都是夜猫子
为什么程序员都是夜猫子
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
编程语言是女人
编程语言是女人
程序员都该阅读的书
程序员都该阅读的书
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
Google伦敦新总部 犹如星级庄园
Google伦敦新总部 犹如星级庄园
Java程序员必看电影
Java程序员必看电影
总结2014中国互联网十大段子
总结2014中国互联网十大段子
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有