freeswitch服务器的时间同步设置

 

 

概述

在生产环境中,一般会有N台freeswitch 服务器,不同服务器之间的信令和话单的时间不能相差太多,否则对查找和定位问题会造成一定的困扰。

同时,freeswitch的默认运行设置并未直接使用系统时间,而是在fs启动时获取系统时间,并在之后的运行过程中使用内部时钟计算时间。

所以,在fs运行期间的信令和话单中的时间同步就会格外重要,并有特殊之处,需要特别设置。

 

环境

centos:CentOS  release 7.0 (Final)或以上版本

freeswitch:v1.8.7

GCC:4.8.5

 

fs时间同步接口

首先要说明的是,fs为什么不直接使用系统时间?

根据官方文档介绍,是出于对CDR话单的保护,防止在fs运行过程中,由于系统时间变化的不确定性导致CDR话单计费时长的错误问题。

通常,在fs运行比较长的一段时间之后,从fs的日志、话单等可以看出,fs内部时间和系统时间是不一致的。

这里有一点要注意的是,在自定义的业务模块中,尽量不要使用系统时间,否则当fs内部时间和系统时间出现较大偏差时,会产生莫名其妙的bug。

 

fs提供了API接口,在运行状态下,同步系统时间到fs内部时间。

fsctl sync_clock

fsctl sync_clock_when_idle

 

sync_clock模式会马上同步系统时间,可能会造成话单计费时长问题。

sync_clock_when_idle模式更安全,会在系统idle(无呼叫0 channels)的情况下同步系统时间。

 

时间同步设置

安装ntpdate工具。

sudo yum install ntpdate

 

设置系统定时任务。

sudo crontab -e

30 4 * * * /usr/sbin/ntpdate cn.pool.ntp.org; /sbin/hwclock -w

0 5 * * * /usr/local/freeswitch/bin/fs_cli -x "fsctl sync_clock_when_idle"

每天凌晨4点30分执行ntpdate时间同步,并写入硬件时钟。

每天凌晨5点执行fs的api接口同步系统时间到fs内部时间。

 

总结

freeswitch多节点串并联之后,信令和话单的时钟同步需要使用fs内部接口刷新。

  

空空如常

求真得真

posted @ 2022-08-11 15:56  求真得真  阅读(311)  评论(0编辑  收藏  举报