ИТ технологии для вас и вашего бизнеса. Ubuntu настройка postgresql


Настройка сервера PostgreSQL под Ubuntu

Настройка сервера PostgreSQL под Ubuntu Linux Заметки перенесены. Без редакции.

По умолчанию 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 для работы в сетевом режиме

Для настройки 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 для выхода из редактора.

Перезапустите компьютер либо выполните команды:exitsudo /etc/init.d/postgresql-8.4 restart

gimmor.blogspot.com

Проблема Установка и настройка PostgreSQL Ubuntu Linux

Я новичок здесь и администратору сервера. Через пару дней я зарегистрировал сервер с Hetzner с Ubuntu 11.04.

Я намерен работать с PostgreSQL, для которого я установил источник из-за невозможности установки с помощью apt-get. Установка как таковая не прерывается, но служба PostgreSQl не запускается автоматически или когда я пытаюсь запустить ее вручную. Он не выполнил следующее сообщение об ошибке, когда я пытаюсь что-то с ним сделать:

Это была ошибка, которую я получал, когда я установил PostgreSQL, используя apt-get, и я снова установил его из источника. Ниже приведен вывод, который я получил, когда я установил его из источника. Это подтверждает, что PostgreSQL действительно установлен.

Но, не запускается сервис автоматически? Его нет здесь:

Это сказывается на моем терпении и уверенности. Пожалуйста, помогите мне решить эту проблему.

Отвечая на мой вопрос. Это досадно, первый вопрос на любом сайте StackExchange не подходит для меня.

Я уже это сделал, но как-то работал на этот раз. Сделал это:

  1. sudo apt-get update && sudo apt-get upgrade
  2. sudo apt-get purge postgresql *
  3. sudo apt-get -f install
  4. 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 manager

b) Затем: 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/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

Приводим его к такому виду на обоих узлах кластера

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/drbd0

Heartbeat

Создадим каталог /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 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 на главном узле кластера
mount

Если в выводе есть такая строчка, значит каталог уже примонтирован

/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

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_US

admins-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. Рекомендуется не использовать данную роль для работы со своими базами данных, а создавать для каждой базы новую роль (или несколько при необходимости). Для создания новой роли предусмотрены два стандартных способа:

  1. интерактивный режим, в котором достаточно ответить на несколько простых вопросов;
  2. команда для создания роли через командную строку СУБД.

Мы не будем подробно останавливаться на интерактивном режиме, так как создать роль, которая полностью удовлетворяет требованиям в большинстве случаев, мы можем всего одной простой командой (перед этим нужно находиться в режиме командной строки как было описано на Шаге 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