天天看點

同一台伺服器運作多套kamailio服務

    • - 1 配置檔案強化說明
    • - 2 指定路徑編譯安裝Kamailio
    • - 3 生成自定義的Kamailio資料庫
    • - 4 配置kamailiocfg
  Kamailio的基本配置方法在我之前的部落格中已經詳細叙述過了,但那種方法隻是可以實作在一台伺服器上運作一套Kamailio服務,但實際情況中有時需要在同一台伺服器上部署多套Kamailio服務,并且要求使用的配置檔案、動态庫和資料庫都互相獨立,那麼針對這種看似奇葩但又存在的需求該如何安裝和配置Kamailio呢?今天小編将針對該問題進行詳細的講解!

- 1. 配置檔案強化說明

  在使用Kamailio的過程中,主要使用到的配置檔案有兩個:kamailio.cfg和kamctlrc。首先介紹一下kamctlrc,該檔案的作用是用來生成Kamailio的資料庫的,至于其中的基本配置已經在第4部分說過了,在此隻選擇其中部分内容做

SIP_DOMAIN,用于指定伺服器的IP;DBHOST,指定使用的資料庫的具體IP;DBNAME,指定生成的Kamailio的資料庫名稱;PID_FILE,指定生成的Kamailio的pid檔案的路徑以及名稱。

  然後介紹一下kamailio.cfg檔案,該配置檔案包含的内容比較多,Kamailio所有功能的配置都在此檔案中設定,下面也是選擇部分内容進行講解。

Kamailio一共有201個子產品,Kamailio預設是到

/usr/local/lib64/kamailio/modules路徑下去加載子產品的動态庫,如果想讓Kamailio到自定義的路徑下加載,需要修改kamailio.cfg,打開kamailio.cfg,添加如下内容:

同一台伺服器運作多套kamailio服務

然後,将mpath後面的路徑改成自定義的路徑就可以了。

  要想使用某個子產品,首先需要在kamailio.cfg的頂部添加“#!define WITH_***”,其中星号代表子產品的名稱。然後,使用loadmodule “*.so”加載子產品的動态庫,使用modparam配置子產品的具體參數。

  上面已經說了可以通過kamctlrc中的DBHOST和DBNAME來生成不同的Kamailio資料庫,但生成之後該如何指定配置檔案讀取哪個資料庫呢?OK,在kamailio.cfg中有這麼一部分内容:

同一台伺服器運作多套kamailio服務

是以,Kamailio是通過設定DBURL來指定使用哪個資料庫。

  下面分析一下“mysql://kamailio:[email protected]/kamailio”這句話,mysql表示使用的是MySQL資料庫,kamailio和kamailiorw是我們在kamctlrc中設定的kamailio資料庫中具有可讀可寫權限的使用者的名稱和密碼,localhost對應DBHOST,最後面那個kamailio就是你建立的Kamailio資料庫的名稱,對應kamctlrc中的DBNAME。

  Kamailio預設使用的端口為5060,也可以自定義端口号,隻需要修改kamailio.cfg檔案中的port值即可,其實隻需要将kamailio.cfg中的“5060”全部替換成自定義的端口号即可。

  對于伺服器,日志是不可缺少的,kamailio.cfg中同樣可以設定日志的輸出和存放路徑。打開kamailio.cfg,會看到如下内容:

同一台伺服器運作多套kamailio服務

  

  可以指定輸出的日志的級别,也可以指定是否輸出日志,其中LOG_LOCAL0用于确定日志輸出的路徑,需要修改/etc/rsyslog.conf中的内容,方法為:

然後,在rsyslog.conf中添加如下内容:

即設定kamailio生成日志的路徑為/var/log,日志檔案名稱為kamailio_test.log,然後執行如下指令使修改的内容生效:

service rsyslog restart
           

為了便于解析網絡的IP,伺服器會使用域名來代替IP位址,Kamailio同樣支援域名的解析,打開kamailio.cfg,會看到如下内容:

同一台伺服器運作多套kamailio服務

  kamailio.cfg預設是将域名的功能注釋掉的,此處隻需要将注釋去掉,然後将“sip.mydomain.com”改為我們自己的伺服器域名即可。要想使得域名生效,需要加載alias子產品,子產品加載的方法按照官方文檔照抄即可。

  OK,有了上面内容做基礎,下面我們來進行具體的編譯、安裝和配置的操作。

- 2. 指定路徑編譯安裝Kamailio

  Kamailio的預設安裝路徑是/usr/local/etc/和/usr/local/lib64,要想實作同一台伺服器運作多套Kamailio服務,首先需要做的就是指定不同的安裝路徑,執行如下指令:
make PREFIX="/usr/local/kamailio_test" include_modules="db_mysql" cfg
make all
make install
           

  進而指定了Kamailio的安裝路徑,本文以/usr/local/kamailio_test為例進行說明,然後進入到/usr/local/kamailio_test路徑下,會看到 etc、lib64、sbin和share這四個目錄,說明安裝路徑正确。

- 3. 生成自定義的Kamailio資料庫

  有了前面的内容做基礎,我們知道如何自定義kamctlrc檔案,而且需要特别注意的是,必須先配置kamctlrc檔案,然後再執行指令生成Kamailio資料庫。我們假設kamctlrc中的

DBHOST=127.0.0.1 ,DBNAME=kamailio_test,

PID_FILE=/var/run/kamailio_test/kamailio_test.pid,然後執行如下指令生成Kamailio的資料庫

  注意,由于我們自定義的安裝路徑,導緻Kamailio的可執行檔案沒有被拷貝到系統路徑下,是以需要通過絕對路徑來指定使用哪套可執行檔案,接下來一路輸入“y”,按回車即可。進入到MySQL,看一下是否有kamailio_test資料庫生成,如果有,則說明kamctlrc生效了,操作成功。

- 4. 配置kamailio.cfg

  • 4.1 指定使用的資料庫
  按照11.1的介紹,首先修改DBURL,使Kamailio使用我們自定義的資料庫,具體的修改内容為:
#!ifndef DBURL
#!define DBURL "mysql://kamailio:[email protected]/kamailio_test"
#!endif
#!endif
           

然後,usrloc子產品的配置改成如下圖所示:

同一台伺服器運作多套kamailio服務

如果不修改usrloc子產品的話,建立的SIP賬号将無法登陸。

  • 4.2 更改端口

  Kamailio預設的端口為5060,為了運作多套Kamailio,需要自定義端口号,修改方法為:打開kamailio.cfg檔案,然後将其中的5060全部改為5061(假設自定義端口為5061),然後重新啟動Kamailio,啟動時同樣使用絕對路徑,然後執行

“ss -tlunp”檢視5061端口是否已經啟動,如果已啟動,說明配置生效。

  OK,通過上面的操作,就可以實作同一台伺服器運作多套相對獨立的Kamailio服務了。

繼續閱讀