ITコンサルの日常

ITコンサル会社に勤務する普通のITエンジニアの日常です。

HornetQでクラスタ構成にしたとき、HQ212034が出続ける場合の対処法

事象

下記のように、HQ212034のワーニングメッセージが繰り返し表示される。下記の通り、1回だけ表示されるなら無視してよいが、繰り返し表示される場合は問題がある。

20:59:08,455 WARN  [org.hornetq.core.client] HQ212034: There are more than one servers on the network broadcasting the same node id. You will see this message exactly once (per node) if a node is restarted, in which case it can be safely ignored. But if it is logged continuously it means you really do have more than one node on the same network active concurrently with the same node id. This could occur if you have a backup node active at the same time as its live node. nodeID=7bd67d54-4603-11e7-b22d-3906e90608b0
20:59:11,493 WARN  [org.hornetq.core.client] HQ212034: There are more than one servers on the network broadcasting the same node id. You will see this message exactly once (per node) if a node is restarted, in which case it can be safely ignored. But if it is logged continuously it means you really do have more than one node on the same network active concurrently with the same node id. This could occur if you have a backup node active at the same time as its live node. nodeID=7bd67d54-4603-11e7-b22d-3906e90608b0
...

原因

data/journal以下のファイルをコピペしたのが問題。

standaloneで動作させたHornetQのフォルダをコピーして、HornetQA、HornetQBの2つを作った際、不要なjournalファイルもコピーされてしまった。

対策

data/journal以下のファイルを全て削除する。

うまくいくと下記のようにコンソールに表示されます。

...
21:02:41,447 INFO  [org.hornetq.core.server] HQ221007: Server is now live
21:02:41,448 INFO  [org.hornetq.core.server] HQ221001: HornetQ Server version 2.5.0.SNAPSHOT (Wild Hornet, 124) [36142974-46c2-11e7-9e68-d926168704eb]
21:02:41,606 INFO  [org.hornetq.core.server] HQ221027: Bridge ClusterConnectionBridge@7fccef71 [name=sf.my-cluster.33add7f4-46c2-11e7-8de4-b158f74a0e2a, queue=QueueImpl[name=sf.my-cluster.33add7f4-46c2-11e7-8de4-b158f74a0e2a, postOffice=PostOfficeImpl [server=HornetQServerImpl::serverUUID=36142974-46c2-11e7-9e68-d926168704eb]]@5556b4bd targetConnector=ServerLocatorImpl (identity=(Cluster-connection-bridge::ClusterConnectionBridge@7fccef71 [name=sf.my-cluster.33add7f4-46c2-11e7-8de4-b158f74a0e2a, queue=QueueImpl[name=sf.my-cluster.33add7f4-46c2-11e7-8de4-b158f74a0e2a, postOffice=PostOfficeImpl [server=HornetQServerImpl::serverUUID=36142974-46c2-11e7-9e68-d926168704eb]]@5556b4bd targetConnector=ServerLocatorImpl [initialConnectors=[TransportConfiguration(name=netty, factory=org-hornetq-core-remoting-impl-netty-NettyConnectorFactory) ?port=5445&host=localhost], discoveryGroupConfiguration=null]]::ClusterConnectionImpl@263833514[nodeUUID=36142974-46c2-11e7-9e68-d926168704eb, connector=TransportConfiguration(name=netty, factory=org-hornetq-core-remoting-impl-netty-NettyConnectorFactory) ?port=6445&host=localhost, address=jms, server=HornetQServerImpl::serverUUID=36142974-46c2-11e7-9e68-d926168704eb])) [initialConnectors=[TransportConfiguration(name=netty, factory=org-hornetq-core-remoting-impl-netty-NettyConnectorFactory) ?port=5445&host=localhost], discoveryGroupConfiguration=null]] is connected

HornetQでクラスタプロパティを有効にしたとき、NumberFormatExceptionが出る場合の対処法

HornetQ 2.4.0Final

run.batのCONFIG_DIRの"non-clustered"を"clustered"に変更して、CLUSTER_PROPSの行をコメントインする。

クラスタプロパティを有効にしたrun.bat

@ echo off
setlocal ENABLEDELAYEDEXPANSION
set HORNETQ_HOME=..
IF "a%1"== "a" ( 
set CONFIG_DIR=%HORNETQ_HOME%\config\stand-alone\clustered
) ELSE (
SET CONFIG_DIR=%1
)
set CLASSPATH=%CONFIG_DIR%;%HORNETQ_HOME%\schemas\
REM you can use the following line if you want to run with different ports
set CLUSTER_PROPS="-Djnp.port=1099 -Djnp.rmiPort=1098 -Djnp.host=localhost -Dhornetq.remoting.netty.host=localhost -Dhornetq.remoting.netty.port=5445"
set JVM_ARGS=%CLUSTER_PROPS% -XX:+UseParallelGC  -XX:+AggressiveOpts -XX:+UseFastAccessorMethods -Xms512M -Xmx1024M -Dhornetq.config.dir=%CONFIG_DIR% -Djava.util.logging.manager=org.jboss.logmanager.LogManager -Djava.util.logging.config.file=%CONFIG_DIR%\logging.properties -Djava.library.path=.
REM export JVM_ARGS="-Xmx512M -Djava.util.logging.manager=org.jboss.logmanager.LogManager -Djava.util.logging.config.file=%CONFIG_DIR%\logging.properties -Dhornetq.config.dir=$CONFIG_DIR -Djava.library.path=. -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005"
for /R ..\lib %%A in (*.jar) do (
SET CLASSPATH=!CLASSPATH!;%%A
)
mkdir ..\logs
echo ***********************************************************************************
echo "java %JVM_ARGS% -classpath %CLASSPATH% org.hornetq.integration.bootstrap.HornetQBootstrapServer hornetq-beans.xml"
echo ***********************************************************************************
java %JVM_ARGS% -classpath "%CLASSPATH%" org.hornetq.integration.bootstrap.HornetQBootstrapServer hornetq-beans.xml

そうすると、下記のような結果になる。

run.batを実行した結果

サブディレクトリまたはファイル ..\logs は既に存在します。
***********************************************************************************
"java "-Djnp.port=1099 -Djnp.rmiPort=1098 -Djnp.host=localhost -Dhornetq.remoting.netty.host=localhost -Dhornetq.remoting.netty.port=5445" -XX:+UseParallelGC  -XX:+AggressiveOpts -XX:+UseFastAccessorMethods -Xms512M -Xmx1024M -Dhornetq.config.dir=..\config\stand-alone\clustered -Djava.util.logging.manager=org.jboss.logmanager.LogManager -Djava.util.logging.config.file=..\config\stand-alone\clustered\logging.properties -Djava.library.path=. -classpath ..\config\stand-alone\clustered;..\schemas\;C:\app\hornetq-2.4.0.Finala\lib\hornetq-aerogear-integration.jar;C:\app\hornetq-2.4.0.Finala\lib\hornetq-amqp-protocol.jar;C:\app\hornetq-2.4.0.Finala\lib\hornetq-bootstrap.jar;C:\app\hornetq-2.4.0.Finala\lib\hornetq-commons.jar;C:\app\hornetq-2.4.0.Finala\lib\hornetq-core-client.jar;C:\app\hornetq-2.4.0.Finala\lib\hornetq-jboss-as-integration.jar;C:\app\hornetq-2.4.0.Finala\lib\hornetq-jms-client.jar;C:\app\hornetq-2.4.0.Finala\lib\hornetq-jms-server.jar;C:\app\hornetq-2.4.0.Finala\lib\hornetq-journal.jar;C:\app\hornetq-2.4.0.Finala\lib\hornetq-native.jar;C:\app\hornetq-2.4.0.Finala\lib\hornetq-ra.jar;C:\app\hornetq-2.4.0.Finala\lib\hornetq-rest.jar;C:\app\hornetq-2.4.0.Finala\lib\hornetq-server.jar;C:\app\hornetq-2.4.0.Finala\lib\hornetq-service-sar.jar;C:\app\hornetq-2.4.0.Finala\lib\hornetq-spring-integration.jar;C:\app\hornetq-2.4.0.Finala\lib\hornetq-stomp-protocol.jar;C:\app\hornetq-2.4.0.Finala\lib\hornetq-tools.jar;C:\app\hornetq-2.4.0.Finala\lib\hornetq-twitter-integration.jar;C:\app\hornetq-2.4.0.Finala\lib\jboss-jms-api.jar;C:\app\hornetq-2.4.0.Finala\lib\jboss-mc.jar;C:\app\hornetq-2.4.0.Finala\lib\jnp-client.jar;C:\app\hornetq-2.4.0.Finala\lib\jnpserver.jar;C:\app\hornetq-2.4.0.Finala\lib\netty.jar;C:\app\hornetq-2.4.0.Finala\lib\proton-api.jar;C:\app\hornetq-2.4.0.Finala\lib\proton-j-impl.jar;C:\app\hornetq-2.4.0.Finala\lib\proton-jms.jar org.hornetq.integration.bootstrap.HornetQBootstrapServer hornetq-beans.xml"
***********************************************************************************
22:17:47,318 INFO  [org.hornetq.integration.bootstrap] HQ101000: Starting HornetQ Server
22:17:48,098 WARN  [org.hornetq.core.server] HQ222018: AIO was not located on this platform, it will fall back to using pure Java NIO. If your platform is Linux, install LibAIO to enable the AIO journal
22:17:48,146 ERROR [org.jboss.kernel.plugins.dependency.AbstractKernelController] Error installing to Configured: name=StandaloneServer state=Instantiated: java.lang.RuntimeException: Error configuring property: port for StandaloneServer
        at org.jboss.kernel.plugins.dependency.ConfigureAction.dispatchSetProperty(ConfigureAction.java:112) [jboss-mc.jar:]
        at org.jboss.kernel.plugins.dependency.ConfigureAction.setAttributes(ConfigureAction.java:85) [jboss-mc.jar:]
        at org.jboss.kernel.plugins.dependency.ConfigureAction.installActionInternal(ConfigureAction.java:44) [jboss-mc.jar:]
        at org.jboss.kernel.plugins.dependency.InstallsAwareAction.installAction(InstallsAwareAction.java:54) [jboss-mc.jar:]
        at org.jboss.kernel.plugins.dependency.InstallsAwareAction.installAction(InstallsAwareAction.java:42) [jboss-mc.jar:]
        at org.jboss.dependency.plugins.action.SimpleControllerContextAction.simpleInstallAction(SimpleControllerContextAction.java:62) [jboss-mc.jar:]
        at org.jboss.dependency.plugins.action.AccessControllerContextAction.install(AccessControllerContextAction.java:71) [jboss-mc.jar:]
        at org.jboss.dependency.plugins.AbstractControllerContextActions.install(AbstractControllerContextActions.java:51) [jboss-mc.jar:]
        at org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:348) [jboss-mc.jar:]
        at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:1631) [jboss-mc.jar:]
        at org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:934) [jboss-mc.jar:]
        at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1082) [jboss-mc.jar:]
        at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:984) [jboss-mc.jar:]
        at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:774) [jboss-mc.jar:]
        at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:540) [jboss-mc.jar:]
        at org.jboss.kernel.plugins.deployment.AbstractKernelDeployer.deployBean(AbstractKernelDeployer.java:319) [jboss-mc.jar:]
        at org.jboss.kernel.plugins.deployment.AbstractKernelDeployer.deployBeans(AbstractKernelDeployer.java:297) [jboss-mc.jar:]
        at org.jboss.kernel.plugins.deployment.AbstractKernelDeployer.deploy(AbstractKernelDeployer.java:130) [jboss-mc.jar:]
        at org.jboss.kernel.plugins.deployment.xml.BeanXMLDeployer.deploy(BeanXMLDeployer.java:96) [jboss-mc.jar:]
        at org.hornetq.integration.bootstrap.HornetQBootstrapServer.deploy(HornetQBootstrapServer.java:236) [hornetq-bootstrap.jar:]
        at org.hornetq.integration.bootstrap.HornetQBootstrapServer.deploy(HornetQBootstrapServer.java:206) [hornetq-bootstrap.jar:]
        at org.hornetq.integration.bootstrap.HornetQBootstrapServer.bootstrap(HornetQBootstrapServer.java:154) [hornetq-bootstrap.jar:]
        at org.jboss.kernel.plugins.bootstrap.AbstractBootstrap.run(AbstractBootstrap.java:83) [jboss-mc.jar:]
        at org.hornetq.integration.bootstrap.HornetQBootstrapServer.run(HornetQBootstrapServer.java:115) [hornetq-bootstrap.jar:]
        at org.hornetq.integration.bootstrap.HornetQBootstrapServer.main(HornetQBootstrapServer.java:69) [hornetq-bootstrap.jar:]
Caused by: java.lang.NumberFormatException: For input string: "1099 -Djnp.rmiPort=1098 -Djnp.host=localhost -Dhornetq.remoting.netty.host=localhost -Dhornetq.remoting.netty.port=5445"
        at java.lang.NumberFormatException.forInputString(Unknown Source) [rt.jar:1.8.0_131]
        at java.lang.Integer.parseInt(Unknown Source) [rt.jar:1.8.0_131]
        at java.lang.Integer.valueOf(Unknown Source) [rt.jar:1.8.0_131]
        at java.lang.Integer.decode(Unknown Source) [rt.jar:1.8.0_131]
        at com.sun.beans.editors.IntegerEditor.setAsText(Unknown Source) [rt.jar:1.8.0_131]
        at org.jboss.reflect.plugins.ValueConvertor.convertValue(ValueConvertor.java:139) [jboss-mc.jar:]
        at org.jboss.reflect.spi.PrimitiveInfo.convertValue(PrimitiveInfo.java:248) [jboss-mc.jar:]
        at org.jboss.beans.metadata.plugins.StringValueMetaData.getValue(StringValueMetaData.java:131) [jboss-mc.jar:]
        at org.jboss.kernel.plugins.dependency.PropertyDispatchWrapper.execute(PropertyDispatchWrapper.java:111) [jboss-mc.jar:]
        at org.jboss.kernel.plugins.dependency.ExecutionWrapper.execute(ExecutionWrapper.java:47) [jboss-mc.jar:]
        at org.jboss.kernel.plugins.dependency.KernelControllerContextAction.dispatchExecutionWrapper(KernelControllerContextAction.java:109) [jboss-mc.jar:]
        at org.jboss.kernel.plugins.dependency.ConfigureAction.dispatchSetProperty(ConfigureAction.java:107) [jboss-mc.jar:]
        ... 24 more

22:17:48,207 INFO  [org.hornetq.core.server] HQ221000: live server is starting with configuration HornetQ Configuration (clustered=true,backup=false,sharedStore=true,journalDirectory=../data/journal,bindingsDirectory=../data/bindings,largeMessagesDirectory=../data/large-messages,pagingDirectory=../data/paging)
22:17:48,210 INFO  [org.hornetq.core.server] HQ221006: Waiting to obtain live lock
22:17:48,240 INFO  [org.hornetq.core.server] HQ221013: Using NIO Journal
22:17:48,269 WARN  [org.hornetq.core.server] HQ222007: Security risk! HornetQ is running with the default cluster admin user and default password. Please see the HornetQ user guide, cluster chapter, for instructions on how to change this.
22:17:48,362 INFO  [org.hornetq.core.server] HQ221043: Adding protocol support CORE
22:17:48,365 INFO  [org.hornetq.core.server] HQ221043: Adding protocol support AMQP
22:17:48,369 INFO  [org.hornetq.core.server] HQ221043: Adding protocol support STOMP
22:17:48,471 INFO  [org.hornetq.core.server] HQ221034: Waiting to obtain live lock
22:17:48,472 INFO  [org.hornetq.core.server] HQ221035: Live Server Obtained live lock
22:17:53,974 INFO  [org.hornetq.core.server] HQ221003: trying to deploy queue jms.queue.DLQ
...

原因はrun.batのバグ
CLUSTER_PROPSのダブルクォートが不要。

間違い

set CLUSTER_PROPS="-Djnp.port=1099 -Djnp.rmiPort=1098 -Djnp.host=localhost -Dhornetq.remoting.netty.host=localhost -Dhornetq.remoting.netty.port=5445"

正解

set CLUSTER_PROPS=-Djnp.port=1099 -Djnp.rmiPort=1098 -Djnp.host=localhost -Dhornetq.remoting.netty.host=localhost -Dhornetq.remoting.netty.port=5445

個人型確定拠出年金に加入した話

去年、たまたま読んだ日経ビジネスアソシエ2017年1月号に載ってたiDeCo(個人型確定拠出年金)。入れる条件が緩和したとかで話題になってました。

www.dcnenkin.jp

良く調べたら、自分の勤務する会社が企業型確定拠出年金(401k)をやっておらず、確定給付企業年金等(三階建て部分;厚生年金基金、私学共済、石炭鉱業年金基金)もやってないので、条件緩和前からそもそも入れるものでした。早速手続きして、4月くらいから始まりました。

ざっくり計算ですが、23,000円/月、276,000円/年、およそ3割が課税控除となり、82,800円/年の節税になるそうです。自分の口座から引き落とししても良いのですが、給与口座から自動引き落としにすると、自分で確定申告しなくても自動で課税控除の恩恵が受けられます。(単に手間の問題ですが)

加えて、23,000円/月の拠出金で金融資産を運用するわけですが、ここで運用損益がどうなるかも重要です。いわゆるインデックス投資がよいのではないかと思ってますが、どうなるかは結果次第でしょう。

しかし、この手の知ってると得する、知らないと損するとかいうの世の中に多くないですかね。庶民がお上から税金を取り戻せる制度は、最大限活用すべきです。

NEC Wifi 無線LAN ルーター Aterm WG1800HP2購入

こないだ光ホームゲートウェイを交換した直後は、しばらく快適だったのですが、近ごろ夜になると(朝でも?)ネット接続が遅くなったり、つながらなくなったり、色々不具合が生じていました。 

 診断手順

  1. 光ホームゲートウェイに有線LAN接続してみる
    →OK
  2. 無線LANルーターに有線LAN接続してみる
    →OK
  3. 無線LANルーターに近いところで無線接続してみる
    →OK
  4. 無線LANルーターに遠いところで無線接続してみる
    →まあまあOK

というわけで、初期診断した際は特に問題なく、また数日様子見していたのですが、やっぱり時間帯なのか時々無線LANが不安定になることがあり、無線LAN不安定になったタイミングで有線LAN接続は安定していたため、やはり無線LANの問題だろうと結論づけました。そういえば、Appleるんるんでも無線LANルーターは消耗品みたいな話されてましたね。

Web R@dio Station“くりらじ”

最近はゲーミングルーターとかいうのもあるらしく、一般に無線LAN親機って言われるジャンルも進化しているようですが、子機とかの都合もありNEC一択。地元のケーズデンキで店員さんにつかまり雑談したのち、エントリーモデルよりは、ミドルクラスの方がいいだろうと思い、下記のものにしました。 

有線や無線LANルーターに近いところでは200Mbps程度、遠いところでも5GHzなら30~40Mbps、2.4GHzでも15Mbpsくらい安定して出るようです。これでしばらく安定して運用できそうです。

TOEIC L&R 220受験完了

本日無事終わりました。たぶん600-700点の間でしょう。(つまりスコアアップしてない)まあ、こんなこと書いて600点未満だったらどうすんだってのもありますが。うっかり730点以上になってることを祈ってます。

前回(715点)のときは、鼻水が止まらず試験問題冊子を鼻水でびしょびしょにしてしまったのですが、今回はそういうこともなく体調良好で受けられたので、まあよかったのではないでしょうか。

試験会場

いつもの湘南工科大学。最近いつもここな気がする。

試験のお供

システム監査技術者試験無事終了 - プログラマとプロマネのあいだ
と同じですが。

マークシートを早く塗ることの出来る太めのシャープペンシル

CASIO MQ-24-7B2LLJF Men's Analog Watch

CASIO MQ-24-7B2LLJF Men's Analog Watch

試験に必要のない余計なアラーム機能もないし、文字見やすいし、かなり良いです。

iPadでTOEICの勉強をする

support.apple.com

このマルチタスク機能のSlide Overってのを使うと、リスニングの音声をサイドで再生しながら、テキストも一緒に見られてとても便利です。こんな感じ。

f:id:taka_2:20170517223150p:plain

iPad mini4は、イヤホンジャックが(まだ)あるので、その点もよいですよね。

 一方で、iPad miniシリーズ終了のお知らせ的な噂もあるようです。

japanese.engadget.com

iPhoneだとSlide Over使えないし(そういうアプリがあるみたいですけど)、iPad9.7インチだと持ち運ぶのに大きすぎるし、ちょうど良いサイズだと思うんですけどねえ。

VGA → HDMI変換ケーブルを購入

USBで電源供給が必要なので、若干ケーブルがごちゃごちゃしがちですが、まあ普通に使えてます。

古いパソコンはHDMI端子がなく、VGA(Dsub)端子のみというパソコンも多いです。一方で、プロジェクターやモニターなど、新しいものはHDMI端子のみしかないということも多く、このようなケーブルは活躍の機会がありますね。

HDMIVGAだと、技術的には簡単なのか、ケーブルももう少しすっきりしてるんですけどね。