在同一台服务器上启动多个 FreeSWITCH 实例

摘要:
有时候,需要用到多个FreeSWITCH进行测试,或者需要在一台服务器上部署多个“不兼容”的系统。对于主的FreeSWITCH而言,他们就相当于两个Skype网关。后来我们又启到了一个带mod_dingaling的FreeSWITCH实例,用于跟GoogleTalk互通。我们今天的练习就是在同一机器上启动两个FreeSWITCH实例而互相不冲突,甚至,可以用各种方式互通。进阶当然,上面的两个FreeSWITCH实例都运行的同一份代码。有时候,你还可能运行两个不同版本的FreeSWITCH。我记得已经写过了,看《多台FreeSWITCH服务器级联》一节。

有时候,需要用到多个FreeSWITCH进行测试,或者需要在一台服务器上部署多个“不兼容”的系统。我们在这一节探讨一下怎么做。

背景故事

几年前我还在Idapted工作的时候,由于需要连接Skype及Google Talk。就曾经做过这样的部署(如下图,附录中也有)。

                       |--- PSTN gateways
/-------              |--- FS-skype
| FS    |--------------|--- FS-gtalk
-------/              |--- FS-skype2
                       |--- more ...

当时主要的考虑是Skype(mod_skypiax,后来改名为mod_skypopen)模块不太稳定,所以我们把带Skype的FreeSWITCH启动到另一个实例,这样就避免了由于Skype模块崩溃影响所有业务。后来,我们在这上面又做了扩展,即再启动一个带Skype的实例。对于主的FreeSWITCH而言,他们就相当于两个Skype网关。平时可以负荷分担的工作,其中一个崩溃,另一个也可以正常工作,起到了HA(High Availability,高可用)效果。

后来我们又启到了一个带mod_dingaling的FreeSWITCH实例,用于跟Google Talk互通。除了当时mod_dingaling也有点稳定性问题外,我们主要是为了让呼叫处理更方便,如,不管是呼叫什么用户,呼叫字符串都是 sofia/gateway/,编程就方便了许多。

练习

闲话少叙,我们今天虽不能复现当时的场景,但基本概念是差不多的。我们今天的练习就是在同一机器上启动两个FreeSWITCH实例而互相不冲突,甚至,可以用各种方式互通。

我们都知道FreeSWITCH默认的配置文件在 /usr/local/freeswitch/conf。这里假设第一个实例已启动并正确运行。

首先,我们要复制一份新的环境(放到freeswitch2目录中,以下的操作都在该目录中):

mkdir /usr/local/freeswitch2
cd /usr/local/freeswitch2
cp -R /usr/local/freeswitch/conf .
mkdir log
mkdir db
ln -sf ../freeswitch/sounds .

其中第1行创建一个新目录,第3行把旧的配置文件复制过来,第4、5行分别创建log和db目录,最后一行做个符号链接,确保有正确的声音文件。

然后,需要修改一些配置以防止端口冲突。第一个要修改的是 conf/autoload_configs/event_socket.conf.xml,把其中的8021改成另一个端口,比方说9021。

修改 conf/vars.xml,把其中的5060,5080也改成其它的,如7060,7080。

默认的这样就行了,当然如果你还加载了其它的模块,注意要把可能引起冲突的资源都改一下。比如因为我用到 mod_erlang 模块,我就需要改autoload_configs/erlang_event.conf.xml中的listen-port和nodename。

下面我们可以启动试试了:

cd /usr/local/freeswitch2/
/usr/local/freeswitch/bin/freeswitch -conf conf -log log -db db

以上命令分别用 -conf、-log、-db 指定新的目录。启动完成后将进入控制台。如果想使用 fs_cli,则可以打开另外一个终端窗口,连接(还记得我们把端口改成9021了吧?):

/usr/local/freeswitch/bin/fs_cli -P 9021

找个软电话注册到7060端口试试,比如我用Xlite注册的地址就是 192.168.1.100:7060。

进阶

当然,上面的两个FreeSWITCH实例都运行的同一份代码。有时候,你还可能运行两个不同版本的FreeSWITCH。你可以在编译的时候指定一个不同的安装目录,如:

./configure --prefix=/opt/freeswitch
make && make install

这样就可以将FreeSWITCH安装到/opt/freeswitch目录中,如果执行 /opt/freeswitch/bin/freeswitch,它就默认使用 /opt/freeswitch/conf 下面的配置文件,我们也不需要再copy一份了。

当然,如果需要两个实例同时运行,你还是要改其中一个的某些端口,以避免冲突。改完后运行:

/opt/freeswitch/bin/freeswitch

真好玩。

让两个实例相互通信?

我记得已经写过了,看《多台 FreeSWITCH 服务器级联》一节。

小结

通过本节,相信你对FreeSWITCH配置文件、运行方式、及 fs_cli 等工具又多了一层认识。当然,即使你不需要启动多个实例,相信也能从这一节学到一些有用的东西。

免责声明:文章转载自《在同一台服务器上启动多个 FreeSWITCH 实例》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇ORACLE EXP/IMP 参数详解《转》高并发处理(一)页面静态化下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

开源电话交换平台FreeSwitch的安装与配置

环境: 操作系统:RHEL5.2 电话交换平台:FreeSwitch 1.07 支持工具:git-1.7.4.tar.bz2 1. 安装Epel源(配置这个源其实是不必要的。) Epel官网:http://fedoraproject.org/wiki/EPEL su -c 'rpm -Uvhhttp://download.fedora.r...

通过 java的 esl 连接 freeswitch

一、目标修改event_socket配置,使之能够建立远端ESL链接。 二、步骤 1. vim ../autoload_configs/event_socket.conf.xml 2. 默认的监听地址配置 <param name="listen-ip" value="127.0.0.1"/> 3. 修改为本地监听地址 <param n...

CentOS 5下freeswitch中集成使用ekho实现TTS功能二

三:以上Festival安装完成以后回到ekho安装目录: 执行./configure --enable-festival 前 更改configure 1:替换 #AC_DEFINE(ENABLE_FESTIVAL,,[Enable Festival]) #LIB_FESTIVAL="${srcdir}/lib/libFestival.a ${srcdir...

Nodejs 实现ESL内联FreeSWITCH设定说明

一、背景说明:   SIP Server IP (Centos):192.168.11.61  ,服务器IP(Windows):192.168.11.19 二、目的:   能够从192.168.11.19上通过Nodejs的modesl 内联访问到SIP Server(FreeSWITCH),从而实现对SIP Server状态信息的获取。之前有看过很多文档...

FreeSwitch下配置DID的方法

首先介绍下什么是DID? 翻译为中文为“直接向内拨号”,该服务是由电话公司提供的,它使用户能够直接拨打PBX或VOIP系统中的分机号码,而无需求助于总机或自动话务系统。 现在要实现这样一个功能 - 通过手机或座机拨打一个号码(例如:01088888888),可以直接联系到VOIP系统(FreeSwitch系统)的1008这个用户。如下图所示: 手机/座机...

freeswitch用户整合(使用mysql数据库的用户表)

freeswitch是一款强大的voip服务器,可以语音和视频。但是它默认是采用/directory文件夹下的xml来配置用户的,对于整合到现有系统或者使用数据库保存用户信息的系统都是非常不方便的,所以,本文主要描述一种方法,解决freeswitch用户整合的问题。 完成这一任务需要三步,配置unixodbc,将用户验证转接到lua脚本,修改拨号计划使得...