RocketMQ系列:使用systemd管理nameserver和broker

摘要:
名称服务器和代理以nohup的方式启动。我们还需要登录到每台计算机以启动服务。没有更好的方法来管理启动脚本和停止脚本吗?Nohup模式管理1)名称服务器启动:
背景

前面RocketMQ系列中分享了如何在机器上搭建rocketmq,其中nameserverbroker都是以nohup的方式启动。在实际运维过程中,这种启动存在一个比较麻烦的问题:比如机器宕机后,重新启动机器,brokernamserver服务无法自动随开机拉起,还需要我们登陆到每台机器上去操作启动服务。又没有比较好的方式管理启动脚本和停止脚本呢?

这里介绍一个系统管理组件:systemd。

我们可以编写unit file,将nameserverbroker作为一个systemd下面的一个unit,从而被systemd管理起来。然后就可以通过systemctl start/restart/stop xxx来启停nameserver和broker了,再通过systemctl enable xxx,可以设置nameserver和broker开启自行启动。

废话不多说,我们开始编写unit file吧。

nohup方式管理

1)nameserver

启动:cd /usr/local/rocketmq/bin &&  nohup ./mqnamesrv -c namesrv.properties &

停止:cd /usr/local/rocketmq/bin && sh mqshutdown namesrv

2) broker

启动:cd /usr/local/rocketmq/bin && nohup sh mqbroker -c rmq-broker.conf &

停止:cd /usr/local/rocketmq/bin && sh mqshutdown broker

那将上述启动方式改成改写成unit file呢?

在/usr/lib/systemd/system这个路径下编写一个.service结尾的文件即可。接下来,我们分别来编写这两个文件。

system的unit file

1)nameserver的unit file编写: /usr/lib/systemd/system/rmq_namesrv.service

[Unit]
Description=rmq
After=network.target

[Service]

#这里Type一定要写simple
Type=simple  

#ExecStart和ExecStop分别在systemctl start和systemctl stop时候调动
ExecStart=/usr/local/rocketmq/bin/mqnamesrv -c /usr/local/rocketmq/bin/namesrv.properties
ExecStop=/usr/local/rocketmq/bin/mqshutdown namesrv

[Install]
WantedBy=multi-user.target

2)broker的unit file编写: /usr/lib/systemd/system/rmq_broker.service

[Unit]
Description=rmq
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/rocketmq/bin/mqbroker -c /usr/local/rocketmq/bin/rmq-broker.conf
ExecStop=/usr/local/rocketmq/bin/mqshutdown broker

[Install]
WantedBy=multi-user.target

systemctl启动服务

我们尝试运行一下:

首先要手动停掉之前的nameserver和broker,分别在nameserver和broker机器上执行如下命令: 

nameserver机器:/usr/local/rocketmq/bin/mqshutdown namesrv

broker机器:/usr/local/rocketmq/bin/mqshutdown broker

然后分别在nameserver和broker机器进行启动nameserver和broker

nameserver

1)启动nameserver

systemctl start rmq_namesrv

2)然后查看对应的状态

systemctl status rmq_namesrv

看到如下图,说明启动成功。

RocketMQ系列:使用systemd管理nameserver和broker第1张

3)再设置随开机自动启动

systemctl enable rmq_namesrv

4)其他

如果想要停止nameserver,执行:systemctl stop rmq_namesrv

如果有多台nameserver,则依次在每台上做如上相关操作。

broker

1)启动broker

systemctl start rmq_broker

2)查看对应的状态

systemctl status rmq_broker

看到如下图,说明启动成功。

RocketMQ系列:使用systemd管理nameserver和broker第2张 

3)设置随开机自动启动

systemctl enable rmq_broker

4)其它

如果想要停止broker,执行:systemctl stop rmq_broker

如果有多台broker,则依次在每台上做如上相关操作。

以上就是用systemd来管理rocketmq的进程启停操作了,希望对你有帮助,欢迎留言!

博主:测试生财

座右铭:专注测试与自动化,致力提高研发效能;通过测试精进完成原始积累,通过读书理财奔向财务自由。

csdn:https://blog.csdn.net/ccgshigao

博客园:https://www.cnblogs.com/qa-freeroad/

51cto:https://blog.51cto.com/14900374

免责声明:文章转载自《RocketMQ系列:使用systemd管理nameserver和broker》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇C#操作数据库还原bak文件 删除操作Android的string-array数据源简单使用下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Oracle数据库优化器的优化方式

Oracle是世界领先的信息管理软件开发商,因其复杂的关系数据库产品而闻名。本文介绍Oracle优化器,它是一个非常好用的工具。 Oracle在执行一个SQL之前,首先要分析一下语句的执行计划,然后再按执行计划去执行。分析语句的执行计划的工作是由优化器(Optimizer) 来完成的。 不同的情况,一条SQL可能有多种执行计划,但在某一时点,一定只有一种...

多线程实现Thread.Start()与ThreadPool.QueueUserWorkItem两种方式对比

Thread.Start(),ThreadPool.QueueUserWorkItem都是在实现多线程并行编程时常用的方法。两种方式有何异同点,而又该如何取舍? 写一个Demo,分别用两种方式实现。观察各自的现象。  一个WorkMan class,其内的method doSomething()是每次异步线程调用的方法。该方法只是随机的让线程休眠一段时间。...

java架构-一些设计上的基本常识

最近给团队新人讲了一些设计上的常识,可能会对其它的新人也有些帮助, 把暂时想到的几条,先记在这里。 1、API与SPI分离 框架或组件通常有两类客户,一个是使用者,一个是扩展者。 API(Application Programming Interface)是给使用者用的, 而SPI(Service Provide Interface)是给扩展者用的。 在设...

WebView2简单试用(九)—— Dev Protocol

有的时候,我们需要实现一些更为高级的操作,以提供更个性化的功能。常用的注入JavaScript的方式已经不能满足我们的要求,此时可以使用Chromium提供的更为高级的API——Chrome Dev Protocol。 关于Dev Protocol,我之前写过几篇文章介绍过: 使用Chrome快速实现数据的抓取(一)—— 概述 使用Chrome快速实现数...

如何实现QQ附件在线预览功能

方法一:使用 openoffice 的接口把文档转换成html (linux主机或者windows主机); 方法二:使用 一个叫 jacob.jar 的工具,在安装了 office 的windows主机上把文档转换成html (这种做法和以前QQ附件最预览接近,因为它生成的html比openoffie的好看), 方法三:也是QQ邮箱最新使用的方式,使用 O...

关于mui页面跳转(跳转及参数传递)

页面跳转比较简单的一种写法如下,extras中可以传递扩展参数(param), 传值: mui.openWindow({ url : 'mspck.jsp', id : 'mspck.jsp', extras : { openid : openid } }); 取值: varself= plus.webview.currentWebview(); var...