Centos7&DockerでRocketmq環境を構築

方法1:Centos7による方法

1. 必要な事前環境

2. インストール前の設定
1. jdk 1.8のインストール(手順省略)
インストールパッケージを該当ディレクトリ(/usr/local/java/jdk1.8.0_211/bin/java)にダウンロードし、解凍します。

環境変数を設定するだけです。

#打开环境变量配置文件
vim /etc/profile

########### profile 文件中新增如下三行 ###########
export JAVA_HOME=/usr/java/jdk1.8.0_181-amd64
export CLASS_PATH="$JAVA_HOME/lib"
export PATH="$PATH:$JAVA_HOME/bin"

# 配置立刻生效
source /etc/profile

2.Mavenをインストールする

(1)、ダウンロード、*.tar.gz をダウンロード

wget https://downloads.apache.org/maven/maven-3/3.8.4/binaries/apache-maven-3.8.4-bin.tar.gz  

(2)解凍して名前を変更し、インストール先のディレクトリに移動します。

# 解压
tar -zxvf apache-maven-3.8.4-bin.tar.gz 

# 重命名
mv apache-maven-3.8.4 maven

# 移动maven到/usr/local/
mv maven /usr/local/

# 修改maven配置文件,添加阿里云仓库
    <mirror> 
         <id>alimaven</id> 
         <name>aliyun maven</name> 
         <url>https://maven.aliyun.com/nexus/content/groups/public/</url> 
         <mirrorOf>central</mirrorOf> 
     </mirror>
# 如果jar拉取不下来,可以换成maven仓库
    <mirror> 
         <id>maven2</id> 
         <name>maven2</name> 
         <url>https://repo1.maven.org/maven2/</url> 
         <mirrorOf>central</mirrorOf> 
     </mirror>

# 配置环境变量
vim /etc/profile

# profile 文件中新增如下两行
export  MAVEN_HOME=/usr/local/maven
export PATH=$PATH:$MAVEN_HOME/bin

# 配置立刻生效
source /etc/profile

# 检验是否安装成功
mvn -v

3. RocketMQ をインストールする

1. ダウンロード

githubからダウンロード(zipパッケージをダウンロード)

ソース zip ソース パッケージ:ソース パッケージ(バージョン 4.9.2)
拡張パッケージのダウンロード (別のプロジェクトである元の rocketmq-console から):拡張パッケージ (ページ コンソール)
2. mqnamesrv サービスを開始します。

# 解压源码包
unzip rocketmq-rocketmq-all-4.9.2.zip
# 进入解压的源码包
cd rocketmq-rocketmq-all-4.9.2
# 编译源码
mvn -Prelease-all -DskipTests clean install -U
# 找到编译后的文件包(distribution/target/rocketmq-4.9.2)
cd distribution/target
# 将rocketmq-4.9.2重新命名为rocketmq并且移动到/usr/local/下
mv rocketmq-4.9.2 rocketmq
mv rocketmq /usr/local/
# 进入bin目录并启动mqnamesrv服务(如果启动失败,可打开runserver.sh,把最小需要内存4G调小)
cd /usr/local/rocketmq/bin
./mqnamesrv

3. mqbroker サービスを開始します

# 重新打开shell窗口,启动mqbroker服务
cd /usr/local/rocketmq/bin
./mqbroker

注: 起動時に次のエラーが報告された場合は、メモリが不足していることを意味します。調整可能な runbroker.sh に必要な最小メモリは、
Java HotSpot(TM) 64 ビット サーバー VM の警告です: INFO: os::commit_memory(0x00000005c0000000) 、8589934592、0) 失敗しました ; エラー='メモリを割り当てられません' (errno=12)

runbroker.sh ファイルを表示すると、mqbroker を起動するには少なくとも 8g のメモリが必要であることがわかります。 

JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g"

解決: 

# 进入runbroker.sh
vim runbroker.sh
# 修改最小需要启动内存大小为
JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m"
# 重新启动mqbroker服务,并且连接到注册中心,否则控制台找不到broker
./mqbroker -n localhost:9876

如果找不到主机,可修改host添加一条对应
vim /etc/hosts
如果需要支持sql过滤需要在,broker.conf配置文件里面增加一条配置
enablePropertyFilter=true
同时启动的时候需要加上配置文件(conf目录)
../bin/mqbroker -n localhost:9876 -c broker.conf

4. テスト構成の追加

添加mqnamesrv环境变量,尽量添加到export一起
vi tools.sh
export NAMESRV_ADDR=localhost:9876

测试消息生产消费:
生产: 
./tools.sh org.apache.rocketmq.example.quickstart.Producer
消费:
./tools.sh org.apache.rocketmq.example.quickstart.Consumer

5. 拡張サービス データボードと Web コンソールを起動します

# 解压下载的扩展文件rocketmq-dashboard-master.zip
unzip rocketmq-dashboard-master.zip
# 进入解压文件,并进入到rocketmq-console
cd rocketmq-dashboard-master
# 控制台为springboot项目,修改application.properties配置,设置注册中心地址
rocketmq.config.namesrvAddr=127.0.0.1:9876

# 执行编译
mvn clean package -Dmaven.test.skip=true
# 找到编译后的rocketmq-dashboard-1.0.1-SNAPSHOT.jar
#并复制到/usr/local/rocketmq-dashboard(需要新建rocketmq-dashboard)
cd target
cp rocketmq-dashboard-1.0.1-SNAPSHOT.jar /usr/local/rocketmq-dashboard/
# 进入 /usr/local/rocketmq-dashboard/,启动web服务
cd /usr/local/rocketmq-dashboard/
java -jar rocketmq-dashboard-1.0.1-SNAPSHOT.jar
# 如果要后台启动,使用
nohup java -jar rocketmq-dashboard-1.0.1-SNAPSHOT.jar

発生した問題:

[INFO] Downloading https://nodejs.org/dist/v16.2.0/node-v16.2.0-linux-x64.tar.gz to /root/.m2/repository/com/github/eirslett/node/16.2.0/node-16.2.0-linux-x64.tar.gz
[INFO] No proxies configured
[INFO] No proxy was configured, downloading directly

ネットワーク上の理由により、node-v16.2.0-linux-x64.tar.gz をコンパイルしてダウンロードするときに、ダウンロードに失敗する可能性があります。現時点では、https://nodejs.org/dist を手動でダウンロードできます。 /v16.2.0/node -v16.2.0-linux-x64.tar.gzをサービスにアップロードし、対応する場所 /root/.m2/repository/com/github/eirslett/node/16.2 に配置します。 .0/ にファイルを配置します。名前が、node-v16.2.0-linux-x64.tar.gz から、コンパイル要件を満たす node-16.2.0-linux-x64.tar.g に変更され、再コンパイルされます。上記の手順を実行します

サービスが開始されると、ブラウザは IP: 8080 (デフォルト ポート 8080) で Web コンソールにアクセスできるようになります。

起動後に起動ログにエラーが報告される場合
原因: org.apache.rocketmq.remoting.Exception.RemotingConnectException: null への接続に失敗しました

解決:

# 找到broker.conf 文件(rocketmq/conf/broker.conf),新增如下两行
namesrvAddr=127.0.0.1:9876
# 指定的ip地址即是linux本身的IP地址
brokerIP1=10.118.241.145

# 重新启动mqnamesrv和mqbroker以及rocketmq-console服务
./mqnamesrv    
./mqbroker -n localhost:9876 -c ../conf/broker.conf
java -jar rocketmq-dashboard-1.0.1-SNAPSHOT.jar

# 后台启动方式
./mqnamesrv &    
./mqbroker -n localhost:9876 -c ../conf/broker.conf &
nohup java -jar rocketmq-dashboard-1.0.1-SNAPSHOT.jar --rocketmq.config.namesrvAddr=localhost:9876 > console-ng.log 2>&1&

4、遭遇したピット

公式 Web サイトから送信されるテスト プログラムを開始してメッセージを送信する前に、rocketmq のデフォルトのサービス ポート番号 (9876) と VIP ポート番号を有効にする必要があります。有効にしないと、メッセージ送信時にエラーが報告されます。

Vip ポート番号の表示方法、rocketmq-console コントロール ページを開く

応答ポート番号を開きます

firewall-cmd --zone=public --add-port=9876/tcp --permanent
firewall-cmd --zone=public --add-port=10911/tcp --permanent
firewall-cmd --reload

設定が完了した後、コンソールを再起動してもエラーは報告されません。公式 Web サイトのプロデューサーの例を探してメッセージを送信しました。その結果、仮想マシンを使用しているため、ディスクの容量が比較的小さく、使用率が高くなります。プログラムは、ディスク サイズが不十分であることを意味するエラーを報告します。

Caused by: org.apache.rocketmq.client.exception.MQBrokerException: CODE: 14  DESC: service not available now. It may be caused by one of the following reasons: the broker's disk is full [CL:  0.91 CQ:  0.91 INDEX:  0.91], messages are put to the slave, message store has been shut down, etc. BROKER: 10.118.241.145:10911

デフォルトでは、rocketmq は、残りのディスクの比率が 75% 未満 (この比率は rocketmq のバージョンによって異なるようです) をディスク容量不足として扱います。

解決:

1. ディスクを拡張します

2. borker.conf を設定して、ディスク不足を報告するためのしきい値を増やす

vim broker.conf
# 在文件新增一行配置,磁盘使用率达到99%才允许报磁盘不足
diskMaxUsedSpaceRatio=99

次に、ブローカー サービスを再起動し、メッセージを再度送信し、正常に送信します。
注: プロデューサがメッセージ コードを送信するときは、メッセージの送信後に shutdown を呼び出さないでください。そうしないと、Web コンソールはプロデューサ ページをクエリできなくなります。

# 生产环境一定要注释掉
//producer.shutdown();

この時点で、簡単な構築プロセス全体が完了します 

方法 2: Docker メソッド

1. イメージをプルして namesrv サービスを作成します

docker pull rocketmqinc/rocketmq

namesrv データストレージパスを作成する

mkdir -p  /data/docker/rocketmq/data/namesrv/logs   /data/docker/rocketmq/data/namesrv/store

コンテナを構築する

docker run -d \
--restart=always \
--name rmqnamesrv \
-p 9876:9876 \
-v /data/docker/rocketmq/data/namesrv/logs:/root/logs \
-v /data/docker/rocketmq/data/namesrv/store:/root/store \
-e "MAX_POSSIBLE_HEAP=100000000" \
rocketmqinc/rocketmq \
sh mqnamesrv 

2. ブローカーノードを作成する

ブローカー データ ストレージ パスの作成

mkdir -p  /data/docker/rocketmq/data/broker/logs /data/docker/rocketmq/data/broker/store /data/docker/rocketmq/conf

構成ファイルを読み取るブローカーを作成する

vi /data/docker/rocketmq/conf/broker.conf

設定ファイルの内容は以下のとおりです。 

# 所属集群名称,如果节点较多可以配置多个
brokerClusterName = DefaultCluster
#broker名称,master和slave使用相同的名称,表明他们的主从关系
brokerName = broker-a
#0表示Master,大于0表示不同的slave
brokerId = 0
#表示几点做消息删除动作,默认是凌晨4点
deleteWhen = 04
#在磁盘上保留消息的时长,单位是小时
fileReservedTime = 48
#有三个值:SYNC_MASTER,ASYNC_MASTER,SLAVE;同步和异步表示Master和Slave之间同步数据的机制;
brokerRole = ASYNC_MASTER
#刷盘策略,取值为:ASYNC_FLUSH,SYNC_FLUSH表示同步刷盘和异步刷盘;SYNC_FLUSH消息写入磁盘后才返回成功状态,ASYNC_FLUSH不需要;
flushDiskType = ASYNC_FLUSH
# 设置broker节点所在服务器的ip地址
brokerIP1 = 192.168.2.115
# 开启权限认证
#aclEnable=true

権限認証を有効にするには、plain_acl.yml を作成する必要があります。

vi /data/docker/rocketmq/conf/plain_acl.yml

ユーザー権限を構成する

globalWhiteRemoteAddresses:
accounts:
- accessKey: RocketMQ
  secretKey: 123456
  whiteRemoteAddress:
  admin: false
  defaultTopicPerm: DENY
  defaultGroupPerm: SUB
  topicPerms:
  # 用户RocketMQ只能发送TopicTest的消息,其他topic无权限发送
  - TopicTest=PUB
  groupPerms:
  # the group should convert to retry topic
  - oms_consumer_group=DENY
- accessKey: admin
  secretKey: 123456
  whiteRemoteAddress:
  # if it is admin, it could access all resources
  admin: true

ブローカーコンテナを構築する

非オープン許可方式:(推奨)

docker run -d  \
--restart=always \
--name rmqbroker \
--link rmqnamesrv:namesrv \
-p 10911:10911 \
-p 10909:10909 \
-v /data/docker/rocketmq/data/broker/logs:/root/logs \
-v /data/docker/rocketmq/data/broker/store:/root/store \
-v /data/docker/rocketmq/conf/broker.conf:/opt/rocketmq-4.4.0/conf/broker.conf \
-e "NAMESRV_ADDR=namesrv:9876" \
-e "MAX_POSSIBLE_HEAP=200000000" \
rocketmqinc/rocketmq \
sh mqbroker -c /opt/rocketmq-4.4.0/conf/broker.conf 

権限を有効にする方法:

docker run -d  \
--restart=always \
--name rmqbroker \
--link rmqnamesrv:namesrv \
-p 10911:10911 \
-p 10909:10909 \
-v /data/docker/rocketmq/data/broker/logs:/root/logs \
-v /data/docker/rocketmq/data/broker/store:/root/store \
-v /data/docker/rocketmq/conf/broker.conf:/opt/rocketmq-4.4.0/conf/broker.conf \
-v /data/docker/rocketmq/conf/plain_acl.yml:/opt/rocketmq-4.4.0/conf/plain_acl.yml \
-e "NAMESRV_ADDR=namesrv:9876" \
-e "MAX_POSSIBLE_HEAP=200000000" \
rocketmqinc/rocketmq \
sh mqbroker -c /opt/rocketmq-4.4.0/conf/broker.conf 

3.rockermq-console サービスを作成する

画像をプルします

docker pull pangliang/rocketmq-console-ng

Rockermq-console-ng コンテナーを構築する

docker run -d \
--restart=always \
--name rmqadmin \
-e "JAVA_OPTS=-Drocketmq.namesrv.addr=192.168.2.115:9876 \
-Dcom.rocketmq.sendMessageWithVIPChannel=false" \
-p 9999:8080 \
pangliang/rocketmq-console-ng

コンソールにアクセスするには、ip:9999 にアクセスします。

 ログインするために管理ページを開く必要がある場合は、/data/docker/rocketmq/dashboard フォルダーに users.properties ファイルを作成し、再起動しなくても有効になるようにユーザー名とパスワードを更新します。

# This file supports hot change, any change will be auto-reloaded without Console restarting.
# Format: a user per line, username=password[,N] #N is optional, 0 (Normal User); 1 (Admin)
 
# Define Admin
# =============用户名和密码规则「用户名=密码,权限」,这里的权限为1表示管理员,为0表示普通用户=============
# 例如:admin=admin123,1
admin=admin,1
user=user,0
 
 
# Define Users
# =============屏蔽下边两个账户=============
#user1=user1
#user2=user2

まず有効な起動ダッシュボード インスタンスを削除してから、再起動してコンテナを作成します

docker run -d \
--restart=always \
--name rmqadmin -v /data/docker/rocketmq/dashboard:/tmp/rocketmq-console/data \
-e "JAVA_OPTS=-Drocketmq.namesrv.addr=192.168.2.115:9876 \
-Dcom.rocketmq.sendMessageWithVIPChannel=false \
-Drocketmq.config.loginRequired=true" \
-p 9999:8080 \
pangliang/rocketmq-console-ng

コンテナーが起動したら、ログインしてコンソールにアクセスする必要があります。

 この時点で、centos7 ビルドと docker ビルド rocketmq のチュートリアルは終了です。

おすすめ

転載: blog.csdn.net/qq_21875331/article/details/121530927