2018년 9월 27일 목요일

PostgreSQL 에서 postgresql.conf 의 listen_addresses 설정

PostgreSQL 은 DBMS 이다.
당연히 socket 을 통한 접속 기능을 제공하고 있다.

처음 설치를 하면, 보안을 위해서 socket 외부 접속이 막혀있다.
이것을 열어주기 위해서는 postgresql.conf 파일을 수정해야 한다.

편집기를 통해서 postgresql.conf 파일을 열어보면,
listen_addresses 항목이 있는데 이것을 수정하면 된다.

listen_addresses 앞에 주석표시를 삭제한다.
(당연한 것이겠지만, 혹시나 하고)

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

기본값이 localhost 로 되어 있다.
localhost 와 127.0.0.1 은 같은 의미다.

뭐, 예를 들어, 실제 PostgreSQL 소스 코드에
listen("localhost");
이런식으로 들어간다는 말이다.

아래 명령어를 통해서,
실제로 네트워크가 어떻게 되고 있는지 확인할 수 있다.

% netstat -nap | grep 5432

tcp        0      0 127.0.0.1:5432          0.0.0.0:*               LISTEN      30702/postgres

이 말은 PostgreSQL 이 네트워크를 listen 하고 있는데,
127.0.0.1 으로 listen 하고 있겠다는 의미다.
로컬 접속만 허용하겠다는 의미다.

어떤 서버가 psql 을 통해서 PostgreSQL 에 접속을 하려고 할때,
"psql -h localhost" 이런식으로 접속 해야 된다는 것이다.
혹은 "psql -h 127.0.0.1"

결국, 다른 컴퓨터가 아닌, 자기 자신의 접속만 허용한다는걸 의미한다.

만약 다른 컴퓨터에서 접속할 수 있게 하려면 어떻게 해야 할까?

listen_addresses = '자신의 IP 주소'
이런식으로 하면 된다.

만약 자신의 IP 주소가 10.0.2.12 일 경우,
listen_addresses = '10.0.2.12'
이런식으로 하면 된다.

아래 명령어를 통해서,
실제로 네트워크가 어떻게 되고 있는지 확인할 수 있다.

% netstat -nap | grep 5432

tcp        0      0 10.0.2.12:5432          0.0.0.0:*               LISTEN      30702/postgres

어떤 서버가 psql 을 통해서 PostgreSQL 에 접속을 하려고 할때,
"psql -h 10.0.2.12" 이런식으로 접속 하면 된다.

만약 자신의 IP 주소가 2개일 경우,
listen_addresses = '10.0.2.12,10.0.2.14'
이런식으로 콤마(,)를 사용해서 추가하면 된다.

아래 명령어를 통해서,
실제로 네트워크가 어떻게 되고 있는지 확인할 수 있다.

% netstat -nap | grep 5432

tcp        0      0 10.0.2.12:5432          0.0.0.0:*               LISTEN      30702/postgres
tcp        0      0 10.0.2.14:5432          0.0.0.0:*               LISTEN      30702/postgres

어떤 서버가 psql 을 통해서 PostgreSQL 에 접속을 하려고 할때,
"psql -h 10.0.2.12" 혹은
"psql -h 10.0.2.14" 이런식으로 접속 하면 된다.

IP 주소를 신경쓰고 싶지 않다면,
listen_addresses = '*' 혹은
listen_addresses = '0.0.0.0' 이런식으로 하면 된다.

IP 주소 상관없이 listen 을 하겠다는 의미다.

아래 명령어를 통해서,
실제로 네트워크가 어떻게 되고 있는지 확인할 수 있다.

% netstat -nap | grep 5432

tcp        0      0 0.0.0.0:5432          0.0.0.0:*               LISTEN      30702/postgres

적용 후, PostgreSQL restart 를 반드시 해야 한다.
% pg_ctl restart


※ 만약, PostgreSQL 을 Active-Standby 형식으로 구성할거라면,
반드시 listen_addresses = '*' 으로 설정해야 한다.
왜냐하면 Active 와 Standby 의 IP 주소가 서로 다르기 때문이다.
물론 각각 별도로 postgresql.conf 를 수정하면 되지만,
일반적으로 처음 동기화를 수행할 때, postgresql.conf 도 동기화 되기 때문이다.



출처
http://justckh.blogspot.com/2013/10/postgresql-ip.html

댓글 1개:

화곡 어쩌라고, 굴사냥

석화찜(굴찜)을 먹으러 여의도로 갔다 그런데 재료가 모두 소진되었다고 마감이라고 한다 응? 다들 굴에 미쳤나? 굴을 찾아 헤매다 보니, 화곡까지 가게 되었다. 화곡은 처음 가본다. 첫인상은 "술집 겁네 많네" 피똥쌀때까지 마실 수 있...