Openstack #1-4 MessageQueue(RabbitMQ)

Openstack #1 개요
Openstack #1-1 선행작업
Openstack #1-2 MariaDB(MySQL) 설치
Openstack #1-3 Chrony 설정
Openstack #1-4 MessageQueue(RabbitMQ)
Openstack #1-5 Memcached
Openstack #1-6 Etcd

RabbitMQ는 오픈 소스 메시지 브로커 소프트웨어(메시지 지향 미들웨어)로서, AMQP를 구현하였으며 그 이후로 STOMP ,MQTT 등의 프로토콜을 지원하기 위해 플러그인 구조와 함께 확장되고 있다. 메시지를 생산하는 생산자(Producer)가 메시지를 큐에 저장해 두면, 메시지를 수신하는 소비자(Consumer)가 메시지를 가져와 처리하는 Publish/Subscribe 방식의 메시지 전달 브로커이다.

rabbitmq 서버는 controller 노드에만 설치한다.

패키지 설치

[root@openstack1:~]#yum -y install rabbitmq-server
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirror.kakao.com
Package rabbitmq-server-3.6.16-1.el7.noarch already installed and latest version
Nothing to do

서비스 등록 및 구동

[root@openstack1:~]#systemctl enable rabbitmq-server.service
[root@openstack1:~]#systemctl start rabbitmq-server.service
 # 또는
[root@openstack1:~]#chkconfig rabbitmq-server on
알림: 'systemctl enable rabbitmq-server.service'에 요청을 전송하고 있습니다.
[root@openstack1:~]#service rabbitmq-server start
Redirecting to /bin/systemctl start rabbitmq-server.service

사용자(계정) 생성

# rabbitmqctl add_user ACCOUNT PASSWORD
[root@openstack1:~]# rabbitmqctl add_user openstack openstack
Creating user "openstack"
 # 기존 사용자를 삭제하려면 add_user 대신 delete_user명령을 사용하면 된다.

권한 부여

[root@openstack1:~]#rabbitmqctl set_permissions openstack ".*" ".*" ".*"
Setting permissions for user "openstack" in vhost "/"

PostgresQL #.2 설정

인터페이스 변경

이전 포스트에서 구동 한 PostgresQL서버는 기본 값 loopbak(127.0.0.1) 인터페이스로 구동 되었다. 외부 연결을 위해서는 서비스 리슨 인터페이스를 변경 해 줘야 한다.
Listen 인터페이스 관련 설정은 postgresql.conf 파일에 정의 돼 있다. 이전 포스트의 내용대로 설치 했을 경우 설정 파일은 /var/lib/pgsql/12/data 아래에 존재한다. 1설치 할 때의 조건에 따라 /etc/postgresql/version 디렉토리 아래에 존재할 수 도 있다.

[postgres@centos7:/home/]$  vi /var/lib/pgsql/12/data/postgresql.conf
 
 # 아래 "listen_addresses"와 "port" 값을 변경해 주면 되는데 주석처리가 돼 있으므로 파일 끝에 새 값을 삽입한다.
      ... 중략...
#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------
# - Connection Settings -
#listen_addresses = 'localhost'         # what IP address(es) to listen on;
                                        # comma-separated list of addresses;
                                        # defaults to 'localhost'; use '*' for all
                                        # (change requires restart)
#port = 5432                            # (change requires restart)
max_connections = 100                   # (change requires restart)
#superuser_reserved_connections = 3     # (change requires restart)
#unix_socket_directories = '/var/run/postgresql, /tmp'  # comma-separated list of directories
                                        # (change requires restart)
#unix_socket_group = ''                 # (change requires restart)
#unix_socket_permissions = 0777         # begin with 0 to use octal notation
                                        # (change requires restart)
#bonjour = off                          # advertise server via Bonjour
                                        # (change requires restart)
#bonjour_name = ''                      # defaults to the computer name
                                        # (change requires restart)

# - TCP settings -
# see "man 7 tcp" for details

#tcp_keepalives_idle = 0                # TCP_KEEPIDLE, in seconds;
                                        # 0 selects the system default
#tcp_keepalives_interval = 0            # TCP_KEEPINTVL, in seconds;
                                        # 0 selects the system default
#tcp_keepalives_count = 0               # TCP_KEEPCNT;
                                        # 0 selects the system default
    ....중략...

 # 여기부터 파일 끝에 삽입한다.
listen_addresses = '0.0.0.0'
 # 인터페이스가 여러개일 경우 0.0.0.0을 입력하면 모든 인터페이스가 연결을 받아들이고
 # 특정 IP를 입력하면 지정한 IP로만 연결이 가능한다.
port = 5432                         

인증 방법 설정

 # 패스워드 인증을을 통한 접속 허용을 위한 설정
[postgres@centos7:/home/]$  vi /var/lib/pgsql/12/data/pg_hba.conf
 # 파일의 끝에 아래를 붙여넣기 한다.

host    all             all             0.0.0.0/0               md5
#호스트를 기준으로 모든 계정을 이용해 모든 IP에서 들어오는 연결에 대해 패스워드 인증을 허용하는 설정이다.
 #인터페이스 관련 설정을 변경할 경우 재기동이 필요하다.
[postgres@centos7:/home/]$  /usr/pgsql-12/bin/pg_ctl -D /var/lib/pgsql/12/data -l /var/lib/pgsql/12/data/pgsql.log stop
[postgres@centos7:/home/]$  /usr/pgsql-12/bin/pg_ctl -D /var/lib/pgsql/12/data -l /var/lib/pgsql/12/data/pgsql.log start

계정 생성

 # 생성하는 계정에 관리자 권한을 부여할 때
[postgres@centos7:/home/]$   /usr/pgsql-12/bin/createuser psqluser --interactive
createuser dataware --interactive
새 롤을 superuser 권한으로 지정할까요? (y/n) y
 # 관리자 권한을 부여하지 않을 때.
[postgres@centos7:/home/]$   /usr/pgsql-12/bin/createuser psqluser --interactive
새 롤을 superuser 권한으로 지정할까요? (y/n) n
이 새 롤에게 데이터베이스를 만들 수 있는 권할을 줄까요? (y/n) y
이 새 롤에게 또 다른 롤을 만들 수 있는 권한을 줄까요? (y/n) y
 # SQL을 이용한 사용자 생성
[postgres@centos7:/home/]$   /usr/pgsql-12/bin/psql
psql (12.4)
도움말을 보려면 "help"를 입력하십시오.

postgres=# CREATE USER datauser WITH ENCRYPTED PASSWORD 'password';
CREATE ROLE
postgres=#

데이터 베이스 생성

[postgres@centos7:/home/]$   /usr/pgsql-12/bin/psql
psql (12.4)
도움말을 보려면 "help"를 입력하십시오.

postgres=# CREATE DATABASE data OWNER data ENCODING 'utf-8';
CREATE ROLE
postgres=#

접속 확인

 # postgres 가 아닌 다른 계정으로 시도해본다. 원격지에서도 가능하다.
root@centos7:/home/]#   psql -U dataware -W -h localhost

다음과 같이 입력을 쉘이 변하면 정상 구동 중인 상태

암호:
psql (12.4)
도움말을 보려면 "help"를 입력하십시오.

postgres=# select * from pg_tables;
     schemaname     |        tablename        | tableowner | tablespace | hasindexes | hasrules | hastriggers | rowsecurity
--------------------+-------------------------+------------+------------+------------+----------+-------------+-------------
 pg_catalog         | pg_statistic            | postgres   |            | t          | f        | f           | f
 pg_catalog         | pg_type                 | postgres   |            | t          | f        | f           | f
 pg_catalog         | pg_foreign_server       | postgres   |            | t          | f        | f           | f
 pg_catalog         | pg_authid               | postgres   | pg_global  | t          | f        | f           | f
 pg_catalog         | pg_statistic_ext_data   | postgres   |            | t          | f        | f           | f
 pg_catalog         | pg_user_mapping         | postgres   |            | t          | f        | f           | f
 pg_catalog         | pg_subscription         | postgres   | pg_global  | t          | f        | f           | f
 pg_catalog         | pg_attribute            | postgres   |            | t          | f        | f           | f
 pg_catalog         | pg_proc                 | postgres   |            | t          | f        | f           | f
 pg_catalog         | pg_class                | postgres   |            | t          | f        | f           | f
... 중략...
 information_schema | sql_sizing_profiles     | postgres   |            | f          | f        | f           | f
(70개 행)

CentOS 7 네트워크 설정

CentOS 7 리눅스를 예시로 네트워크 설정 (IP관련)을 변경한다.

1. 네트워크 인터페이스 정보 확인
– ip addr 명령을 입력한다. 

[HOSTNAME:/root]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 32:1d:58:2b:56:ef brd ff:ff:ff:ff:ff:ff
    inet 192.168.103.253/24 brd 192.168.103.255 scope global eth0
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 6e:de:37:60:f8:1b brd ff:ff:ff:ff:ff:ff
4: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 52:54:00:ec:5a:ab brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever
5: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN group default qlen 1000
    link/ether 52:54:00:ec:5a:ab brd ff:ff:ff:ff:ff:ff

– 또는 ifconfig 명령을 이용한다.

[HOSTNAME:/root]# ifconfig -a
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.103.253  netmask 255.255.255.0  broadcast 192.168.103.255
        ether 32:1d:58:2b:56:ef  txqueuelen 1000  (Ethernet)
        RX packets 2882429  bytes 1896744621 (1.7 GiB)
        RX errors 0  dropped 50585  overruns 0  frame 0
        TX packets 694551  bytes 1768919562 (1.6 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
eth1: flags=4098<BROADCAST,MULTICAST>  mtu 1500
        ether 6e:de:37:60:f8:1b  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 406  bytes 32755 (31.9 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 406  bytes 32755 (31.9 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
        ether 52:54:00:ec:5a:ab  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
virbr0-nic: flags=4098<BROADCAST,MULTICAST>  mtu 1500
        ether 52:54:00:ec:5a:ab  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

2. 설정 변경
– 예제에서는 eth0의 설정을 변경할 것이다.
※ 인터페이스의 이름은 시스템마다 다를 수 있다.

[HOSTNAME:/root]# vi /etc/sysconfig/network-scripts/ifcfg-eth0

TYPE=Ethernet
BOOTPROTO=static
 #static : 고정 IP를 사용할 경우 
 #dhcp : hdcp 서버가 있고 자동 설정을 할 경우.

NAME=eth0
DEVICE=eth0
ONBOOT=yes
 #이 값을 yes로 바꿔야 시스템이 시작될 때 인터페이스가 활성화 된다.
 #일반적으로 여기까지는 자동으로 생성되며 값만 변경한다.

 #dhcp를 사용할 경우 아래 값은 필요 없다.
IPADDR=192.168.103.123
 #사용할 IP 주소. 
NETMASK=255.255.255.0
 #subnet mask. 
 #PREFIX=24 처럼 prefix로 대체할 수 있다.
GATEWAY=192.168.103.1
 #Gateway.

3. 활성화

[HOSTNAME:/root]# service network restart
 # [HOSTNAME:/root]# service network stop
 # [HOSTNAME:/root]# service network start 
 # 정지 후 시작을 할 수 있지만 현재 연결 된 인터페이스일 경우 stop 이후 접속할 수 없다.
 # CentOS 6 이하의 명령어.
[HOSTNAME:/root]# systemctl restart network.service
  # CentOS7 이후. 
  # service network restart 형식으로 수행해도 리디렉션 된다.

4. 확인

[HOSTNAME:/root]# ping 192.168.103.1
PING 192.168.103.1 (192.168.103.1) 56(84) bytes of data.
64 bytes from 192.168.103.1: icmp_seq=1 ttl=117 time=33.2 ms
64 bytes from 192.168.103.1: icmp_seq=1 ttl=117 time=33.1 ms
--- 192.168.103.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 33.207/33.248/33.289/0.041 ms
 # 이 시도가 성공 했을 경우 gateway 까지 연결이 정상이라고 생각해도 된다.
 # 단 gateway에서 ICMP를 허용하지 않을 경우 응답이 없을 수 있다.
[HOSTNAME:/root]# ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=117 time=33.2 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=117 time=33.2 ms
--- 8.8.8.8 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 33.207/33.248/33.289/0.041 ms
 # 8.8.8.8은 google의 DNS이다. 
 # 이 시도가 성공 했다면 네트워크 설정에는 문제가 없다고 여겨도 된다.

CentOS8의 경우 network.service를 사용할 수 없다.
NetworkManager 서비스를 이용하자.

[HOSTNAME:/root]# systemctl restart NetworkManager.service