在NuoDB上运行Asterisk
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~
您可能已经熟悉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 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),第一时间获取更多海量技术实践干货哦~
在NuoDB上运行Asterisk的更多相关文章
- 在传统.NET Framework 上运行ASP.NET Core项目
新的项目我们想用ASP.NET Core来开发,但是苦于我们历史的遗产很多,比如<使用 JavaScriptService 在.NET Core 里实现DES加密算法>,我们要估计等到.N ...
- Hyper-V上运行的Linux虚拟机验证是否安装了集成服务
Hyper-V上运行的Linux虚拟机验证是否安装了集成服务 ps aux|grep "hv"root 311 0.0 0.0 0 0 ? ...
- 通过Mono 在 Heroku 上运行 .NET 应用
英文原文:Running .NET on Heroku 中文原文:在 Heroku 上运行 .NET 应用 自从加入了Heroku之后,我就想在这个平台上运行.NET程序.现在我很高兴向大家宣布,我们 ...
- Linux上运行NET
今天尝试了下Ubuntu上运行NET程序,按照 https://github.com/aspnet/Home 的指引,一步一步来: 1.安装DNVM(原名KVM) Linux控制台下输入 curl - ...
- Mono 4.0 Mac上运行asp.net mvc 5.2.3
Mono 4.0 已经发布,二进制包已经准备好,具体的发布说明参见:http://www.mono-project.com/docs/about-mono/releases/4.0.0/. 今天在Ma ...
- ASP.NET Core 中文文档 第二章 指南(5) 在 Nano Server 上运行ASP.NET Core
原文 ASP.NET Core on Nano Server 作者 Sourabh Shirhatti 翻译 娄宇(Lyrics) 校对 刘怡(AlexLEWIS).许登洋(Seay).谢炀(kile ...
- 【无私分享:ASP.NET CORE 项目实战(第十章)】发布项目到 Linux 上运行 Core 项目
目录索引 [无私分享:ASP.NET CORE 项目实战]目录索引 简介 ASP.Net Core 给我们带来的最大的亮点就是跨平台,我在我电脑(win7)上用虚拟机建了个 CentOS7 ,来演示下 ...
- 玩儿转物联网IoT - 在Beagle Bone Black上运行node.js 程序
物联网(IoT)技术方兴未艾,智能手环,智能血压计,智能眼镜甚至智能鞋垫都开始进入我们的生活,各种智能设备层出不穷,世界已经到了一个"人有多大胆,地有多大产"的时代,不玩儿点物联网 ...
- 不装mono,你的.NET程序照样可以在Linux上运行!
让.NET应用程序在linux上运行,目前通用的做法就是在Linux上安装mono,然后通过”mono your.exe“命令运行这个程序. 这种运行.net程序的办法有两个弱点,一个是需要客户机安装 ...
随机推荐
- bitbucket使用教程
Bitbucket使用说明: 使用者请直接看第一步,第二步和egit使用说明, 需要自己创建仓库的可以看三四步 第一步:新用户注册 bitbucket.org 然后按步骤创建一个教程代码库 可以选择下 ...
- java -jar jar包,运行报错没有主清单和无法加载主类
jar: 包名(class 文件) META-INF(MANIFEST.MF ) .classpath 1.从eclipse直接导出的jar包: 2.修改MANIFEST.MF文件:
- javascript按键盘上/右/下/左箭头加速运动
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- kali linux之主动信息收集(三层发现,四层发现)
三层发现: 比二层发现的优点即可路由,就是速度比二层慢,相对我们来说还是算快的,经常被边界防火墙过滤 ip icmp协议 OSI七层模型
- [原创]ObjectARX开发环境搭建之VS2010+ObjectARX2012Wizard+Addin工具条问题修复
目前ObjectARX版本越来越高,也越来越简化开发,如果需要同时开发低版本和高版本的ARX程序,就需要搭建批量编译环境,以满足ARX开发的需要. 批量编译的搭建网络上已经有了很多的教程,基本上都是基 ...
- Squid代理服务器(一)——大家所用的游戏代理软件到底为何物?
一.代理服务器应用场景分析 想当年大学时候宿舍控制网速,苦了我们这帮魔兽党,一到晚上工会活动我们就得和全校上万名学生抢网速,作为坦克的我总是因为网速问题导致团灭,咱也是有自尊的人,一怒之下花300元办 ...
- The server of Apache (一)——apache服务的基本安装过程
一.为了避免端口冲突,需要卸载linux系统中以RPM方式安装的httpd ~] # rpm -qa | grep httpd ~] # rpm -e httpd --nodeps (此处nodeps ...
- query flot 直方图上显示对应的y值
方法1:使用在图上加 相对定位的 div 提示对应的直方图数量. 具体实现:获取直方图上所有的点,得到y值和对应的坐标位置,插入相对div 主要js代码:plot 为对应的图对象 //初始化柱状图数据 ...
- java 读取excel 2007 .xlsx文件 poi实现
工作需要读取excel里面的行内容,使用java实现较为简单. 在最开始,尝试使用 jxl-2.6.12 来实现读取excel 的行内容.但是按照网上的方法,程序根本无法正确处理文件流.经过谷姐的一番 ...
- 18、OpenCV Python 简单实现一个图片生成(类似抖音生成字母人像)
__author__ = "WSX" import cv2 as cv import numpy as np def local_threshold(img): #局部阈值 gra ...