`

(转:未测试)如何实现Asterisk 高可靠性解决方案

 
阅读更多

如何实现Asterisk 高可靠性解决方案

对于asterisk用户最为头疼的事情就是Asterisk的就是如何解决asterisk系统的 HA 高可靠性解决方案。一个asterisk服务器down 掉,如何实现另外一个备份的服务器及时启动,同时不影响用户的使用。通常有两种实现方式:通过DNS SRV 实现,者kamailio/OpenSER均衡负载模块处理。今天给大家介绍如何通过Asterisk加心跳的模式实现高可靠性的解决方案。几个关键点需要注意:

  • Asterisk的IP处理
  • Asterisk 数据库的处理(MYSQL)
  • AsterDB 和语音邮箱的文件管理同步
为了实现asterisk高可靠性的解决方案,首先需要设置3个IP地址:
1)IPPBX-1:192.168.0.147
2)IPPBX-2:192.168.0.148
3)虚拟地址:192.168.0.149
 

第一章:配置IP地址冗余

我们的目标是确认asterisk 1 down掉以后,另外一个备用的asterisk2 会马上启动。这样才能保证asterisk靠可靠性的工作。为了支持这样的功能,我们采用Asterisk heartbeat模块一起完成以下工作。两台机器IPPBX-1 和IPPBX-2 都必须进行相应的系统心跳配置:

1) 在IP是192.168.0.147添加主机名:

vi /etc/sysconfig/network

HOSTNAME=PBX-147

2)在IP192.168.0.148上添加主机名:

vi /etc/sysconfig/network

HOSTNAME=PBX-148

3) 在两台机器的系统配置文件“hosts”添加以下2行:

vi /etc/hosts

192.168.0.147 PBX-147

192.168.0.148 PBX-148

4) 重新启动两台服务器,关闭selinux

5) 在两台机器安装 hearbeat 软件包:yum install heartbeat

注意,启动asterisk或者停止asterisk以及同步DB,通过

PBX-147 192.168.0.149/24 asterisk sync_astdb

6)编辑 authkeys 文件, vi /etc/ha.d/authkeys,两台机器都添加

--------------------------------------------

auth 1

1 sha1 HIlalalala!

--------------------------------------------

7)在两台机器上,修改 authkeys 文件权限: chmod 600 /etc/ha.d/authkeys

8)两台机器启动 hearbeat 服务: /etc/init.d/heartbeat start

9) 通过命令 ifconfig, 检查虚拟 192.168.0.149 IP 是否可以通信。

10) 修改启动顺序,确认网卡启动以后,hearbeat 启动:编辑 vi /etc/rc.local 文件,添加 一行:

--------------------------------------------------------------

service network restart // 启动网卡

sleep 6 // 休眠

/etc/init.d/heartbeat start // 启动心跳

---------------------------------------------------------------

删除默认启动顺序: chkconfig heartbeat --level 345 off

测试 主机关机或者心跳停止,/etc/init.d/heartbeat stop

检查 虚拟 虚拟IP是否可以ping 通,待机的服务器 192.168.0.148 是否启动

通过以下命令测试:

/usr/lib/heartbeat/hb_takeover

/usr/lib/heartbeat/hb_standby

 

第二章: 配置MYSQL 数据库冗

配置my.cnf 文件-MySQL replication

编辑 /etc/my.cnf on PBX-192.168.0.147

[mysqld]

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

user=mysql

# Default to using old password format for compatibility with mysql 3.x

# clients (those using the mysqlclient10 compatibility package).

old_passwords=1

# add for replication from here

server-id=2

master-host = 192.168.0.148 // 待机数据库IP

master-user = replication

master-password = slave

master-port = 3306

#

log-bin

binlog-do-db=asteriskrealtime

#

[mysql.server]

user=mysql

basedir=/var/lib

################################################################

[mysqld_safe]

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

配置 192.168.0.148 文件:/etc/my.cnf:

[mysqld]

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

user=mysql

# Default to using old password format for compatibility with mysql 3.x

# clients (those using the mysqlclient10 compatibility package).

old_passwords=1

# add for replication from here

log-bin

binlog-do-db=asteriskrealtime

binlog-ignore-db=mysql

binlog-ignore-db=test

server-id=1

master-host = 192.168.0.147 // 主机数据库IP

master-user = replication

master-password = slave

master-port = 3306

[mysql.server]

user=mysql

basedir=/var/lib

#######################################################################

[mysqld_safe]

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

 

第三章:配置 MySQL访问权限

访问 IPPBX(192.168.0.147)服务器,登录 mysql

修改执行权限:

GRANT ALL PRIVILEGES ON *.* TO 'replication'@'localhost' IDENTIFIED BY 'slave' WITH GRANT OPTION;

GRANT ALL PRIVILEGES ON `asteriskrealtime`.* TO 'replication'@'localhost';

GRANT ALL PRIVILEGES ON *.* TO 'replication'@'192.168.0.148' IDENTIFIED BY 'slave' WITH GRANT OPTION;

GRANT ALL PRIVILEGES ON `asteriskrealtime`.* TO 'replication'@'192.168.0.148';

commit;

访问IPPBX(192.168.0.148),登录MYSQL, 执行以下命令

GRANT ALL PRIVILEGES ON *.* TO 'replication'@'localhost' IDENTIFIED BY 'slave' WITH GRANT OPTION;

GRANT ALL PRIVILEGES ON `asteriskrealtime`.* TO 'replication'@'localhost';

GRANT ALL PRIVILEGES ON *.* TO 'replication'@'192.168.0.147' IDENTIFIED BY 'slave' WITH GRANT OPTION;

GRANT ALL PRIVILEGES ON `asteriskrealtime`.* TO 'replication'@'192.168.0.147';

commit;

 

第四章:启动 MySQL 冗余备份

在两台机器分别执行以下命令:

mysql -u replication -p

start replication

start slave;

在一台机器上执行:

load data from master;

检查状态:

show master status;

show slave status;

启动或者停止replication: reset slave;

测试 mysql Replication 复制:

修改192.168.0.147 地址数据库数据,保存。

查看192.168.0.148 地址数据库,检查数据是否修改生效。

 

第五章:设置无密码, ssh互相通信

为了确保两台服务器之间可以互相拷贝文件,需要设置无密码的ssh帐号。

生成密匙:

[root@PBX-147 ~]# '''cd /root'''

[root@PBX-147 ~]# '''ssh-keygen -t rsa'''

Generating public/private rsa key pair.

进入到目录 (/root/.ssh/id_rsa):

建立文件目录 '/root/.ssh'.

Enter passphrase (empty for no passphrase):

Enter same passphrase again:

Your identification has been saved in /root/.ssh/id_rsa.

Your public key has been saved in /root/.ssh/id_rsa.pub.

The key fingerprint is:

a5:0c:38:d6:73:51:3b:ca:2c:98:e2:2a:f6:82:88:00 root@PBX-147

通过SSH 连接 192.168.0.148 服务器,建立一个新目录,然后添加 192.168.0.148 密码

[root@PBX-147 ~]# '''ssh root@PBX-148 mkdir -p .ssh'''

The authenticity of host 'pbx-148 (192.168.0.148)' can't be established.

RSA key fingerprint is e0:ed:63:7c:df:0f:8d:03:f0:a5:25:8b:5f:1b:8c:01.

Are you sure you want to continue connecting (yes/no)? '''yes'''

Warning: Permanently added 'pbx-148,192.168.0.148' (RSA) to the list of known hosts.

root@pbx-148's password:

[root@PBX-147 ~]# '''cat .ssh/id_rsa.pub | ssh root@PBX-148 'cat >> .ssh/authorized_keys''''

root@pbx-148's password:

检查 192.168.0.148 主机名:

[ root@PBX-147 ~]# '''ssh root@PBX-148 hostname'''

PBX-148

通过192.168.0.148 主机访问 192.168.0.147 主机

[root@PBX-148 ~]# '''cd /root'''

[root@PBX-148 ~]# '''ssh-keygen -t rsa'''

Generating public/private rsa key pair.

Enter file in which to save the key (/root/.ssh/id_rsa):

Enter passphrase (empty for no passphrase):

Enter same passphrase again:

Your identification has been saved in /root/.ssh/id_rsa.

Your public key has been saved in /root/.ssh/id_rsa.pub.

The key fingerprint is:

e0:a1:27:17:c6:5d:69:60:73:73:b9:bd:80:ed:0f:df root@PBX-148

访问 192.168.0.147 ,建立目录

[root@PBX-148 ~]# '''ssh root@PBX-147 mkdir -p .ssh'''

The authenticity of host 'pbx-147 (192.168.0.147)' can't be established.

RSA key fingerprint is e0:ed:63:7c:df:0f:8d:03:f0:a5:25:8b:5f:1b:8c:01.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added 'pbx-147,192.168.0.147' (RSA) to the list of known hosts.

root@pbx-147's password:

[root@PBX-148 ~]# '''cat .ssh/id_rsa.pub | ssh root@PBX-147 'cat >> .ssh/authorized_keys''''

root@pbx-147's password:

[root@PBX-148 ~]# ''' ssh root@PBX-147 hostname'''

PBX-147

为了同步 astdb 文件,必须拷贝 主机的文件到待机的机器上,这样如果一方停止工作,

备用机器可以及时启动。同样, voicemail 文件也需要备份。

 

第六章: 建立同步文件服务

在机器 192.168.0.147 上编辑:

vi /opt/sync_astdb

添加以下代码:

#!/bin/sh

while true

do

rsync -r /var/lib/asterisk/astdb root@PBX-148:/var/lib/asterisk/astdb

# logger Rsync myscript

sleep 30

done

在 192.168.0.147 上做同步

----------------------------------------------------------------------------------------

vi /opt/sync_astdb

#!/bin/sh

while true

do

rsync -r /var/lib/asterisk/astdb root@PBX-147:/var/lib/asterisk/astdb

# logger Rsync myscript

sleep 30

done

在两台服务器设置 sync_astdb 为系统服务

vi /etc/init.d/sync_astdb

#!/bin/sh

#

# chkconfig: 2345 75 05

# description: Startup script AstDb replication

# processname: sync_astdb

# pidfile: /var/run/sync_astdb.pid

# config: /opt/sync_astdb

# Source function library.

. /etc/init.d/functions

SLAPD_HOST=`hostname -a`

SLAPD_DIR=/opt/

PIDFILE=$SLAPD_DIR/logs/pid

STARTPIDFILE=$SLAPD_DIR/logs/startpid

if [ -f /etc/sysconfig/sync_astdb ]; then

. /etc/sysconfig/sync_astdb

fi

start() {

echo -n "Starting AstDB replication: "

if [ -f $STARTPIDFILE ]; then

PID=`cat $STARTPIDFILE`

echo AstSB replication is already running: $PID

exit 2;

elif [ -f $PIDFILE ]; then

PID=`cat $PIDFILE`

echo AstDB replication is already running: $PID

exit 2;

else

cd $SLAPD_DIR

daemon ./sync_astdb $OPTIONS &

RETVAL=$?

echo

[ $RETVAL -eq 0 ] && touch /var/lock/subsys/sync_astdb

return $RETVAL

fi

}

stop() {

echo -n "Shutting down AstDb replication: "

echo

killproc sync_astdb

echo

rm -f /var/lock/subsys/sync_astdb

return 0

}

case "$1" in

start)

start

;;

stop)

stop

;;

status)

status sync_astdb

;;

restart)

stop

start

;;

*)

echo "Usage: {start|stop|status|restart}"

exit 1

;;

esac

exit $?

------------------------------------------------------------------------------

添加 sync_astdb 服务,从启动程序删除:

chkconfig --add sync_astdb

chkconfig sync_astdb --level 345 off

两台机器修改服务权限:

chmod 755 /etc/init.d/sync_astdb

chmod 755 /opt/sync_astdb

检查机器的状态:

/etc/init.d/sync_astdb start

/etc/init.d/sync_astdb stop

 

第七章:测试asterisk冗余

到目前为止,我们有主机和备份服务器两个asterisk。主机有一个工作状态的heartbeat 心跳(虚拟IP),MYSQL和AstDB都支持了同步和备份。如果主机停止工作,虚拟IP地址自动切换到备份主机,同时启动asterisk,MYSQL和astDB等备份服务。

以下是经过测试的步骤:

1)通过 Ping 命令检查 两台机器和虚拟IP是否可以正常通 信(192.168.0.147,192.168.0.148,192.168.0.149)

2)重新启动两台服务器:

2.1) 当启动以后,192.168.0.147 服务器将激活并且工作。

2.2)检查虚拟IP地址 192.168.0.149 是否可以正常通信。

2.3)检查MYSQL复制是否可以正常工作,修改 192.168.0.147 数据库数据,

然后检查 192.168.0.148 数据,是否修改意见成功复制

2.4)检查在192.168.0.147(不是192.168.0.148的同步)的 服务 sync_astdb是否正常工作.

3)启动 192.168.0.147 asterisk服务器

3.1)检查虚拟IP地址是否正在工作,检查 192.168.0.148 服务器

3.2)检查 192.168.0.148 上的服务以及启动 sync_astdb 了:

PBX-147 192.168.0.149/24 asterisk sync_astdb

 

 

原地址:http://www.hiastar.com/index.php/2013-09-17-02-24-21/2012-09-16-03-25-50/22-wendang/92-asterisk-ha

 

分享到:
评论

相关推荐

    Asterisk 中文语音包

    Asterisk是一款开源的IP电话系统,它允许用户创建自己的通信平台,支持VoIP(Voice over IP)服务,包括电话...了解如何正确安装和配置语音包是提升Asterisk服务质量的关键,特别是对于面向中文用户的通信解决方案。

    asterisk 最佳指导,第三册,涵盖asterisk1.8

    - **更好的稳定性**:修复了多个已知的问题,提高了系统的稳定性和可靠性。 - **改进的文档和支持**:官方提供了更全面的文档和社区支持。 #### 四、Asterisk 1.8 的应用场景 1. **企业内部通信系统**:为企业提供...

    Asterisk1.8 中文语音包 汉语提示 elastix 2.3

    Elastix 2.3是其较早的稳定版本,尽管可能不包含最新的特性,但对于许多中小企业来说,它仍然提供了可靠且功能齐全的电话系统解决方案。 在这个中文语音包中,"sounds"目录很可能包含了所有必要的音频文件,这些...

    Build feature-rich telephony systems with Asterisk

    Asterisk 1.6是一款开源的PBX(Private Branch Exchange)解决方案,它能够处理语音通信并提供一系列电话服务功能,如语音邮件、自动话务员、会议桥接、即时消息等。相比早期版本,Asterisk 1.6在稳定性和功能上有了...

    安装asterisk-19的所需的各种包

    Asterisk是一款开源的IP电话系统,用于...总之,Asterisk-19的安装涉及到多个关键组件,它们共同构成了一个功能强大的VoIP解决方案。理解每个组件的作用并正确安装它们,对于构建和维护一个可靠的VoIP系统至关重要。

    03_企业电话客服系统

    C#有强大的测试框架,如NUnit和xUnit,帮助确保系统的稳定性和可靠性。部署方面,C#支持IIS(Internet Information Services)和其他云平台,便于系统上线和运维。 综上所述,基于C#的企业电话客服系统开发涵盖了...

    Asterisk-SMS-Callback:带星号的短信回叫

    Asterisk是一个开源的电话交换机软件,它允许创建各种通信解决方案,如VoIP电话系统、会议桥、自动呼叫分配器等。而"SMS-Callback"则指的是通过短信触发一个回拨电话的服务,用户发送特定短信后,系统会自动回拨用户...

    AsteriskHacking

    - 构建自动化测试框架,确保电话应用的稳定性和可靠性。 5. **Asterisk工作原理**: - **呼叫路由与转码平台**:Asterisk的核心功能在于能够智能地路由电话呼叫,并对不同格式的音频数据进行转码。 - **多协议...

    企业内部分机如何通过FreePBX,VOS和鼎信通达网关实现落地服务

    - **定义**: VOS是一种用于计费和路由管理的软件解决方案。它可以与FreePBX集成,帮助企业实现精确计费和灵活的路由策略。 - **优势**: - **精确计费**: VOS可以跟踪每一个通话记录,确保计费准确性。 - **路由...

    IAXOCX软电话控件demo代码之web javascript

    这个控件适用于构建呼叫中心解决方案,因为它提供了与Asterisk服务器交互的能力,可以实现诸如拨号、接听、挂断、转移呼叫等电话操作。 在Web环境中使用IAXOCX控件,通常涉及到以下几个关键知识点: 1. **ActiveX...

    voipcallcenter源代码

    5. RTP/RTCP协议:RTP(Real-time Transport Protocol)负责传输音频和视频数据,而RTCP(Real-time Transport Control Protocol)用于监控质量并提供反馈,两者共同确保了 VoIP 数据的实时性和可靠性。 6. 呼叫...

    SIP代理服务器 VoIP设备的薄弱点

    开源SIP服务器,如Asterisk、FreeSWITCH和OpenSIPS,提供了高度可定制的解决方案,但也可能带来额外的安全挑战。由于源代码公开,攻击者可能更容易找到潜在的漏洞。因此,使用开源SIP服务器时,必须密切关注安全更新...

    具备对讲功能的矿用广播终端系统

    系统经测试,音频信号最大不失真输出电压高达5V,证明了该设计的可靠性和实用性。 综上所述,矿用广播终端系统的开发解决了现有矿用广播终端功能单一的问题,通过引入高质量的音频处理、扩展性强的接口和高效率的...

    sip调试整理资料

    标题“sip调试整理资料”表明这是一份关于SIP调试过程的集合,可能包含了作者在调试SIP话机过程中遇到的问题、解决方案以及相关的网络报文分析。UDP(User Datagram Protocol)是SIP常用的传输协议,它的校验和是...

    企业电话客服系统(C#)

    企业电话客服系统是一种用于处理和管理企业与客户之间电话沟通的技术解决方案。在本文中,我们将深入探讨使用C#编程语言构建此类系统的关键知识点,并将其应用于毕业设计项目。 1. C#基础:C#是Microsoft开发的一种...

Global site tag (gtag.js) - Google Analytics