linux下搭建rocketmq(附服务脚本)

此文档安装的是rocketmq当前最新版本rocketmq v4.0.0,当时阿里已经把rocketmq捐赠给了apache组织,为什么要特别指明这一点,因为在下载、安装和服务脚本中有个别不同的地方。这是本人第一篇博客,如果排版不是很清楚,请评论中指明,以纠正自己的编写习惯。

一、安装rocketmq

1、安装要求

64bit OS, Linux/Unix/Mac is recommended;    
64bit JDK 1.7+;
Maven 3.2.x;
Git

2、克隆和编译

> git clone -b develop https://github.com/apache/incubator-rocketmq.git
   会在当前目录下生成“incubator-rocketmq”目录,接下来的部分操作都是在这个目录下进
> cd incubator-rocketmq
> mvn -Prelease-all -DskipTests clean install -U
   此步骤时间会比较长,请耐心等待,执行成功会生成多个目录。这是编译过程,我们后续操作只需要在编译过程生成的distribution/target/apache-rocketmq目录中进行,通常为了方便,我们把这个目录拷贝出来。
> cd distribution/target/apache-rocketmq

此时需要注意的是:启动的时候先启动Name server 停止的时候先停止Broker

3、尝试启动"Name
Server"

> nohup sh bin/mqnamesrv &
> tail -f ~/logs/rocketmqlogs/namesrv.log
    日志文件会自动生成
The Name Server boot success…

4、尝试启动"Broker"

> nohup sh bin/mqbroker -n localhost:9876 &
> tail -f ~/logs/rocketmqlogs/broker.log
The broker[%s, 172.30.30.233:10911] boot success...

5、停止"Broker"服务

> sh bin/mqshutdown broker    
The mqbroker(36695) is running...
Send shutdown request to mqbroker(36695) OK

6、停止"Name
Server"服务

> sh bin/mqshutdown namesrv    
The mqnamesrv(36664) is running...
Send shutdown request to mqnamesrv(36664) OK

在测试完成之后,说明安装成功,一切都能正常运行,此安装过程是摘自官方文档,有何异议请移步官方文档 https://rocketmq.incubator.apache.org/

二、配置mqbroker

1、 通常我们使用是以集群模式运行Broker

Broker集群有多种配置方式:
1,单Master
   优点:除了配置简单没什么优点
   缺点:不可靠,该机器重启或宕机,将导致整个服务不可用
2,多Master
   优点:配置简单,性能最高
   缺点:可能会有少量消息丢失(配置相关),单台机器重启或宕机期间,该机器下未被消费的消息在机器恢复前不可订阅,影响消息实时性
3,多Master多Slave,每个Master配一个Slave,有多对Master-Slave,集群采用异步复制方式,主备有短暂消息延迟,毫秒级
   优点:性能同多Master几乎一样,实时性高,主备间切换对应用透明,不需人工干预
   缺点:Master宕机或磁盘损坏时会有少量消息丢失
4,多Master多Slave,每个Master配一个Slave,有多对Master-Slave,集群采用同步双写方式,主备都写成功,向应用返回成功
   优点:服务可用性与数据可用性非常高
   缺点:性能比异步集群略低,当前版本主宕备不能自动切换为主

2、配置文件默认存在的是

[[email protected] conf]# ls    
2m-2s-async  2m-noslave  broker.conf.bak     logback_filtersrv.xml  logback_tools.xml
2m-2s-sync   brk.conf    logback_broker.xml  logback_namesrv.xml

其中m表示主节点,s表示从节点,以哪种集群形式运行,去配置文件中修改即可,之后在服务脚本中调用就行了。这里我们只是运行单节点broker,具体的集群模式请再自行琢磨,把默认的broker.conf 做备份,并复制一份配置文件出来,重命名为brk.conf 这个名字是随意起的,建议见名知意,方便在脚本中调用。

3、# cat brk.conf

brokerClusterName = onebroker    
brokerName = broker-a
brokerId = 0   0表示master,1表示slave
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
namesrvAddr = mycat:9876   指明mqname server
storePathRootDir = /data/rocketmq/store
storePathCommitLog = /data/rocketmq/store/commitlog
autoCreateTopicEnable = true
autoCreateSubscriptionGroup = true

4、通常

/data/rocketmq/store和/data/rocketmq/store/commitlog是需要手动创建的

为了安全起见,我们使用mq用户启动和关闭服务

# useradd mq
# chown -R mq:mq /data/rocketmq/
# chown -R mq:mq /opt/apache-rocketmq

三、提供服务脚本

# cat /etc/init.d/mqnamesrv

#!/bin/bash
# chkconfig: 2345 55 25
# description:MQ  manmger
. /etc/rc.d/init.d/functions

start()
{
	status
	if [ $? -ne 0 ] 
	then
		echo ‘start rocketmq-namserv......‘
#####################################需要修改的就是下面一行#########################################
		su - mq -c "nohup /opt/apache-rocketmq/bin/mqnamesrv &> /data/rocketmq/logs/mq_namser.log &"
		if [ $? -eq 0 ];then
			echo "started......"
		fi
	fi
}

stop()
{
	pid=`ps ax | grep -i ‘org.apache.rocketmq.namesrv.NamesrvStartup‘ |grep java | grep -v grep | awk ‘{print $1}‘`

	if [ -z "$pid" ] ; then
			echo "No mqnamesrv running."
			return 2;

	else

	echo "The mqnamesrv(${pid}) is running..."

	kill ${pid}

	echo "Send shutdown request to mqnamesrv(${pid}) OK"
	fi
}

restart() {
	stop
	start
}
status() {
	pid=`ps ax | grep -i ‘org.apache.rocketmq.namesrv.NamesrvStartup‘ |grep java | grep -v grep | awk ‘{print $1}‘`
	if [ -z "$pid" ] ; then
			echo "No mqnamesrv running."
			return 1;
	fi

	echo "The mqnamesrv(${pid}) is running..."
	return 0

}
case "$1" in
	start)
		start
		;;
	stop)
		stop
		;;
	restart)
		restart
		;;
	status)
		status
		;;
	*)
		echo $"Usage: $0 {start|stop|restart|tatus}"
esac

# cat /etc/init.d/mqbroker

#!/bin/bash
# chkconfig: 2345 95 25
# description:MQ  manmger
. /etc/rc.d/init.d/functions

start()
{
	pid=`ps ax | grep -i ‘org.apache.rocketmq.broker.BrokerStartup‘ |grep java | grep -v grep | awk ‘{print $1}‘`
	if [ -z "$pid" ] ; then
		###调用脚本启动mq-master-1.properties
			echo ‘start rocketmq-broker......‘
			su - mq -c "nohup /opt/apache-rocketmq/bin/mqbroker -c /opt/apache-rocketmq/conf/brk.conf &> /data/rocketmq/logs/mqbroker.log &"
			sleep 1
			newpid=`ps ax | grep -i ‘org.apache.rocketmq.broker.BrokerStartup‘ |grep java | grep -v grep | awk ‘{print $1}‘`
			echo "restart mqbroker(${newpid}) is running success..."
	else
		echo "The mqbroker(${pid}) is running..."
	fi
}

stop()
{
	pid=`ps ax | grep -i ‘org.apache.rocketmq.broker.BrokerStartup‘ |grep java | grep -v grep | awk ‘{print $1}‘`
	if [ -z "$pid" ] ; then
			echo "No mqbroker running."
			return 2;

	else

	echo "The mqbroker(${pid}) is running..."

	echo -e "Send shutdown  to mqbroker(${pid})\c"
	kill ${pid}
	oldpid=$pid
	while [ ${oldpid} ]
	do
		oldpid=`ps ax | grep -i ‘org.apache.rocketmq.broker.BrokerStartup‘ |grep java | grep -v grep | awk ‘{print $1}‘`
		echo -e ‘!\c‘
		sleep 1
	done
	echo -e "\nSend shutdown request to mqbroker(${pid}) OK"
	fi
}

status() {
	pid=`ps ax | grep -i ‘org.apache.rocketmq.broker.BrokerStartup‘ |grep java | grep -v grep | awk ‘{print $1}‘`
	if [ -z "$pid" ] ; then
			echo "No mqbroker running."
			return 1;
	fi

	echo "The mqbroker(${pid}) is running..."
	return 0

}
case "$1" in
	start)
		start
		;;
	stop)
		stop
		;;
	restart)
		stop
		start
		;;
	status)
		status
		;;
	*)
		echo $"Usage: $0 {start|stop|restart|tatus}"
esac

启动服务的时候,要先启动mqnamesrv后启动mqbroker,到此为止,安装和配置过程结束,至于rocketmq还有更多的玩法,待后续研究,希望对大家有所帮助。

时间: 2024-08-25 01:37:45

linux下搭建rocketmq(附服务脚本)的相关文章

Linux下搭建SMB文件共享服务,Linux/Windows互联互通

一丶简介:SMB协议是建立在NetBIOS协议之上的应用协议,是基于TCP138.139两个端口的服务,NetBIOS出现之后,Microsoft就使用NetBIOS实现了一个网络文件/打印服务系统.这个系统基于NetBIOS设定了一套文件共享协议,Microsoft称之为SMB(Server Message Block) 协议,这个协议被用于Lan Manager和Windows服务器系统中,实现不同计算机之间共享 打印机和文件等.因此,为了让Windows和Unix/Linux计算机相集成,

Linux下搭建VPN服务

转载需注明原文地址 http://mushapi.com/vpn-server-on-linux.html 最近google封锁的愈发严实了,所以不得不考虑弄个常备的VPN了.之前也用过买的vpn但是我用的那家vpn的官网也被封锁了,所以只能自己动手喽-本文是我安装完成后根据记忆写的,可能有不准确的地方,欢迎留言告诉我. 一.安装所需软件 在linux上搭建一个vpn server需要有iptables.ppp.pptpd.其中iptables和ppp可以直接通过yum安装. 1 yum ins

Linux下搭建DNS服务

Linux下搭建DNS服务器 注:本文主要侧重DNS的配置,原理的话会另发一篇文章~ 一.DNS(域名系统)作用和原理 1.  DNS的作用: 正向解析:根据域名查找对应的IP地址 反向解析:根据IP地址找对应的域名 2.  DNS的工作模式: 递归查询 迭代查询 3.  域名结构 分层式的结构,且上层只管理下层域名,便于管理维护. 二.BIND服务简介 1.Linux下常用的DNS服务是BIND(BerkeleyInternet Name Domain) 官方站点:https://www.is

Linux 使用 docker 下搭建xunsearch 搜索引擎服务

Linux 使用 docker 下搭建 xunsearch 搜索引擎服务 安装 docker 环境(菜鸟教程有说明) 安装docker说明 下载并运行 xunsearch 的服务端:docker安装xunsearch说明 docker 安装完毕后,开始安装xunsearch镜像 docker pull hightman/xunsearch 启动镜像 //镜像非开机自启 docker run --name xunsearch -d -p 8383:8383 -p 8384:8384 -v /var

Linux下搭建Apache服务器(完整版)

Linux下搭建Apache服务器(完整版) 什么是Apache? Apache Licence是著名的非盈利开源组织Apache采用的协议.该协议和BSD类似,同样鼓励代码共享和尊重原作者的著作权,同样允许代码修改,再发布(作为开源或商业软件).需要满足的条件也和BSD类似 Apache主要特点 1.开放源代码.跨平台应用 2.支持多种网页编程语言 3.模块化设计 .运行稳定.良好的安全性 Apache软件版本 1.X  1.目前最高版本是1.3,运行稳定  2.向下兼容性较好,但缺乏一些较新

【转】Linux 下搭建Postfix邮件服务器详解:

在我自己的服务器上面搭建了邮件服务器,为的是接下来写shell脚本进行报警监控.当服务器发生意外,可以及时发送邮件服务器到邮箱. 看了两个教程,按照两个教程来搭建的,感谢原作. Linux 下搭建Postfix邮件服务器详解: 1.首先关闭sendmail服务 service sendmail stop 2.chkconfig sendmail off(关闭开机自启动) 3.修改DNS正解文件,使DNS能够解析邮箱服务 添加下面两行 mail.zhubf.com. IN A           

Linux下搭建无人执守安装服务器

Linux下搭建无人执守安装服务器 实验概述 原理和概念: 1:什么是PXE ? 严格来说,PXE 并不是一种安装方式,而是一种引导的方式.进行 PXE 安装的必要条件是要安装的计算机中包含一个 PXE 支持的网卡(NIC),即网卡中必须要有 PXE Client.PXE (Pre-bootExecution Environment)协议使计算机可以通过网络启动. 网卡中必须有PXE芯片 协议分为client 和 server 端,PXE client 在网卡的 ROM 中,当计算机引导时,BI

Linux下搭建Java开发环境

Red Hat Package Manager 简称rpm rpm格式的文件就是我们可以使用RPM命令进行管理的软件包格式的文件 JDK的安装 #sh /root/Desktop/jdk-6u23-linux-i586-rpm.bin .bin 可以使用sh命令来解压执行 Linux的用户的登录过程 /etc/profile /etc/profile.d(各个脚本) /etc/bash.bashrc /home/[username]具体用户目录/.bashrc .bash_profile JDK

linux下搭建lamp环境以及安装swoole扩展

linux下搭建lamp环境以及安装swoole扩展   一.CentOS 6.5使用yum快速搭建LAMP环境 准备工作:先更新一下yum源 输入下面命令: yum -y update 1.安装Apache [[email protected] ~]# yum -y install httpd # 开机自启动 [[email protected] ~]# chkconfig httpd on # 启动httpd 服务 [[email protected] ~]# service httpd s