数か月間、私は優れたFreeSWITCH製品をいじっていました。 機能性、信頼性、パフォーマンスに驚かされることはありません(これが期待できない分野でも)。
すぐに実稼働に入る可能性が高い私の実験の1つは、驚くべきことに、私の観点からはmod_sofia回復機能に関するものです。 回復機能により、FreeSWITCH(FS)はクラッシュ後に呼び出しを回復できます。または、FSがアクセスしやすいクラスターで動作する場合、2番目のノードで呼び出しをピックアップします。 注意! RTPプロキシの場合とそれなしの両方で、加入者の呼び出しを中断することなく。
これは、外部DBMSの使用とSIPスタックを担当するmod_sofiaの設定のおかげで、非常に簡単に実装されます。 つまり mod_sofiaは現在の呼び出しに関するすべての情報を外部データベースに保存します。クラッシュが発生すると、クラスターの2番目のノードはこれらの設定を読み取って取得することができます。
そのため、次のものが必要です。
- フリースイッチ
- 個別にDBMSをインストール(私の場合はmysql)
- unixODBC
- FSが必要とする依存関係( wikiに記載)
- 鼓動
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