通过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为何要多个域,主要是方便权限管控,在实际生产中意义重大。
三、安装及基础配置:
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 Alexandre.Cassen@firewall.loc 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 Alexandre.Cassen@firewall.loc 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