<!DOCTYPE html>
<!--
 | Generated by Apache Maven Doxia at 2018-02-09
 | Rendered using Apache Maven Fluido Skin 1.3.0
-->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta name="Date-Revision-yyyymmdd" content="20180209" />
    <meta http-equiv="Content-Language" content="en" />
    <title>AsterixDB &#x2013; </title>
    <link rel="stylesheet" href="./css/apache-maven-fluido-1.3.0.min.css" />
    <link rel="stylesheet" href="./css/site.css" />
    <link rel="stylesheet" href="./css/print.css" media="print" />

      
    <script type="text/javascript" src="./js/apache-maven-fluido-1.3.0.min.js"></script>

                          
        
<script>(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
        (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
        m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
        })(window,document,'script','//www.google-analytics.com/analytics.js','ga');

        ga('create', 'UA-41536543-1', 'uci.edu');
        ga('send', 'pageview');</script>
          
            </head>
        <body class="topBarDisabled">
          
                
                    
    
        <div class="container-fluid">
          <div id="banner">
        <div class="pull-left">
                                                  <a href="./" id="bannerLeft">
                                                                                                <img src="images/asterixlogo.png"  alt="AsterixDB"/>
                </a>
                      </div>
        <div class="pull-right">  </div>
        <div class="clear"><hr/></div>
      </div>

      <div id="breadcrumbs">
        <ul class="breadcrumb">
                
                    
                  <li id="publishDate">Last Published: 2018-02-09</li>
                      
                
                    
                 <li id="projectVersion" class="pull-right">Version: 0.9.3</li>
      
                                            <li class="divider pull-right">|</li>
                        
    <li class="pull-right">              <a href="index.html" title="Documentation Home">
        Documentation Home</a>
  </li>

                        </ul>
      </div>

            
      <div class="row-fluid">
        <div id="leftColumn" class="span3">
          <div class="well sidebar-nav">
                
                    
                <ul class="nav nav-list">
                    <li class="nav-header">Get Started - Installation</li>
                                
      <li>
    
                          <a href="ncservice.html" title="Option 1: using NCService">
          <i class="none"></i>
        Option 1: using NCService</a>
            </li>
                  
      <li class="active">
    
            <a href="#"><i class="none"></i>Option 2: using Ansible</a>
          </li>
                  
      <li>
    
                          <a href="aws.html" title="Option 3: using Amazon Web Services">
          <i class="none"></i>
        Option 3: using Amazon Web Services</a>
            </li>
                  
      <li>
    
                          <a href="yarn.html" title="Option 4: using YARN">
          <i class="none"></i>
        Option 4: using YARN</a>
            </li>
                  
      <li>
    
                          <a href="install.html" title="Option 5: using Managix (deprecated)">
          <i class="none"></i>
        Option 5: using Managix (deprecated)</a>
            </li>
                              <li class="nav-header">AsterixDB Primer</li>
                                
      <li>
    
                          <a href="sqlpp/primer-sqlpp.html" title="Option 1: using SQL++">
          <i class="none"></i>
        Option 1: using SQL++</a>
            </li>
                  
      <li>
    
                          <a href="aql/primer.html" title="Option 2: using AQL">
          <i class="none"></i>
        Option 2: using AQL</a>
            </li>
                              <li class="nav-header">Data Model</li>
                                
      <li>
    
                          <a href="datamodel.html" title="The Asterix Data Model">
          <i class="none"></i>
        The Asterix Data Model</a>
            </li>
                              <li class="nav-header">Queries - SQL++</li>
                                
      <li>
    
                          <a href="sqlpp/manual.html" title="The SQL++ Query Language">
          <i class="none"></i>
        The SQL++ Query Language</a>
            </li>
                  
      <li>
    
                          <a href="sqlpp/builtins.html" title="Builtin Functions">
          <i class="none"></i>
        Builtin Functions</a>
            </li>
                              <li class="nav-header">Queries - AQL</li>
                                
      <li>
    
                          <a href="aql/manual.html" title="The Asterix Query Language (AQL)">
          <i class="none"></i>
        The Asterix Query Language (AQL)</a>
            </li>
                  
      <li>
    
                          <a href="aql/builtins.html" title="Builtin Functions">
          <i class="none"></i>
        Builtin Functions</a>
            </li>
                              <li class="nav-header">API/SDK</li>
                                
      <li>
    
                          <a href="api.html" title="HTTP API">
          <i class="none"></i>
        HTTP API</a>
            </li>
                  
      <li>
    
                          <a href="csv.html" title="CSV Output">
          <i class="none"></i>
        CSV Output</a>
            </li>
                              <li class="nav-header">Advanced Features</li>
                                
      <li>
    
                          <a href="aql/fulltext.html" title="Support of Full-text Queries">
          <i class="none"></i>
        Support of Full-text Queries</a>
            </li>
                  
      <li>
    
                          <a href="aql/externaldata.html" title="Accessing External Data">
          <i class="none"></i>
        Accessing External Data</a>
            </li>
                  
      <li>
    
                          <a href="feeds/tutorial.html" title="Support for Data Ingestion">
          <i class="none"></i>
        Support for Data Ingestion</a>
            </li>
                  
      <li>
    
                          <a href="udf.html" title="User Defined Functions">
          <i class="none"></i>
        User Defined Functions</a>
            </li>
                  
      <li>
    
                          <a href="aql/filters.html" title="Filter-Based LSM Index Acceleration">
          <i class="none"></i>
        Filter-Based LSM Index Acceleration</a>
            </li>
                  
      <li>
    
                          <a href="aql/similarity.html" title="Support of Similarity Queries">
          <i class="none"></i>
        Support of Similarity Queries</a>
            </li>
            </ul>
                
                    
                
          <hr class="divider" />

           <div id="poweredBy">
                            <div class="clear"></div>
                            <div class="clear"></div>
                            <div class="clear"></div>
                                                                                                                         <a href="./" title="AsterixDB" class="builtBy">
        <img class="builtBy"  alt="AsterixDB" src="images/asterixlogo.png"    />
      </a>
                      </div>
          </div>
        </div>
        
                
        <div id="bodyColumn"  class="span9" >
                                  
            <!-- ! 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.
 ! -->
<ul>
  
<li><a href="#Introduction">Introduction</a></li>
  
<li><a href="#Prerequisites">Prerequisites</a></li>
  
<li><a href="#config">Cluster Configuration</a></li>
  
<li><a href="#lifecycle">Cluster Lifecycle Management</a></li>
</ul>
<!-- ! 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.
 ! -->
<div class="section">
<h2><a name="Introduction" id="Introduction">Introduction</a></h2>
<p>This installation option provides several wrapped <a class="externalLink" href="https://www.ansible.com/">Ansible</a>-based scripts to deploy, start, stop, and erase an AsterixDB instance on a multi-node cluster without requiring users to interact with each individual node in the cluster.</p></div>
<div class="section">
<h2><a name="Prerequisites" id="Prerequisites">Prerequisites</a></h2>

<ul>
  
<li>
<p>Supported operating systems: <b>Linux</b> and <b>MacOS</b></p></li>
  
<li>
<p>Install pip on your client machine:</p>
<p>CentOS</p>
  
<div class="source">
<div class="source">
<pre> $ sudo yum install python-pip
</pre></div></div>
<p>Ubuntu</p>
  
<div class="source">
<div class="source">
<pre> $ sudo apt-get install python-pip
</pre></div></div>
<p>macOS</p>
  
<div class="source">
<div class="source">
<pre> $ brew install pip
</pre></div></div></li>
  
<li>
<p>Install Ansible, boto, and boto3 on your client machine:</p>
  
<div class="source">
<div class="source">
<pre> $ pip install ansible
 $ pip install boto
 $ pip install boto3
</pre></div></div>
<p>Note that you might need <tt>sudo</tt> depending on your system configuration.</p>
<p><b>Make sure that the version of Ansible is no less than 2.2.1.0</b>:</p>
  
<div class="source">
<div class="source">
<pre> $ ansible --version
 ansible 2.2.1.0
</pre></div></div></li>
  
<li>
<p>Download the AsterixDB distribution package, unzip it, and navigate to <tt>opt/ansible/</tt></p>
  
<div class="source">
<div class="source">
<pre> $ cd opt/ansible
</pre></div></div>
<p>The following files and directories are in the directory <tt>opt/ansible</tt>:</p>
  
<div class="source">
<div class="source">
<pre> README  bin  conf  yaml
</pre></div></div>
<p><tt>bin</tt> contains scripts that deploy, start, stop and erase a multi-node AsterixDB cluster, according to  the configuration specified in files under <tt>conf</tt>, and <tt>yaml</tt> contains internal Ansible scripts that the shell  scripts in <tt>bin</tt> use.</p></li>
</ul></div>
<div class="section">
<h2><a name="Cluster_Configuration"></a><a name="config" id="config">Cluster Configuration</a></h2>

<ul>
  
<li>
<p><b>Nodes and account</b>. Edit the inventory file <tt>conf/inventory</tt> when necessary.  You mostly only need to specify the node DNS names (or IPs) for the cluster controller, i.e., the master node,  in the <b>[cc]</b> section, and node controllers, i.e., slave nodes, in the <b>[ncs]</b> section.  The following example configures a cluster with two slave nodes (172.0.1.11 and 172.0.1.12) and  one master node (172.0.1.10).</p>
  
<div class="source">
<div class="source">
<pre> [cc]
 172.0.1.10

 [ncs]
 172.0.1.11
 172.0.1.12
</pre></div></div>
<p><b>Configure passwordless ssh from your current client that runs the scripts to all nodes listed  in <tt>conf/inventory</tt> as well as <tt>localhost</tt>.</b>  If the ssh user account for target machines is different from your current username, please uncomment  and edit the following two lines:</p>
  
<div class="source">
<div class="source">
<pre> ;[all:vars]
 ;ansible_ssh_user=&lt;fill with your ssh account username&gt;
</pre></div></div>
<p>If you want to specify advanced Ansible builtin variables, please refer to the  <a class="externalLink" href="http://docs.ansible.com/ansible/intro_inventory.html">Ansible documentation</a>.</p></li>
  
<li>
<p><b>Remote working directories</b>. Edit <tt>conf/instance_settings.yml</tt> to change the remote binary directory  (the variable &#x201c;binarydir&#x201d;) when necessary. By default, the binary directory will be under the home directory  (as the value of Ansible builtin variable ansible_env.HOME) of the ssh user account on each node.</p></li>
</ul></div>
<div class="section">
<h2><a name="Cluster_Lifecycle_Management"></a><a name="lifecycle" id="lifecycle">Cluster Lifecycle Management</a></h2>

<ul>
  
<li>
<p>Deploy the binary to all nodes:</p>
  
<div class="source">
<div class="source">
<pre> $ bin/deploy.sh
</pre></div></div></li>
  
<li>
<p>Every time before starting the AsterixDB cluster, you can edit the instance configuration file  <tt>conf/instance/cc.conf</tt>, except that IP addresses/DNS names are generated and cannot  be changed. All available parameters and their usage can be found <a href="ncservice.html#Parameters">here</a>.</p></li>
  
<li>
<p>Launch your AsterixDB cluster:</p>
  
<div class="source">
<div class="source">
<pre> $ bin/start.sh
</pre></div></div>
<p>Now you can use the multi-node AsterixDB cluster by opening the master node  listed in <tt>conf/inventory</tt> at port <tt>19001</tt> (which can be customized in <tt>conf/instance/cc.conf</tt>)  in your browser.</p></li>
  
<li>
<p>If you want to stop the the multi-node AsterixDB cluster, run the following script:</p>
  
<div class="source">
<div class="source">
<pre> $ bin/stop.sh
</pre></div></div></li>
  
<li>
<p>If you want to remove the binary on all nodes, run the following script:</p>
  
<div class="source">
<div class="source">
<pre> $ bin/erase.sh
</pre></div></div></li>
</ul></div>
                  </div>
            </div>
          </div>

    <hr/>

    <footer>
            <div class="container-fluid">
              <div class="row span12">Copyright &copy;                    2018
                        <a href="https://www.apache.org/">The Apache Software Foundation</a>.
            All Rights Reserved.      
                    
      </div>

                                                                  <?xml version="1.0" encoding="UTF-8"?>
<div class="row-fluid">Apache AsterixDB, AsterixDB, Apache, the Apache
        feather logo, and the Apache AsterixDB project logo are either
        registered trademarks or trademarks of The Apache Software
        Foundation in the United States and other countries.
        All other marks mentioned may be trademarks or registered
        trademarks of their respective owners.</div>
                  
        
                </div>
    </footer>
  </body>
</html>
