Linux操作系统安装MetaQ

时间:2021-02-14 09:43:17

进入下载目录

[html] view plaincopyprint?
  1. cd /usr/local  

下载ZooKeeper

[html] view plaincopyprint?
  1. wget http://fnil.net/downloads/metaq-server-1.4.6.2.tar.gz

解压缩

[html] view plaincopyprint?
  1. tar -zxvf metaq-server-1.4.6.2.tar.gz

配置Broker


默认server.ini提供了一个topic——test用于测试,你可以添加自己定义的topic
[topic=mytopic]                       
;是否启用统计
stat=true
;这个topic指定分区数目,如果没有设置,则使用系统设置
numPartitions=10
;删除策略的执行时间,cron表达式
deleteWhen=0 0 6,18 * * ?

大多数system参数都可以topic参数所覆盖。
另外我自己重新根据sample.server.ini文件写了一个新的,可以参考我的
brokerId=109
;;服务器hostname,可以为空,默认将取本机IP
hostName=
;;默认每个topic的分区数目,默认为1
numPartitions=1
;;服务器端口,必须
serverPort=8123
;;管理平台HTTP端口,必须
dashboardHttpPort=8120
;;数据文件路径,默认在user.home/meta下
dataPath=/var/metaq/data
;;日志数据文件路径,默认跟dataPath一样
dataLogPath=/var/metaq/log
;;是否启用并行记载数据,当数据过多的时候,启用此选项可加快启动速度,
;;但是会打乱启动的日志顺序,默认不启用。
loadMessageStoresInParallel=false
;最大允许的未flush消息数,超过此值将强制force到磁盘,默认1000
unflushThreshold=1000
;;最大允许的未flush间隔时间,毫秒,默认10秒
;unflushInterval=10000
unflushInterval=1000
;;单个文件的最大大小,实际会超过此值,默认1G
maxSegmentSize=1073741824
;;传输给客户端每次最大的缓冲区大小,默认1M
maxTransferSize=1048576
;;处理get请求的线程数,默认cpus*10
getProcessThreadCount=180
;;处理put请求线程数,默认cpus*10
putProcessThreadCount=180
;;数据删除策略,默认超过7天即删除,这里的168是小时,10s表示10秒,10m表示10分钟,10h表示10小时,默认为小时
deletePolicy=delete,48
;;删除策略的执行时间,cron表达式
deleteWhen=0 0 6,18 * * ?
;;事务相关配置
;;最大保存事务checkpoint数目,默认为3
maxCheckpoints=3
;事务checkpoint时间间隔,单位毫秒,默认1小时
checkpointInterval=3600000
;;最大事务超时事件数,用于监控事务超时
maxTxTimeoutTimerCapacity=30000
;;最大事务超时时间,单位秒
maxTxTimeoutInSeconds=60
;;事务日志的刷盘设置,0表示让操作系统决定,1表示每次commit都刷盘,2表示每隔1秒刷盘一次
flushTxLogAtCommit=1
;;是否接收消息,默认为true,可被topic配置覆盖
acceptPublish=true
;;是否接受订阅,默认为true,可被topic配置覆盖
acceptSubscribe=true
;;;当消费者的offset不在Broker的数据范围内,则强制更新消费者的offset为当前最大offset。
;;;在生产环境,请设置此选项为false,默认为false
;;;在开发和测试环境,建议设置为true,因为开发测试的时候,可能要经常删除消息数据,此选项可让消费者自动纠正offset。
updateConsumerOffsets=false
;; 是否启用实时统计,针对每个topic做实时的流量统计,可被topic配置覆盖。
stat=true
[zookeeper]
zk.zkConnect=localhost:2181
zk.zkSessionTimeoutMs=30000
zk.zkConnectionTimeoutMs=30000
zk.zkSyncTimeMs=5000
;; Topics section
[topic=test]
[topic=meta-test]
留心dataPath=/var/metaq/data   dataPath=/var/metaq/log确保你已经创建好了这两个目录
mkdir /var/metaq/data
mkdir /var/metaq/log

启动&验证

确保你的机器上安装了JDK并正确设置JAVA_HOME和PATH变量,启动服务器:

[html] view plain copy print?Linux操作系统安装MetaQLinux操作系统安装MetaQ
  1. /usr/local/taobao/metamorphosis-server-wrapper/bin/metaServer.sh start local 

当然如果要关闭,则是stop
/usr/local/taobao/metamorphosis-server-wrapper/bin/metaServer.sh stop

如何验证呢,继续看吧

除了通过观察日志logs/metaServer.log外,你还可以通过stats命令来观察服务器运行状况。

bin/metaServer.sh stats
=>
STATS
pid 7244
broker_id 0
port 8123
uptime 2057
version 1.4.2
curr_connections 1
threads 35
cmd_put 0
cmd_get 0
cmd_offset 0
tx_begin 0
tx_xa_begin 0
tx_commit 0
tx_rollback 0
get_miss 0
put_failed 0
total_messages 0
topics 2
config_checksum 718659887
END


开机自启动

首先请登陆你的linux服务器在/etc/rc.d/init.d/目录下创建一个文件

[html] view plain copy print?Linux操作系统安装MetaQLinux操作系统安装MetaQ
  1. touch /etc/init.d/metaq 

给启动脚本赋予执行权限

[html] view plaincopyprint?
  1. chmod +x /etc/init.d/metaq

接着用vi metaq来编辑这个文件

接着在metaq里面输入如下内容

#!/bin/bash
#chkconfig:2345 20 90
#description:zookeeper
#processname:zookeeper
case $1 in
start) /usr/local/taobao/metamorphosis-server-wrapper/bin/metaServer.sh start local;;
stop) /usr/local/taobao/metamorphosis-server-wrapper/bin/metaServer.sh stop;;
stats) /usr/local/taobao/metamorphosis-server-wrapper/bin/metaServer.sh stats;;
restart) /usr/local/taobao/metamorphosis-server-wrapper/bin/metaServer.sh restart;;
*) echo "require start|stop|stats|restart";;
esac

然后保存退出

先按esc

然后按:键盘

接这个输入wq即可保存退出


这个时候我们就可以用service metaq start/stop来启动停止metaq服务了


添加服务

[html] view plaincopyprint?
  1. chkconfig --add metaq

设置开机启动

[html] view plaincopyprint?
  1. chkconfig --level 35 metaq on  

查看是否设置成功

[html] view plaincopyprint?
  1. chkconfig --list | grep metaq 

集群模式配置

上文提到的启动方式是以本地模式也就是单机模式启动,它将启动一个内置的zookeeper,并将broker注册到该zookeeper。这对于单机应用或者测试开发是最便捷方式的。


但是MetaQ是作为分布式软件设计的,更通常作为一个集群提供服务。MetaQ的集群管理是利用zookeeper实现的,因此首先需要配置zookeeper。 一个MetaQ集群必须使用同一个zookeeper集群。


Broker集群配置非常容易,假设你已经按照如何开始和服务器配置管理配置好并启用了你第一台broker,某一天你发现这个单台

broker无法支撑更大的消息量,那么你可能就需要

引入更多的broker作为集群来提供服务,你要做的事情很简单:

  • 拷贝broker1的配置文件conf/server.ini到新的broker,假设为broker2。
  • 修改broker2的server.ini,只要修改brokerId为另一个不同于broker1的值即可
  • 启动broker2,这样一来broker2将和broker1组成一个服务器集群
  • 在这个过程中你不需要重启任何现有的服务,包括生产者、消费者和broker1,他们都将自动感知到新的broker2
可见,配置一个集群唯一要做的就是使用同一份配置文件并定义不同的brokerId即可。

brokerId: 服务器集群中唯一的id,必须为整型0-1024之间。对服务器集群的定义是使用同一个zookeeper并且在zookeeper上的root

 path相同,具体参见zookeeper配置。

也就是说和你的zookeeper中的/var/zookeeper/data/myid 中的id对应就好了

另外请记得修改conf/server.ini文件中的zookeeper配置,保证zookeeper地址正确:

zk.zkConnect=localhost:2181 修改为各个集群ip的地址,如

zk.zkConnect=192.168.1.101:2181,192.168.1.102:2181,192.168.1.103:2181

各个集群中的zookeeper配置都如此

停止local模式启动的broker1, 并重新以集群模式启动:

service metaq stop
service metaq start


高可用配置

Meta相比于kafka的一个重要特性就是消息高可用方案的实现,我们称之为HA方案。消息在发送到broker之后立即写入磁盘才返回客户端告诉消息生产者消息发送成功,通过unflushThreshold和unflushInterval两个参数的控制,可以保证单机消息数据的安全性,只要机器的磁盘没有永久损坏,消息总可以在重启后恢复并正常投递给消费者们。但是,如果遇到了磁盘永久损坏或者数据文件永久损坏的情况,那么该broker上的消息数据将可能永久丢失。为了防止这种情况的发生,一个可行的方案就是将消息数据复制到多台机器,类似mysql的主从复制功能

异步复制配置

配置slave文件。编辑conf/async_slave.properties:

#slave编号,大于等于0表示作为slave启动,同一个master下的slave编号应该设不同值.
slaveId=0
#作为slave启动时向master订阅消息的group,如果没配置则默认为meta-slave-group
slaveGroup=meta-slave-group
#slave数据同步的最大延时,单位毫秒
slaveMaxDelayInMills=500
#是否自动从master同步server.ini
#第一次仍然需要自己拷贝server.ini,后续可以通过设置此选项为true来自动同步
autoSyncMasterConfig=true
slaveId 和zookeeper的pid文件对应,切记
执行下列命令启动slave:

bin/metaServer.sh start slave

那么作为从机对应的etc/init.d/metaq 文件的启动配置也要做相应的修改

第一次复制因为需要跟master完全同步需要耗费一定时间,你可以在数据文件的目录观察复制情况。

请注意,异步复制的slave将参与消费者的消费活动,消息消费者可以从slave中获取消息并消费,消费者会随机从master和slaves中挑选一台作为消费broker。

从1.4.2开始,可以通过autoSyncMasterConfig选项配置是否自动同步master的server.ini到异步复制的slave上,当master的server.ini文件变更并通过bin/metaServer.sh reload之后,slave将监控到这一变更并自动同步。