1. 程式人生 > >FreeSWITCH折騰筆記8——使用OpenSIPS進行負載均衡

FreeSWITCH折騰筆記8——使用OpenSIPS進行負載均衡

通過OpenSIPS對FreeSWITCH進行負載均衡網路上的文章很多,但都是基於老版本的OpenSIPS,目前最新的OpenSIPS LTS版是2.4,如果使用老版本配置檔案,OpenSIPS是執行不起來(當然通過一番修改後還是可以執行起來的)。筆者經過一番折騰,成功實現了OpenSIPS 2.4版本對FreeSWITCH的負載均衡,這裡將折騰的注意項及最終的配置記下來,以免下次真的要用時又重新折騰。筆者對OpenSIPS不是很熟悉,可能有些地方有紕漏,歡迎各位網友指正。

一、環境介紹:

OpenSIPS OS:debian 8

OpenSIPS Version:2.4 LTS

OpenSIPS IP:172.16.100.30/31

OpenSIPS HA:keepalived

OpenSIPS VIP:172.16.100.32

OpenSIPS domain:sofia.superpipi.cn

FreeSWITCH OS:debian 8

FreeSWITCH Version:1.81

FreeSWITCH IP:172.16.100.10/11

DB:Mysql 5.7

注:OpenSIPS的高可用,採用keepalived進行VIP切換實現,目前未新增OpenSIPS的可用性檢測指令碼,僅作VIP切換。

二、組網介紹:

本次試驗採用以下組網結構,兩個節點OpenSIPS採用keepalived進行VIP切換,兩個節點FreeSWITCH實現負荷分擔,OpenSIPS和FreeSWITCH均連線到MySQL(注:FreeSWITCH連線MySQL資料庫,需提取channels建表SQL並將欄位長度改小,然後手工建立channels表

)。在路由器(筆者使用的路由器有Dnsmasq功能)上將域名sofia.superpipi.cn解析到OpenSIPS的VIP(172.16.100.32),SIP分機註冊時通過域名sofia.superpipi.cn進行註冊。至於為何要通過域名註冊,這是因為FreeSWITCH預設的域名是其本地的IP,若註冊的域非FreeSWITCH本地IP,則可能導致註冊不上同時也無法通話,通過修改FreeSWITCH的域名稱可以實現。如果將FreeSWITCH域名修改為OpenSIPS的VIP,那麼VIP只有一個,FreeSWITCH就只能有一個域了,而指向OpenSIPS的VIP的域名可以是多個,這樣就可以實現FreeSWITCH多域。至於FreeSWITCH為何要多個域,主要是方便許可權管控,在實際生產中意義重大。

image.png

三、安裝及基礎配置:

3.1、安裝和配置keepalived

3.1.1、安裝keepalived

keepalived安裝直接通過apt安裝即可

apt-get install keepalived

3.1.2、修改keepalived配置:

編輯/etc/keepalived/keepalived.conf,將兩個節點分別按以下配置修改。

  • 01節點keepalived配置:

! Configuration File for keepalived
global_defs {
   notification_email {
     acassen
   }
   notification_email_from [email protected]
   smtp_server 172.16.100.251
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    garp_master_delay 10
    smtp_alert
    virtual_router_id 53
    priority 200
    nopreempt
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 915119
    }
    virtual_ipaddress {
        172.16.100.32/24
        172.16.100.32/24 label eth0:1
    }
}
  • 02節點keepalived配置:

! Configuration File for keepalived
global_defs {
   notification_email {
     acassen
   }
   notification_email_from [email protected]
   smtp_server 172.16.100.251
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    garp_master_delay 10
    smtp_alert
    virtual_router_id 53
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 915119
    }
    virtual_ipaddress {
        172.16.100.32/24
        172.16.100.32/24 label eth0:1
    }
}

3.2、安裝和配置OpenSIPS

3.2.1、安裝OpenSIPS

筆者安裝OpenSIPS是通過官方deb包直接安裝的,執行步驟如下:

  • 新增源:

apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 049AD65B
echo "deb http://apt.opensips.org jessie 2.4-releases" >/etc/apt/sources.list.d/opensips.list
  • 更新源和安裝OpenSIPS

apt-get update && apt-get install opensips

3.2.2、配置OpenSIPS

  • 建立資料庫

編輯/etc/opensips/opensipsctlrc將以下項去註釋並按實際情況修改,或直接通過echo追加到/etc/opensips/opensipsctlrc

echo "SIP_DOMAIN=sofia.superpipi.cn" >> /etc/opensips/opensipsctlrc
echo "DBENGINE=MYSQL" >> /etc/opensips/opensipsctlrc
echo "DBPORT=3306" >> /etc/opensips/opensipsctlrc
echo "DBHOST=172.16.100.15" >> /etc/opensips/opensipsctlrc
echo "DBNAME=opensips" >> /etc/opensips/opensipsctlrc
echo "DBRWUSER=opensips" >> /etc/opensips/opensipsctlrc
echo "DBRWPW="ligen119"" >> /etc/opensips/opensipsctlrc

執行建立資料庫工具(注:如資料庫不在本機,需授權root使用者遠端訪問許可權

/usr/sbin/opensipsdbctl create

執行以上命令後會提示輸入root密碼,輸入root密碼後提示輸入資料庫字符集(吐槽一下不能選utf8),這裡輸入gbk(後續可能需要儲存中文),其後按嚮導進行資料庫建立。

  • 配置啟動引數

啟動引數編輯不是必須,如果生產應用建議還是將記憶體引數做相應的擴大。

編輯/etc/default/opensips將以下項去註釋並按實際情況修改,或直接通過echo追加到/etc/default/opensips 

echo "RUN_OPENSIPS=yes" >>/etc/default/opensips
echo "USER=opensips" >>/etc/default/opensips 
echo "GROUP=opensips" >>/etc/default/opensips 
echo "S_MEMORY=512" >>/etc/default/opensips 
echo "P_MEMORY=32" >>/etc/default/opensips 
echo "DUMP_CORE=yes" >>/etc/default/opensips
  • 配置檔案

編輯/etc/opensips/opensips.cfg,清空原配置檔案,將以下內容插入配置檔案。(本配置檔案基本是參考freeswitch官方wiki的配置檔案

log_level=1  #老版本日誌級別引數為debug,級別範圍1-4,建議生產上設定為1,為3或者4時將產生大量日誌,磁碟空間很快就不夠了
sip_warning=0
log_stderror=no
log_facility=LOG_LOCAL0
log_name="opensips"
debug_mode=no
children=4
dns_try_ipv6=no
auto_aliases=no
listen=udp:172.16.100.30:5062  #另外一個節點設定為udp:172.16.100.31:5062,取本地IP,不新增該監聽項則備用節點無法與負載節點握手,導致備用節點將排程列表的負載節點設定為不可用
listen=udp:172.16.100.32:5060
mpath="/usr/lib/x86_64-linux-gnu/opensips/modules/"
 
loadmodule "db_mysql.so"
loadmodule "signaling.so"
loadmodule "sl.so"
loadmodule "tm.so"
loadmodule "rr.so"
loadmodule "uri.so"
loadmodule "dialog.so"
loadmodule "maxfwd.so"
loadmodule "textops.so"
loadmodule "mi_fifo.so"
loadmodule "dispatcher.so"
loadmodule "load_balancer.so"
loadmodule "sipmsgops.so"
loadmodule "proto_udp.so"
modparam("mi_fifo", "fifo_name", "/tmp/opensips_fifo")
modparam("dialog", "db_mode", 1)
modparam("dialog", "db_url", "mysql://opensips:[email protected]/opensips") 
modparam("rr", "enable_double_rr", 1)
modparam("rr", "append_fromtag", 1)
modparam("tm", "fr_timer", 2)
modparam("dispatcher", "db_url", "mysql://opensips:[email protected]/opensips")
modparam("dispatcher", "ds_ping_method", "OPTIONS")
modparam("dispatcher", "ds_ping_interval", 5)
modparam("dispatcher", "ds_probing_threshhold", 2)
modparam("dispatcher", "ds_probing_mode", 1)
modparam("load_balancer", "db_url", "mysql://opensips:[email protected]/opensips")
modparam("load_balancer", "probing_method", "OPTIONS")
modparam("load_balancer", "probing_interval", 5)
route{
 
        if (!mf_process_maxfwd_header("10")) {
                sl_send_reply("483","Too Many Hops");
                exit;
        }
 
        if (!has_totag()) {
                record_route();
        }
        else {
                loose_route();
                t_relay();
                exit;
        }
        if (is_method("CANCEL")) {
                if ( t_check_trans() )
                        t_relay();
                exit;
        }
        if (is_method("INVITE")) {
                if (!load_balance("1","pstn","1")) {
                        send_reply("503","Service Unavailable");
                        exit;
                }
        }
        else if (is_method("REGISTER")) {
                if (!ds_select_dst("1", "4")) {
                        send_reply("503","Service Unavailable");
                        exit;
                }
        }
        else {
                send_reply("405","Method Not Allowed");
                exit;
        }
        if (!t_relay()) {
                sl_reply_error();
        }
}
  • 新增負載節點

在資料庫新增兩個負載節點資訊

INSERT INTO `opensips`.`load_balancer` (`id`, `group_id`, `dst_uri`, `resources`, `probe_mode`, `description`) VALUES ('1', '1', 'sip:172.16.100.10', 'vm=100;conf=100;transc=100;pstn=500', '1', 'FS1');
INSERT INTO `opensips`.`load_balancer` (`id`, `group_id`, `dst_uri`, `resources`, `probe_mode`, `description`) VALUES ('2', '1', 'sip:172.16.100.11', 'vm=100;conf=100;transc=100;pstn=500', '1', 'FS2');
  • 允許繫結非本機IP

執行以下命令使OpenSIPS能監聽在本機IP,當VIP飄過來時OpenSIPS服務即可用

echo 'net.ipv4.ip_nonlocal_bind=1' >> /etc/sysctl.conf
  • 將日誌輸出到指定檔案

在/etc/rsyslog.conf追加keepalived和OpenSIPS日誌輸出配置。(注:OpenSIPS配置檔案中log_stderror和debug_mode需設定成no,否則可能不能輸出單獨日誌

echo "local0.*                        /var/log/opensips.log" >>/etc/rsyslog.conf
echo "local1.*                        /var/log/keepalived.log" >>/etc/rsyslog.conf

3.2.3、開始OpenSIPS

  • 重啟rsyslog、keepalived、OpenSIPS

service rsyslog restart
service keepalived restart
service opensips restart
  • 新增FreeSWITCH到排程列表

執行以下命令將兩個節點新增到排程列表,(這裡新增排程器的命令和1.7版本是有區別的

opensipsctl dispatcher addgw 1 sip:172.16.100.10 5060 0 50 'FS1' '節點1'
opensipsctl dispatcher addgw 1 sip:172.16.100.11 5060 0 50 'FS2' '節點2'

新增排程列表成功後,在兩個FreeSWITCH的控制通過sofia profile sofia.superpipi.cn siptrace on命令開啟sip訊息跟蹤即可看到兩個OpenSIPS節點不停在跟FreeSWITCH通過”OPTIONS“訊息進行握手,如下:

   ------------------------------------------------------------------------
recv 349 bytes from udp/[172.16.100.31]:5062 at 21:41:43.502417:
   ------------------------------------------------------------------------
   OPTIONS sip:172.16.100.10 SIP/2.0
   Via: SIP/2.0/UDP 172.16.100.31:5062;branch=z9hG4bK2fe7.7ea62cf7.0
   To: sip:172.16.100.10
   From: <sip:[email protected]>;tag=5f8cfd923bd21a2d7f298654cd327b22-8a62
   CSeq: 14 OPTIONS
   Call-ID: [email protected]
   Max-Forwards: 70
   Content-Length: 0
   User-Agent: OpenSIPS (2.4.2 (x86_64/linux))
   
   ------------------------------------------------------------------------
send 735 bytes to udp/[172.16.100.31]:5062 at 21:41:43.503285:
   ------------------------------------------------------------------------
   SIP/2.0 200 OK
   Via: SIP/2.0/UDP 172.16.100.31:5062;branch=z9hG4bK2fe7.7ea62cf7.0
   From: <sip:[email protected]>;tag=5f8cfd923bd21a2d7f298654cd327b22-8a62
   To: <sip:172.16.100.10>;tag=t2y6pUXm66tQH
   Call-ID: [email protected]
   CSeq: 14 OPTIONS
   Contact: <sip:172.16.100.10>
   User-Agent: FreeSWITCH-mod_sofia/1.8.1+git~20180724×××60524Z~b33bc925c5~64bit
   Accept: application/sdp
   Allow: INVITE, ACK, BYE, CANCEL, OPTIONS, MESSAGE, INFO, UPDATE, REGISTER, REFER, NOTIFY, PUBLISH, SUBSCRIBE
   Supported: timer, path, replaces
   Allow-Events: talk, hold, conference, presence, as-feature-event, dialog, line-seize, call-info, sla, include-session-description, presence.winfo, message-summary, refer
   Content-Length: 0
   
   ------------------------------------------------------------------------
recv 349 bytes from udp/[172.16.100.30]:5062 at 21:41:45.769168:
   ------------------------------------------------------------------------
   OPTIONS sip:172.16.100.10 SIP/2.0
   Via: SIP/2.0/UDP 172.16.100.30:5062;branch=z9hG4bKbace.ec1b06f.0
   To: sip:172.16.100.10
   From: <sip:[email protected]>;tag=45af385df62c8fa46b1bdd54b7adb556-4f80
   CSeq: 14 OPTIONS
   Call-ID: [email protected]
   Max-Forwards: 70
   Content-Length: 0
   User-Agent: OpenSIPS (2.4.2 (x86_64/linux))
   
   ------------------------------------------------------------------------
send 735 bytes to udp/[172.16.100.30]:5062 at 21:41:45.770861:
   ------------------------------------------------------------------------
   SIP/2.0 200 OK
   Via: SIP/2.0/UDP 172.16.100.30:5062;branch=z9hG4bKbace.ec1b06f.0
   From: <sip:[email protected]>;tag=45af385df62c8fa46b1bdd54b7adb556-4f80
   To: <sip:172.16.100.10>;tag=UBrZrper3FHaD
   Call-ID: [email protected]
   CSeq: 14 OPTIONS
   Contact: <sip:172.16.100.10>
   User-Agent: FreeSWITCH-mod_sofia/1.8.1+git~20180724×××60524Z~b33bc925c5~64bit
   Accept: application/sdp
   Allow: INVITE, ACK, BYE, CANCEL, OPTIONS, MESSAGE, INFO, UPDATE, REGISTER, REFER, NOTIFY, PUBLISH, SUBSCRIBE
   Supported: timer, path, replaces
   Allow-Events: talk, hold, conference, presence, as-feature-event, dialog, line-seize, call-info, sla, include-session-description, presence.winfo, message-summary, refer
   Content-Length: 0
   
   ------------------------------------------------------------------------

四、FreeSWITCH配置和驗證

4.1、域名修改

因話機註冊時是通過域名註冊,因此需要修改FreeSWITCH的域為註冊的域名。

編輯../conf/vars.xml,將domain設定為sofia.superpipi.cn。(注:如FreeSWITCH使用多域,則參照多域的方式進行修改,參考:https://www.cnblogs.com/lzpong/p/8573372.html)

<X-PRE-PROCESS cmd="set" data="domain=sofia.superpipi.cn"/>

修改後需重啟FreeSWITCH才能生效

4.2、註冊驗證

筆者分別使用eyeBeam、Linphone、eSpace SoftPhone三種軟電話和一個Fanvil X5硬電話進行註冊測試,均可註冊成功。

在freeswitch所在伺服器執行fs_cli -x "sofia status profile sofia.superpipi.cn reg"

結果如下:

[email protected]:~# fs_cli -x "sofia status profile sofia.superpipi.cn reg"
Registrations:
=================================================================================================
Call-ID:        [email protected]
User:           [email protected]
Contact:        "1004" <sip:[email protected]:6060>
Agent:          Fanvil X5 1.3.256.1566
Status:         Registered(UDP)(unknown) EXP(2018-09-23 22:14:29) EXPSECS(2228)
Ping-Status:    Reachable
Ping-Time:      0.00
Host:           debian
IP:             172.16.100.32
Port:           5060
Auth-User:      1004
Auth-Realm:     sofia.superpipi.cn
MWI-Account:    [email protected]
Call-ID:        YTFjZjBmZDZjNWEyZGQwNTgxMTEzZDcwMTAwNDdiZDQ.
User:           [email protected]i.cn
Contact:        "1000" <sip:[email protected]:51540;rinstance=f8dca36459b0bdec>
Agent:          eyeBeam release 1011d stamp 40820
Status:         Registered(UDP)(unknown) EXP(2018-09-23 22:35:27) EXPSECS(3486)
Ping-Status:    Reachable
Ping-Time:      0.00
Host:           debian
IP:             172.16.100.32
Port:           5060
Auth-User:      1000
Auth-Realm:     sofia.superpipi.cn
MWI-Account:    [email protected]
Call-ID:        SdnqWECcxy
User:           [email protected]
Contact:        "" <sip:[email protected]:64242;transport=udp>
Agent:          Linphone Desktop/4.1.1 (belle-sip/1.6.3)
Status:         Registered(UDP)(unknown) EXP(2018-09-23 21:47:38) EXPSECS(617)
Ping-Status:    Reachable
Ping-Time:      0.00
Host:           debian
IP:             172.16.100.32
Port:           5060
Auth-User:      1002
Auth-Realm:     sofia.superpipi.cn
MWI-Account:    [email protected]
Call-ID:        NzBhNzg3NTY2NWExZmE0M2ZiODdlZGIwYmY1NGVmY2Y.
User:           [email protected]
Contact:        "" <sip:[email protected]:5060;rinstance=b0fff9289f8fbf0c>
Agent:          HUAWEI OpenEye v3.1
Status:         Registered(UDP)(unknown) EXP(2018-09-23 21:42:52) EXPSECS(331)
Ping-Status:    Reachable
Ping-Time:      0.00
Host:           debian
IP:             172.16.100.32
Port:           5060
Auth-User:      1003
Auth-Realm:     sofia.superpipi.cn
MWI-Account:    [email protected]
Total items returned: 4
=================================================================================================

4.3、通話驗證

  • 使用分機1000撥通1003

172.16.100.10(FS1)節點收到分機1000發來的"INVITE"訊息,並向分機1003發起"INVITE"訊息,訊息跟蹤如下(注:刪除了SDP和省略部分訊息):

recv 1431 bytes from udp/[172.16.100.32]:5060 at 21:48:29.481716:
   ------------------------------------------------------------------------
   INVITE sip:[email protected] SIP/2.0
   Record-Route: <sip:172.16.100.32;lr;ftag=f104f441;did=83f.44ccd293>
   Via: SIP/2.0/UDP 172.16.100.32:5060;branch=z9hG4bKc6fd.c55828d7.0
   Via: SIP/2.0/UDP 172.16.100.251:51540;received=172.16.100.251;branch=z9hG4bK-d87543-8651904ed85c056f-1--d87543-;rport=51540
   Max-Forwards: 69
   Contact: <sip:[email protected]:51540>
   To: "1003"<sip:[email protected]>
   From: "1000"<sip:[email protected]>;tag=f104f441
   Call-ID: NDkyOTM1YWI4YzhiMGY4MWI0ZDMwYmQzNThjYjE2NzQ.
   CSeq: 2 INVITE
   Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE, INFO
   Content-Type: application/sdp
   Proxy-Authorization: Digest username="1000",realm="sofia.superpipi.cn",nonce="e9c8201d-3c8a-461b-a86c-4719edc9cae3",uri="sip:[email protected]",response="07eca040fed8f8ecfb7392671af7cc20",cnonce="44bb05f0c983e2e22b491a7bc82f0ab6",nc=00000001,qop=auth,algorithm=MD5
   User-Agent: eyeBeam release 1011d stamp 40820
   Content-Length: 442

   ------------------------------------------------------------------------
send 354 bytes to udp/[172.16.100.32]:5060 at 21:48:29.502215:
   ------------------------------------------------------------------------
   SIP/2.0 100 Trying
   Via: SIP/2.0/UDP 172.16.100.32:5060;branch=z9hG4bKc6fd.c55828d7.0
   From: "1000"<sip:[email protected]>;tag=f104f441
   To: "1003"<sip:[email protected]>
   Call-ID: NDkyOTM1YWI4YzhiMGY4MWI0ZDMwYmQzNThjYjE2NzQ.
   CSeq: 2 INVITE
   User-Agent: FreeSWITCH-mod_sofia/1.8.1+git~20180724×××60524Z~b33bc925c5~64bit
   Content-Length: 0
   
   ------------------------------------------------------------------------
send 1272 bytes to udp/[172.16.100.251]:5060 at 21:48:30.575115:
   ------------------------------------------------------------------------
   INVITE sip:[email protected]:5060;rinstance=b0fff9289f8fbf0c SIP/2.0
   Via: SIP/2.0/UDP 172.16.100.10;rport;branch=z9hG4bKg7X53ye14956r
   Max-Forwards: 68
   From: "Extension 1000" <sip:[email protected]>;tag=9e7rDt1XcyNZc
   To: <sip:[email protected]:5060;rinstance=b0fff9289f8fbf0c>
   Call-ID: 326006cf-39da-1237-4983-000c2953a0b0
   CSeq: 128519191 INVITE
   Contact: <sip:[email protected]:5060>
   User-Agent: FreeSWITCH-mod_sofia/1.8.1+git~20180724×××60524Z~b33bc925c5~64bit
   Allow: INVITE, ACK, BYE, CANCEL, OPTIONS, MESSAGE, INFO, UPDATE, REGISTER, REFER, NOTIFY, PUBLISH, SUBSCRIBE
   Supported: timer, path, replaces
   Allow-Events: talk, hold, conference, presence, as-feature-event, dialog, line-seize, call-info, sla, include-session-description, presence.winfo, message-summary, refer
   Content-Type: application/sdp
   Content-Disposition: session
   Content-Length: 246
   X-FS-Support: update_display,send_info
   Remote-Party-ID: "Extension 1000" <sip:[email protected]>;party=calling;screen=yes;privacy=off
   
   ------------------------------------------------------------------------
recv 318 bytes from udp/[172.16.100.251]:5060 at 21:48:30.634089:
   ------------------------------------------------------------------------
   SIP/2.0 100 Trying
   Via: SIP/2.0/UDP 172.16.100.10;rport=5060;branch=z9hG4bKg7X53ye14956r
   To: <sip:[email protected]:5060;rinstance=b0fff9289f8fbf0c>
   From: "Extension 1000" <sip:[email protected]>;tag=9e7rDt1XcyNZc
   Call-ID: 326006cf-39da-1237-4983-000c2953a0b0
   CSeq: 128519191 INVITE
   Content-Length: 0
   
   ------------------------------------------------------------------------
recv 399 bytes from udp/[172.16.100.251]:5060 at 21:48:30.634221:
   ------------------------------------------------------------------------
   SIP/2.0 180 Ringing
   Via: SIP/2.0/UDP 172.16.100.10;rport=5060;branch=z9hG4bKg7X53ye14956r
   Contact: <sip:[email protected]:5060;rinstance=b0fff9289f8fbf0c>
   To: <sip:[email protected]:5060;rinstance=b0fff9289f8fbf0c>;tag=77eb678a
   From: "Extension 1000"<sip:[email protected]>;tag=9e7rDt1XcyNZc
   Call-ID: 326006cf-39da-1237-4983-000c2953a0b0
   CSeq: 128519191 INVITE
   Content-Length: 0
   ------------------------------------------------------------------------
  • 使用分機1002撥打1004

在1000與1003通話狀態下,使用分機1002撥打1004,172.16.100.11(FS2)節點收到分機1002發來的"INVITE"訊息,並向分機1004發起"INVITE"訊息,訊息跟蹤如下(注:刪除了SDP和省略部分訊息):

recv 1935 bytes from udp/[172.16.100.32]:5060 at 21:54:32.072291:
   ------------------------------------------------------------------------
   INVITE sip:[email protected] SIP/2.0
   Record-Route: <sip:172.16.100.32;lr;ftag=0HIj01pcT;did=cdf.8df222c6>
   Via: SIP/2.0/UDP 172.16.100.32:5060;branch=z9hG4bKc54a.a53a6847.0
   Via: SIP/2.0/UDP 172.16.100.251:64242;received=172.16.100.251;branch=z9hG4bK.m5Jiasf70;rport=64242
   From: <sip:[email protected]>;tag=0HIj01pcT
   To: sip:[email protected]
   CSeq: 21 INVITE
   Call-ID: LJD8EMDXo0
   Max-Forwards: 69
   Supported: replaces, outbound
   Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE, INFO, UPDATE
   Content-Type: application/sdp
   Content-Length: 898
   Contact: <sip:[email protected]:64242;transport=udp>;+sip.instance="<urn:uuid:bcb91990-4d9b-47ea-8ba8-3af172d27fce>"
   User-Agent: Linphone Desktop/4.1.1 (belle-sip/1.6.3)
   Proxy-Authorization:  Digest realm="sofia.superpipi.cn", nonce="771a93e4-504d-410e-b5ca-4b927a297b61", algorithm=MD5, username="1002",  uri="sip:[email protected]", response="ed40318d6162ef2a623f8f3049995a99", cnonce="3zQAEkGGvoZhNjcE", nc=00000001, qop=auth
   ------------------------------------------------------------------------
send 308 bytes to udp/[172.16.100.32]:5060 at 21:54:32.098044:
   ------------------------------------------------------------------------
   SIP/2.0 100 Trying
   Via: SIP/2.0/UDP 172.16.100.32:5060;branch=z9hG4bKc54a.a53a6847.0
   From: <sip:[email protected]>;tag=0HIj01pcT
   To: sip:[email protected]
   Call-ID: LJD8EMDXo0
   CSeq: 21 INVITE
   User-Agent: FreeSWITCH-mod_sofia/1.8.1+git~20180724×××60524Z~b33bc925c5~64bit
   Content-Length: 0
   
   ------------------------------------------------------------------------
send 1427 bytes to udp/[172.16.100.110]:6060 at 21:54:33.154929:
   ------------------------------------------------------------------------
   INVITE sip:[email protected]:6060 SIP/2.0
   Via: SIP/2.0/UDP 172.16.100.11;rport;branch=z9hG4bKecU1j8vy36H9r
   Max-Forwards: 68
   From: "Extension 1002" <sip:[email protected]>;tag=v4c83jm6gtF0H
   To: <sip:[email protected]:6060>
   Call-ID: 0a7d51fd-39db-1237-2d8d-000c29916959
   CSeq: 128519372 INVITE
   Contact: <sip:[email protected]:5060>
   User-Agent: FreeSWITCH-mod_sofia/1.8.1+git~20180724×××60524Z~b33bc925c5~64bit
   Allow: INVITE, ACK, BYE, CANCEL, OPTIONS, MESSAGE, INFO, UPDATE, REGISTER, REFER, NOTIFY, PUBLISH, SUBSCRIBE
   Supported: timer, path, replaces
   Allow-Events: talk, hold, conference, presence, as-feature-event, dialog, line-seize, call-info, sla, include-session-description, presence.winfo, message-summary, refer
   Content-Type: application/sdp
   Content-Disposition: session
   Content-Length: 455
   X-FS-Support: update_display,send_info
   Remote-Party-ID: "Extension 1002" <sip:[email protected]>;party=calling;screen=yes;privacy=off
   ------------------------------------------------------------------------
recv 378 bytes from udp/[172.16.100.110]:6060 at 21:54:33.338614:
   ------------------------------------------------------------------------
   SIP/2.0 100 Trying
   Via: SIP/2.0/UDP 172.16.100.11;rport=5060;branch=z9hG4bKecU1j8vy36H9r
   From: "Extension 1002" <sip:[email protected]>;tag=v4c83jm6gtF0H
   To: <sip:[email protected]:6060>
   Call-ID: 0a7d51fd-39db-1237-2d8d-000c29916959
   CSeq: 128519372 INVITE
   Allow: INVITE, ACK, OPTIONS, BYE, CANCEL, REFER, NOTIFY, INFO, PRACK, UPDATE, MESSAGE
   Content-Length: 0
   
   ------------------------------------------------------------------------
recv 349 bytes from udp/[172.16.100.31]:5062 at 21:54:33.541289:
   ------------------------------------------------------------------------
   OPTIONS sip:172.16.100.11 SIP/2.0
   Via: SIP/2.0/UDP 172.16.100.31:5062;branch=z9hG4bKe86c.f1b595f2.0
   To: sip:172.16.100.11
   From: <sip:[email protected]>;tag=5f8cfd923bd21a2d7f298654cd327b22-a1e0
   CSeq: 14 OPTIONS
   Call-ID: [email protected]
   Max-Forwards: 70
   Content-Length: 0
   User-Agent: OpenSIPS (2.4.2 (x86_64/linux))
   
   ------------------------------------------------------------------------
send 735 bytes to udp/[172.16.100.31]:5062 at 21:54:33.542155:
   ------------------------------------------------------------------------
   SIP/2.0 200 OK
   Via: SIP/2.0/UDP 172.16.100.31:5062;branch=z9hG4bKe86c.f1b595f2.0
   From: <sip:[email protected]>;tag=5f8cfd923bd21a2d7f298654cd327b22-a1e0
   To: <sip:172.16.100.11>;tag=XD605D59D35jD
   Call-ID: [email protected]
   CSeq: 14 OPTIONS
   Contact: <sip:172.16.100.11>
   User-Agent: FreeSWITCH-mod_sofia/1.8.1+git~20180724×××60524Z~b33bc925c5~64bit
   Accept: application/sdp
   Allow: INVITE, ACK, BYE, CANCEL, OPTIONS, MESSAGE, INFO, UPDATE, REGISTER, REFER, NOTIFY, PUBLISH, SUBSCRIBE
   Supported: timer, path, replaces
   Allow-Events: talk, hold, conference, presence, as-feature-event, dialog, line-seize, call-info, sla, include-session-description, presence.winfo, message-summary, refer
   Content-Length: 0
   
   ------------------------------------------------------------------------

五、後記

OpenSIPS通過keepalived進行主備切換高可用,再對FreeSWITCH進行負載均衡的試驗算是完成,但還有一些地方需要進一部完善,比如sip訊息中的From: <sip:[email protected]>,還有官方提到的來電的IP地址只能記錄到OpenSIPS的IP問題,還有OpenSIPS代理媒體的問題,還有OpenSIPS可用性檢測指令碼等。

總之,在生產應用FreeSWITCH,高可用方案是必須要考慮的,上一篇折騰筆記已經介紹了通過keepalived進行FreeSWITCH主備切換的高可用,這裡再把負載均衡的高可用方式折騰一番。也許你會問:為何不採用官方的”Corosync+Pacemaker“方式進行主備切換的高可用,主要是因為我對keepalived較熟悉一點,同時”keepalived+檢測指令碼“的切換效率也是很高的。

相關推薦

FreeSWITCH折騰筆記8——使用OpenSIPS進行負載均衡

通過OpenSIPS對FreeSWITCH進行負載均衡網路上的文章很多,但都是基於老版本的OpenSIPS,目前最新的OpenSIPS LTS版是2.4,如果使用老版本配置檔案,OpenSIPS是執行不起來(當然通過一番修改後還是可以執行起來的)。筆者經過一番折騰,成

FreeSWITCH折騰筆記7——使用keepalived進行主備切換高可用部署

freeSWITCH的高可用部署方式有兩種:主備切換和負載均衡,官方文件介紹的主備切換部署是採用Corosync & Pacemaker,負載均衡採用前置opensips。但對使用keepalived進行主備切換的高可用方式沒有介紹,同時網上對該種部署方式也沒有介

FreeSWITCH折騰筆記3——數據庫修改為postgresql

freeswitch pgsql需要修改的配置文件:switch.conf.xml //核心表 cdr_pg_csv.conf.xml //通話記錄 db.conf.xml //核心表 voicemail.conf.xml //留言相關的表 internal.xml // external.xml // fi

Nginx實現tomcat集群進行負載均衡

相同 fig end 出現 bytes agent 請求轉發 forward weight 一、背景   隨著業務量和用戶數量的激增,單一的tomcat部署應用已經無法滿足性能需求,而且對於每次發布項目期間服務不可用的問題也凸顯,既然出現了這個問題,那麽我們本文就借助ng

8.創建負載均衡服務器lb02:

期中架構 負載均衡 lb02 創建負載均衡服務器lb02:# optimization by onekeysed -i ‘s#SELINUX=enforcing#SELINUX=disabled#‘ /etc/selinux/configgrep SELINUX=disabled /etc/sel

IIS7 使用server farms 進行負載均衡

重分發 http 重寫 圖標 reat nload body 一定的 iis7 1、首先,到微軟官網下載web平臺安裝程序: https://www.microsoft.com/web/downloads/ 2、安裝好後,會在IIS裏有這個圖標: 3、雙擊這個圖

《Spring Cloud微服務實戰》讀書筆記之客戶端負載均衡:Spring Cloud Ribbon - 4

摘要 客戶端負載均衡元件部署在客戶端,由客戶端維護要訪問的服務端清單(清單來源於服務註冊中心)。在Spring Cloud 中預設使用Ribbon作為客戶端負載均衡。 關鍵詞:客戶端負載均衡,Ribbon 一、什麼是客戶端負載均衡 負載均衡是對系統高可用、緩解網路壓力、處理能力擴容的重要手段之一。通常

《Spring Cloud微服務實戰》讀書筆記之客戶端負載均衡:Spring Cloud Ribbon

摘要 客戶端負載均衡元件部署在客戶端,由客戶端維護要訪問的服務端清單(清單來源於服務註冊中心)。在Spring Cloud 中預設使用Ribbon作為客戶端負載均衡。 關鍵詞:客戶端負載均衡,Ribbon 一、什麼是客戶端負載均衡 負載均衡是對系統高可用、緩解網

Nginx進行負載均衡

由於目前現有網路的各個核心部分隨著業務量的提高,訪問量和資料流量的快速增長,其處理能力和計算強度也相應地增大,使得單一的伺服器裝置根本無法承擔。在此情況下,如果扔掉現有裝置去做大量的硬體升級,這樣將造成現有資源的浪費,而且如果再面臨下一次業務量的提升時,這又將導致再一次硬體升級的高額成本投入,甚至效

SpringCloud | Feign如何整合Ribbon進行負載均衡的?

Ribbon是SpringCloud框架進行負載均衡的腳手架,貫穿springCloud專案中所有的http服務呼叫。Ribbon針對RestTemplate負載均衡已經提供了完整實現,網上很多的ribbon demo也是分析restTemplate如何負載均衡的。 而我們

一 .fastDFS:Linux 搭建分散式檔案儲存FastDFS圖片伺服器以及配合nginx / 使用Nginx進行負載均衡

    Linux 安裝分散式檔案儲存FastDFS圖片伺服器以及配合nginx/使用Nginx進行負載均衡 alfresco    虛擬網路編輯器修改閘道器    修改成對應的閘道器及ip:vim /etc/syscon

使用nginx進行負載均衡

0,基本資訊 Tomcat8.0.37,JDK1.7.0_79-B15,Nginx1.9.13,CentOS7.0 1,需要實現的效果 需要實現的效果(單臺伺服器): 1,使用Nginx實現負載均衡 2,使用多個Tomcat作為應用伺服器 3,靜態資源從Tomcat中分離 Nginx的埠為

對Socket.io進行負載均衡

對Websocket進行負載均衡 http { // ...省略 map $http_upgrade $connection_upgrade { default upgrade; '' close

06mycat使用haproxy進行負載均衡

apr map latest slot rsize basename cluster www jump 集群的服務器列表 在10.11.0.210和10.11.0.216中部署mycat和haproxy(因為實驗機器性能有限,實際生產環境中需要單獨用服務做hapr

Nginx簡單介紹以及linux下使用Nginx進行負載均衡的搭建

今天我們來討論一下關於Nginx的一些簡單理解和認識,首先對Nginx進行一下簡單的介紹 1.Nginx簡介 Nginx是一款高效能的http 伺服器/反向代理伺服器及電子郵件(IMAP/POP3)代理伺服器。由俄羅斯的程式設計師Igor Sy

FreeSWITCH折騰筆記5——G729轉碼支援

FreeSWITCH預設是不支援G729轉碼的,但可至此G729媒體透傳,因此如果兩個話機有一個只支援G729時是無法進行呼叫的,同時在使用G729編碼時FreeSWITCH是不能進行錄音的。 當然如果商業應用的話可以購買G729的許可,10刀一通道,或者使用硬體的

springcloud中zuul與consul整合進行負載均衡

第一步:向consul註冊服務 配置檔案application.yml為 server: port: 8080 spring: application: name: zuulserver cloud: consul: discov

go微服務框架kratos學習筆記七(kratos warden 負載均衡 balancer)

目錄 go微服務框架kratos學習筆記七(kratos warden 負載均衡 balancer) demo demo server demo client 池 dao

Azure Application Gateway(一)對後端 Web App 進行負載均衡

一,引言   今天,我們學習一個新的知識點-----Azure Application Gateway,通過Azure 應用程式閘道器為我麼後端的服務提供負載均衡的功能。我們再文章頭中大概先了解一下什麼是應用程式閘道器。   Azure Application Gateway 是一種應用程式層(OSI 層 7

Azure Application Gateway(二)對後端 VM 進行負載均衡

一,引言   上一節有講到使用 Azure Application Gateway 為我們後端型別為 Web App 的 Demo 專案提供負載均衡,Azure Application Gateway 的後端池的目標型別可以是多中型別,如下圖所示: 目標型別分別是: 1,IP address or FQD