Install via RPM

Overview

This document explains how to install Kazoo 3.0 on a multi-server environment.

Deploying a Kazoo v3.0 cluster

Prerequisites for every server

Setup Kazoo yum repository: curl -o /etc/yum.repos.d/2600hz.repo http://repo.2600hz.com/2600hz.repo

Ensure that each node has a FQDN: hostname -f

Ensure that all nodes can reach each other and the hostnames are resolvable to each other

Verify that SELINUX is disabled: sestatus

Clear yum repository cache: yum clean all

Bigcouch Servers

We recommend that you provision at least 3 BigCOUCH servers.

Install BigCOUCH package and tools: yum install -y kazoo-bigcouch-R15B

If you are using multiple BigCOUCH servers, you must cluster them together. To do this, run the following commands on only your first BigCOUCH server:

curl -X PUT db01.yourhostname.com:5986/nodes/bigcouch@db02.yourhostname.com -d {}
curl -X PUT db01.yourhostname.com:5986/nodes/bigcouch@db03.yourhostname.com -d {}

Verify your BigCOUCH nodes are clustered: curl 127.0.0.1:5984/_membership

FreeSWITCH Server

We recommend that you provision at least 2 FreeSWITCH servers.

Install FreeSWITCH package and tools: yum install -y kazoo-freeswitch-R15B haproxy

Edit the cookie for the Kazoo Erlang module in FreeSWITCH. If you changed the Cookie on any other servers, it needs to match here as well. The file is: /etc/kazoo/freeswitch/autoload_configs/kazoo.conf.xml

<param name="cookie" value="change_me" />-->

Start epmd

epmd -daemon

Restart FreeSWITCH

service freeswitch restart

Create a symlink from:

/etc/kazoo/haproxy/haproxy.cfg to /etc/haproxy/haproxy.cfg
rm -rf /etc/haproxy/haproxy.cfg
ln -s /etc/kazoo/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg

Configure /etc/haproxy/haproxy.cfg to look like this, adding your database nodes’ hostnames and IP addresses, so FreeSWITCH can grab the media directly from the database.

Expand source

Start/restart HAProxy

service haproxy restart Set HAProxy and FreeSWITCH to start on boot

chkconfig haproxy on
chkconfig freeswitch on

To enter the FreeSWITCH CLI, use this command:

fs_cli

Kazoo Server

We recommend that you provision at least 2 Kazoo servers.

Install Kazoo packages and tools:

yum install -y kazoo-R15B kazoo-kamailio haproxy rsyslog

If you also want the web portal to be on this server, install those packages

yum install -y httpd kazoo-ui

Update Kamailio configurations by adding the server’s IP address

#Replace $RABBIT_IP with the IP address of the node that you are going to run the main RabbitMQ messaging bus on (generally the first Kazoo server)

#Replace $HOST_IP with the current host IP address

#Replace $HOSTNAME with the current host hostname

sed -i 's/guest:guest@127.0.0.1:5672\/dialoginfo/guest:guest@'$RABBIT_IP':5672\/dialoginfo/g' /etc/kazoo/kamailio/local.cfg
sed -i 's/guest:guest@127.0.0.1:5672\/callmgr/guest:guest@'$RABBIT_IP':5672\/callmgr/g' /etc/kazoo/kamailio/local.cfg
sed -i 's/127.0.0.1/'$HOST_IP'/g' /etc/kazoo/kamailio/local.cfg
sed -i 's/kamailio.2600hz.com/'$HOSTNAME'/g' /etc/kazoo/kamailio/local.cfg

Update Kazoo configuration by adding the correct RabbitMQ server IP address

#Replace $RABBIT_IP with the IP address of the node that you are going to run the main RabbitMQ messaging bus on (generally the first Kazoo server)

#You should not run this command on your RabbitMQ server

sed -i "s|uri = \"amqp://guest:guest@127.0.0.1:5672\"|uri = \"amqp://guest:guest@$RABBIT_IP:5672\"|g" /etc/kazoo/config.ini

If you made any changes to the “cookie” value in the mod_kazoo configuration, you’ll need to update config.ini to reflect that change for ecallmgr

# /etc/kazoo/config.ini

Ecallmgr

cookie = should_match_mod_kazoo_cookie

Create a symlink from /etc/kazoo/haproxy/haproxy.cfg to /etc/haproxy/haproxy.cfg

rm -rf /etc/haproxy/haproxy.cfg

ln -s /etc/kazoo/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg

Configure /etc/haproxy/haproxy.cfg by adding your database nodes’ hostnames and IP addresses. See this example:

Expand source

Configure the UI (If you are running the UI on this node)

#Replace $HOST_IP with current host IP address

/bin/sed -i s#https://api.zswitch.net:8443/v1#http://$HOST_IP:8000/v1#g /var/www/html/kazoo-ui/config/config.js

#OPTIONAL | This sets the default document of your web-server to the Kazoo-UI

/bin/sed -i 's#/var/www/html#/var/www/html/kazoo-ui#g' /etc/httpd/conf/httpd.conf

Configure the list of FreeSWITCH Servers Kamailio should distribute calls amongst by editing

/etc/kazoo/kamailio/dbtext/dispatcher

Add your FreeSWITCH Servers like this:

1 sip:IP.OF.FS1.SERVER:11000 2
1 sip:IP.OF.FS2.SERVER:11000 2
1 sip:IP.OF.FS3.SERVER:11000 2
1 sip:IP.OF.FS4.SERVER:11000 2

Start services

#Only start RabbitMQ on your designated RabbitMQ servers

service rabbitmq-server start  
service rsyslog restart
service haproxy start
service kz-whistle_apps start
service kz-ecallmgr start
service kamailio start
service httpd start

If Kamailio fails to start, ensure that /etc/kazoo/kamailio/local.cfg is properly configured with the host IP address and the RabbitMQ node IP address. Also ensure that rabbitmq-server is running on the RabbitMQ node.

Set services to start on boot:

chkconfig --add kz-whistle_apps
chkconfig --add kz-ecallmgr
chkconfig kz-whistle_apps on
chkconfig kz-ecallmgr on
chkconfig haproxy on

#Only set RabbitMQ to start on your designated RabbitMQ servers

chkconfig --add rabbitmq-server
chkconfig rabbitmq-server on
#If this is a web interface server
chkconfig httpd on

Post Installation

Once you have installed all the tools and ensured that everything is running, make sure that the Kazoo servers can reach the database through HAproxy. On each Kazoo node, run the following command, you should receive a short string back from Bigcouch: curl localhost:15984 If this command fails, ensure Bigcouch and HAproxy are running and configured properly, the hostnames are resolvable to each other, and there are no IPtables rules blocking ports 15984, 15986, 5984, or 5986 between nodes. Create the admin level account for Kazoo by running this command on a Kazoo node (MAKE SURE EVERYTHING YOU SET IS LOWERCASE!!!): Restart whapps to make sure all the Crossbar modules are loaded

service kz-whistle_apps restart

Create the account

/opt/kazoo/utils/sup/sup crossbar_maintenance create_account ACCOUNTNAME SIP.REALM.COM USERNAME PASSWORD

Connect ecallmgr to your FreeSWITCH servers

#Run this command for each FreeSWITCH server

/opt/kazoo/utils/sup/sup -n ecallmgr ecallmgr_maintenance add_fs_node freeswitch@hostname.of.freeswitchserver.com

If you don’t see connection attempts from ecallmgr to FreeSWITCH in the fs_cli, there is a good chance the default IP tables rules are blocking ecallmgr from connecting to the FreeSWITCH server. Disable iptables or add the appropriate rules to accept traffic from the ecallmgr server and all should be well.

Flush your WHAPPS cache to have changes take effect

/opt/kazoo/utils/sup/sup whapps_config flush
/opt/kazoo/utils/sup/sup -n ecallmgr ecallmgr_config flush

To check if Ecallmgr is connected to FreeSWITCH, run the following command in your FreeSWITCH CLI:

erlang nodes list

Check that Kamailio is properly distributing calls amongst your FreeSWITCH servers. You should see the IPs of your servers with flags=AP after each server.

ekamctl fifo ds_list

Import media files to Kazoo

sup whistle_media_maintenance import_prompts /opt/kazoo/system_media/en-us/

Add Kamailio IP’s to ACL’s as “authoritative” and incoming servers as “trusted” (see Inbound Calls Fail).

/opt/kazoo/utils/sup/sup -necallmgr ecallmgr_maintenance allow_sbc hostname.of.kazooserver.com IP.OF.KAZOO.SERVER

Kazoo should now be configured and ready for use. You should probably add some IPtables rules to prevent unwanted access.

Access the web interface at “http://yourdomain.com” using the account you created in “Post Installation” step 2.

ADVANCED CONFIG / CONFIGURATION GOODIES (smile)

Platform management: The platform is managed via API or the SUP command from a shell. You can find all the available SUP commands here:

How to use the SUP command.

Cookies…num…num…num - Well not that kind of cookie. Cookies are what allow all of the different programs to communicate with one another. If you modify the cookie set in this file, you must also adjust the corresponding cookie within each application’s configuration file. By default we set cookie = change_me with the value of the cookie being change_me. For testing and development this default configuration is fine.