configuration

  • Никакой предварительной настройки OpenSSL не требуется
  • Настраиваем PostgreSQL. Будем предполагать, что
    ** В системе есть пользователь postgres и группа postgres
    ** Данные master БД будут располагаться в каталоге /db2/pgdata-master, 
       а данные backup БД - в каталоге db2/pgdata-backup
    ** Все нижеперечислоенные действия производятся от пользователя postgres,
       если другое не указано явно
    ** Локаль БД по-умолчанию - POSIX
    
    • Создаем каталоги хранилищ данных
      su root -c 'mkdir -p /db2/pgdata-master /db2/pgdata-backup'
      su root -c 'chown postgres:postgres /db2/pgdata-master /db2/pgdata-backup'
      
    • Инициализируем хранилища данных
      /usr/local/pgsql/bin/initdb -D /db2/pgdata-master
      /usr/local/pgsql/bin/initdb -D /db2/pgdata-backup
      
    • В /db2/pgdata-master кладем файл postgresql.conf следующего содержания:
      listen_addresses = 'localhost'
      port = 5501
      max_connections = 5
      ssl = on
      
      shared_buffers = 100
      
      #archive_command = '' 
      
      log_destination = 'stderr'
      redirect_stderr = true
      log_directory = '/var/log/pgsql'
      log_filename = 'pgsql.log.%d.%m.%Y'
      log_rotation_age = 1440
      log_rotation_size = 0
      
      log_min_error_statement = error
      log_line_prefix = '%t %p %d %u '
      
      lc_messages = 'C'
      lc_monetary = 'C'
      lc_numeric = 'C'
      lc_time = 'C'
      
      Такой же файл кладем в /db2/pgdata-backup, изменив лишь параметр port
      ...
      port = 5502
      ...
      
    • В /db2/pgdata-master кладем файл pg_hba.conf следующего содержания:
      local      all         all                               trust
      host       all         all         127.0.0.1/32          trust
      
      После чего копируем этот файл в /db2/pgdata-backup:
      cp /db2/pgdata-master/pg_hba.conf /db2/pgdata-backup/pg_hba.conf
      
    • Для создания самоподписанного сертификата в каталоге /db2/pgdata-master выполняем следующие действия:
      openssl req -new -text -out server.req (запоминаем passphrase)
      openssl rsa -in privkey.pem -out server.key (больше нам passphrase не потребуется)
      rm privkey.pem
      openssl req -x509 -in server.req -text -key server.key -out server.crt
      chmod 0600 server.key server.crt
      
      Копируем файлы server.key и server.crt в каталог /db2/pgdata-backup:
      cp /db2/pgdata-master/server.key /db2/pgdata-backup/server.key
      cp /db2/pgdata-master/server.crt /db2/pgdata-backup/server.crt
      
    • Запускаем postgres командами
      /usr/local/pgsql/bin/pg_ctl -D /db2/pgdata-master start
      /usr/local/pgsql/bin/pg_ctl -D /db2/pgdata-backup start
      
      На ругань насчет файла root.crt особого внимания не обращаем - проверка клиентских сертификатов нас не интересует
    • Проверяем, что сервер master БД запущен:
      /usr/local/pgsql/bin/psql -h localhost -p 5501 -l
      Результат вывода должен быть примерно следующим:
                List of databases
            Name      |  Owner   | Encoding 
      ----------------+----------+----------
       template0      | postgres | ASCII
       template1      | postgres | ASCII
      (2 rows)
      
      То же самое проделываем для backup БД:
      /usr/local/pgsql/bin/psql -h localhost -p 5502 -l
    • Создаем файл cluster.schema такого содержания:
      CREATE TABLE organizations (
          org_id int4 not null,
          name text,
          PRIMARY KEY(org_id)
      );
      
      CREATE TABLE users (
          user_id int4 not null,
          name text,
          org_id int4 not null,
          PRIMARY KEY(user_id),
          FOREIGN KEY(org_id) REFERENCES organizations(org_id) DEFERRABLE INITIALLY DEFERRED
      );
      
    • Создаем 2 базы данных ( master и slave ):
      /usr/local/pgsql/bin/createdb -h localhost -p 5501 cluster
      /usr/local/pgsql/bin/createdb -h localhost -p 5502 cluster
      
    • Инициализируем все базы данных:
      /usr/local/pgsql/bin/psql -h localhost -p 5501 -f cluster.schema cluster
      /usr/local/pgsql/bin/psql -h localhost -p 5502 -f cluster.schema cluster
      
  • Настраиваем PgPool
    • В /usr/local/pgsql/etc помещаем файл pgpool.conf следующего содержания:
      listen_addresses = 'localhost'
      port = 5555
      backend_host_name = 'localhost'
      backend_port = 5501
      secondary_backend_host_name = 'localhost'
      secondary_backend_port = 5502
      num_init_children = 4
      max_pool = 1
      child_life_time = 0
      connection_life_time = 0
      master_slave_mode = true
      logdir = '/tmp'
      
    • Запускаем PgPool
      /usr/local/pgsql/bin/pgpool
      
    • Проверим, что PgPool работает
      /usr/local/pgsql/bin/psql -h localhost -p 5555 -l
      
      Результат должен быть примерно таким:
              List of databases
         Name    |  Owner   | Encoding 
      -----------+----------+----------
       cluster   | postgres | KOI8
       template0 | postgres | KOI8
       template1 | postgres | KOI8
      (3 rows)
      
  • Настраиваем Slony-I
    • Создаем скрипт init_master.sh следующего содержания: