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

Source: https://habr.com/ru/post/J140517/


All Articles