本文档旨在指导在Red Hat Enterprise Linux 9.5系统上,利用NFS共享存储部署ActiveMQ 6.1.6主从集群,实现消息队列的高可用性。
系统要求
1.硬件要求:
- 最低配置:2核CPU、4GB内存、50GB磁盘空间(根据消息量调整)
- 网络要求:服务器间网络延迟需低于50ms(推荐万兆网络)
2.软件要求:
- 操作系统:Red Hat Enterprise Linux release 9.5 (Plow)
- NFS客户端:nfs-utils-2.5.4-27.el9.x86_64
- Java环境:OpenJDK 17+(通过YUM安装)
- ActiveMQ版本:apache-activemq-6.1.6-bin.tar.gz
- 依赖服务:YUM仓库已配置,防火墙开放NFS及ActiveMQ端口
安装步骤
1.安装NFS客户端
# 在两台服务器执行 yum install -y nfs-utils
2.创建挂载目录
mkdir -p /usr/local/activemq/data/kahadb
3.挂载NFS存储
mount -t nfs -o vers=3,tcp,async,rsize=1048576,wsize=1048576 10.6.36.122:/zejy_activemq /usr/local/activemq/data/kahadb
关键参数说明:
- vers=3:兼容旧版NFS协议(若服务端支持NFSv4可改用vers=4)
- async:异步写入提升性能(根据场景选择是否启用)
- rsize/wsize:优化大块数据传输效率
4.配置开机挂载(Systemd服务)
# 编辑文件:/etc/systemd/system/mnt-nfs.service [Unit] Description=NFS Mount Service After=network-online.target [Service] Type=oneshot ExecStart=/bin/mount -t nfs -o vers=3,tcp,async,rsize=1048576,wsize=1048576 10.6.36.122:/zejy_activemq /usr/local/activemq/data/kahadb [Install] WantedBy=multi-user.target
设置开机启动和启动nfs挂载
systemctl enable mnt-nfs systemctl start mnt-nfs
5.安装OpenJDK 17
官方文档说明正常运行ActiveMQ6.1.6版本需要Java compatibility:17+,因此我们首先需要在2台服务器上安装openjdk17。
yum install -y java-17-openjdk-*
6.配置环境变量
# 编辑文件:/etc/profile export JAVA_HOME=/usr/lib/jvm/java-17-openjdk export PATH=$JAVA_HOME/bin:$PATH export ACTIVEMQ_HOME=/usr/local/activemq export PATH=$ACTIVEMQ_HOME/bin:$PATH
使环境变量生效
source /etc/profile
7.下载ActiveMQ安装包
下载最新版本的ActiveMQ安装包需要访问官网,下载地址为:http://activemq.apache.org/download.html
在写文档的时候,最新版本为6.1.6版本,以下文档我们就用此版本来部署基于NFS共享文件系统的Activemq主从集群。
8.解压安装包
tar -xzvf apache-activemq-6.1.6-bin.tar.gz cp -arf apache-activemq-6.1.6/* /usr/local/activemq/
9.配置文件修改(主从节点相同)
(1)设置共享存储路径
修改activemq.xml中persistenceAdapter部分:
<!-- Persistence Adapter with Shared File System Locker -->
<persistenceAdapter>
<kahaDB directory="/usr/local/activemq/data/kahadb"
lockKeepAlivePeriod="2000"
enableJournalDiskSyncs="true"
journalMaxFileLength="256mb"
indexWriteBatchSize="4096"
concurrentStoreAndDispatchTopics="false"
concurrentStoreAndDispatchQueues="false"
checkForCorruptJournalFiles="true" >
<locker>
<shared-file-locker lockAcquireSleepInterval="5000" />
</locker>
</kahaDB>
</persistenceAdapter>
关键参数说明:
- directory=”/usr/local/activemq/data/kahadb”:指定 KahaDB 存储数据的目录。所有的消息日志文件、索引文件等都会存储在这个目录下。你需要确保该目录存在,并且 ActiveMQ 进程对其有读写权限。
- lockKeepAlivePeriod=”2000″:表示锁的保持活动周期,单位是毫秒。这里设置为 2000 毫秒(即 2 秒),意味着每 2 秒会检查一次锁的状态,以确保锁的有效性。
- enableJournalDiskSyncs=”true”:启用日志文件的磁盘同步。当设置为 true 时,写入日志文件的操作会同步到磁盘,这样可以保证数据的持久化,但会降低性能;设置为 false 则可以提高性能,但在系统崩溃时可能会丢失部分未同步的数据。
- journalMaxFileLength=”256mb”:指定日志文件的最大长度为 256MB。当日志文件达到这个大小后,会创建一个新的日志文件继续记录。
- indexWriteBatchSize=”4096″:索引写入的批量大小。表示每次写入索引时,会批量处理 4096 个操作,这样可以提高索引写入的性能。
- concurrentStoreAndDispatchTopics=”false”:对于主题(Topics),是否允许并发存储和分发消息。设置为 false 表示不允许并发操作,即存储和分发消息是串行进行的;设置为 true 则可以提高处理主题消息的性能,但可能会增加系统的复杂性。
- concurrentStoreAndDispatchQueues=”false”:对于队列(Queues),是否允许并发存储和分发消息。和 concurrentStoreAndDispatchTopics 类似,设置为 false 表示串行操作,设置为 true 可以提高队列消息的处理性能。
- checkForCorruptJournalFiles=”true”:是否在启动时检查日志文件是否损坏。设置为 true 会在启动时检查日志文件的完整性,如果发现损坏的文件会尝试进行修复;设置为 false 则跳过检查,启动速度会更快,但可能会导致使用损坏的日志文件。
- <shared-file-locker lockAcquireSleepInterval=”5000″ />:使用共享文件锁机制来确保在多节点环境下只有一个节点可以访问 KahaDB 存储。
- lockAcquireSleepInterval 属性表示在尝试获取锁失败后,线程休眠的时间间隔,单位是毫秒。这里设置为 5000 毫秒(即 5 秒),意味着每隔 5 秒会再次尝试获取锁。
原创文章,作者:保哥,如若转载,请注明出处:https://www.shizhanxia.com/2335.html