1. 2019.01.18 오픈스택 수동 설치 실습 #.4
  2. 2019.01.18 오픈스택 수동 설치 실습 #.3
  3. 2012.06.09 CentOS 5버전의 yum 설정

오픈스택 수동 설치 실습 #.4

오픈스택 수동 설치 실습 #.4 - Controller 노드에 PostgreSQL DB 설치


자! openstack.org 공식 문서에도 없는 부분이 왔습니다! 

오픈스택의 공식 설치 문서에는 오픈소스 DB인 MariaDB를 사용해서 설치하는 법이 나와 있습니다. 그러나 오픈스택은 역시 오픈소스 DB인 PostgreSQL도 지원하고 있습니다. 그러나 설치는 사용자의 몫. 아쉽게도 공식 문서에는 PostgreSQL을 사용하여 설치하는 법 따위는 소개 하고 있지 않습니다.


이론적으로 OpenStack Compute는 SQL-Alchemy가 지원하는 모든 데이터베이스를 지원합니다. 일반적으로 테스트에는 SQLite3를 개발작업에는 MySQL, PostgreSQL을 사용합니다.


그러면 왜 저는 PostgreSQL을 설치 하느냐? 일단 제 업무 환경이 Postgres로 구성 되어 있습니다. 두번째, 성능면에서 MariaDB보다 뛰어납니다. 세번째, MariaDB보다 설정이 쉽습니다.



※ SQL DB는 controller 노드에만 설치를 합니다.


PostgreSQL Download 홈페이지


홈페이지에 가서 yum repo를 통해 원하는 버전의 패키지를 내려 받아야 합니다.



저는 9.6 버전을 선택했고, 플랫폼은 CentOS7을 설정했습니다.

설정을 하면 나오는 4번 항목의 주소를 복사해서 controller 노드에서 실행합니다.

# yum -y install https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-7-x86_64/pgdg-centos96-9.6-3.noarch.rpm


그리고 postgresql을 yum으로 설치해야 하는데, 오픈스택에서 사용하는 driver인 python-psycopg2를 같이 설치해줘야 합니다.


※ python-psycopg2 패키지는 controller 노드 뿐만 아니라 모든 노드에 설치를 해줘야 controller 노드에 설치되어 있는 DB에 접근 할 수 있습니다.


예전에 원하는 경로에 PostgreSQL을 설치하는 포스팅을 한적이 있는데 (http://db.necoaki.net/225) 오늘은 기본값과 최소한의 설치만 가지고 진행하겠습니다. 

# yum -y install postgresql96 postgresql96-server python-psycopg2


yum으로 설치가 완료되면 DB 클러스터를 구성합니다.


# /usr/pgsql-9.6/bin/postgresql96-setup initdb


그리고 DB가 서버 구동시 자동으로 올라오도록 구성해줍니다.


# systemctl enable postgresql-9.6

# systemctl start postgresql-9.6


그럼 DB가 구동 되었는지 확인하기 위해 su - postgres 하여 유저 변환을 합니다.


root@controller:~]# su - postgres

-bash-4.2$


프롬프트 기본값이 영 보기가 좋지 않네요. .bash_profile을 수정합니다. (안해도 됩니다. 취향입니다...)

$ vi .bash_profile

# .bash_profile


# Get the aliases and functions

if [ -f ~/.bashrc ]; then

        . ~/.bashrc

fi


# User specific environment and startup programs


PATH=$PATH:$HOME/.local/bin:$HOME/bin


export PATH


[ -f /etc/profile ] && source /etc/profile

PGDATA=/var/lib/pgsql/9.6/data

export PGDATA

# If you want to customize your settings,

# Use the file below. This is not overridden

# by the RPMS.

[ -f /var/lib/pgsql/.pgsql_profile ] && source /var/lib/pgsql/.pgsql_profile


export PS1="\[\e[27;1m\]\u@\[\e[32;1m\]\h:\[\e[31;1m\]\w]$ \[\e[0m\]"

export TERM=linux


PATH=$PATH:$HOME/bin:/usr/pgsql-9.6/bin

export PATH


export PSQL_HOME=/var/lib/pgsql


alias vi='vim $*'

프롬프트 설정이 완료 되었고, postgres 마스터 계정의 패스워드를 바꿔줍니다. pg_hba.conf 에서 로컬의 접속도 md5로 변환 해줄 것이기 때문에 미리 바꿔줘야 나중에 마스터 계정으로 접속이 가능합니다.



$ vi $PGDATA/pg_hba.conf


맨 밑으로 내려보면 아래와 같은 설정이 있습니다.

# TYPE  DATABASE        USER            ADDRESS                 METHOD


# "local" is for Unix domain socket connections only

local   all             all                                     peer

# IPv4 local connections:

host    all             all             127.0.0.1/32            ident

# IPv6 local connections:

host    all             all             ::1/128                 ident

# Allow replication connections from localhost, by a user with the

# replication privilege.

#local   replication     postgres                                peer

#host    replication     postgres        127.0.0.1/32            ident

#host    replication     postgres        ::1/128                 ident

다음과 같이 바꿔 줍니다.

# TYPE  DATABASE        USER            ADDRESS                 METHOD


# "local" is for Unix domain socket connections only

#local   all             all                                     peer

local   all             all                                     md5

# IPv4 local connections:

host    all             all             127.0.0.1/32            ident

host    all             all             10.0.0.0/24            md5

# IPv6 local connections:

host    all             all             ::1/128                 ident

# Allow replication connections from localhost, by a user with the

# replication privilege.

#local   replication     postgres                                peer

#host    replication     postgres        127.0.0.1/32            ident

#host    replication     postgres        ::1/128                 ident


postgresql.conf 파일을 열어 리스너 부분의 주석을 해제하고 * 옵션을 줘서 모든 ip에 대해 접속 가능하게 리스너 설정을 합니다.


 $ vi $PGDATA/postgresql.conf

# - Connection Settings -


listen_addresses = '*'                  # what IP address(es) to listen on;

저장 후 DB를 재구동 해줍니다.

$ pg_ctl restart

PostgreSQL DB 설치는 완료 되었습니다.


오픈스택 수동 설치 실습 #.3

오픈스택 설치 실습 #.3 - 사전에 각각의 노드에 준비해야 할 것들


저는 일단 controller, compute1, block1 이렇게 3개의 노드를 준비했습니다.

각각 3개의 노드에 /etc/hosts 파일을 수정해서 넣어주고, 서로간에 Ping이 가는지 확인해 봅시다.


※ controller, compute1, block1 에서 모두 설정

# vi /etc/hosts

# controller

10.0.0.11       controller

# compute1

10.0.0.31       compute1

# block1

10.0.0.41       block1



핑이 잘 갑니다.



NTP 설정하기


CentOS 7 설치시에 NTP 옵션을 준 것을 기억하시나요? 그렇다면 각 서버에는 chrony 데몬이 설치 되어 있을 겁니다. 설치가 안되어 있다면, yum install chrony 명령으로 설치를 해줍니다.


chrony 데몬은 RHEL 7버전부터 선택된 기존의 ntpd를 대체하는 시간 동기화 데몬입니다. 네트워크에서 일시 중단되거나 간헐적으로 연결이 끊어지는 시스템 (모바일 및 가상 서버 등)에 가장 적합한 데몬입니다.


▶ chrony의 장점


1) 24 시간 운영되지 않는 데스크톱이나 시스템에서 유용하게 사용되는 시간 및 주파수 오류를 최소화하기 위해 시간 대신 단 몇 분만에 빠른 동기화가 가능합니다. 

2) 클록 주파수의 급격한 변화에 대한보다 나은 대응은 클록 주파수가 불안정한 가상 머신이나 클럭 주파수를 일정하게 유지하지 않는 절전 기술에 유용합니다. 

3) 초기 동기화 후에는 시스템 시간을 필요로하는 응용 프로그램에 영향을 미치지 않도록 시계를 단계별로 조정하지 마십시오. 

4) 일시적인 비대칭 지연을 처리 할 때 안정성이 좋아집니다 (예 : 링크가 대량 다운로드로 포화 된 경우). 

5) 주기적으로 서버를 폴링 할 필요가 없으므로 네트워크 연결이 간헐적으로 연결된 시스템은 여전히 ​​신속하게 클록을 동기화 할 수 있습니다. 


chrony 데몬을 통해 controller 노드는 NTP 서버에서 시간을 가져오고, 각각의 노드는 controller 노드에서 시간을 가져오게 끔 설정합니다.


chrony.conf 파일을 열어 해당 부분의 주석을 제거하고 값을 수정합니다.


※ controller 에서 설정

# vi /etc/chrony.conf


.

.

.

# Allow NTP client access from local network.

allow 10.0.0.0/24

.

.

.


※ compute1, block1 각각의 노드에서 설정

# vi /etc/chrony.conf


.

#server 0.centos.pool.ntp.org iburst #server 1.centos.pool.ntp.org iburst #server 2.centos.pool.ntp.org iburst #server 3.centos.pool.ntp.org iburst server controller iburst

.

.

.


※ 모든 노드에서 실행

# systemctl enable chronyd.service
# systemctl restart chronyd.service

설정이 완료되면 각각의 노드에서 chronyc sources 명령을 통해 확인 할 수 있습니다.



controller 노드는 ntp 서버에서, 각각의 노드는 controller 노드에서 시간을 받아오는 걸 확인 할 수 있습니다.



오픈스택 패키지 설치하기


※ 모든 노드에서 실행 (controller, compute1, block1 )

# yum install centos-release-openstack-rocky

# yum upgrade

# yum install python-openstackclient

# yum install openstack-selinux


이제 오픈스택 설치 준비가 완료 되었습니다.

CentOS 5버전의 yum 설정

CentOS는 Red Hat의 클론 OS입니다.

yum은  다양하게 활용 할 수 있는 패키지 설치 모듈이죠.


기본적으로 CentOS 5 버전을 설치하고 나서 yum를 사용하려면 바로 되지가 않는데,


/etc/yum.repos.d/CentOS-Base.repo


파일을 vi로 열어서 몇몇 부분을 수정해 줘야 좀더 빠르게 사용 할 수 있습니다. 


# vi /etc/yum.repos.d/CentOS-Base.repo


[base]

name=CentOS-$releasever - Base

#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os

baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/

gpgcheck=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5


#released updates 

[updates]

name=CentOS-$releasever - Updates

#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates

baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/

gpgcheck=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5


#additional packages that may be useful

[extras]

name=CentOS-$releasever - Extras

#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras

baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/

gpgcheck=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5


#additional packages that extend functionality of existing packages

[centosplus]

name=CentOS-$releasever - Plus

#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus

baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/

gpgcheck=1

enabled=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5


#contrib - packages by Centos Users

[contrib]

name=CentOS-$releasever - Contrib

#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=contrib

baseurl=http://mirror.centos.org/centos/$releasever/contrib/$basearch/

gpgcheck=1

enabled=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5


빨간색으로 된 부분을 추가하거나 변경해줍니다.
baseurl 앞의 #(주석)은 모두 제거 해줍니다.

# yum list updates

명령을 실행해서 잘 접속이 되는 확인해 줍니다.