blob: 504b92343cc1a31efbbb9407297112842c7260c6 [file] [log] [blame]
<!DOCTYPE html>
<!--
Generated by Apache Maven Doxia at 2017-03-29
Rendered using Reflow Maven Skin 1.1.1 (http://andriusvelykis.github.io/reflow-maven-skin)
-->
<html xml:lang="en" lang="en">
<head>
<meta charset="UTF-8" />
<title>Apache OpenMeetings Project -
Clustering</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="" />
<meta name="author" content="Apache OpenMeetings Team" />
<meta http-equiv="content-language" content="en" />
<link href=".//css/bootstrap.min.css" rel="stylesheet" />
<link href=".//css/bootstrap-responsive.min.css" rel="stylesheet" />
<link href=".//css/docs.css" rel="stylesheet" />
<link href=".//css/reflow-skin.css" rel="stylesheet" />
<link href=".//css/lightbox.css" rel="stylesheet" />
<link href=".//css/site.css" rel="stylesheet" />
<link href=".//css/print.css" rel="stylesheet" media="print" />
<!-- Le HTML5 shim, for IE6-8 support of HTML5 elements -->
<!--[if lt IE 9]>
<script src=".//js/html5.js"></script>
<![endif]-->
</head>
<body class="page-clustering project-openmeetings-server" data-spy="scroll" data-offset="60" data-target="#toc-scroll-target">
<div class="navbar navbar-fixed-top">
<div class="navbar-inner">
<div class="container">
<a class="btn btn-navbar" data-toggle="collapse" data-target="#top-nav-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</a>
<div class="brand"><span class="color-highlight">Apache</span> OpenMeetings</div>
<div class="nav-collapse collapse" id="top-nav-collapse">
<ul class="nav pull-right">
<li ><a href="demo.html" title="Demo">Demo</a></li>
<li ><a href="downloads.html" title="Download">Download</a></li>
<li ><a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS" title="Wiki" class="externalLink">Wiki</a></li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">General <b class="caret"></b></a>
<ul class="dropdown-menu">
<li ><a href="index.html" title="Home">Home</a></li>
<li ><a href="license.html" title="License">License</a></li>
<li ><a href="http://www.apache.org/" title="ASF" class="externalLink">ASF</a></li>
<li ><a href="CallForLogo.html" title="Call For Logo">Call For Logo</a></li>
<li ><a href="NewsArchive.html" title="News archive">News archive</a></li>
<li ><a href="security.html" title="Security">Security</a></li>
<li ><a href="commercial-support.html" title="Commercial Support">Commercial Support</a></li>
</ul>
</li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Installation <b class="caret"></b></a>
<ul class="dropdown-menu">
<li ><a href="installation.html" title="Installation">Installation</a></li>
<li ><a href="Upgrade.html" title="Upgrade">Upgrade</a></li>
<li ><a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools" title="Tutorials" class="externalLink">Tutorials</a></li>
<li ><a href="CommandLineAdmin.html" title="Command Line Admin">Command Line Admin</a></li>
</ul>
</li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Community <b class="caret"></b></a>
<ul class="dropdown-menu">
<li ><a href="get-involved.html" title="Get Involved">Get Involved</a></li>
<li ><a href="team-list.html" title="Committers">Committers</a></li>
<li ><a href="OurUsers.html" title="Our Users">Our Users</a></li>
<li ><a href="mail-lists.html" title="Mailing Lists">Mailing Lists</a></li>
<li ><a href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/" title="Wiki" class="externalLink">Wiki</a></li>
</ul>
</li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Development <b class="caret"></b></a>
<ul class="dropdown-menu">
<li ><a href="source-repository.html" title="Source Code">Source Code</a></li>
<li ><a href="issue-tracking.html" title="Bugs / Issues">Bugs / Issues</a></li>
<li ><a href="dependencies.html" title="Dependencies">Dependencies</a></li>
<li ><a href="integration.html" title="Continuous Integration">Continuous Integration</a></li>
<li ><a href="BuildInstructions_3.0.x.html" title="Build Instructions 3.0.x">Build Instructions 3.0.x</a></li>
<li ><a href="BuildInstructions.html" title="Build Instructions">Build Instructions</a></li>
<li ><a href="JUnitTesting.html" title="JUnit Testing">JUnit Testing</a></li>
<li ><a href="ManualTesting.html" title="Manual Testing">Manual Testing</a></li>
<li ><a href="ReleaseGuide.html" title="Release Guide">Release Guide</a></li>
<li ><a href="WebsiteGuide.html" title="Website Guide">Website Guide</a></li>
</ul>
</li>
<li class="dropdown active">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Configuration <b class="caret"></b></a>
<ul class="dropdown-menu">
<li class="dropdown-submenu ">
<a href="Clustering.html#integration" title="Integration">Integration</a>
<ul class="dropdown-menu">
<li ><a href="openmeetings-webservice/apidocs/index.html" title="SOAP/REST API" target="_blank">SOAP/REST API</a></li>
<li ><a href="RestAPISample.html" title="REST API Sample">REST API Sample</a></li>
<li ><a href="LdapAndADS.html" title="Ldap and ADS">Ldap and ADS</a></li>
<li ><a href="oauth2.html" title="OAuth2">OAuth2</a></li>
<li ><a href="voip-sip-integration.html" title="VoIP and SIP">VoIP and SIP</a></li>
<li ><a href="errorvalues.html" title="Errors table">Errors table</a></li>
</ul>
</li>
<li class="dropdown-submenu ">
<a href="Clustering.html#plugins" title="Plugins">Plugins</a>
<ul class="dropdown-menu">
<li ><a href="MoodlePlugin.html" title="Moodle Plugin">Moodle Plugin</a></li>
<li ><a href="SakaiPlugin.html" title="Sakai Plugin">Sakai Plugin</a></li>
<li ><a href="JiraPlugin.html" title="Jira Plugin">Jira Plugin</a></li>
<li ><a href="JoomlaPlugin.html" title="Joomla Plugin">Joomla Plugin</a></li>
<li ><a href="DrupalPlugin.html" title="Drupal Plugin">Drupal Plugin</a></li>
<li ><a href="BitrixPlugin.html" title="Bitrix Plugin">Bitrix Plugin</a></li>
<li ><a href="ConfluencePlugin.html" title="Confluence Plugin">Confluence Plugin</a></li>
<li ><a href="SugarCRMPlugin.html" title="SugarCRM Plugin">SugarCRM Plugin</a></li>
<li ><a href="RedminePlugin.html" title="Redmine Plugin">Redmine Plugin</a></li>
</ul>
</li>
<li class="dropdown-submenu ">
<a href="Clustering.html#db" title="DB Sample Configurations">DB Sample Configurations</a>
<ul class="dropdown-menu">
<li ><a href="ApacheDerbyConfig.html" title="Apache Derby">Apache Derby</a></li>
<li ><a href="IBMDB2Config.html" title="IBM DB2">IBM DB2</a></li>
<li ><a href="OracleConfig.html" title="Oracle">Oracle</a></li>
<li ><a href="MySQLConfig.html" title="MySQL">MySQL</a></li>
<li ><a href="PostgresConfig.html" title="Postgres">Postgres</a></li>
<li ><a href="MSSQLConfig.html" title="MSSQL">MSSQL</a></li>
</ul>
</li>
<li class="dropdown-submenu ">
<a href="Clustering.html#localization" title="Localization and languages">Localization and languages</a>
<ul class="dropdown-menu">
<li ><a href="Internationalisation.html" title="Internationalisation">Internationalisation</a></li>
<li ><a href="LanguageEditor.html" title="LanguageEditor">LanguageEditor</a></li>
<li ><a href="TimeZoneHandling.html" title="TimeZoneHandling">TimeZoneHandling</a></li>
<li ><a href="EditTemplates.html" title="EditTemplates">EditTemplates</a></li>
</ul>
</li>
<li class="dropdown-submenu ">
<a href="Clustering.html#port" title="NAT Port Settings">NAT Port Settings</a>
<ul class="dropdown-menu">
<li ><a href="PortSettings.html" title="Port settings">Port settings</a></li>
</ul>
</li>
<li class="dropdown-submenu ">
<a href="Clustering.html#performance" title="Performance">Performance</a>
<ul class="dropdown-menu">
<li ><a href="JVMPerformanceTuning.html" title="JVM performance tuning">JVM performance tuning</a></li>
<li ><a href="NetworkCalculator.html" title="Network bandwidth calculator">Network bandwidth calculator</a></li>
</ul>
</li>
<li class="dropdown-submenu ">
<a href="Clustering.html#interface" title="User Interface">User Interface</a>
<ul class="dropdown-menu">
<li ><a href="themes-and-branding.html" title="Themes">Themes</a></li>
<li ><a href="Dashboard.html" title="Dashboard">Dashboard</a></li>
<li ><a href="WebcamResolutions.html" title="Webcam resolutions">Webcam resolutions</a></li>
<li ><a href="ConferenceRoomLayoutOptions.html" title="Room layout options">Room layout options</a></li>
<li ><a href="HotKeys.html" title="Hot Keys">Hot Keys</a></li>
</ul>
</li>
<li class="dropdown-submenu ">
<a href="Clustering.html#customize" title="Customization">Customization</a>
<ul class="dropdown-menu">
<li ><a href="WebappNamePath.html" title="Webapp name/path">Webapp name/path</a></li>
<li ><a href="Navigation.html" title="Navigation">Navigation</a></li>
<li ><a href="CalendarAndTimezone.html" title="Calendar and timezone">Calendar and timezone</a></li>
<li ><a href="CustomRoomTypeHowTo.html" title="Custom room type">Custom room type</a></li>
<li ><a href="CustomCryptMechanism.html" title="Custom crypt mechanism">Custom crypt mechanism</a></li>
<li ><a href="GeneralConfiguration.html" title="General Configuration">General Configuration</a></li>
</ul>
</li>
<li class="dropdown-submenu ">
<a href="Clustering.html#security" title="Security">Security</a>
<ul class="dropdown-menu">
<li ><a href="RestrictedAccess.html" title="Restricted Access">Restricted Access</a></li>
<li ><a href="RTMPSAndHTTPS.html" title="RTMPS and HTTPS">RTMPS and HTTPS</a></li>
</ul>
</li>
<li class="dropdown-submenu ">
<a href="Clustering.html#convert" title="Converters">Converters</a>
<ul class="dropdown-menu">
<li ><a href="OpenOfficeConverter.html" title="OpenOffice Converter">OpenOffice Converter</a></li>
</ul>
</li>
<li class="dropdown-submenu ">
<a href="Clustering.html#cluster" title="Clustering">Clustering</a>
<ul class="dropdown-menu">
<li class="active"><a href="" title="Clustering">Clustering</a></li>
</ul>
</li>
<li class="dropdown-submenu ">
<a href="Clustering.html#misc" title="Misc">Misc</a>
<ul class="dropdown-menu">
<li ><a href="GetVersionInfo.html" title="Get version info">Get version info</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</div><!--/.nav-collapse -->
</div>
</div>
</div>
<div class="container">
<!-- Masthead
================================================== -->
<header>
<div class="jumbotron subhead">
<div class="row" id="banner">
<div class="span12">
<div class="pull-left">
<a href="index.html" id="bannerLeft"><img src="images/logo.png" alt='"'Apache OpenMeetings'"' /></a>
</div>
<div class="pull-right">
<a href="http://apache.org" id="bannerRight"><img src="http://apache.org/img/asf_logo.png" alt='"'Apache'"' /></a>
</div>
</div>
</div>
</div>
<div>
<ul class="breadcrumb">
<li class="publishDate version-date">Last Published: 2017-03-29</li>
</ul>
</div>
</header>
<div class="main-body">
<div class="row">
<div class="span8">
<div class="body-content">
<!-- Licensed 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. -->
<div class="section">
<div class="page-header">
<h2 id="Description">Description</h2>
</div>
<p> OpenMeetings 2.1 or later is required to use clustering. One database is used for all OpenMeetings servers, so all database tables are shared across OM instances. Certain folders should be shared between all servers to allow access to the files/recording.</p>
</div>
<div class="section">
<h2 id="Configuration">Configuration</h2>
<ul>
<li> Multiple OM servers should be set up as described in <a href="installation.html" target="_blank"> <b>Installation</b> </a> </li>
<li>All servers should be configured to have same Time zone (To avoid Schedulers to drop user sessions as outdated) </li>
<li>All servers should be configured to use the same DB</li>
<li>Servers should be added in Administration -&gt; Servers section</li>
</ul>
</div>
<div class="section">
<h2 id="Database">Database</h2>
<p>All servers should be configured to use the same database. It can be on the server or on the one node of the cluster.</p>
<ul>
<li>Add users who can connect to the database remotely</li>
<li>Update <tt>/opt/red5/webapps/openmeetings/WEB-INF/classes/META-INF/persistence.xml</tt> set correct server address, login and password. Also add the following section:
<div class="source">
<pre>&lt;property name=&quot;openjpa.RemoteCommitProvider&quot; value=&quot;tcp(Addresses=10.1.1.1;10.1.1.2)&quot; /&gt;</pre>
</div> Instead of the 10.1.1.1 and 10.1.1.2 set semicolon separated IPs of all nodes of the cluster. </li>
</ul>
</div>
<div class="section">
<h2 id="File_systems">File systems</h2>
<p>If files and recordings using the same physical folders the files and recordings will be available for each node. You can do this using Samba or NFS, for example. For using NFS do the following:</p>
<ul>
<li>Install NFS to the data server. In the file <tt>/etc/exports</tt> add the following lines:
<div class="source">
<pre>
/opt/red5/webapps/openmeetings/upload 10.1.1.2(rw,sync,no_subtree_check,no_root_squash)
/opt/red5/webapps/openmeetings/streams 10.1.1.2(rw,sync,no_subtree_check,no_root_squash)
</pre>
</div> Here 10.1.1.2 - is node ip for NFS remote access. Add these lines for all nodes except node with folders. </li>
<li> Install NFS common tools to other nodes. In the file <tt>/etc/fstab</tt> do the following:
<div class="source">
<pre>
10.1.1.1:/opt/red5/webapps/openmeetings/upload/
/opt/red5/webapps/openmeetings/upload nfs timeo=50,hard,intr
10.1.1.1:/opt/red5/webapps/openmeetings/streams/
/opt/red5/webapps/openmeetings/streams nfs timeo=50,hard,intr
</pre>
</div> Here 10.1.1.1 – data server ip. And run the command:
<div class="source">
<pre>mount -a</pre>
</div> </li>
</ul>
</div>
<div class="section">
<h2 id="OM_nodes_configuration">OM nodes configuration</h2>
<p>In the file <tt>/opt/red5/webapps/openmeetings/WEB-INF/classes/openmeetings-applicationContext.xml</tt>:</p>
<ul>
<li> For each node uncomment line:
<div class="source">
<pre>
&lt;!-- Need to be uncommented and set to the real ID if in cluster mode--&gt;
&lt;property name=&quot;serverId&quot; value=&quot;1&quot; /&gt;
</pre>
</div> and input the unique value for each node. </li>
<li> Replace <tt>&lt;ref bean=&quot;openmeetings.HashMapStore&quot; /&gt; &lt;!-- Memory based session cache by default --&gt;</tt><br /> with <tt>&lt;ref bean=&quot;openmeetings.DatabaseStore&quot; /&gt;</tt> (Currently commented out with following comment: <tt>&quot;The following section should be used in clustering mode&quot;</tt>) </li>
</ul>
</div>
<div class="section">
<h2 id="Configuring_cluster_in_Administration">Configuring cluster in Administration</h2>
<p>Run red5 on each node. Login to the system as admin.</p>
<ul>
<li>Go to the <tt>Administration -&gt; Users</tt> and create Webservice user (only access via SOAP).</li>
<li> Go to the <tt>Administration -&gt; Servers</tt> and add all cluster nodes with the following settings:
<div class="source">
<pre>
Server Name = node name;
Active = check the checkbox. If the checkbox is checked it means node is active and you can use this node;
Server Address = node ip;
HTTP Port = 5080 - port for http part of Openmeetings;
User (SOAP Access) = login of Webservice user from the previous step;
Password = password of Webservise user;
Webapp path = openmeetings - path where OM installed on this node, it would be better if this path will be the same for all nodes;
Protocol = http.
</pre>
</div> </li>
</ul>
<img src="images/cluster1.png" alt="" width="650" height="461" />
</div>
<div class="section">
<h2 id="Ensure_everything_works_as_expected">Ensure everything works as expected</h2>
<ul>
<li>Set up the cluster and loggin with two users, go to the same room (also check before room entering that the status page with the room list shows the correct number of participants before entering the room). You should login to the same server initially, the server will redirect you for the conference room to the appropriate server automatically. Both users should be in the same room. </li>
<li>Do the same with only two users but go to _different_ rooms. The calculation should send both users to different servers, cause based on the calculation two different rooms on a cluster with two nodes should go exactly one room for each node. You can now loggin really to node1 and node2 of your cluster while those users are loggedin and go to <tt>Administration &gt; Connections</tt> and check in the column &quot;servers&quot; where they are located. They should be on different server. </li>
</ul>
<img src="images/cluster2.png" alt="" width="650" height="369" />
</div>
</div>
</div>
<div class="span4">
<div id="toc-sidebar">
<div class="well">
<ul class="nav nav-list">
<li class="nav-header">Table of Contents</li>
<li><a href="#Description" title="Description">Description</a>
<li><a href="#Configuration" title="Configuration">Configuration</a>
<li><a href="#Database" title="Database">Database</a>
<li><a href="#File_systems" title="File systems">File systems</a>
<li><a href="#OM_nodes_configuration" title="OM nodes configuration">OM nodes configuration</a>
<li><a href="#Configuring_cluster_in_Administration" title="Configuring cluster in Administration">Configuring cluster in Administration</a>
<li><a href="#Ensure_everything_works_as_expected" title="Ensure everything works as expected">Ensure everything works as expected</a>
</ul>
</div>
</div>
</div>
</div>
</div>
</div><!-- /container -->
<!-- Footer
================================================== -->
<footer class="well">
<div class="container">
<div class="row">
<div class="span3 bottom-nav">
<ul class="nav nav-list">
<li class="nav-header">General</li>
<li >
<a href="index.html" title="Home">Home</a>
</li>
<li >
<a href="license.html" title="License">License</a>
</li>
<li >
<a href="http://www.apache.org/" title="ASF" class="externalLink">ASF</a>
</li>
<li >
<a href="CallForLogo.html" title="Call For Logo">Call For Logo</a>
</li>
<li >
<a href="NewsArchive.html" title="News archive">News archive</a>
</li>
<li >
<a href="security.html" title="Security">Security</a>
</li>
<li >
<a href="commercial-support.html" title="Commercial Support">Commercial Support</a>
</li>
</ul>
</div>
<div class="span3 bottom-nav">
<ul class="nav nav-list">
<li class="nav-header">Installation</li>
<li >
<a href="installation.html" title="Installation">Installation</a>
</li>
<li >
<a href="Upgrade.html" title="Upgrade">Upgrade</a>
</li>
<li >
<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools" title="Tutorials" class="externalLink">Tutorials</a>
</li>
<li >
<a href="CommandLineAdmin.html" title="Command Line Admin">Command Line Admin</a>
</li>
</ul>
</div>
<div class="span3 bottom-nav">
<ul class="nav nav-list">
<li class="nav-header">Community</li>
<li >
<a href="get-involved.html" title="Get Involved">Get Involved</a>
</li>
<li >
<a href="team-list.html" title="Committers">Committers</a>
</li>
<li >
<a href="OurUsers.html" title="Our Users">Our Users</a>
</li>
<li >
<a href="mail-lists.html" title="Mailing Lists">Mailing Lists</a>
</li>
<li >
<a href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/" title="Wiki" class="externalLink">Wiki</a>
</li>
</ul>
</div>
<div class="span3 bottom-nav">
<ul class="nav nav-list">
<li class="nav-header">Development</li>
<li >
<a href="source-repository.html" title="Source Code">Source Code</a>
</li>
<li >
<a href="issue-tracking.html" title="Bugs / Issues">Bugs / Issues</a>
</li>
<li >
<a href="dependencies.html" title="Dependencies">Dependencies</a>
</li>
<li >
<a href="integration.html" title="Continuous Integration">Continuous Integration</a>
</li>
<li >
<a href="BuildInstructions_3.0.x.html" title="Build Instructions 3.0.x">Build Instructions 3.0.x</a>
</li>
<li >
<a href="BuildInstructions.html" title="Build Instructions">Build Instructions</a>
</li>
<li >
<a href="JUnitTesting.html" title="JUnit Testing">JUnit Testing</a>
</li>
<li >
<a href="ManualTesting.html" title="Manual Testing">Manual Testing</a>
</li>
<li >
<a href="ReleaseGuide.html" title="Release Guide">Release Guide</a>
</li>
<li >
<a href="WebsiteGuide.html" title="Website Guide">Website Guide</a>
</li>
</ul>
</div>
</div>
</div>
</footer>
<div class="container subfooter">
<div class="row">
<div class="span12">
<p class="pull-right"><a href="#">Back to top</a></p>
<p class="copyright">Copyright &copy;2012-2017 <a href="http://apache.org">Apache Software Foundation</a>. All Rights Reserved.</p>
</div>
</div>
</div>
<!-- Le javascript
================================================== -->
<!-- Placed at the end of the document so the pages load faster -->
<script src=".//js/jquery.min.js"></script>
<script src=".//js/bootstrap.min.js"></script>
<script src=".//js/lightbox.min.js"></script>
<script src=".//js/reflow-scroll.js"></script>
<script src=".//js/jquery-ui.min.js" type="text/javascript"></script>
<script src=".//js/netcalc.js" type="text/javascript"></script>
<script src=".//js/reflow-skin.js"></script>
</body>
</html>