アスタリスクサーバーの冗長性の実装

新しいPBXを選択する際の主な基準の1つは、信頼性、フォールトトレランス、および冗長システムの可能性です。 中小企業は通常、24時間以内に回復できるシンプルなバックアップを持っていますが、大企業ではこれは非常に重要であり、単純な電話接続の問題はありません。 企業は通常、これに多くのリソースとお金を費やします。 DIGIUM R800およびR850の登場により、アスタリスクはE1 / T1 / BRIおよびFXO回線の完全なPSTN冗長性を備えた真に信頼できるシステムになりました。 2つのサーバーAsteriskとR850のインストールと構成の詳細について


このプロジェクトには、鉄が必要です。
  1. サーバー、Ubuntu 10.04-2個(現在のバージョンのrseriesの場合、Ubuntu 10.04またはCentos 5.6を使用することをお勧めします)
  2. Digium R850-1個
  3. Digium TE420ボード-2個
  4. USBフラッシュドライブ(最小1 GB)-2個

システムのレイアウトは次のようになります


図からわかるように、R850の鉄は通信プロバイダーからストリームを受信し、2つのアスタリスクサーバーに送信します。 サーバーの状態に応じて、R850はサーバー間でフローを切り替えます。これは、USBポートにも接続されているためです。



R850接続:
  1. プライマリE1をマスターサーバーボードに接続します
  2. セカンダリE1をスレーブサーバーボードに接続します
  3. マスターサーバーへのプライマリUSB
  4. スレーブサーバーへのセカンダリUSB
  5. USBコンソール(オプション)

R850はUSBポートから給電され、サーバーに接続するとすぐに電源が入ります。 システムで新しいUSBデバイスを確認する

root @ ubuntu:〜#lsusb
バス007デバイス003:ID 10c4:ea60 Cygnal Integrated Products、Inc. CP210x複合デバイス

以下に書かれていることはすべて、両方のサーバーで行う必要があります!

R850用のサーバーの準備



rシリーズのソフトウェアインストール:
インストールの前に、R850をUSBポートから切断する必要があります。
cd /usr/src wget http://downloads.digium.com/pub/telephony/rseries/rseries-current.tar.gz tar zxvf rseries-current.tar.gz cd rseries-XXX make && make install 


次に、R850をサーバーに再度接続して確認します

 ./rtest.sh info /dev/rseries0 


そのような答えを得る必要があります
 R-Series hardware is detected! Firmware version: 5 Serial number: DM96137330014 Product number: R850 Ports: 8 ID Switch: 0 Watchdog Timeout (get): 5 Control mode: 1 Port 1: 0, primary, T1/E1 Port 2: 0, primary, T1/E1 Port 3: 0, primary, T1/E1 Port 4: 0, primary, T1/E1 Port 5: 0, primary, T1/E1 Port 6: 0, primary, T1/E1 Port 7: 0, primary, T1/E1 Port 8: 0, primary, T1/E1 

R850を完全にテストするには、。/ rtest.sh tests / dev / rseries0を実行します。鉄片が数秒間フローを切り替え、同時にクリックします。

Pacemaker、Corosync、およびDRBDに基づいてシステムクラスタリングを構成する



DRBDは、ローカルブロックデバイスとリモートデバイス間の同期(RAID1)を提供するブロックデバイスです。 この例では、2つのフラッシュドライブを使用します。

DRBD用のフラッシュドライブの調理

1)削除(慎重にフラッシュドライブ/ dev / sdbがありますが、別のドライブがあります)
 dd if=/dev/zero of=/dev/sdb bs=1M 

2)1GBパーティションを作成します。 (できることなど)
 fdisk /dev/sdb 

さらにn、p、1、1、+ 1024M

3)Pacemaker、Corosync、およびDRBDをインストールします
 apt-get install drbd8-utils apt-get install corosync pacemaker 


4)構成のインストール
 cd /usr/src/rseries-XXX/ make samples 

メッセージを受け取ったら
 Not installing /etc/corosync/corosync.conf (already exists) 

それを手でコピーします。
 cp configs/corosync/corosync.conf /etc/corosync/corosync.conf 


セットアップを開始する


1)/etc/drbd.d/asterisk.resを編集し、データ、電子メール、IPディスク、およびホスト名に変更します。astnode1とastnode2を離れると、次のようになりました。
 resource asterisk { handlers { split-brain "/usr/lib/drbd/notify-split-brain.sh adm@pbxware.ru"; } net { after-sb-0pri discard-younger-primary; after-sb-1pri discard-secondary; after-sb-2pri disconnect; } on astnode1 { device /dev/drbd0; disk /dev/sdb1; address 192.168.1.253:7789; meta-disk internal; } on astnode2 { device /dev/drbd0; disk /dev/sdb1; address 192.168.1.252:7789; meta-disk internal; } } 


2)サーバーに応じてホストを変更します(etc / hostname)
ホスト名astnode1-最初のマシンおよび
ホスト名astnode2-2番目

3)新しいブロックデバイスを作成する
 drbdadm create-md asterisk 

すべてが正しく構成されている場合、取得
 …. New drbd meta data block successfully created. 


これでDRDBを実行できます
 /etc/init.d/drbd start * Starting DRBD resources [ d(asterisk) n(asterisk) ] [ OK ] 


次の手順は、メインサーバーastnode1でのみ実行する必要があります。

DRBDにパーティションを作成します
 drbdadm disconnect asterisk drbdadm -- --clear-bitmap new-current-uuid asterisk drbdadm -- --overwrite-data-of-peer primary asterisk mkfs.ext3 -m0 /dev/drbd0 drbdadm secondary asterisk drbdadm detach asterisk drbdadm up asterisk 


最初のサーバーastnode1を確認します
 drbdadm primary asterisk mkdir /mnt/asterisk mount -t ext3 /dev/drbd0 /mnt/asterisk cd /mnt/asterisk touch test ls 

テストファイルが存在する場合、すべてが計画どおりに進み、drbdを無効にします
 cd umount /mnt/asterisk drbdadm secondary asterisk 


次に、2番目のサーバーastnode2を確認します
 drbdadm primary asterisk mkdir /mnt/asterisk mount -t ext3 /dev/drbd0 /mnt/asterisk cd /mnt/asterisk ls 

ここで、テストファイルも表示されます。
 cd umount /mnt/asterisk drbdadm secondary asterisk 


この時点で、システムはアスタリスク、Dahdi、およびLibPRIをインストールする準備ができています。
メインサーバーastnode1で、必要なファイルとリンクを作成します。
 cd /usr/src/rseries-1.0.0/ drbdadm primary asterisk mount -t ext3 /dev/drbd0 /mnt/asterisk ./createlinks.sh 


アスタリスク、DAHDI、およびLibPRIをインストールします



最初のサーバーastnode1へのインストール
1)DAHDIおよびAsteriskのビルドに必要なパッケージのインストール
 aptitude install mc htop iftop linux-headers-`uname -r` build-essential subversion libncurses5-dev libssl-dev libxml2-dev vim-nox libsqlite3-dev sqlite3 libnewt-dev 

2)アスタリスク、DAHDI、LibPRIのダウンロード
 wget http://downloads.asterisk.org/pub/telephony/dahdi-linux-complete/dahdi-linux-complete-2.6.1+2.6.1.tar.gz wget http://downloads.asterisk.org/pub/telephony/certified-asterisk/certified-asterisk-1.8.11-current.tar.gz wget http://downloads.asterisk.org/pub/telephony/libpri/releases/libpri-1.4.10.tar.gz 

3)開梱
 tar -zxvf libpri-1.4.10.tar.gz tar -zxvf certified-asterisk-1.8.11-current.tar.gz tar -zxvf dahdi-linux-complete-2.6.1+2.6.1.tar.gz 

4)収集する
 cd libpri-1.4.10 make && make install cd ../dahdi-linux-complete-2.6.1+2.6.1/ make && make install && make config cd ../certified-asterisk-1.8.11-cert8/ ./configure && make && make install && make samples 

正常にインストールした後
 umount /mnt/asterisk/ drbdadm secondary asterisk 


2番目のサーバーastnode2のインストールに渡します
 cd /usr/src/rseries-1.0.0/ drbdadm primary asterisk mount -t ext3 /dev/drbd0 /mnt/asterisk ./createlinks.sh 


ここで、スクリプトはそのようなフォルダーが既にあると答えますので、そうすべきです。
2番目のサーバーへのインストールは最初のサーバーとほぼ同じです。アスタリスクのサンプルを作成する以外はすべて行います。

2番目のastnode2サーバーへのインストール
1)DAHDIおよびAsteriskのビルドに必要なパッケージのインストール
 aptitude install mc htop iftop linux-headers-`uname -r` build-essential subversion libncurses5-dev libssl-dev libxml2-dev vim-nox libsqlite3-dev sqlite3 libnewt-dev 

2)アスタリスク、DAHDI、LibPRIのダウンロード
 wget http://downloads.asterisk.org/pub/telephony/dahdi-linux-complete/dahdi-linux-complete-2.6.1+2.6.1.tar.gz wget http://downloads.asterisk.org/pub/telephony/certified-asterisk/certified-asterisk-1.8.11-current.tar.gz wget http://downloads.asterisk.org/pub/telephony/libpri/releases/libpri-1.4.10.tar.gz 

3)開梱
 tar -zxvf libpri-1.4.10.tar.gz tar -zxvf certified-asterisk-1.8.11-current.tar.gz tar -zxvf dahdi-linux-complete-2.6.1+2.6.1.tar.gz 

4)収集する
 cd libpri-1.4.10 make && make install cd ../dahdi-linux-complete-2.6.1+2.6.1/ make && make install && make config cd ../certified-asterisk-1.8.11-cert8/ ./configure && make && make install 

正常にインストールした後
 umount /mnt/asterisk/ drbdadm secondary asterisk 



両方のサーバーでCorosyncを使い始める


 vim /etc/corosync/corosync.conf 

サーバーのIPアドレスとbindnetaddrに従ってmemberaddrをルールします
ここに私の設定があります:

 totem { version: 2 token: 3000 token_retransmits_before_loss_const: 10 join: 60 consensus: 5000 vsftype: none max_messages: 20 clear_node_high_bit: yes secauth: off threads: 0 rrp_mode: none interface { ringnumber: 0 bindnetaddr: 192.168.1.0 broadcast: yes mcastport: 5405 member { memberaddr: 192.168.1.253 } member { memberaddr: 192.168.1.252 } } } aisexec { user: root group: root } logging { fileline: off to_stderr: yes to_logfile: no to_syslog: yes syslog_facility: daemon debug: off timestamp: on logger_subsys { subsys: AMF debug: off tags: enter|leave|trace1|trace2|trace3|trace4|trace6 } } amf { mode: disabled } 


次に、/ etc / default / corosyncをSTART = noからSTART = yesに変更します

始める
 /etc/init.d/corosync start * Starting corosync daemon corosync [ OK ] 


ペースメーカーのセットアップ


最初のastnode1サーバーでのみ構成する必要があります

rseries-1.0.0では、設定の例があります。編集します

 vim /usr/src/rseries-1.0.0/configs/pacemaker/pacemaker.cfg 

GatewayStatusゲートウェイのIPアドレスとocfのみを変更しました:heartbeat:IPアドレス2 SIP電話のIPアドレス。
構成:
 node astnode1 node astnode2 primitive Asterisk ocf:Digium:asterisk \ op monitor interval="5" primitive Asterisk_drbd ocf:linbit:drbd \ params drbd_resource="asterisk" \ op monitor start-delay="10" interval="5" primitive Asterisk_fs ocf:heartbeat:Filesystem \ params device="/dev/drbd/by-res/asterisk" directory="/mnt/asterisk/" fstype="ext3" primitive ClusterIP ocf:heartbeat:IPaddr2 \ params ip="192.168.1.109" cidr_netmask="32" \ op monitor interval="5" primitive GatewayStatus ocf:pacemaker:ping \ params host_list="192.168.1.1" multiplier="100" \ op monitor interval="5" timeout="10" primitive rseries0 ocf:Digium:rseries \ params tty="/dev/rseries0" \ op monitor interval="10" role="Master" \ op monitor interval="60" role="Slave" ms Asterisk_ms Asterisk_drbd \ meta master-max="1" master-node-max="1" clone-max="2" clone-node-max="1" notify="true" ms rseries0_ms rseries0 \ meta master-max="1" master-node-max="1" clone-max="2" clone-node-max="1" target-role="Master" clone GatewayStatusClone GatewayStatus location Asterisk-with-ping Asterisk \ rule $id="Asterisk-with-ping-rule" -inf: not_defined pingd or pingd lte 0 colocation Everything-with-Asterisk inf: ( rseries0_ms:Master Asterisk_ms:Master ) ( ClusterIP Asterisk_fs ) Asterisk order Asterisk-after-Everything inf: ( rseries0_ms:promote Asterisk_ms:promote ) ( ClusterIP Asterisk_fs ) Asterisk:start property $id="cib-bootstrap-options" \ cluster-infrastructure="openais" \ expected-quorum-votes="2" \ stonith-enabled="false" \ no-quorum-policy="ignore" rsc_defaults $id="rsc-options" \ resource-stickiness="99" 


ペースメーカーの構成を適用する
 cd /usr/src/rseries-1.0.0/ crm configure load update configs/pacemaker/pacemaker.cfg 

2番目のサーバーで行うことはありません。

R850セットアップ



設定するには、たとえばR850のコンソールポートとslave-astnode2からのケーブルを使用します
 minicom -s +-----------------------------------------------------------------------+ | A - Serial Device : /dev/ttyUSB0 | | B - Lockfile Location : /var/lock | | C - Callin Program : | | D - Callout Program : | | E - Bps/Par/Bits : 115200 8N1 | | F - Hardware Flow Control : No | | G - Software Flow Control : No | | | | Change which setting? | +-----------------------------------------------------------------------+ 


ここで、設定用のメニューが表示されます。E1の場合、次のように構成しました。
 Digium R850 Firmware Version: 5 Serial Number: DM96137330014 Port |Mode Passthrough State All | --- --- --- 1 | T1/E1 disabled Input to Primary 2 | T1/E1 disabled Input to Primary 3 | T1/E1 disabled Input to Primary 4 | T1/E1 disabled Input to Primary 5 | T1/E1 disabled Input to Primary 6 | T1/E1 disabled Input to Primary 7 | T1/E1 disabled Input to Primary 8 | T1/E1 disabled Input to Primary Arrow keys or a (left), d (right), w (up) or s (down) to navigate thru menu r to refresh, <enter> to select, c to commit changes o to toggle operational state, xxx to exit menu. 


rseriesパッケージのrctlを使用してR850を制御することもできます。これにより、ファームウェアのチェックと更新、およびデバイスのテストが可能になります。

システムテスト





最初に、R850が最初のアスタリスクastnode1に切り替えられていることを確認します
 root@astnode1:~# dahdi_scan [1] active=yes alarms=OK description=T2XXP (PCI) Card 0 Span 1 name=TE2/0/1 manufacturer=Digium devicetype=Wildcard TE220 (5th Gen) location=Board ID Switch 0 basechan=1 totchans=31 irq=0 type=digital-E1 syncsrc=1 lbo=0 db (CSU)/0-133 feet (DSX-1) coding_opts=AMI,HDB3 framing_opts=CCS,CRC4 coding=HDB3 framing=CCS/CRC4 [2] active=yes alarms=OK description=T2XXP (PCI) Card 0 Span 2 name=TE2/0/2 manufacturer=Digium devicetype=Wildcard TE220 (5th Gen) location=Board ID Switch 0 basechan=32 totchans=31 irq=0 type=digital-E1 syncsrc=1 lbo=0 db (CSU)/0-133 feet (DSX-1) coding_opts=AMI,HDB3 framing_opts=CCS,CRC4 coding=HDB3 framing=CCS/CRC4 


alarms = OKすべて正常に動作しますが、そうでない場合は、astnode1を再起動してからastnode2を再起動することをお勧めします。

astnode1でのアスタリスククラッシュ

killallアスタリスクを実行する
ログを取得します
 crmd: [810]: info: process_lrm_event: LRM operation Asterisk_monitor_5000 (call=21, rc=7, cib-update=56, confirmed=false) not running …. Nov 9 13:07:19 astnode1 crmd: [810]: info: te_rsc_command: Initiating action 25: start Asterisk_start_0 on astnode1 (local) Nov 9 13:07:19 astnode1 crmd: [810]: info: do_lrm_rsc_op: Performing key=25:7:0:90c9675a-3c31-4e86-9f90-68c13142b377 op=Asterisk_start_0 ) Nov 9 13:07:19 astnode1 lrmd: [807]: info: rsc:Asterisk:23: start 


crmdはアスタリスクを再起動し、さらに機能しますが、アスタリスクが上昇しなくなることがあるためです。 次のようなテストをシミュレートしてみましょう。
 mv /usr/sbin/asterisk /usr/sbin/asterisk-back killall asterisk 

ログを確認します。
 Nov 9 13:10:36 astnode1 pengine: [809]: info: get_failcount: Asterisk has failed 1000000 times on astnode1 Nov 9 13:10:36 astnode1 pengine: [809]: WARN: common_apply_stickiness: Forcing Asterisk away from astnode1 after 1000000 failures (max=1000000) Nov 9 13:10:36 astnode1 pengine: [809]: notice: LogActions: Start Asterisk#011(astnode2) 


2番目のサーバーでアスタリスクが上昇し、R850がクリックしてフローを切り替えます。

サーバーの電源の問題。

テストの前に、astnode1を動作状態に戻しましたが、スレッドは2番目のサーバーに残りました。 2番目のサーバーの電源がオフになった場合のシステムの動作を確認しましょう。

ログ:
 Nov 9 13:20:10 astnode1 crmd: [810]: info: ais_status_callback: status: astnode2 is now lost (was member) Nov 9 13:20:21 astnode1 kernel: [ 937.276823] wct4xxp 0000:06:08.0: Clearing yellow alarm span 1 Nov 9 13:20:21 astnode1 kernel: [ 937.448860] wct4xxp 0000:06:08.0: Clearing yellow alarm span 2 

すべてが明確で、astnode2サーバーがクラッシュし、astnodeでストリームとアスタリスクが増加したと思います。 また、USBケーブルの取り外しとサーバーのLAN R850からの取り外しが常に機能することをテストしました。

DIGIUMと新しいR850のおかげで、アスタリスクは新しいレベルの信頼性とアプリケーションにまで成長しました。 現在、アスタリスクは平和に眠ることができます。

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


All Articles