在NuoDB上运行Asterisk

欢迎你们前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~java

本文来自云+社区翻译社,做者Hans362c++

您可能已经熟悉Asterisk,一个普遍部署的开源Telephony框架。若是你不太熟悉,你应该适当了解一下。这是一个很是酷的软件。能够部署Asterisk的低负载实例来使用文件系统来存储电话注册数据和语音邮件等内容。可是若是你想使用Asterisk作任何事情,或者若是你碰巧关心诸如容错之类的事情,你可能会考虑将Asterisk指向数据库。若是你碰巧有一个大的Asterisk集群构建来处理重要的负载,你能够考虑指向一个可弹性扩展的数据库的Asterisk。在这篇文章中,我将引导您经过NuoDB在一台基于RPM的Linux机器上设置Asterisk的最小化安装。Asterisk能够跨越多个数据中心进行远程的安装,但我会将这些问题留给更专业的人士。将这样的安装与NuoDB配对至少会让数据库痛苦不堪。让咱们开始吧。sql

安装NuoDB

首先,下载并安装NuoDB。数据库

sudo rpm -i nuodb.rpm

这将在该主机上启动一个NuoDB代理。接下来,咱们启动一个事务引擎和存储管理器:浏览器

java -jar /opt/nuodb/jar/nuodbmanager.jar --broker localhost --user domain --password bird --command "start process sm database asteriskCDR host localhost archive /tmp/ast-cdr initialize yes"
java -jar /opt/nuodb/jar/nuodbmanager.jar --broker localhost --user domain --password bird --command "start process te database asteriskCDR host localhost options '--dba-user asteriskUser --dba-password mySecret'"

设置ODBC

尽管Asterisk支持直接与MySQL和PostgreSQL链接,但更多测试和强化的途径是经过ODBC链接到数据库。在这里,咱们安装unixODBC,这是Unix类操做系统的ODBC驱动程序管理器。微信

as root:
yum install gcc gcc-c++ ncurses-devel unixODBC unixODBC-devel

这建立了两个文件:/etc/odbc.ini和/etc/odbcinst.ini,咱们如今编辑该文件以指向咱们的NuoDB实例。网络

/etc/odbc.ini
[NuoODBC]
Description = NuoDB ODBC3 Driver DSN
Driver      = /opt/nuodb/lib64/libNuoODBC.so
Database    = asteriskCDR
ServerName  = localhost
User        = asteriskUser
Password    = mySecret
Schema      = user

咱们可让/etc/odbcinst.ini为空,或者若是你想启用(很是详细!)日志记录:app

/etc/odbcinst.ini
[ODBC]
TraceFile   = /tmp/odbc.log
Trace       = Yes

这些毫不是惟一可让unixODBC启动并运行的选项,但如今咱们将为此进行推广。让咱们确保到目前为止咱们所作的工做:框架

isql NuoODBC asteriskUser mySecret -v -3
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL>

安装Asterisk

在撰写本文时,Asterisk当前测试和稳定版本是11.4.0,但您能够在这里查看您选择的版本。dom

as root:
yum install libtool-ltdl libtool-ltdl-devel sqlite-devel libxml2-devel openssl-devel libuuid-devel
cd /usr/src
wget http://downloads.asterisk.org/pub/telephony/asterisk/old-releases/asterisk-11.4.0.tar.gz
wget http://downloads.asterisk.org/pub/telephony/asterisk/old-releases/asterisk-11.4.0.tar.gz.sha1
sha1sum -c asterisk-11.4.0.tar.gz.sha1
tar zxvf asterisk-11.4.0.tar.gz
cd asterisk-11.4.0
./configure --libdir=/usr/lib64 --disable-xmldoc
make menuselect && make && make install && make samples && make config

在make menuselect期间,请检查呼叫详细记录(CDR)以确保cdr_odbc已启用。按q离开使用menuselect。以后,你能够获得一杯咖啡,花几分钟时间查看恐龙漫画。若是您的系统上的编译成功,而且make install阶段能够识别您的发行版,那么您应该可以启动Asterisk服务:

sudo service asterisk start

链接Asterisk和NuoDB

Asterisk能够以各类方式使用数据库。例如,咱们将设置CDR日志记录。

/etc/asterisk/cdr_odbc.conf
[global]
dsn=NuoODBC
loguniqueid=no
dispositionstring=yes
table=cdr
usegmtime=yes
hrtime=yes
/etc/asterisk/res_odbc.conf
[NuoODBC]
enabled => yes
dsn => NuoODBC
username => asteriskUser
password => mySecret
pre-connect => yes
sanitysql => select 1 from dual

咱们强制从新加载配置文件:

sudo service asterisk restart

如今咱们能够在Asterisk控制台中用一个简单的命令来检查数据库链接。

asterisk -rvvv
<snip>
p131*CLI> odbc show

ODBC DSN Settings
-----------------

  Name:   NuoODBC
  DSN:    NuoODBC
    Last connection attempt: 2013-09-03 10:45:41

正如您可能已经猜到的那样,咱们会将通话详细记录记录到名为cdr的表格中。咱们来建立表格:

/opt/nuodb/bin/nuosql asteriskCDR --user asteriskUser --password mySecret <<EOF
CREATE SEQUENCE "SEQ_cdr_cdrID" START WITH 1;
CREATE TABLE "cdr" ("cdrID" REAL GENERATED BY DEFAULT AS IDENTITY("SEQ_cdr_cdrID") NOT NULL, "calldate" TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00', "clid" VARCHAR(80) NOT NULL DEFAULT '', "src" VARCHAR(80) NOT NULL DEFAULT '', "dst" VARCHAR(80) NOT NULL DEFAULT '', "dcontext" VARCHAR(80) NOT NULL DEFAULT '', "channel" VARCHAR(80) NOT NULL DEFAULT '', "dstchannel" VARCHAR(80) NOT NULL DEFAULT '', "lastapp" VARCHAR(80) NOT NULL DEFAULT '', "lastdata" VARCHAR(80) NOT NULL DEFAULT '', "duration" INTEGER NOT NULL DEFAULT '0', "billsec" INTEGER NOT NULL DEFAULT '0', "disposition" VARCHAR(45) NOT NULL DEFAULT '', "amaflags" INTEGER NOT NULL DEFAULT '0', "accountcode" VARCHAR(20) NOT NULL DEFAULT '', PRIMARY KEY ("cdrID"));
CREATE INDEX "IDX_cdr_calldate" ON "cdr" ("calldate");
CREATE INDEX "IDX_cdr_dst" ON "cdr" ("dst");

一个简单的测试

为了代表这一切都有效,咱们将在/etc/asterisk/extensions.conf底部添加几行Dialplan,并用SIPp测试设置。

/etc/asterisk/extensions.conf
[sipp]
exten => 123,1,Answer
exten => 123,2,SetMusicOnHold(default)
exten => 123,3,WaitMusicOnHold(2)
exten => 123,4,Hangup
/etc/asterisk/sip.conf
[sipp]
type=friend
context=sipp
host=dynamic
user=sipp
canreinvite=no
disallow=all
allow=ulaw

咱们再次强制从新加载配置文件,并安装SIPp:

as root:
service asterisk restart
yum install sipp

若是您的发行版的存储库不包含SIPp,解决办法也很简单。为了测试咱们的安装,咱们运行如下命令。您能够经过查看Asterisk控制台中的日志来验证SIPp是否指向了您的Asterisk实例。

sipp -d 2000 -s 123 127.0.0.1 -l 10 -timeout 4s

如今咱们能够经过发出后看到一个非零数字来确认咱们有通话记录:

echo "select count(*) from cdr;" | /opt/nuodb/bin/nuosql asteriskCDR --user asteriskUser --password mySecret

归纳

因为Asterisk是一个能够运行各类电话应用程序的框架,所以它与数据库之间有任意多个可能的链接点。咱们已经测试了CDR功能以及其余一些路径,但咱们很乐意提供您的反馈。请让咱们知道您使用Asterisk和NuoDB的经历!

问答
为移动浏览器设置电话连接的可靠方法是什么?
相关阅读
如何获取iOS应用网络权限 
针对.NET开发者的NuoDB 1.1发布
Android Service 系统服务

此文已由做者受权腾讯云+社区发布,原文连接:https://cloud.tencent.com/developer/article/1144402?fromSource=waitui

欢迎你们前往腾讯云+社区或关注云加社区微信公众号(QcloudCommunity),第一时间获取更多海量技术实践干货哦~

相关文章
相关标签/搜索