piątek, 25 kwietnia 2014

Instalacja PostgreSQLa ze źródeł v9.3.4

W styczniu opisywałam jak zainstalować i ustawić replikację master-master w MySQL-u (http://db-diary.blogspot.com/2014/01/instalacja-servera-i-replikacji-master.html). Tym razem opiszę jak zainstalować PostgreSQLa i ustawić jego replikację master-slave (PostgreSQL nie ma jeszcze replikacji master-master).

Źródła można pobrać ze strony: http://www.postgresql.org/ftp/source/

Ja chcę zainstalować najwyższą wersję dostępną 9.3.4.
Pierwsze kroki to pobranie i rozpakowanie źródeł:

wget http://ftp.postgresql.org/pub/source/v9.3.4/postgresql-9.3.4.tar.gz
tar -xzf postgresql-9.3.4.tar.gz
cd postgresql-9.3.4

Chce zainstalować PostgreSQLa w dość nietypowej ścieżce bo w katalogu domowym użytkownika postgres, ale najpierw go dodajmy:

sudo adduser postgres
sudo mkdir /home/postgres/psql9.3.4
sudo mkdir /home/postgres/psql9.3.4/data
sudo chown postgres /home/postgres/psql9.3.4/data

Pierwszym krokiem instalacji jest konfiguracja źródeł i wybranie opcji. Służy do tego skrypt configure. Jeśli żadne opcje nie zostaną podane, wybrane zostaną domyślne ścieżki i opcje. Jeśli potrzebujesz pomocy uruchom skrypt z opcją --help. Domyślnie PostgreSQL jest instalowany:
  • w katalogu:  /usr/local/pgsql
  • na porcie 5432
  • z klastrem w katalogu: /usr/local/pgsql/data

./configure --help
./configure --prefix=/usr/local/psql9.3.4 --with-pgport=7432

Zwróć uwagę na wynik działania tego skryptu (WARNINGI i ERRORy). Sprawdza on także czy w twoim systemie są wszystkie biblioteki potrzebne do konfiguracji/instalacji. Być może będzie wymagane aby zainstalować jakieś biblioteki.

Instalacja:

gmake
su
gmake install
su - postgres
/usr/local/psql9.3.4/bin/initdb -D /home/postgres/psql9.3.4/data --username=postgres -W


Pogląd klastra - upewnij się, że są tam pliki konfiguracyjne:

[05:26:30 root@nazgul postgresql-9.3.4] ll /home/postgres/psql9.3.4/data/
razem 100
drwx------ 7 postgres postgres  4096 04-24 05:02 base
drwx------ 2 postgres postgres  4096 04-24 04:43 global
drwx------ 2 postgres postgres  4096 04-24 03:49 pg_clog
-rw------- 1 postgres postgres  4608 04-24 04:46 pg_hba.conf
-rw------- 1 postgres postgres  1636 04-24 03:49 pg_ident.conf
drwx------ 4 postgres postgres  4096 04-24 03:49 pg_multixact
drwx------ 2 postgres postgres  4096 04-24 04:43 pg_notify
drwx------ 2 postgres postgres  4096 04-24 03:49 pg_serial
drwx------ 2 postgres postgres  4096 04-24 03:49 pg_snapshots
drwx------ 2 postgres postgres  4096 04-24 04:43 pg_stat
drwx------ 2 postgres postgres  4096 04-24 05:26 pg_stat_tmp
drwx------ 2 postgres postgres  4096 04-24 03:49 pg_subtrans
drwx------ 2 postgres postgres  4096 04-24 03:49 pg_tblspc
drwx------ 2 postgres postgres  4096 04-24 03:49 pg_twophase
-rw------- 1 postgres postgres     4 04-24 03:49 PG_VERSION
drwx------ 3 postgres postgres  4096 04-24 03:49 pg_xlog
-rw------- 1 postgres postgres 20541 04-24 04:21 postgresql.conf
-rw------- 1 postgres postgres    71 04-24 04:43 postmaster.opts
-rw------- 1 postgres postgres    79 04-24 04:43 postmaster.pid

Na koniec: uruchomienie serwera, stworzenie bazy danych test i testowe podłączenie do serwera:

/usr/local/psql9.3.4/bin/postgres -D /home/postgres/psql9.3.4/data >/usr/local/psql9.3.4/logs/logfile 2>&1 &
/usr/local/psql9.3.4/bin/createdb test
/usr/local/psql9.3.4/bin/psql test

Musimy teraz skonfigurować serwer tak aby można było się do niego zalogować nie tylko z localhosta. Serwer musi nasłuchiwać na wszystkich możliwych adresach dlatego zmienimy plik konfiguracyjny - postgresql.conf, który jest w katalogu klastra:

[04:21:56 root@nazgul data] grep 'CONNECTIONS AND AUTHENTICATION' -A 10 -B1 postgresql.conf
#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------

# - Connection Settings -

listen_addresses = '*'  # what IP address(es) to listen on;
     # comma-separated list of addresses;
     # defaults to 'localhost'; use '*' for all
     # (change requires restart)
port = 7432    # (change requires restart)
max_connections = 100   # (change requires restart)

Jednak gdy próbujemy się zalogować dostajemy błąd:

[ela:~ ]$ psql -h192.168.100.167 -Upostgres -p7432
psql: FATAL:  no pg_hba.conf entry for host "192.168.100.152", user "postgres", database "postgres"

pg_hda.conf jest plikiem kontrolującym autoryzację klientów (link do dokumentacji: http://www.postgresql.org/docs/9.3/static/auth-pg-hba-conf.html). Domyślnie możemy się zalogować z localhosta bez żadnego hasła. Nie będę tego zmieniać bo zakładam, użytkownik ma dostęp na serwer jest już użytkownikiem zaufanym. Dodałam jednak jeden wpis dzięki któremu, wszyscy użytkownicy w podsieci 192.168.100.* mogą się zalogować przy pomocy hasła. Ostatecznie wpisy w pg_hba.conf wyglądają tak:

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
host    all             all             ::1/128                 trust
# ADDED: can connect to database but you have to put correct password
host    all             all  192.168.100.0/0     md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local   replication     postgres                                trust
#host    replication     postgres        127.0.0.1/32            trust
#host    replication     postgres        ::1/128                 trust

Dodajmy jeszcze kilku użytkowników:
  • replication - dla inicjalizacji replikacji
  • admin - z prawami do tworzenia nowych ról i baz danych
  • user - użytkownik z możliwością logowania ale bez tworzenia baz danych

[04:59:53 iloop@nazgul ~] /usr/local/psql9.3.4/bin/createuser --replication --login --pwprompt -U postgres replication
[04:53:01 iloop@nazgul ~] /usr/local/psql9.3.4/bin/createuser --createdb --login --pwprompt --createrole -U postgres admin
[04:59:01 iloop@nazgul ~] /usr/local/psql9.3.4/bin/createuser --no-createdb --login --pwprompt -U postgres user


Każdy krok wykonałam na dwóch maszynach tak aby utworzyć między nimi replikację master-standby. Ale to już w następnym poście.

Brak komentarzy:

Prześlij komentarz