Установка БД PostgreSQL — различия между версиями
Vaal (обсуждение | вклад) |
Vaal (обсуждение | вклад) |
||
Строка 79: | Строка 79: | ||
<p style="text-align:left">'''''# echo 'net.core.rmem_max = 4194304' >> /etc/sysctl.conf'''''</p> | <p style="text-align:left">'''''# echo 'net.core.rmem_max = 4194304' >> /etc/sysctl.conf'''''</p> | ||
<p style="text-align:left">'''''# echo 'net.core.wmem_default = 262144' >> /etc/sysctl.conf'''''</p> | <p style="text-align:left">'''''# echo 'net.core.wmem_default = 262144' >> /etc/sysctl.conf'''''</p> | ||
− | <p style="text-align:left">'''''# echo 'net.core.wmem_max = | + | <p style="text-align:left">'''''# echo 'net.core.wmem_max = 1048576' >> /etc/sysctl.conf'''''</p> |
<span style="color:green">'''6) Различная системная конфигурация:'''</span> | <span style="color:green">'''6) Различная системная конфигурация:'''</span> | ||
*Вам может понадобиться увеличить следующие конфигурационные параметры, если они слишком малы: | *Вам может понадобиться увеличить следующие конфигурационные параметры, если они слишком малы: |
Версия 15:19, 30 августа 2017
На данной странице приводится инструкция по установке ПО СУБД PostgreSQL. Непосредственно перед установкой СУБД PostgreSQL необходимо выполнить следующие настройки:
Настройка параметров ядра CentOS 7.
Настройка параметров ядра требуется для корректной установки и работы хостов на которых разворачиваются БД PostgreSQL 9.4. Перед тем как вносить изменения в файлы конфигурации, следует предварительно создать их резервные копии следующими командами:
# cp /etc/sysctl.conf /etc/sysctl.conf.bkp
# cp /etc/security/limits.conf /etc/security/limits.conf.bkp
# cp /etc/pam.d/login /etc/pam.d/login.bkp
# cp /etc/profile /etc/profile.bkp
Настройка параметров ядра для инсталляции PostgreSQL 9.4.
Отредактируйте файл /etc/sysctl.conf:
# vim /etc/sysctl.conf
Рекомендуется закомментировать имеющиеся параметры kernel.shmmax и kernel.shmall.
1) Параметры виртуальной памяти:
Добавьте в конец файла /etc/sysctl.conf следующие строки:
vm.dirty_expire_centisecs=500
vm.dirty_writeback_centisecs=100
vm.swappiness=0
vm.dirty_background_ratio=3
vm.dirty_ratio=15
Или выполните в терминале следующие команды(от root):
# echo '#### New PostgreSQL Kernel Parameters ####' >> /etc/sysctl.conf
# echo '#These parameters a recommended to control the rate at which virtual memory is reclaimed' >> /etc/sysctl.conf
# echo 'vm.swappiness=0' >> /etc/sysctl.conf
# echo 'vm.dirty_background_ratio=3' >> /etc/sysctl.conf
# echo 'vm.dirty_ratio=15' >> /etc/sysctl.conf
# echo 'vm.dirty_expire_centisecs=500' >> /etc/sysctl.conf
# echo 'vm.dirty_writeback_centisecs=100' >> /etc/sysctl.conf
# echo >> /etc/sysctl.conf
# sysctl -p
2) Параметры общей памяти(kernel.shmmni, kernel.shmmax и kernel.shmall):
Параметры kernel.shmmax и kernel.shmall зависят от количества RAM, установленной на сервере. Параметр kernel.shmmax указывается в байтах, а kernel. shmall в страницах.
Для определения максимума общей памяти (параметр ядра shmall) в элементах размера страницы памяти, необходимо получить размер страницы в операционной системе (выполняем в терминале команду):
#getconf PAGE_SIZE
Максимальный размер общего сегмента shmmax должен равняться, по меньшей мере, половине общего объема памяти.SHMMAX не может превышать размер RAM минус один байт, но должен быть больше чем сумма всех SGA на данном хосте. Минимальное значение 536870912. Рекомендуется установить максимальное количество сегментов общей памяти shmmni равным 4096.
Текущее значение этих параметров можно узнать, выполнив команды:
# cat /proc/sys/kernel/shmmax
# cat /proc/sys/kernel/shmall
# cat /proc/sys/kernel/shmmni
Параметр kernel.shmmax вычисляется следующим образом:
kernel.shmmax = RAM (в байтах) / 2,
Например:
33568968704/2=16784484352
Количество байт оперативной памяти можно узнать, введя в терминале команду free -b.
Минимальное значение для kernel.shmmax равняется 536870912.
Параметр kernel.shmall вычисляется следующим образом:
kernel.shmall = RAM (в байтах) / 4096,
Например:
33568968704/4096=8195549
Количество байт оперативной памяти можно узнать, введя в терминале команду free -b.
Минимальное значение для kernel.shmall равняется 2097152.
В случае, если shmall или shmmax по вычислениям меньше минимально рекомендованного, то необходимо присвоить этим параметрам рекомендованные значения.
Ниже приводится пример расчёта параметров shmall и shmmax для сервера с количеством оперативной памяти равной 32 ГБ:
Выполните следующие команды в терминале, которые обновят содержимое etc/sysctl.conf: # echo '## The following values are for 32 GB of RAM' >> /etc/sysctl.conf
# echo 'kernel.shmmax = 16784484352' >> /etc/sysctl.conf
# echo 'kernel.shmall = 8195549' >> /etc/sysctl.conf
# echo '# do not scale this parameter with RAM' >> /etc/sysctl.conf
# echo 'kernel.shmmni = 4096' >> /etc/sysctl.conf
# echo >> /etc/sysctl.conf
# sysctl -p
3) Семафоры:
Linux предоставляет семафоры для передачи небольшого количества информации между процессами. Семафоры — это числа-счётчики или on/off значения, которые организуются в группы. СУБД PostgreSQL необходимо больше групп, больше комнат в каждой группе и больше счётчиков, чем предоставляется операционной системой по умолчанию.
Измените параметр kernel.sem, определяющий необходимое количество семафоров, выполнив следующую команду:
# echo 'kernel.sem = 250 32000 100 128'>> /etc/sysctl.conf
4) Сетевые порты:
Измените параметр net.ipv4.ip_local_port_range в /etc/sysctl.conf для модификации диапазона ip портов для автоматического назначения клиентам исходящих портов, выполнив в терминале команду:
# echo 'net.ipv4.ip_local_port_range = 9000 65500'>> /etc/sysctl.conf
5) Оптимизация сетевых настроек (TCP/IP):
Рекомендуется установить постоянные размеры для буфера - максимальный и по умолчанию для сокетов приложений. Их рекомендованные значения – разумная точка для начала. Выполните в терминале следующие команды:
# echo 'net.core.rmem_default = 262144' >> /etc/sysctl.conf
# echo 'net.core.rmem_max = 4194304' >> /etc/sysctl.conf
# echo 'net.core.wmem_default = 262144' >> /etc/sysctl.conf
# echo 'net.core.wmem_max = 1048576' >> /etc/sysctl.conf
6) Различная системная конфигурация:
- Вам может понадобиться увеличить следующие конфигурационные параметры, если они слишком малы:
- Максимальное количество открытых файлов:
Рекомендуется ввести, как минимум, значение 6815744. Проверьте значение на вашей системе, в случае необходимости изменения значения выполните в терминале команду
# echo 'fs.file-max = 6815744' >> /etc/sysctl.conf
- Максимальное количество конкурентных асинхронных запросов ввода/вывода:
Рекомендуется увеличить это значение до значения 1048576. Выполните в терминале команду
# echo 'fs.aio-max-nr = 1048576' >> /etc/sysctl.conf
Ограничения оболочки для пользователя postgres.
Во время обычной работы запускается много процессов, открывается большое количество файлов и требуется больше ресурсов, чем обычно. В то же время, пределы (hard limits) на аккаунте предотвратит в некоторых случаях зависание процессов (resource starvation). Конфигурация PAM по умолчанию (в /etc/pam.d/system-auth) загружает модули (session required pam_limits.so) которые устанавливают и приводят в действие эти пределы.
Как администратор root добавьте следующие строчки в /etc/security/limits.conf:
postgres soft nproc 2047 postgres hard nproc 16384 postgres soft nofile 1024 postgres hard nofile 65536 postgres soft stack 10240 postgres hard stack 32768
Отредактируйте файл /etc/pam.d/login, добавив в него строку session required pam_limits.so Отредактируйте файл /etc/profile добавив перед:
- unset i
- unset pathmunge
Текст со следующим содержанием:
- if [ $USER = "postgres" ]; then
- ulimit -u 16384 -n 65536
- fi
Настройка ОС для серверов БД PostgreSQL выполнена. Далее будет описан процесс установку СУБД PostgreSQL 9.4 на ОС CentOS 7.2.
Установка СУБД PostgreSQL 9.4
Установку можно производить как из локальных репозиториев, так и из репозиториев, размещённых в интернете(при наличии соответствующего доступа). Пакеты которые должны быть установлены: postgresql94-server, postgresql94-contrib, postgresql94-libs, postgresql94-devel. Служба firewalld должна быть отключена, selinux должен быть отключен.
Командой # locale проверяем текущую локаль сервера БД. При правильной настройке вывод должен быть таким:
1) Для установки пакетов PostgreSQL в командной строке выполнить команду от root:
# yum install postgresql94-server postgresql94-contrib postgresql94-libs postgresql94-devel
2) Инициализируем базу данных PostgreSQL, добавляем сервис в автозагрузку, стартуем сервис БД, проверяем статус, выполнив команды:
# /usr/pgsql-9.4/bin/postgresql94-setup initdb
# systemctl enable postgresql-9.4
# systemctl start postgresql-9.4
# systemctl status postgresql-9.4
3) В /var/lib/pgsql ($HOME postgres) создаём файл .pgsql_profile следующего содержания: export PATH=/usr/pgsql-9.4/bin:$PATH
4) Создадим резервную копию и отредактируем файл /var/lib/pgsql/9.4/data/postgresql.conf:
# cp /var/lib/pgsql/9.4/data/postgresql.conf /var/lib/pgsql/9.4/data/postgresql.conf.bkp
# vi /var/lib/pgsql/9.4/data/postgresql.conf
Раскомментируем строку listen_addresses = 'localhost' и заменим localhost на '*'. Это говорит PostgreSQL принимать запросы со всех интерфейсов. Должно получиться следующее: listen_addresses = '*' На сервере 32 Gb RAM, выделим для PostgreSQL 16 Gb. Здесь же раскомментируем и изменим нижеследующие параметры исходя из 16 ГБ RAM доступных PostgreSQL:
max_connections = 200 shared_buffers = 4GB effective_cache_size = 12GB work_mem = 21970 kB maintenance_work_mem = 1024MB wal_buffers = 32MB checkpoint_segments = 64 checkpoint_completion_target = 0.9 default_statistics_target = 100 log_destination = 'stderr' logging_collector = on log_min_duration_statement = 0 log_checkpoints = on log_connections = on log_disconnections = on log_line_prefix = '%t [%p]: [%l-1]' log_lock_waits = on log_temp_files = 0 log_autovacuum_min_duration = 0 lc_messages = 'C' log_statement = 'none' log_min_messages = info log_error_verbosity = verbose
5) Далее редактируем файл /var/lib/pgsql/9.4/data/pg_hba.conf. В конце файла добавляем строчку, прописав нужный адрес сети, вместо <адрес сети>:
host all all <адрес сети>/24 md5
В строке local all all peer меняем peer на trust:
local all all trust
А в строке host all all 127.0.0.1/32 ident ident меняем на md5:
host all all 127.0.0.1/32 md5
Добавляем в конец pg_hba.conf,прописав нужный адрес сети, вместо <адрес сети>:
host all all <адрес сети>/4 md5 host replication postgres ::1/128 trust
6) Перезапускаем службу PostgreSQL:
# systemctl restart postgresql-9.4
7) Меняем пароль для пользователя postgres (в ОС и в БД), после перезагружаем сервер и заходим под этим пользователем (postgres):
# passwd postgres
Вводим пароль, подтверждаем пароль, перезагружаем систему. После перезагрузки, заходим под postgres, в терминале набираем:
$ psql
и меняем пароль для пользователя БД postgres:
postgres=# \password postgres
8) Установим PostgreSQL Adminpack:
postgres=# CREATE EXTENSION adminpack;
9) Создаём базу данных и пользователя, где <user> - имя пользователя, <password> - пароль пользователя <user>, <dbname> - имя базы:
postgres=# CREATE DATABASE <dbname>;
postgres=# CREATE USER <user> WITH password '<password>';
postgres=# GRANT ALL privileges ON DATABASE <dbname> TO <user>;
Выходим из psql:
postgres=# \q
10) Проверяем подключение к базе, выполнив следующую команду:
$ psql -h 127.0.0.1 <dbname> <user>
Если всё нормально, отключаемся.
11) Для того, что бы параметры вступили с силу, необходимо перегрузить PostgreSQL:
# systemctl restart postgresql-9.4