Установка БД PostgreSQL — различия между версиями

Материал из VAAL-WIKI
Перейти к: навигация, поиск
(Новая страница: «На данной странице приводится инструкция по установке ПО СУБД PostgreSQL.»)
 
Строка 1: Строка 1:
 
На данной странице приводится инструкция по установке ПО СУБД PostgreSQL.
 
На данной странице приводится инструкция по установке ПО СУБД PostgreSQL.
 +
Непосредственно перед установкой СУБД PostgreSQL необходимо выполнить следующие настройки:
 +
<p style="text-align:left"><span style="color:red"><b >Настройка параметров ядра RHEL.</b ></span></p>
 +
Настройка параметров ядра требуется для корректной установки и работы хостов на которых разворачиваются БД ''PostgreSQL 9.4''.
 +
Перед тем как вносить изменения в файлы конфигурации, следует предварительно создать их резервные копии следующими командами:
 +
<p style="text-align:left"><b > '''''# cp /etc/sysctl.conf /etc/sysctl.conf.bkp''''' </b ></p>
 +
<p style="text-align:left"><b > '''''# cp /etc/security/limits.conf /etc/security/limits.conf.bkp''''' </b ></p>
 +
<p style="text-align:left"><b > '''''# cp /etc/pam.d/login /etc/pam.d/login.bkp''''' </b ></p>
 +
<p style="text-align:left"><b > '''''# cp /etc/profile /etc/profile.bkp''''' </b ></p>
 +
<br />
 +
<p style="text-align:left"><span style="color:red"><b >Настройка параметров ядра для инсталляции ''PostgreSQL 9.4''.</b ></span></p>
 +
Отредактируйте файл /etc/sysctl.conf:
 +
<p style="text-align:left"><b > '''''# vim /etc/sysctl.conf''''' </b ></p>
 +
Рекомендуется закомментировать имеющиеся параметры kernel.shmmax и kernel.shmall.<br />
 +
<span style="color:green">'''1) Параметры виртуальной памяти:'''</span>
 +
<br />Добавьте в конец файла ''/etc/sysctl.conf'' следующие строки:<br />
 +
''vm.dirty_expire_centisecs=500''<br />
 +
''vm.dirty_writeback_centisecs=100''<br />
 +
''vm.swappiness=0''<br />
 +
''vm.dirty_background_ratio=3''<br />
 +
''vm.dirty_ratio=15''<br />
 +
Или выполните в терминале следующие команды(от '''''root'''''):
 +
<p style="text-align:left"><b > '''''# echo '#### New PostgreSQL Kernel Parameters ####'  >>  /etc/sysctl.conf''''' </b ></p>
 +
<p style="text-align:left"><b > '''''# echo '#These parameters a recommended to control the rate at which virtual memory is reclaimed'  >>  /etc/sysctl.conf''''' </b ></p>
 +
<p style="text-align:left"><b > '''''# echo 'vm.swappiness=0'  >>  /etc/sysctl.conf''''' </b ></p>
 +
<p style="text-align:left"><b > '''''# echo 'vm.dirty_background_ratio=3'  >>  /etc/sysctl.conf''''' </b ></p>
 +
<p style="text-align:left"><b > '''''# echo 'vm.dirty_ratio=15'  >>  /etc/sysctl.conf''''' </b ></p>
 +
<p style="text-align:left"><b > '''''# echo 'vm.dirty_expire_centisecs=500'  >>  /etc/sysctl.conf''''' </b ></p>
 +
<p style="text-align:left"><b > '''''# echo 'vm.dirty_writeback_centisecs=100'  >>  /etc/sysctl.conf''''' </b ></p>
 +
<p style="text-align:left"><b > '''''# echo >> /etc/sysctl.conf''''' </b ></p>
 +
<p style="text-align:left"><b > '''''# sysctl -p''''' </b ></p>
 +
<span style="color:green">'''2) Параметры общей памяти(kernel.shmmni, kernel.shmmax и kernel.shmall):'''</span><br />
 +
Параметры ''kernel.shmmax'' и ''kernel.shmall'' зависят от количества RAM, установленной на сервере. Параметр ''kernel.shmmax'' указывается в байтах, а ''kernel. shmall'' в страницах.
 +
Для определения максимума общей памяти (параметр ядра ''shmall'') в элементах размера страницы памяти, необходимо получить размер страницы в операционной системе (выполняем в терминале команду):
 +
<p style="text-align:left"><b > '''''#getconf PAGE_SIZE''''' </b ></p>
 +
<br />
 +
Максимальный размер общего сегмента ''shmmax'' должен равняться, по меньшей мере, половине общего объема памяти.''SHMMAX'' не может превышать размер RAM минус один байт, но должен быть больше чем сумма всех SGA на данном хосте. Минимальное значение ''536870912''. Рекомендуется установить максимальное количество сегментов общей памяти ''shmmni'' равным 4096.
 +
Текущее значение этих параметров можно узнать, выполнив команды:
 +
<p style="text-align:left"><b > '''''# cat /proc/sys/kernel/shmmax''''' </b ></p>
 +
<p style="text-align:left"><b > '''''# cat /proc/sys/kernel/shmall''''' </b ></p>
 +
<p style="text-align:left"><b > '''''# cat /proc/sys/kernel/shmmni''''' </b ></p>
 +
Параметр ''kernel.shmmax'' вычисляется следующим образом:<br />
 +
kernel.shmmax = RAM (в байтах) / 2,<br />
 +
Например:<br />
 +
<span style="color:navy">'''33568968704/2=16784484352'''</span><br />
 +
Количество байт оперативной памяти можно узнать, введя в терминале команду ''free -b''.<br />
 +
Минимальное значение для ''kernel.shmmax'' равняется <span style="color:DarkGreen">'''''536870912'''''</span>.<br />
 +
Параметр ''kernel.shmall'' вычисляется следующим образом:<br />
 +
kernel.shmall = RAM (в байтах) / 4096,<br />
 +
Например:<br />
 +
<span style="color:navy">'''33568968704/4096=8195549'''</span><br />
 +
Количество байт оперативной памяти можно узнать, введя в терминале команду ''free -b''.<br />
 +
Минимальное значение для ''kernel.shmall'' равняется <span style="color:DarkGreen">'''''2097152'''''</span>.<br />
 +
В случае, если ''shmall'' или ''shmmax'' по вычислениям меньше минимально рекомендованного, то необходимо присвоить этим параметрам рекомендованные значения.<br />
 +
<span style="color:magenta">'''''Ниже приводится пример расчёта параметров shmall и shmmax для сервера с количеством оперативной памяти равной 32 ГБ:<br />
 +
'''''</span>
 +
<span style="color:darkred"><b><p>
 +
Выполните следующие команды в терминале, которые обновят содержимое ''etc/sysctl.conf'':
 +
'''''# echo '## The following values are for 32 GB of RAM'  >>  /etc/sysctl.conf'''''</p>
 +
<p style="text-align:left">'''''# echo 'kernel.shmmax = 16784484352'  >>  /etc/sysctl.conf'''''</p>
 +
<p style="text-align:left">'''''# echo 'kernel.shmall = 8195549'  >>  /etc/sysctl.conf'''''</p>
 +
<p style="text-align:left">'''''# echo '# do not scale this parameter with RAM'  >>  /etc/sysctl.conf'''''</p>
 +
<p style="text-align:left">'''''# echo 'kernel.shmmni = 4096'  >>  /etc/sysctl.conf'''''</p>
 +
<p style="text-align:left">'''''# echo >>  /etc/sysctl.conf'''''</p>
 +
<p style="text-align:left">'''''# sysctl -p'''''</p></b></span>
 +
<span style="color:green">'''3) Семафоры:'''</span>
 +
<br />
 +
Linux предоставляет семафоры для передачи небольшого количества информации между процессами. Семафоры — это числа-счётчики или on/off значения, которые организуются в группы. СУБД PostgreSQL необходимо больше групп, больше комнат в каждой группе и больше счётчиков, чем предоставляется операционной системой по умолчанию.
 +
Измените параметр ''kernel.sem'', определяющий необходимое количество семафоров, выполнив следующую команду:
 +
<p style="text-align:left">'''''# echo 'kernel.sem = 250 32000 100 128'>>  /etc/sysctl.conf'''''</p>
 +
<span style="color:green">'''4) Сетевые порты:'''</span>
 +
<br />
 +
Измените параметр ''net.ipv4.ip_local_port_range'' в /etc/sysctl.conf для модификации диапазона ip портов для автоматического назначения клиентам исходящих портов, выполнив в терминале команду:
 +
<p style="text-align:left">'''''# echo 'net.ipv4.ip_local_port_range = 9000 65500'>>  /etc/sysctl.conf'''''</p>
 +
<span style="color:green">'''5) Оптимизация сетевых настроек (TCP/IP):'''</span>
 +
<br />
 +
Рекомендуется установить постоянные размеры для буфера - максимальный и по умолчанию для сокетов приложений. Их рекомендованные значения – разумная точка для начала. Выполните в терминале следующие команды:
 +
<p style="text-align:left">'''''# echo 'net.core.rmem_default = 262144' >>  /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_max = 1048586' >>  /etc/sysctl.conf'''''</p>
 +
<span style="color:green">'''6) Различная системная конфигурация:'''</span>
 +
*Вам может понадобиться увеличить следующие конфигурационные параметры, если они слишком малы:
 +
: <span style="color:green">Максимальное количество открытых файлов:</span>
 +
Рекомендуется ввести, как минимум, значение ''6815744''. Проверьте значение на вашей системе, в случае необходимости изменения значения выполните в терминале команду<br />
 +
'''''# echo 'fs.file-max = 6815744' >>  /etc/sysctl.conf'''''
 +
: <span style="color:green">Максимальное количество конкурентных асинхронных запросов ввода/вывода:</span>
 +
Рекомендуется увеличить это значение до значения ''1048576''. Выполните в терминале команду <br />
 +
'''''# echo 'fs.aio-max-nr = 1048576' >>  /etc/sysctl.conf'''''
 +
<br ><br />
 +
 +
<p style="text-align:left"><span style="color:red"><b >Ограничения оболочки для пользователя postgres.</b ></span></p>
 +
Во время обычной работы запускается много процессов, открывается большое количество файлов и требуется больше ресурсов, чем обычно. В то же время, пределы (hard limits) на аккаунте предотвратит в некоторых случаях зависание процессов (resource starvation). Конфигурация PAM по умолчанию (в /etc/pam.d/system-auth) загружает модули (session required pam_limits.so) которые устанавливают и приводят в действие эти пределы.<br />
 +
Как администратор '''''root''''' добавьте следующие строчки в ''/etc/security/limits.conf'':<br />
 +
<pre>
 +
postgres&#9;&#9;soft&#9;&#9;nproc&#9;&#9;2047
 +
postgres&#9;&#9;hard&#9;&#9;nproc&#9;&#9;16384
 +
postgres&#9;&#9;soft&#9;&#9;nofile&#9;&#9;1024
 +
postgres&#9;&#9;hard&#9;&#9;nofile&#9;&#9;65536
 +
postgres&#9;&#9;soft&#9;&#9;stack&#9;&#9;10240
 +
postgres&#9;&#9;hard&#9;&#9;stack&#9;&#9;32768
 +
</pre>
 +
Отредактируйте файл ''/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.

Версия 11:37, 2 сентября 2016

На данной странице приводится инструкция по установке ПО СУБД PostgreSQL. Непосредственно перед установкой СУБД PostgreSQL необходимо выполнить следующие настройки:

Настройка параметров ядра RHEL.

Настройка параметров ядра требуется для корректной установки и работы хостов на которых разворачиваются БД 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 = 1048586' >> /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.