воскресенье, 30 декабря 2012 г.

17.2. Создание кластера БД



Перед тем, как Вы сможете что-то сделать, Вы должны инициализировать область хранения БД на диске. Мы называем это кластер базы данных (database cluster). (SQL использует термин catalog cluster). Кластер БД - это набор баз данных, который управляется одним экземпляром запущенного сервера БД. После инициализации, кластер БД будет содержать БД с именем postgres, которая является БД по умолчанию, которую используют утилиты, пользователи и сторонние приложения. Сам сервер БД не нуждается в этой БД, но многие внешние приложения подразумевают, что она существует. Другая БД, создаваемая на этапе инициализации, называется template1. Как и следует из её имени, она будет использоваться как шаблон для создаваемых БД; она не должна использоваться для работы (см главу 21, где рассказано о том, как создавать новые БД в кластере).
В терминах файловой системы кластер БД - это просто папка, в которой хранятся все данные. Мы называем её папка с данными (data directory) или область данных (data area). Расположить её Вы можете где угодно. Вариантов по умолчанию нет, однако такие места, как /usr/local/pgsql/data или /var/lib/pgsql/data пользуются популярностью. Для того, чтобы инициализировать кластер БД мы используем команду initdb, которая устанавливается вместе с PostgreSQL. Желаемое месторасположение кластера БД указывается опцией -D:
$ initdb -D /usr/local/pgsql/data
Обратите внимание, что Вы должны выполнить эту команду из под аккаунта пользователя PostgreSQL, про которого мы говорили в предыдущей секции.
Совет: в качестве альтернативы опции -D можно использовать переменную окружения PGDATA.
С другой стороны, Вы можете запустить initdb при помощи pg_ctl:
$ pg_ctl -D /usr/local/pgsql/data initdb
Такой способ может казаться более естественным, если Вы используете pg_ctl для запуска и остановки сервера (см раздел 17.3), так что pg_sql может быть единственной командой, которую Вы будете использовать для управления сервером БД.
Если папка, которую Вы передали initdb в качестве параметра, не существует, то initdb попытается её создать. Скорее всего у него не будет для этого достаточно полномочий (если Вы следовали нашему совету и создали непривилегированного пользователя). В этом случае Вы должны создать папку сами (из под root) и изменить её владельца на пользователя PostgreSQL. Вот пример того, как Вы можете это сделать:
root# mkdir /usr/local/pgsql/data
root# chown postgres /usr/local/pgsql/data
root# su postgres
root# initdb -D /usr/local/pgsql/data
initdb не запустится если указанная папка выглядит как уже инициализированная.
Поскольку папка данных содержит все данные, хранимые в БД, очевидно, что должны быть предприняты меры по предотвращению неавторизованного доступа. По этой причине оставит права доступа к папке только для пользователя PostgreSQL.
Как бы то ни было, хотя содержимое папки конфиденциально, тем не менее настройки доступа по умолчанию позволяют любому пользователю подключиться к БД и даже стать суперпользователем БД. Если Вы не доверяете другим локальным пользователям, то мы рекомендуем использовать одну из опций initdb: -W, --pwprompt или --pwfile для того, чтобы задать пароль для суперпользователя БД. Кроме того передайте опцию -A md5 или -A password чтобы не использовать режим аутентификации по умолчанию. Или же измените сгенерированный после запуска initdb файл pg_hba.conf, но сделайте это до первого запуска сервера. (Есть и другие советы, включая peerauthentication или разрешения ФС. За подробностями обращайтесь к главе 19).
initdb так же инициализирует локаль по умолчанию для кластера БД. Обычно для этого берутся настройки локали в окружении и применяются к инициализируемой БД. При этом можно определить и другую локаль для БД; более подробную информацию об этом можно получить в главе 22.1. Порядок сортировки по умолчанию используемый для конкретного кластера БД задаётся initdb. И хотя Вы можете создать новые БД с другим порядком сортировки, порядок сортировки используемый в шаблонных БД, создаваемых initdb, не может быть изменён без того, чтобы его сбросить и создать заново. Кроме того, использование локали, отличной от C или POSIX, может оказать влияние на производительность. Поэтому, очень важно сделать сразу правильный выбор.
initdb так же задаёт кодировку по умолчанию для кластера БД. Обчно она должна соответствовать локальным настройкам. Более подробно это обсуждается в главе 22.3

17.2.1 Сетевые файловые системы

Зачастую при установке кластеры БД создаются на сетевых ФС. Иногда это делается непосредственно при помощи NFS, или с использованием NAS-устройств, которые сами используют NFS. PostgreSQL не требует специальной настройки для использования сетевых ФС в том случае, если они ведут себя в точности как локальные диски (DAS, Direct Attached Storage). Если же клиентская и серверная реализации NFS имеют нестанадртную семантику, то Вы можете столкнуться с проблемами (см тут). В частности, отложенная (асинхронная) запись на NFS сервер может создать проблемы с надёжностью. Поэтому, если возможно, монтируйте NFS в синхронном режиме (без кеширования). Кроме того, мягкое монтироване (soft-mounting) NFS тоже не рекомендуется. (SAN используют протокол нижнего уровня отличный от NFS.)

Комментариев нет:

Отправить комментарий