有时候,需要用到多个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 实例的更多相关文章

  1. activemq在一台服务器上启动多个Broker

    步骤如下: 1.把整个conf文件夹复制一份,比如叫conf2 2.修改里面的activemq.xml文件 ①brokerName不能和原来的重复 ②数据存放的文件名称不能重复,比如<kahaD ...

  2. 在一台服务器上启动多个Broker

    1:把整个conf文件夹复制一份,比如叫做conf22:修改里面的activemq.xml文件(1)里面的brokerName 不能跟原来的重复(2)数据存放的文件名称不能重复,比如:<kaha ...

  3. 一台服务器上同时启动多个 Tomcat

    在同一台服务器上启动多个 Tomcat 服务,需要修改 conf/server.xml文件里的三个部分,如下: 1.修改Http访问端口(默认为8080端口) <Connector port=& ...

  4. 在一台Linux服务器上安装多个MySQL实例(一)--使用mysqld_multi方式

    (一)MySQL多实例概述 实例是进程与内存的一个概述,所谓MySQL多实例,就是在服务器上启动多个相同的MySQL进程,运行在不同的端口(如3306,3307,3308),通过不同的端口对外提供服务 ...

  5. 如何在一台服务器上安装两个mysql或者更多

    如何在一台服务器上安装两个mysql 1       前言 上篇写了在一台机器上源码编译安装一个mysql,那么如何在一台机器上源码编译安装两个mysql或者更多呢? 2       环境 mysql ...

  6. 在同一台服务器上配置多个Tomcat

    如果要在一台服务器上配置多个Tomcat,主要就是要避免Tomcat服务器的端口冲突的问题.只需要修改CATALINA_HOME\conf\server.xml中的启动端口和连接端口就OK了! 下面我 ...

  7. 在多台服务器上简单实现Redis的数据主从复制(3)(转载)

    转载地址:http://www.cnblogs.com/liping13599168/archive/2011/04/14/2016226.html Redis的主从复制功能非常强大,一个master ...

  8. 在多台服务器上简单实现Redis的数据主从复制

          Redis的主从复制功能非常强大,一个master可以拥有多个slave,而一个slave又可以拥有多个slave,如此下去,形成了强大的多级服务器集群架构.下面我演示下怎样在多台服务器上 ...

  9. 无法在web服务器上启动调试。调试失败,因为没有启用集成windows身份验证

    ----注意:以管理员身份运行VS C#中ASP.NET Web应用程序编译时的错误:无法在web服务器上启动调试.调试失败,因为没有启用集成windows身份验证. 解决:打开IIS,在IIS里查看 ...

随机推荐

  1. Eclipse错误导致无法启动The workspace exited with unsaved changes in the previous session

    MyOpenSUSE:/home/jin/workspace # tail -f .metadata/.log !SESSION 2014-05-04 11:35:58.869 ----------- ...

  2. Android SO(动态链接库)UPX加固指南

    前言 随着移动互联网的爆发性增长,人们对移动应用的需求变得越来越复杂,企业在带给用户众多便利和享受的同时,却容易忽视应用自身的安全性问题,一旦遭受攻击,就会给企业和用户的经济或声誉带来影响.本文主要是 ...

  3. dns问题,QQ打得开,网页打不开

    dns问题,QQ打得开,网页打不开 ip4 dns 改为114.114.114.114. 原因有可能是路由出错之类的.114是默认的通用ip

  4. HDU 1507 Uncle Tom's Inherited Land*(二分匹配,输出任意一组解)

    Uncle Tom's Inherited Land* Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (J ...

  5. express-session的简单使用说明

    我们知道Internet 通过协议分为stateful和stateless两类,而http是stateless协议,客户端发送请求到服务端建立一个连接,请求得到响应后连接即中断,服务器端不会记录状态, ...

  6. 【FTP】使用org.apache.commons.net.ftp.FTPClient 实现FTP的上传下载

    在此之前,在项目中加上FTP的架包 第一步:配置FTP服务器的相关配置 FtpConfig.java  实体类(配置类) package com.sxd.ftp; public class FtpCo ...

  7. Ubuntu下,清屏等终端常用命令

    转自:http://blog.csdn.net/gaojinshan/article/details/9314435 # ctrl + l - 清屏 . cLear# ctrl + c - 终止命令. ...

  8. iOS:iOS中的几种动画

    本文来自收藏,感谢原创博主. iOS中的动画 摘要 本文主要介绍核iOS中的动画:核心动画Core Animation, UIView动画, Block动画, UIImageView的帧动画. 核心动 ...

  9. [Python爬虫] 之十二:Selenium +phantomjs抓取中的url编码问题

    最近在抓取活动树网站 (http://www.huodongshu.com/html/find.html) 上数据时发现,在用搜索框输入中文后,点击搜索,phantomjs抓取数据怎么也抓取不到,但是 ...

  10. 【转】编译安装PHP并配置PHP-FPM

    1.前言上一篇讲述了如何编译安装MySQL,虽然可以通过yum install 或者rpm来安装,但是yum install和rpm安装有一个特点,就是有些参数是别人根据大众需求定制的,如果需要进行自 ...