ИТ технологии для вас и вашего бизнеса. Ubuntu настройка postgresql
Настройка сервера PostgreSQL под Ubuntu
По умолчанию PostgreSQL устанавливается с высокой степенью защиты и не позволяет подключаться к серверу баз данных посторонним приложениям. Для корректной работы необходимо установить новые права доступа.
Настройка PostgreSQL для работы в локальном режиме
Для настройки PostgreSQL необходимо открыть окно консоли (xterm, gnome-terminal, konsole или другую). Далее необходимо выполнить следующие команды:sudo su - postgresnano /etc/postgresql/8.4/main/pg_hba.conf
Опуститесь в конец файла и отредактируйте последние строки как показано в примере:# IPv4 local connections:host all all 127.0.0.1/32 trust
Нажмите Ctrl+O и Enter для сохранения файла, затем и Ctrl+X для выхода из редактора.Перезапустите компьютер либо выполните команды:exitsudo /etc/init.d/postgresql-8.4 restart
Для настройки PostgreSQL необходимо открыть окно консоли (xterm, gnome-terminal, konsole или другую).Далее необходимо выполнить следующие команды:sudo su - postgresnano /etc/postgresql/8.4/main/pg_hba.conf
Опуститесь в конец файла и отредактируйте последние строки как показано в примере:# IPv4 local connections:host all all 127.0.0.1/32 trusthost all all 192.168.0.0/24 trust
Выполните команду:nano /etc/postgresql/8.4/main/postgresql.conf
Найдите в файле строчку: #listen_addresses = `localhost`
Отредактируйте текст рядом с этой строчкой в соответствии с примером:listen_addresses = `*` # what IP address(es) to listen on; # comma-separated list of addresses; # defaults to `localhost`, `*` = all # (change requires restart)port = 5432 # (change requires restart)
Нажмите Ctrl+O и Enter для сохранения файла, затем и Ctrl+X для выхода из редактора.
gimmor.blogspot.com
Проблема Установка и настройка PostgreSQL Ubuntu Linux
Я новичок здесь и администратору сервера. Через пару дней я зарегистрировал сервер с Hetzner с Ubuntu 11.04.
Я намерен работать с PostgreSQL, для которого я установил источник из-за невозможности установки с помощью apt-get. Установка как таковая не прерывается, но служба PostgreSQl не запускается автоматически или когда я пытаюсь запустить ее вручную. Он не выполнил следующее сообщение об ошибке, когда я пытаюсь что-то с ним сделать:
Это была ошибка, которую я получал, когда я установил PostgreSQL, используя apt-get, и я снова установил его из источника. Ниже приведен вывод, который я получил, когда я установил его из источника. Это подтверждает, что PostgreSQL действительно установлен.
Но, не запускается сервис автоматически? Его нет здесь:
Это сказывается на моем терпении и уверенности. Пожалуйста, помогите мне решить эту проблему.
Отвечая на мой вопрос. Это досадно, первый вопрос на любом сайте StackExchange не подходит для меня.
Я уже это сделал, но как-то работал на этот раз. Сделал это:
- sudo apt-get update && sudo apt-get upgrade
- sudo apt-get purge postgresql *
- sudo apt-get -f install
- sudo apt-get install postgresql
Работает как шарм.
Примечание: добавление команды * в чистке очистит все пакеты, которые начинаются с postgresql
Я тоже столкнулся с этой проблемой с Хетзнером и очень раздражал. Вот как я его решил. Совет. Посмотрел на некоторые скрипты пакета pg.
sudo apt-get purge postgresql* # завершено * важно
sudo apt-get install postgresql
Я подозреваю, что изображение Хецнера 11.04 багги или это Ubuntu .deb (маловероятно).
Я не видел эту ошибку на панели запуска в сочетании с Natty. Эта же проблема была поднята как ошибка на стартовой панели для Hardy и получила исправление. Поэтому, следуя этой логике, я ожидал бы, что это будет ошибка, и, вероятно, лучше всего зарегистрировать ошибку на панели запуска.
Взглянув в нее, я нашел 2 интересные (но старые) темы, показывающие ту же самую ошибку, которая, кажется, стоит посмотреть:
Эта тема с 2006 года говорит о той же самой проблеме и утверждает, что
sudo /etc/init.d/postgresql-8.1 stop
sudo /etc/init.d/postgresql-8.1 start
psql template1
работает.
На ubuntuforums есть тема с 2008 года о той же ошибке и имеет статус «разрешен». Пожалуйста, ознакомьтесь с многочисленными предложениями в этой теме.
psql – клиент cli, он не запускает сервер PostgreSQL. Чтобы запустить сервер, вы должны использовать:
/etc/init.d/postgresql start
то вы можете подключиться к нему с помощью psql.
Чтобы начать загрузку PostgreSQL, вы должны сделать следующее:
update-rc.d postgresql enable
Вы можете также взглянуть на это:
http://www.cyberciti.biz/tips/how-to-controlling-access-to-linux-services.html
Запуск Ubuntu 14.04, у меня были подобные проблемы, и я не мог заставить его работать с использованием вышеупомянутых решений. В конце концов я нашел здесь свой ответ.
a) Я запустил эту команду aptitude search postgresql|grep ^i в терминале и получил следующие результаты:
i postgresql - object-relational SQL database (supported i A postgresql-9.3 - object-relational SQL database, version 9. i A postgresql-client-9.3 - front-end programs for PostgreSQL 9.3 i A postgresql-client-common - manager for multiple PostgreSQL client ver i A postgresql-common - PostgreSQL database-cluster managerb) Затем: sudo aptitude purge postgresql postgresql-9.3 postgresql-common
c) Наконец: sudo aptitude install postgresql
Все работает отлично.
ubuntu.fliplinux.com
Настройка кластера PostgreSQL в Ubuntu |
Введение
Цель: Построить отказоустойчивый кластер базы данных для 1С на основе PostgreSQL
Что мы имеем: 2 одинаковых сервера с конфигурацией:
Дисковый массив - 18 гиг для системы, 18 гиг для файл подкачки, ~ 280 гиг для базы данных Оперативная память - 8 гиг Процессор - 2 * AMD Apteron 2.2 ггц |
dbnode1 — имя 1 узла кластера
dbnode2 — имя 2 узла кластера
После установки базовой системы Ubuntu, сетевые интерфейсы будут выглядеть так
dbnode1:
eth0 192.168.30.52/24 gw 192.168.30.1 eth2 10.0.0.1/24 |
dbnode2:
eth0 192.168.30.72/24 gw 192.168.30.1 eth2 10.0.0.2/24 |
Настройка Ubuntu
Послу установки необходимо обновить систему
aptitude update aptitude full-upgrade |
И установить необходимые для работы пакеты
apt-get install mc ssh console-cyrillic libxslt1.1 drbd8-utils heartbeat-2 libreadline5 |
Настройка DRBD
Перед настройкой DRBD нужно убедится, что никаких разделов на 280 гиговом разделе (sdb не создано) Посмотреть можно командой fdisk -l /dev/sdb
root@dbnode2:~# fdisk -l /dev/sdb
Disk /dev/sdb: 293.9 GB, 293995544576 bytes 255 heads, 63 sectors/track, 35742 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Disk identifier: 0x00000000
Disk /dev/sdb doesn't contain a valid partition table |
Если какие-то разделы присудствуют, то необходимо отчистить диск такой командой
dd if=/dev/zero of=/dev/sdb bs=1M count=1 |
Конфиг DRBD /etc/drbd.conf
Приводим его к такому виду на обоих узлах кластера
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
resource r0 { protocol C; startup { wfc-timeout 20; degr-wfc-timeout 20; } net { after-sb-1pri violently-as0p; after-sb-2pri violently-as0p; rr-conflict violently; } syncer { rate 100M; } on dbnode1 { device /dev/drbd0; disk /dev/sdb; address 192.168.30.52:7792; meta-disk internal; } on dbnode2 { device /dev/drbd0; disk /dev/sdb; address 192.168.30.72:7792; meta-disk internal; } } |
Чтобы избежать проблем с разименовыванием узлов кластера, необходимо добавить записи о dbnode1 и dbnode2 в dns-сервер
Или прописать в файл /etc/hosts
127.0.0.1 localhost localhost.localdomain 192.168.30.52 dbnode1 dbnode1.cisural.local 192.168.30.72 dbnode2 dbnode2.cisural.local |
Запуск синхронизации
Останавливаем службу DRBD на обоих узлах кластера
Выполняем инициализацию дисков в DRBD на обоих узлах кластера.
modprobe drbd drbdadm create-md all /etc/init.d/drbd start |
Выбирем один главный узел, с которого будем выполнять синхронизацию и выполним на нем команду:
drbdsetup /dev/drbd0 primary -o |
Дальше пойдет синхронизация дисков, будет она идти очень долго. 200 гигабайт, часа за 3
Смотреть за процессом можно одним из удобных вам способом. Третий способ удобнее всего
/etc/init.d/drbd status cat /proc/drbd watch cat /proc/drbd |
После синхронизации необходимо отформатировать диск.
Форматирование
Теперь устройства sdb не используем, иначе синхронизация не будет работать. Используем только устройство drbd
Heartbeat
Создадим каталог /cluster на обоих узлах кластера
Работаем с 3 файлами конфигурации
/etc/ha.d/authkeys — файл авторизации кластеров
/etc/ha.d/ha.cf — файл настройка кластера
/etc/ha.d/haresources — файл с настройками ресурсов кластера
/etc/ha.d/authkeys
/etc/ha.d/authkeys — одинаковый на обоих узлах
/etc/ha.d/haresources
/etc/ha.d/haresources — одинаковый на обоих узлах (даже имя компьютера, должно быть одно и то же, опеределяет, кто будет главный)
dbnode1 drbddisk::r0 IPaddr::192.168.30.202/24/eth0/ Filesystem::/dev/drbd0::/cluster::ext3 pgsql cron dbnode1 MailTo::[email protected] |
/etc/ha.d/ha.cf
/etc/ha.d/ha.cf — изменяем ип для каждого нода. Ип прописываем нода, которого будем пинговать (на нод1 пишем ип нод2 и наоборот)
ucast eth0 192.168.30.52 node dbnode1 node dbnode2 warntime 3 deadtime 10 initdead 30 keepalive 2 |
/etc/ha.d/resource.d/pgsql
/etc/ha.d/resource.d/pgsql — Скрипт для запуска службы postgresql (делаем на обоих узлах)
touch /etc/ha.d/resource.d/pgsql chmod +x /etc/ha.d/resource.d/pgsql |
И вставить этот код в него
nano /etc/ha.d/resource.d/pgsql |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
#!/bin/sh -e
PGVERSION=8.3.8 PGMAJORVERSION=`echo "$PGVERSION" | sed 's/^\([0-9]*\.[0-9]*\).*$/\1/'` PGENGINE=/usr/bin PGPORT=5432 PGDATA=/cluster/var/lib/pgsql/data LC_ALL=ru_RU.UTF-8 SU=su PGLOG=/cluster/var/lib/pgsql/pgstartup.log SERVNAME=postgresql NAME=postgresql
start(){ $SU -s /bin/sh -l postgres -c "$PGENGINE/postmaster -p '$PGPORT' -D '$PGDATA' ${PGOPTS} &" >> "$PGLOG" 2>&1 < /dev/null sleep 2 pid=`pidof -s "$PGENGINE/postmaster"` if [ $pid ] && [ -f "$PGDATA/postmaster.pid" ] then if [ -d /var/lock/subsys ] ; then touch /var/lock/subsys/${NAME} else mkdir -p /var/lock/subsys touch /var/lock/subsys/${NAME} fi head -n 1 "$PGDATA/postmaster.pid" > "/var/run/postmaster.${PGPORT}.pid" fi }
stop(){ $SU -l -s /bin/sh -c "$PGENGINE/pg_ctl stop -D $PGDATA -m fast" postgres > /dev/null 2>&1 < /dev/null rm -f /var/run/postmaster.${PGPORT}.pid > /dev/null 2>&1 rm -f /var/lock/subsys/${NAME} > /dev/null 2>&1 rm -f $PGDATA/postmaster.pid > /dev/null 2>&1 echo }
restart(){ stop start }
reload(){ if [ -e /var/lock/subsys/${NAME} ] ; then $SU -l -s /bin/sh -c "$PGENGINE/pg_ctl reload -D '$PGDATA' -s" postgres > /dev/null 2>&1 < /dev/null fi }
status() { $SU -l -s /bin/sh -c "$PGENGINE/pg_ctl status -D '$PGDATA' -s" postgres }
case "$1" in start) echo "* Starting PostgreSQL server ..." start return 0 ;; stop) echo "* Stoping service PostgreSQL ..." stop return 0 ;; status) status return 0 ;; restart) restart return 0 ;; reload|force-reload) reload return 0 ;; *) echo $"Usage: $0 {start|stop|status|restart|reload|force-reload}" exit 1 esac exit 0 |
PostgreSQL
Установка PostgreSQL
Скачиваем и устанавливаем postgresql
На обоих узлах кластера
mkdir /root/postgresql cd /root/postgresql wget ftp://updates.etersoft.ru/pub/Etersoft/Postgre@Etersoft/stable/x86_64/Ubuntu/10.04/libpq5.2-8.4eter_8.4.4-eter1.1ubuntu_amd64.deb wget ftp://updates.etersoft.ru/pub/Etersoft/Postgre@Etersoft/stable/x86_64/Ubuntu/10.04/postgresql-8.4eter-contrib_8.4.4-eter1.1ubuntu_amd64.deb wget ftp://updates.etersoft.ru/pub/Etersoft/Postgre@Etersoft/stable/x86_64/Ubuntu/10.04/postgresql-8.4eter-server_8.4.4-eter1.1ubuntu_amd64.deb wget ftp://updates.etersoft.ru/pub/Etersoft/Postgre@Etersoft/stable/x86_64/Ubuntu/10.04/postgresql-8.4eter_8.4.4-eter1.1ubuntu_amd64.deb dpkg -i postgresql-8.3* Сейчас эти ссылки недоступны но процедура установки и настройки остается такой же. Заходим на их фтп сервер и скачиваем необходимый нами пакет. |
Убераем из автозапуска службы, их будет запускать heartbeat
update-rc.d -f postgresql remove update-rc.d -f cron remove |
Настройка системы для запуска postgresql
Значение 8589934592 — это объем оперативной памяти в байтах
- Настройка файла /etc/sysctl.conf
echo "kernel.shmmax = 8589934592" >> /etc/sysctl.conf echo "kernel.shmall = 8589934592" >> /etc/sysctl.conf sysctl -p |
- Проверяем, примонтирован ли каталог /cluster на главном узле кластера
Если в выводе есть такая строчка, значит каталог уже примонтирован
/dev/drbd0 on /cluster type ext3 (rw) |
Если нету, то на главном узле кластера выполняем команду
mount /dev/drbd0 /cluster |
На главном узле кластера слудующие действия
- Переносим каталок /var/lib/pgsql в каталог /cluster, который синхронизируется по сети
mkdir /cluster/var/lib/pgsql -p chown postgres:postgres /cluster/var/lib/pgsql -R cp -R /var/lib/pgsql /cluster/var/lib/pgsql |
На обоих узлах кластера
Заходим в /etc/init.d/postgresql и приводим к такому виду 2 переменные
PGDATA=/cluster/var/lib/pgsql/data
...
PGLOG=/cluster/var/lib/pgsql/pgstartup.log |
На главном узле кластера
Запускаем службу
/etc/init.d/postgresql start |
- Создаем пользователя и пароль PostgreSQL
Заходим в файл /cluster/var/lib/pgsql/data/pg_hba.conf
Ищем строчку:
host all all 0.0.0.0/0 md5 |
Меняем ее на такую, для того чтобы пускало всех и без авторизации. У нас же нету еще пользователей
host all all 0.0.0.0/0 trust |
Перезапускаем службу
/etc/init.d/postgresql restart |
Теперь создаем пользователя
psql -h localhost -U postgres template1 template1=# ALTER USER postgres WITH PASSWORD 'secret'; |
Мы только что создали пользователя postgres с паролем secret
Теперь необходимо закрыть доступ всем без авторизации, для этого заходим в файл /var/lib/pgsql/data/pg_hba.conf
Ищем строчку:
host all all 0.0.0.0/0 trust |
Меняем ее на такую, для того чтобы пускало только с авторизацией
host all all 0.0.0.0/0 md5 |
Перезапускаем службу
/etc/init.d/postgresql restart |
Система готова к работе
Перезагружаемся и проверяем все ли работает
ping 192.168.30.202
Обмен пакетами с 192.168.30.202 по 32 байт: Ответ от 192.168.30.202: число байт=32 время<1мс TTL=64 Ответ от 192.168.30.202: число байт=32 время<1мс TTL=64 Ответ от 192.168.30.202: число байт=32 время<1мс TTL=64 Ответ от 192.168.30.202: число байт=32 время<1мс TTL=64 Статистика Ping для 192.168.30.202: Пакетов: отправлено = 4, получено = 4, потеряно = 0 (0% потерь), Приблизительное время приема-передачи в мс: Минимальное = 0мсек, Максимальное = 0 мсек, Среднее = 0 мсек |
По ssh заходим на 192.168.30.52 и проверяем что примонтирован каталог /cluster
mount /dev/drbd0 on /cluster type ext3 (rw) |
Смотрим ifconfig, и проверяем что появился интерфейс eth0:0
eth0:0 Link encap:Ethernet HWaddr 00:40:F4:98:77:C5 inet addr:192.168.30.201 Bcast:192.168.30.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 Interrupt:177 Base address:0x4c00 |
И смотрим что запущем процесс postgresql
Решение проблем
- 1с спрашивает английскую локаль, но зовет он её неправильным именем — «en_US», и возникает ошибка: «lc_messages en_US»
А в убунте нет локали с таким именем, поэтому мы сделаем символьные ссылки на правильные имена На обоих узлах кластера:
ln -s /usr/lib/locale/en_US.utf8/ /usr/lib/locale/en_US ln -s /usr/share/locale/en_US.UTF-8/ /usr/share/locale/en_US |
cisural.ru
Service - Настройка кластера PostgreSQL в Ubuntu
После установки базовой системы Ubuntu, сетевые интерфейсы будут выглядеть так
dbnode1:
eth0 192.168.30.52/24 gw 192.168.30.1 eth2 10.0.0.1/24dbnode2:
eth0 192.168.30.72/24 gw 192.168.30.1 eth2 10.0.0.2/24Настройка Ubuntu
Послу установки необходимо обновить систему
aptitude update aptitude full-upgradeИ установить необходимые для работы пакеты
apt-get install mc ssh console-cyrillic libxslt1.1 drbd8-utils heartbeat-2 libreadline5Настройка DRBD
Перед настройкой DRBD нужно убедится, что никаких разделов на 280 гиговом разделе (sdb не создано) Посмотреть можно командой fdisk -l /dev/sdb
root@dbnode2:~# fdisk -l /dev/sdb Disk /dev/sdb: 293.9 GB, 293995544576 bytes 255 heads, 63 sectors/track, 35742 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Disk identifier: 0x00000000 Disk /dev/sdb doesn't contain a valid partition tableЕсли какие-то разделы присудствуют, то необходимо отчистить диск такой командой
dd if=/dev/zero of=/dev/sdb bs=1M count=1Конфиг DRBD /etc/drbd.conf
Приводим его к такому виду на обоих узлах кластера
resource r0 { protocol C; startup { wfc-timeout 20; degr-wfc-timeout 20; } net { after-sb-1pri violently-as0p; after-sb-2pri violently-as0p; rr-conflict violently; } syncer { rate 100M; } on dbnode1 { device /dev/drbd0; disk /dev/sdb; address 192.168.30.52:7792; meta-disk internal; } on dbnode2 { device /dev/drbd0; disk /dev/sdb; address 192.168.30.72:7792; meta-disk internal; } }Чтобы избежать проблем с разименовыванием узлов кластера, необходимо добавить записи о dbnode1 и dbnode2 в dns-сервер
Или прописать в файл /etc/hosts
127.0.0.1 localhost localhost.localdomain 192.168.30.52 dbnode1 dbnode1.youdomen.local 192.168.30.72 dbnode2 dbnode2.youdomen.localЗапуск синхронизации
Останавливаем службу DRBD на обоих узлах кластера
/etc/init.d/drbd stopВыполняем инициализацию дисков в DRBD на обоих узлах кластера.
modprobe drbd drbdadm create-md all /etc/init.d/drbd startВыбирем один главный узел, с которого будем выполнять синхронизацию и выполним на нем команду:
drbdsetup /dev/drbd0 primary -oДальше пойдет синхронизация дисков, будет она идти очень долго. 200 гигабайт, часа за 3
Смотреть за процессом можно одним из удобных вам способом. Третий способ удобнее всего
/etc/init.d/drbd status cat /proc/drbd watch cat /proc/drbdПосле синхронизации необходимо отформатировать диск.
Форматирование
Теперь устройства sdb не используем, иначе синхронизация не будет работать. Используем только устройство drbd
mke2fs -j /dev/drbd0Heartbeat
Создадим каталог /cluster на обоих узлах кластера
mkdir /clusterРаботаем с 3 файлами конфигурации
/etc/ha.d/authkeys — файл авторизации кластеров
/etc/ha.d/ha.cf — файл настройка кластера
/etc/ha.d/haresources — файл с настройками ресурсов кластера
/etc/ha.d/authkeys
/etc/ha.d/authkeys — одинаковый на обоих узлах
auth 1 1 crc/etc/ha.d/haresources
/etc/ha.d/haresources — одинаковый на обоих узлах (даже имя компьютера, должно быть одно и то же, опеределяет, кто будет главный)
dbnode1 drbddisk::r0 IPaddr::192.168.30.202/24/eth0/ Filesystem::/dev/drbd0::/cluster::ext3 pgsql cron dbnode1 MailTo::[email protected] MailTo::[email protected]/etc/ha.d/ha.cf
/etc/ha.d/ha.cf — изменяем ип для каждого нода. Ип прописываем нода, которого будем пинговать (на нод1 пишем ип нод2 и наоборот)
ucast eth0 192.168.30.52 node dbnode1 node dbnode2 warntime 3 deadtime 10 initdead 30 keepalive 2/etc/ha.d/resource.d/pgsql
/etc/ha.d/resource.d/pgsql - Скрипт для запуска службы postgresql (делаем на обоих узлах)
touch /etc/ha.d/resource.d/pgsql chmod +x /etc/ha.d/resource.d/pgsqlИ вставить этот код в него
nano /etc/ha.d/resource.d/pgsql #!/bin/sh -e PGVERSION=8.3.8 PGMAJORVERSION=`echo "$PGVERSION" | sed 's/^\([0-9]*\.[0-9]*\).*$/\1/'` PGENGINE=/usr/bin PGPORT=5432 PGDATA=/cluster/var/lib/pgsql/data LC_ALL=ru_RU.UTF-8 SU=su PGLOG=/cluster/var/lib/pgsql/pgstartup.log SERVNAME=postgresql NAME=postgresql start(){ $SU -s /bin/sh -l postgres -c "$PGENGINE/postmaster -p '$PGPORT' -D '$PGDATA' ${PGOPTS} &" >> "$PGLOG" 2>&1 < /dev/null sleep 2 pid=`pidof -s "$PGENGINE/postmaster"` if [ $pid ] && [ -f "$PGDATA/postmaster.pid" ] then if [ -d /var/lock/subsys ] ; then touch /var/lock/subsys/${NAME} else mkdir -p /var/lock/subsys touch /var/lock/subsys/${NAME} fi head -n 1 "$PGDATA/postmaster.pid" > "/var/run/postmaster.${PGPORT}.pid" fi } stop(){ $SU -l -s /bin/sh -c "$PGENGINE/pg_ctl stop -D $PGDATA -m fast" postgres > /dev/null 2>&1 < /dev/null rm -f /var/run/postmaster.${PGPORT}.pid > /dev/null 2>&1 rm -f /var/lock/subsys/${NAME} > /dev/null 2>&1 rm -f $PGDATA/postmaster.pid > /dev/null 2>&1 echo } restart(){ stop start } reload(){ if [ -e /var/lock/subsys/${NAME} ] ; then $SU -l -s /bin/sh -c "$PGENGINE/pg_ctl reload -D '$PGDATA' -s" postgres > /dev/null 2>&1 < /dev/null fi } status() { $SU -l -s /bin/sh -c "$PGENGINE/pg_ctl status -D '$PGDATA' -s" postgres } case "$1" in start) echo "* Starting PostgreSQL server ..." start return 0 ;; stop) echo "* Stoping service PostgreSQL ..." stop return 0 ;; status) status return 0 ;; restart) restart return 0 ;; reload|force-reload) reload return 0 ;; *) echo $"Usage: $0 {start|stop|status|restart|reload|force-reload}" exit 1 esac exit 0PostgreSQL
Установка PostgreSQL
Скачиваем и устанавливаем postgresql
На обоих узлах кластера
mkdir /root/postgresql cd /root/postgresql wget ftp://updates.etersoft.ru/pub/Etersoft/Postgre@Etersoft/stable/x86_64/Ubuntu/10.04/libpq5.2-8.4eter_8.4.4-eter1.1ubuntu_amd64.deb wget ftp://updates.etersoft.ru/pub/Etersoft/Postgre@Etersoft/stable/x86_64/Ubuntu/10.04/postgresql-8.4eter-contrib_8.4.4-eter1.1ubuntu_amd64.deb wget ftp://updates.etersoft.ru/pub/Etersoft/Postgre@Etersoft/stable/x86_64/Ubuntu/10.04/postgresql-8.4eter-server_8.4.4-eter1.1ubuntu_amd64.deb wget ftp://updates.etersoft.ru/pub/Etersoft/Postgre@Etersoft/stable/x86_64/Ubuntu/10.04/postgresql-8.4eter_8.4.4-eter1.1ubuntu_amd64.deb dpkg -i postgresql-8.3*Убераем из автозапуска службы, их будет запускать heartbeat
update-rc.d -f postgresql remove update-rc.d -f cron removeНастройка системы для запуска postgresql
Значение 8589934592 - это объем оперативной памяти в байтах
- Настройка файла /etc/sysctl.conf
- Проверяем, примонтирован ли каталог /cluster на главном узле кластера
Если в выводе есть такая строчка, значит каталог уже примонтирован
/dev/drbd0 on /cluster type ext3 (rw)Если нету, то на главном узле кластера выполняем команду
mount /dev/drbd0 /clusterНа главном узле кластера слудующие действия
- Переносим каталок /var/lib/pgsql в каталог /cluster, который синхронизируется по сети
На обоих узлах кластера
Заходим в /etc/init.d/postgresql и приводим к такому виду 2 переменные
PGDATA=/cluster/var/lib/pgsql/data ... PGLOG=/cluster/var/lib/pgsql/pgstartup.logНа главном узле кластера
Запускаем службу
/etc/init.d/postgresql start- Создаем пользователя и пароль PostgreSQL
Заходим в файл /cluster/var/lib/pgsql/data/pg_hba.conf
Ищем строчку:
host all all 0.0.0.0/0 md5Меняем ее на такую, для того чтобы пускало всех и без авторизации. У нас же нету еще пользователей
host all all 0.0.0.0/0 trustПерезапускаем службу
/etc/init.d/postgresql restartТеперь создаем пользователя
psql -h localhost -U postgres template1 template1=# ALTER USER postgres WITH PASSWORD 'secret';Мы только что создали пользователя postgres с паролем secret
Теперь необходимо закрыть доступ всем без авторизации, для этого заходим в файл /var/lib/pgsql/data/pg_hba.conf
Ищем строчку:
host all all 0.0.0.0/0 trustМеняем ее на такую, для того чтобы пускало только с авторизацией
host all all 0.0.0.0/0 md5Перезапускаем службу
/etc/init.d/postgresql restartСистема готова к работе
Перезагружаемся и проверяем все ли работает
ping 192.168.30.202
Обмен пакетами с 192.168.30.202 по 32 байт: Ответ от 192.168.30.202: число байт=32 время<1мс TTL=64 Ответ от 192.168.30.202: число байт=32 время<1мс TTL=64 Ответ от 192.168.30.202: число байт=32 время<1мс TTL=64 Ответ от 192.168.30.202: число байт=32 время<1мс TTL=64 Статистика Ping для 192.168.30.202: Пакетов: отправлено = 4, получено = 4, потеряно = 0 (0% потерь), Приблизительное время приема-передачи в мс: Минимальное = 0мсек, Максимальное = 0 мсек, Среднее = 0 мсекПо ssh заходим на 192.168.30.52 и проверяем что примонтирован каталог /cluster
mount /dev/drbd0 on /cluster type ext3 (rw)Смотрим ifconfig, и проверяем что появился интерфейс eth0:0
eth0:0 Link encap:Ethernet HWaddr 00:40:F4:98:77:C5 inet addr:192.168.30.201 Bcast:192.168.30.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 Interrupt:177 Base address:0x4c00И смотрим что запущем процесс postgresql
ps ax |grep postmasterРешение проблем
- 1с спрашивает английскую локаль, но зовет он её неправильным именем - "en_US", и возникает ошибка: "lc_messages en_US"
А в убунте нет локали с таким именем, поэтому мы сделаем символьные ссылки на правильные имена На обоих узлах кластера:
ln -s /usr/lib/locale/en_US.utf8/ /usr/lib/locale/en_US ln -s /usr/share/locale/en_US.UTF-8/ /usr/share/locale/en_USadmins-notes.ru
Настройка PostgreSQL в Debian/Ubuntu для сервера 1С 8.1
Последние несколько дней имел дело с настройкой Postgresql в Ubuntu 8.04 для сервера 1C 8.1. Серверная часть 1С расположена на Windows 2008, а постгрес было решено вынести на отдельный линуксовый сервер и связать все это чудо локальной сетью. Собственно, как выяснилось, для корректной работы 1С с нашим сервером, требуется специальная сборка Postgresql, которая содержит необходимые патчи. В общей сложности установка 1C-ного постгреса такая же как и обычного, но я столкнулся с многими косяками и нюансами в процессе данной операции, о которых и намерен рассказать в данной статье. В интернете я нашел 2 варианта установки: 1. взять патчи с официального сайта 1С, взять исходники постгреса, наложить патчи, скомпилить и установкить; 2. взять готовые пакеты сервера, собранные со всеми необходимыми патчами на сайте компании Ethersoft и установить их. В 1-м случае идем за исходниками сюда и за патчами сюда. Качаем, распаковываем, применяем патчи, компилим и устанавливаем. Я терпеть не могу собирать что-либо из исходников, т.к. это отнимает кучу времени и нервов (гентушники меня сейчас тихо ненавидят :))), поэтому я выбираю вариант 2-й (компилить из исходников я все же пробовал, но ничего хорошего из этого не получилось) В случае с готовыми пакетами идем сюда и выбираем пакетики на свой вкус и для своего дистрибутива. Я настраивал Ubuntu 8.04 (x86-64) поэтому взял эти — ftp://updates.etersoft.ru/pub/Etersoft/Postgres@Etersoft/stable/x86_64/Ubuntu/8.04/ Качаем в отдельную папку и устанавливаем командой:
$ dpkg -i *.debЕсли у вас все установилось корректно, то вы счастливый человек :) у меня же данные пакеты посыпались ошибками и установились настолько криво, насколько это возможно, и всему виной предыдущая инсталяция постгреса, которая при удалении не забрала с собой в ад все свои файлы. В итоге, при установке патченной версии, я получил ошибки записи некоторых файлов и создания некоторых sym-линков. Сказать по правде, сначала я не обратил на это внимания, т.к. сервер стартанул и с виду вполне нормально работал (об этом расскажу ниже). Итак, считаем что пакеты поставились корректно. Теперь установим дополнительные библиотеки, для работы PostgreSQL:
$ apt-get install libxslt1.1и запустим наш сервер БД:
$ /etc/init.d/postgresql startсервер выдаст сообщение об успешной инициализации БД и успешном запуске, если нет — значит он установлен криво и о том как его выровнять расскажу позже, а сейчас считаем что на данном этапе все работает. Зададим пароль администратору PostgreSQL:
$ sudo su postgres -c psql postgres postgres=# ALTER USER postgres WITH PASSWORD 'password'; postgres=# \qВместо password пишем свой пароль. На этой команде я получил ошибку. Что-то типа:
psql: could not connect to server: No such file or directoryВызвано это тем, что наш сервер хранит свой сокет в папке /tmp вместо дефолтной /var/run/postgresql. Для решения этой проблемы я сделал символическую ссылку. Можно явно задать сокет с помощью опции -h при коннекте к БД, но я посчитал, что ссылка более универсально решит эту проблему. В общем:
$ ln -s /tmp/.s.PGSQL.5432 /var/run/postgresql/.s.PGSQL.5432После этого проблем с подключением к БД из консоли не должно возникнуть. Далее настраиваем наш сервер для работы в сети и по желанию phpPgAdmin. О том, как это делается, я рассказывал здесь. Считаем что настроили :) Лезем на сервер с виндой и пытаемся подключиться и создать базу. Что бы линуксовый сервер был доступен по имени, пропишем в файл C:\WINDOWS\system32\drivers\etc\hosts строку:
192.168.1.5 PSQLSERVER где 192.168.1.5 - ip сервера с PostgreSQL.если вам очень повезло, то настройка PostgreSQL для сервера 1С законченна, но для меня это было лишь половина пути :) Сначала я получил ошибку:
could not access file '$libdir/fastrun' No such file or directory.при этом сервер постгрес выглядел вполне рабочим и в лог писал что-то вроде:
. . . NOTICE: there is no transaction in progress ERROR: type mvarchar does not exist STATEMENT: CREATE OR REPLACE FUNCTION isfulleq_mvarchar(mvarchar, mvarchar) RETURNS bool AS '$libdir/mchar' LANGUAGE C CALLED ON NULL INPUT IMMUTABLE; . . . NOTICE: there is no transaction in progress ERROR: could not access file "$libdir/fasttrun": No such file or directory STATEMENT: CREATE OR REPLACE FUNCTION fasttruncate(text) RETURNS void AS '$libdir/fasttrun' LANGUAGE C RETURNS NULL ON NULL INPUT IMMUTABLE; NOTICE: there is no transaction in progress . . .Причина данной гадости в том, что не хватает библиотек PostgreSQL. В моем случае из-за того, что постгрес установлен криво т.к. старая версия из репозитариев не удалилась полностью, а новая установилась сверху. В итоге у меня получилась каша из 2-х разных постгресов, одни файлы от старого, другие от нового, пути, библиотеки, символьные ссылки и т.п. все это мешалось и путалось между собой. В общем было решено удалить все файлы постгреса, которые я только нашел поиском и руками. В папках:
/etc/init.d /var/lib /usr/lib /usr/bin /usr/shareПосле этого попробовал опять установить пакеты с помощью
$ dpkg -i *.debно они все же не устанавливались корректно, поэтому распаковал каждый пакет, скопировал файлы в системные папки и выполнил скрипты. На этом проблема с нехваткой библиотек решилась и возникла проблема с локализацией, т.к. на сервере Ubuntu не была установленна украинская локаль. Устанавливаем:
$ apt-get install language-pack-uk language-pack-ru $ locale-gen uk_UA.UTF-8 $ locale-gen ru_RU.UTF-8 $ dpkg-reconfigure localesНа этом настала мне радость и всемирное блаженство :) т.к. база создалась безо всяких матюков :) Цель этой статьи не столько описать последовательность действий при настройке PostgreSQL, как описать все мои грабли и косяки, а так же их причину и способ устранения, что бы не сталкиваться с этим в будущем и, возможно, помочь кому-то избежать ошибок :)
Поделиться ссылкой:
hutpu4.net
Установка и первичная настройка PostgreSQL на Ubuntu 16.04 — Блог начинающего root’а
PostgreSQL (произносится как «Пост-Грес-Кью-Эл») — свободная современная СУБД с широкими возможностями. Её используют такие компании, как Alibaba, Instagram, Skype, Yahoo и многие другие. Это говорит о надёжности системы, и при этом она является простой в установке, использовании и обслуживании. Поверхностно ознакомиться с ней можно по статье в Википедии: https://ru. wikipedia. org/wiki/PostgreSQL
PostgreSQL является кроссплатформенной СУБД с открытым исходным кодом, поэтому её можно установить практически на любой сервер. Все конфигурации серверов и все операционные системы, предоставляемые vscale. позволяют использование PostgreSQL.
Рассмотрим установку и настройку на примере Ubuntu 16.04 64bit.
Технические требования
• Пользователь с sudo-правами
Шаг 1. Выбор источника для установки
PostgreSQL является очень популярным сервером баз данных, поэтому присутствует в официальных репозиториях Ubuntu. Однако в PPA разработчиков PostgreSQL можно найти самую свежую версию. Например, на момент написания данной инструкции в репозитории Ubuntu имеется PostgreSQL 9.5, а из PPA можно установить 9.6. Если у вас нет потребности в самых последних возможностях данной СУБД, то текущий шаг можно пропустить. Иначе добавьте репозиторий PostgreSQL в системный список источников:
и добавьте для него ключ
Это позволит при обновлении пакетов получать наиболее свежие версии.
Шаг 2. Установка PostgreSQL
Если система установлена недавно и вы пропустили предыдущий шаг, то данный шаг можно пропустить, так как в процессе установки системы производится обновление индекса пакетов. В противном случае выполните команду:
Эта команда произведёт обновление индекса, что позволит устанавливать свежие и актуальные пакеты.
Установка PostgreSQL из официальных репозиториев и из PPA производится одинаково. Загрузим и установим пакеты PostgreSQL и contrib (contrib предоставляет некоторый дополнительный функционал и утилиты):
Шаг 3. Подключение к серверу баз данных
Во время установки программы в системе автоматически была создана учётная запись администратора баз данных — postgres. На данном этапе доступ к системе баз данных можно получить только через неё.
Вы можете либо переключиться в сессию учётной записи postgres и запустить там оболочку программы:
либо запустить оболочку от имени postgres без переключения сессии:
Попав тем или иным способом в командную строку psql, вам необходимо знать, как из неё выйти. Это можно сделать с помощью ввода команды выхода:
(сокращение от quit).
Шаг 4. Создание новой роли
Если вы производили установку по инструкции, то к этому моменту в вашей СУБД есть только одна роль — postgres. Рекомендуется не использовать данную роль для работы со своими базами данных, а создавать для каждой базы новую роль (или несколько при необходимости). Для создания новой роли предусмотрены два стандартных способа:
- интерактивный режим, в котором достаточно ответить на несколько простых вопросов;
- команда для создания роли через командную строку СУБД.
Мы не будем подробно останавливаться на интерактивном режиме, так как создать роль, которая полностью удовлетворяет требованиям в большинстве случаев, мы можем всего одной простой командой (перед этим нужно находиться в режиме командной строки как было описано на Шаге 3). Не забудьте заменить username на желаемое имя пользователя, а password — на пароль для этого пользователя:
Имя указывается без кавычек, а пароль — в одинарных кавычках.
Шаг 5. Создание базы данных
Находясь в режиме командной строки psql, создать базу данных мы можем командой create database и указав название базы данных. Например, чтобы воздать БД с именем vscale_db, выполните команду:
Шаг 6. Назначение прав
Созданной ранее нами роли нужно назначить права на базу данных. В большинстве проектов, где у вас будет использоваться всего один пользователь базы данных, ему будут требоваться полные права. Выдать их можно следующим образом:
где vscale_db — название базы данных, выбранное на шаге 5, а username — имя пользователя, заданное на шаге 4.
Вся минимально требующаяся предварительная настройка завершена. Вы можете выйти из psql, введя «\q».
Шаг 7. Аутентификация и начало работы с базой данных
К текущему моменту у вас есть всё необходимое для начала работы с базой данных. Чтобы подключиться к ней, запустите psql с параметрами: хост «-h localhost» (так как подключаемся к локальной базе данных), название БД «vscale_db» и имя пользователя «username»:
После этого вы сможете взаимодействовать с вашей базой данных: создавать таблицы, созранять в них информцию, делать выборки и т. д.
Заключение
Суммируя вышесказанное, получаем весьма простую последовательность действий для подготовки PostgreSQL к использованию. Установка сервера баз данных и запуск оболочки:
Создание пользователя, базы данных и назначение прав:
Мы рассмотрели установку и первоначальную настройку PostgreSQL на Ubuntu 16.04. Подробнее с возможностями и тонкой настройкой можно ознакомиться на официальном сайте: https://www. postgresql. org/
amroot.ru