Джим Меггелен - Asterisk™: будущее телефонии Второе издание
# service postgresql start
Далее создаем пользователя asterisk, под учетной записью которого будут выполняться соединение и управление базой данных. Выполним следующие команды:
# su - postgres $ createuser -P
Enter name of user to add: asterisk Enter password for new user: Enter it again:
Shall the new role be a superuser? (y/n) n Shall the new user be allowed to create databases? (y/n) y Shall the new user be allowed to create more new users? (y/n) n CREATE USER
По умолчанию PostgreSQL не слушает TCP/IP-соединение, которое будет использовать Asterisk. Необходимо внести изменения в файл /var/ lib/pgsql/data/postgresql.conf, чтобы Asterisk могла устанавливать IP- соединения с базой данных. Для этого просто удалим символ комментария перед параметрами tcpip_socket и port. Не забудьте изменить значение tcpip_socket с false на true. tcpip_socket = true max_connections = 100
# примечание: увеличение max_connections стоит
# выделения примерно 500 байтов совместно
# используемой памяти на каждое соединение,
# кроме памяти, выделяемой под shared_buffers
# и max_locks_per_transaction. #superuser_reserved_connections = 2 port = 5432
Теперь редактируем файл /var/lib/pgsql/data/pg_hba.conf, чтобы обеспечить возможность только что созданному пользователю asterisk устанавливать соединения с сервером PostgreSQL через TCP/IP. В конце файла замените все под комментарием # Разместите здесь свою фактическую конфигурацию следующим[111]:
host all asterisk 127.0.0.1 255.255.255.255 md5 local all asterisk trust
Теперь можно создать базу данных, которая будет использоваться в данной главе. Мы собираемся создать базу данных asterisk и задать в качестве владельца нашего пользователя asterisk. $ createdb --owner=asterisk asterisk CREATE DATABASE
Выйдя из учетной записи postgres и вернувшись в административную учетную запись, перезапустите сервер PostgreSQL: $ exit
# service postgresql restart
Наше соединение с сервером PostgreSQL через TCP/IP можно проверить следующим образом:
# psql -h 127.0.0.1 -U asterisk Password:
Welcome to psql 7.4.16, the PostgreSQL interactive terminal.
Type: copyright for distribution terms h for help with SQL commands ? for help on internal slash commands g or terminate with semicolon to execute query q to quit
asterisk=>
Повторно проверьте свою конфигурацию, как было показано ранее, если получена следующая ошибка, которая свидетельствует о том, что соединение через TCP/IP не разрешено:
psql: could not connect to server: Connection refused
Is the server running on host "127.0.0.1" and accepting TCP/IP connections on port 5432?
(psql: невозможно установить соединение с сервером: В соединении отказано
Сервер работает на хосте "127.0.0.1" и принимает TCP/IP-соедине- ния через порт 5432?)
Установка и конфигурация ODBC
ODBC-коннектор - это уровень обобщения баз данных, который делает возможным взаимодействие Asterisk с разнообразными СУБД без необходимости создания специального коннектора для каждой отдельно взятой базы данных, которую должна поддерживать Asterisk. Это устраняет необходимость в затратах усилий на разработку и обслуживание кода. Имеется некоторое негативное влияние на производительность, потому что между Asterisk и базой данных вводится дополнительный уровень приложений, однако его можно смягчить надлежащим проектированием, и это стоит выполнить, если необходимо обеспечить мощную и гибкую функциональность баз данных в системе Asterisk.
Прежде чем устанавливать коннектор в Asterisk, необходимо установить ODBC в самой Linux. Чтобы установить драйверы ODBC, просто выполним следующую команду:
# yum install -y unixODBC unixODBC-devel libtool-ltdl libtool-ltdl-devel
В главе 3 можно найти таблицу с пакетами, которые должны быть установлены.
Необходимо установить пакет unixODBC-devel, потому что Asterisk использует его для создания модулей ODBC, которые будут применяться в данной главе.
Убедитесь в наличии сконфигурированного ODBC-драйвера PostgreSQL в файле /etc/odbcinst.ini. Он должен выглядеть примерно так:
[PostgreSQL]
Description = ODBC for PostgreSQL Driver = /usr/lib/libodbcpsql.so
Setup = /usr/lib/libodbcpsqlS.so
FileUsage = 1
Убедитесь, что система видит драйвер, выполнив приведенную ниже команду. Если все хорошо, она должна возвратить имя метки используемой СУБД PostgreSQL. # odbcinst -q -d
[PostgreSQL]
Далее сконфигурируем файл /etc/odbc.ini, используемый для создания коннектора, который Asterisk будет применять для ссылки на эту конфигурацию. Если когда-то в будущем понадобится изменить базу данных или что-то еще, просто надо будет внести изменения в этот файл, не меняя ссылок в Asterisk[112].
[asterisk-connector][asterisk-connector] Description = PostgreSQL connection to 'asterisk' database Driver = PostgreSQL Database = asterisk Servername = localhost UserName = asterisk Password = welcome Port = 5432 Protocol = 7.4 ReadOnly = No RowVersioning = No ShowSystemTables = No ShowOidColumn = No FakeOidIndex = No ConnSettings =Убедимся, что мы можем соединяться с нашей базой данных, используя приложение isql. Приложение isql не будет осуществлять соединение как пользователь с правами администратора (root) и должно выполняться под учетной записью владельца базы данных. Поскольку владельцем базы данных asterisk в PostgreSQL является пользователь asterisk, необходимо создать учетную запись Linux с таким же именем. В главе 14 эта учетная запись будет использоваться для запуска Asterisk от лица пользователя, не имеющего прав администратора.
# su - asterisk
$ echo "select 1" | isql -v asterisk-connector
+ +
| Connected! |
| sql-statement
| help [tablename]
| quit |
+ +
SQL> + +
| 'column? + +
I 1
+ +
SQLRowCount returns 1 1 rows fetched $ exit
После установки, конфигурации и проверки unixODBC, необходимо повторно скомпилировать Asterisk, чтобы модули ODBC были созданы и установлены. Вернитесь в папку исходного кода Asterisk и запустите сценарий ./configure, чтобы система знала, что unixODBC установлен.
# cd /usr/src/asterisk-1.4
# make distclean
# ./configure
# make menuselect
# make install
Практически все, о чем говорится в данной главе, включено по умолчанию. Выполнив команду make menuselect, убедитесь, что модули, связанные с ODBC, активированы. Сюда относятся cdr_odbc, func_odbc, func_realtime, pbx_realtime, res_config_ odbc, res_odbc. Для хранения голосовой почты в базе данных, совместимой с ODBC, не забудьте выбрать пункт ODBC STORAGE (ХРАНИЛИЩЕ ODBC) в меню Voicemail Build Options (Опции сборки голосовой почты). Чтобы убедиться в существовании модулей, загляните в папку /usr/lib/asterisk/modules/.
Конфигурация res_odbc
для обеспечения доступа к базе данных
Конфигурация ODBC-коннекторов выполняется в файле res_odbc.conf, располагающемся в папке /etc/asterisk. Файл res_odbc.conf задает параметры, которые будут использоваться различными модулями Asterisk для соединения с базой данных[113].
Внесем изменения в файл res_odbc.conf:
[asterisk]
enabled => yes
dsn => asterisk-connector
username => asterisk
password => welcome
pooling => no
limit => 0
pre-connect => yes
Опция dsn указывает на соединение с базой данных, которое мы конфигурировали в файле /etc/odbc.ini, а опция pre-connect говорит Asterisk открыть и обслуживать соединение с базой данных при загрузке модуля res_odbc.so. Это снижает некоторые издержки, которые возникли бы при многократном повторном установлении и разрыве соединения с базой данных.
Сконфигурировав res_odbc.conf, запустите Asterisk и проверьте соединение с базой данных с помощью CLI-команды odbc show:
*CLI> odbc show Name: asterisk DSN: asterisk-connector Pooled: no Connected: yes
Использование архитектуры реального времени
Архитектура реального времени Asterisk (Asterisk Realtime Architecture, ARA) - это метод хранения конфигурационных файлов (которые при обычных обстоятельствах располагались бы в папке /etc/asterisk) и их конфигурационных опций в таблице базы данных. Существует два типа архитектур реального времени: статическая и динамическая. Статический вариант аналогичен традиционному методу чтения конфигурационного файла, за исключением того что чтение данных осуществляется из базы данных. Метод динамической реализации архитектуры реального времени используется для таких элементов, как объекты user и peer (SIP, IAX2) и голосовая почта, которые загружают и обновляют информацию по мере необходимости. Изменение в статической информации требует перезагрузки текстового файла сразу после внесения в него изменений, но динамическая информация запрашивается Asterisk по мере необходимости и не требует перезагрузки. Архитектура реального времени настраивается в файле extconfig.conf, располагающемся в папке /etc/asterisk. Этот файл указывает Asterisk, что брать из базы данных и откуда именно, что обеспечивает возможность загружать некоторые файлы из базы данных, а другие - из стандатных конфигурационных файлов.
Статическая архитектура реального времени
Статическая архитектура реального времени используется, если требуется загрузить конфигурацию, которая обычно размещается в конфигурационных файлах в папке /etc/asterisk, из базы данных. Те же правила, которые применяются к плоским[114] файлам в системе, действуют и при использовании статической архитектуры реального времени. Например, требование выполнить команду перезагрузки из интерфейса командной строки Asterisk или перезагрузить модуль, связанный с конфигурационным файлом (то есть выполнить команду module reload chan_sip. so).