FreeSWITCH mod_sofiaに基づくフェイルセーフSIPプロキシ/ PBXの構築(回復)

こんにちは、ハブラフチャン。



数か月間、私は優れたFreeSWITCH製品をいじっていました。 機能性、信頼性、パフォーマンスに驚かされることはありません(これが期待できない分野でも)。



すぐに実稼働に入る可能性が高い私の実験の1つは、驚くべきことに、私の観点からはmod_sofia回復機能に関するものです。 回復機能により、FreeSWITCH(FS)はクラッシュ後に呼び出しを回復できます。または、FSがアクセスしやすいクラスターで動作する場合、2番目のノードで呼び出しをピックアップします。 注意! RTPプロキシの場合とそれなしの両方で、加入者の呼び出しを中断することなく。



これは、外部DBMSの使用とSIPスタックを担当するmod_sofiaの設定のおかげで、非常に簡単に実装されます。 つまり mod_sofiaは現在の呼び出しに関するすべての情報を外部データベースに保存します。クラッシュが発生すると、クラスターの2番目のノードはこれらの設定を読み取って取得することができます。



そのため、次のものが必要です。



FSをインストールして、そこから不要なモジュールを削除するプロセスについては説明しませんが、すべての実験はデフォルトの構成に設定されます。 最後に、ゲートウェイを追加して外部呼び出しを行います。



必要なものはすべてインストールされていると仮定します。最も興味深いものに進みましょう。 設定の選択。

デフォルトでFSを設定することはすでに非常にリンギングであり、テストのためにはそれで十分です。



データベースサーバーで次の操作を行います。

#mysqladmin -u dba_user -p create fs_cnf
      
      





これにより、FSが設定を保存するデータベースが作成されます。



ブリスターは、2つの作業ノードとデータベースサーバーで構成されます。



最初のノードのアドレス172.16.100.200

2番目のノードのアドレス172.16.100.201

一般アドレスは172.16.100.205です

アドレスDBサーバー172.16.100.210



以下のすべてのアクションは、両方のFreeSWITCHノードで実行されます。



ファイル/etc/odbc.iniに、データベースサーバーに接続するためのパラメーターを追加します

 [fsw-cnf] Description = MySQL ODBC Database TraceFIle = stderr Driver = MySQL SERVER = 172.16.100.210 USER = fs-usr PASSWORD = super_secure_password OPTION = 67108864 DATABASE = fs_cnf
      
      





FSが一般的なIPで動作するようにしたい、このためにファイルfreeswitch_base_dir / conf / vars.xml

次の行を入力する必要があります。

 <X-PRE-PROCESS cmd="set" data="local_ip_v4=172.16.100.205"/>
      
      





回復するためには、SIPプロファイルでコールトラッキングを有効にする必要があります。 ここで、どのプロファイルについて詳しく説明します 。 freeswitch_base_dir / conf / sip_profiles /に移動し、両方のプロファイル(内部、外部)の設定に行を追加します。

 <param name="track-calls" value="true"/>
      
      





また、両方のプロファイルで、データベースサーバーへの接続パラメーターを指定します

 <param name="odbc-dsn" value="fsw-cnf:fs-usr:super_secure_password"/>
      
      





ファイルfreeswitch_base_dir / conf / autoload_configs / switch.conf.xmlに移動して、行を追加するか、コメントを外して編集します。

 <param name="core-db-dsn" value="fsw-cnf:fs-usr:super_secure_password"/>
      
      



これは、コアFS設定用です。



FSが起動すると、作業に必要なテーブルが作成されます。



次に、ハートビートを構成します。



vim /etc/ha.d/authkeys

 auth 1 1 sha1 mega_super_secure_key
      
      





chmod 600 /etc/ha.d/authkeys



vim /etc/ha.d/ha.cf

 #  logfacility local0 #  keepalive 100ms deadtime 2 warntime 1 initdead 120 #       udpport 694 bcast eth0 #       node fs1 fs2 #         ? auto_failback on
      
      





vim /etc/ha.d/haresources(2番目のノードでホスト名を変更する必要があります(fs1からfs2))

 fs1 IPaddr2::172.16.100.205/255.255.255.0/eth0 freeswitch::fsrecover
      
      





freeswitch :: fsrecover-プロファイルの対象となるスクリプトのinit.dセクション。次のステップで追加します



/etc/init.d/freeswitchで、再起動とリロードの追加の間

  fsrecover) $FS_HOME/bin/fs_cli -x "sofia profile internal start" $FS_HOME/bin/fs_cli -x "sofia profile external start" /bin/sleep 1 $FS_HOME/bin/fs_cli -x "sofia recover" ;;
      
      





ノードの1つがクラッシュすると、2番目のノードが共通IPを上げてFSプロファイルを再起動します。その後、切望されたコマンドを実行し、コールをピックアップします。



発信コールを確認するには、ダイヤルプランを編集してゲートウェイを追加する必要があります。

この例では、voip.msを10桁の数字で使用します。 freeswitch_base_dir / conf / sip_profiles / external /に移動し、次の内容のファイルを作成します。

 <include> <gateway name="voipms"> <param name="username" value="your_username" /> <param name="password" value="your_password" /> <param name="proxy" value="montreal|houston|newyork|etc.voip.ms" /> <param name="realm" value="voip.ms" /> <param name="register" value="true" /> <param name="sip_cid_type" value="rpd" /> </gateway> </include>
      
      







freeswitch_base_dir / conf / dialplan / default.xmlに追加します(正規表現とcaller-idパラメーターを変更します)

 <extension name="Outbound 10 Digits"> <condition field="destination_number" expression="^(\d{10})$"> <action application="set" data="effective_caller_id_number=8001231234"/> <action application="set" data="effective_caller_id_name=800 Number"/> <action application="bridge" data="sofia/gateway/voipms/$1"/> </condition> </extension>
      
      





デーモンを実行します。



 chkconfig heartbeat on service heartbeat start chkconfig freeswitch on service freeswitch start
      
      





スタートアップfrisvitchスクリプトは両方のノードで実行しますが、非アクティブなノードではプロファイルは増加しません。 それらが実行されるIPはありません。

テストでは、freeswitch_base_dir / conf / directory / defaultから任意の拡張子を取得し、登録します:



プロキシ:172.16.100.205

ユーザー名:1000

パスワード:1234(これはdefault_passwordです。vars.xmlで変更する必要があります)



任意の番号をダイヤルします。会話中にノードの1つを配置します。 ハートビートは、2番目のノードが横になっていることを検出し、共通IPを取得し、スクリプトを実行して、非アクティブなプロファイルを起動します。 メディアストリームの中断はわずか2〜3秒です。 freeswitchでハートビットがリソースをインターセプトするのにかかる時間+ 1秒:fsrecover



それだけです ご清聴ありがとうございました。この記事が誰かの役に立つことを願っています。 提案や提案は大歓迎です。 mod_xml_curl、mod_lcr、その他の何かについて書く計画があります。



追伸 彼らが言うように:「最初の記事、あまり蹴らないでください。」



参照:

wiki.freeswitch.org



All Articles