blob: 472db29f4565433311b16518568a8d8470a9d7ff [file] [log] [blame]
<?xml version="1.0"?>
<!--
~
~ Licensed to the Apache Software Foundation (ASF) under one
~ or more contributor license agreements. See the NOTICE file
~ distributed with this work for additional information
~ regarding copyright ownership. The ASF licenses this file
~ to you under the Apache License, Version 2.0 (the
~ "License"); you may not use this file except in compliance
~ with the License. You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing,
~ software distributed under the License is distributed on an
~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
~ KIND, either express or implied. See the License for the
~ specific language governing permissions and limitations
~ under the License.
~
-->
<appendix xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="Java-Broker-Appendix-BDB-HA-initial-configuration">
<title>BDB HA initial configuration</title>
<para>The section <xref linkend="Java-Broker-Initial-Configuration-Introduction"/>
provides an introduction into Broker-J initial configuration and how broker configuration can be created from
initial configuration on first broker start-up. This appendix illustrates how to create a BDB HA group from an
initial configuration file. For creation of BDB HA group using Web Management Console please refer <xref linkend="Java-Broker-Management-Channel-Web-Console"/>.
</para>
<para>The BDB HA group usually consists of two or more nodes hosting a distributed virtual host.</para>
<para>When BDB HA node is created the following attributes has to be provided
<itemizedlist>
<listitem><para><emphasis>groupName</emphasis>; a name of BDB HA group</para></listitem>
<listitem><para><emphasis>nodeName</emphasis>; a name of BDB HA node</para></listitem>
<listitem><para><emphasis>address</emphasis>; a node address as colon-separated pair of host name and port</para></listitem>
<listitem><para><emphasis>helperAddress</emphasis>; an address of existing helper node. It is required when node joins an existing group.</para></listitem>
<listitem><para><emphasis>helperNodeName</emphasis>; a name of existing helper node. It is required when node joins an existing group.</para></listitem>
<listitem><para><emphasis>permittedNodes</emphasis>; an array containing all addresses of nodes allowed to join the group.</para></listitem>
</itemizedlist>
</para>
<para>
A node priority can be optionally specified for the node to influence master election among nodes with the most current set of data.
An attribute <emphasis>priority</emphasis> is used to specify a priority as an integer number.
</para>
<para>Apart from a group name and permitted nodes, the rest of node attribute values varies from node to node.</para>
<para>In order to use the same initial configuration for creation of BDB HA nodes, the context variable can be used for varying attribute values.</para>
<para>In the example of initial configuration illustrated in this apendix, the following context variables are defined.
<itemizedlist>
<listitem><para><emphasis>\${ha.group_name}</emphasis>; used to pass an HA group name</para></listitem>
<listitem><para><emphasis>\${ha.node_name}</emphasis>; used to pass a node name</para></listitem>
<listitem><para><emphasis>\${ha.node_address}</emphasis>; used to pass a node address</para></listitem>
<listitem><para><emphasis>\${ha.helper_address}</emphasis>; used to pass an address of helper node.</para></listitem>
<listitem><para><emphasis>\${ha.helper_node_name}</emphasis>; used to pass an address of helper node.</para></listitem>
<listitem><para><emphasis>\${ha.permitted_nodes}</emphasis>; used to pass a stringified json array containing permitted nodes for the group.</para></listitem>
<listitem><para><emphasis>\${ha.priority}</emphasis>; used to pass a node priority.</para></listitem>
</itemizedlist>
</para>
<section xml:id="Java-Broker-Appendix-BDB-HA-initial-configuration-example">
<title>Example of BDB HA 'Initial Configuration'</title>
<para> An example of 'Initial Configuration' for BDB HA:</para>
<example>
<title>BDB HA 'Initial configuration'</title>
<programlisting>
{
"name": "\${broker.name}",
"modelVersion" : "8.0",
"authenticationproviders" : [ {
"name" : "plain",
"type" : "Plain",
"users" : [ {
"name" : "guest",
"type" : "managed",
"password" : "guest"
} ]
} ],
"brokerloggers" : [ {
"name" : "logfile",
"type" : "File",
"fileName" : "\${qpid.work_dir}\${file.separator}log\${file.separator}qpid.log",
"brokerloginclusionrules" : [ {
"name" : "Root",
"type" : "NameAndLevel",
"level" : "WARN",
"loggerName" : "ROOT"
}, {
"name" : "Qpid",
"type" : "NameAndLevel",
"level" : "INFO",
"loggerName" : "org.apache.qpid.*"
}, {
"name" : "Operational",
"type" : "NameAndLevel",
"level" : "INFO",
"loggerName" : "qpid.message.*"
}, {
"name" : "Statistics",
"type" : "NameAndLevel",
"level" : "INFO",
"loggerName" : "qpid.statistics.*"
} ]
}, {
"name" : "memory",
"type" : "Memory",
"brokerloginclusionrules" : [ {
"name" : "Root",
"type" : "NameAndLevel",
"level" : "WARN",
"loggerName" : "ROOT"
}, {
"name" : "Qpid",
"type" : "NameAndLevel",
"level" : "INFO",
"loggerName" : "org.apache.qpid.*"
}, {
"name" : "Operational",
"type" : "NameAndLevel",
"level" : "INFO",
"loggerName" : "qpid.message.*"
}, {
"name" : "Statistics",
"type" : "NameAndLevel",
"level" : "INFO",
"loggerName" : "qpid.statistics.*"
} ]
} ],
"ports" : [ {
"name" : "AMQP",
"port" : "\${qpid.amqp_port}",
"authenticationProvider" : "plain",
"virtualhostaliases" : [ {
"name" : "nameAlias",
"type" : "nameAlias"
}, {
"name" : "defaultAlias",
"type" : "defaultAlias"
}, {
"name" : "hostnameAlias",
"type" : "hostnameAlias"
} ]
}, {
"name" : "HTTP",
"port" : "\${qpid.http_port}",
"authenticationProvider" : "plain",
"protocols" : [ "HTTP" ]
}],
"virtualhostnodes" : [ {
"name" : "\${ha.node_name}",
"type" : "BDB_HA",
"address" : "\${ha.node_address}",
"groupName" : "\${ha.group_name}",
"helperAddress" : "\${ha.helper_address}",
"helperNodeName" : "\${ha.helper_node_name}",
"permittedNodes" : "\${ha.permitted_nodes}",
"priority" : "\${ha.priority}",
"defaultVirtualHostNode" : "true",
"virtualHostInitialConfiguration" : "\${qpid.initial_config_virtualhost_config}"
} ],
"plugins" : [ {
"type" : "MANAGEMENT-HTTP",
"name" : "httpManagement"
} ]
}
</programlisting>
</example>
</section>
<section xml:id="Java-Broker-Appendix-BDB-HA-initial-configuration-creation">
<title>Creation of BDB HA group using an initial configuration.</title>
<para>Let's create a BDB HA group with name <literal>weather</literal>
consisting of tree nodes <literal>weather1</literal>, <literal>weather2</literal>, and <literal>weather3</literal>
using the initial configuration above. We start node <literal>weather1</literal> on host/port
<literal>chaac:5000</literal>, node <literal>weather2</literal> on host/port <literal>indra:5000</literal>
and node <literal>weather3</literal> on host/port <literal>thor:5000</literal>.</para>
<para>The node <literal>weather1</literal> can be created with the following command</para>
<screen>
$ ./qpid-server -icp ./initial-config.json -prop ha.node_name=weather1 -prop ha.node_address=chaac:5000 \
-prop ha.group_name=weather -prop ha.helper_address=chaac:5000 -prop ha.helper_node_name=weather1 \
-prop ha.permitted_nodes="[\"chaac:5000\",\"indra:5000\",\"thor:5000\"]" -prop ha.priority=3 \
-prop qpid.amqp_port=10000 -prop qpid.http_port=20000
</screen>
<para>Please note, the broker is started with initial configuration at file <literal>./initial-config.json</literal>.
The context variable for node name <literal>ha.node_name</literal> is set to <literal>weather1</literal>.
The node address context variable <literal>ha.node_address</literal> is set to <literal>chaac:5000</literal>.
As it is a first node, the helper address is set to the same address as a node address (<literal>ha.helper_address=chaac:5000</literal>)
and the helper node name is to itself (<literal>ha.helper_node_name=weather1</literal>). The group name is set to <literal>weather</literal>
with <literal>ha.group_name=weather</literal>. The group nodes are listed in <literal>ha.permitted_nodes</literal>.
The amqp and http ports are overridden to 10000 and 20000 accordingly. The node priority is set to <literal>3</literal>.
</para>
<para>The node <literal>weather2</literal> can be created on host<literal>indra</literal> with the following command:</para>
<screen>
$ ./qpid-server -icp ./initial-config.json -prop ha.node_name=weather2 -prop ha.node_address=indra:5000 \
-prop ha.group_name=weather -prop ha.helper_address=chaac:5000 -prop ha.helper_node_name=weather1 \
-prop ha.permitted_nodes="[\"chaac:5000\",\"indra:5000\",\"thor:5000\"]" -prop ha.priority=2 \
-prop qpid.amqp_port=10001 -prop qpid.http_port=20001
</screen>
<para>
The context variable for node name <literal>ha.node_name</literal> is set to <literal>weather2</literal>.
The node address context variable <literal>ha.node_address</literal> is set <literal>indra:5000</literal>.
The amqp and http ports are overridden to 10001 and 20001 accordingly. The node <literal>weather2</literal>
priority is set to <literal>2</literal>. The rest of the context variables have
the same values as for node <literal>weather1</literal>. The latter is used as a helper node for creation of
<literal>weather2</literal>.
</para>
<para>The node <literal>weather3</literal> can be created on host<literal>thor</literal> with the following command:</para>
<screen>
$ ./qpid-server -icp ./initial-config.json -prop ha.node_name=weather3 -prop ha.node_address=thor:5000 \
-prop ha.group_name=weather -prop ha.helper_address=chaac:5000 -prop ha.helper_node_name=weather1 \
-prop ha.permitted_nodes="[\"chaac:5000\",\"indra:5000\",\"thor:5000\"]" -prop ha.priority=1 \
-prop qpid.amqp_port=10002 -prop qpid.http_port=20002
</screen>
<para>
The context variable for node name <literal>ha.node_name</literal> is set to <literal>weather3</literal>.
The node address context variable <literal>ha.node_address</literal> is set <literal>thor:5000</literal>.
The amqp and http ports are overridden to 10002 and 20002 accordingly. The node <literal>weather3</literal>
priority is set to <literal>1</literal>. The rest of the context variables have
the same values as for node <literal>weather1</literal> which is used as a helper node for creation of
<literal>weather3</literal>.
</para>
</section>
</appendix>