您可能已经熟悉Asterisk,一个广泛部署的开源Telephony框架。如果你不太熟悉,你应该适当了解一下。这是一个非常酷的软件。可以部署Asterisk的低负载实例来使用文件系统来存储电话注册数据和语音邮件等内容。但是如果你想使用Asterisk做任何事情,或者如果你碰巧关心诸如容错之类的事情,你可能会考虑将Asterisk指向数据库。如果你碰巧有一个大的Asterisk集群构建来处理重要的负载,你可以考虑指向一个可弹性扩展的数据库的Asterisk。在这篇文章中,我将引导您通过NuoDB在一台基于RPM的Linux机器上设置Asterisk的最小化安装。Asterisk可以跨越多个数据中心进行远程的安装,但我会将这些问题留给更专业的人士。将这样的安装与NuoDB配对至少会让数据库痛苦不堪。让我们开始吧。
安装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为空,或者如果你想启用(非常详细!)日志记录:
/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,但您可以在这里查看您选择的版本。
as root: yum install libtool-ltdl libtool-ltdl-devel sqlite-devel libxml2-devel openssl-devel libuuid-devel cd /usr/src wget wget sha1sum -c asterisk-11.4.0.tar.gz.sha1 tar zxvf asterisk-11.4.0.tar.gz cd asterisk-11.4.0 ./configure --libdir=http://www.likecs.com/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和NuoDBAsterisk可以以各种方式使用数据库。例如,我们将设置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"); 一个简单的测试