RabbitMQ 설정

RabbitMQ LogoRabbitMQ 는 기본적으로 효율적으로 RabbitMQ 서버을 운영하기에 충분할만큼 내장된 설정으로 가지고 있습니다. 만약에 이 설정을 변경하고자 한다면 설정을 해야 합니다.

RabbitMQ 설정은 기본적으로 다음과 같이 3가지 방법을 제공 합니다.

  • 환경변수들(environment variables) : 포트(port), 파일 위치(file location), 파일 이름(file name)들을 정의. 이것은 쉘 환경변수로부터 가지고 올수 있으며 rabbitmq-env.conf 파일에 설정할 수 있다.
  • 설정파일 : 허가권(permission), 제한과 클러스터, 플러그인 세팅과 같은 서버 컨포넌트들을 정의.
  • 런타임 파라미터와 정책들 : 클러스터 전체 세팅을 런타임에서 변경할 수 있다.

설정파일의 위치는 배포판의 경우에 /etc/rabbitmq 를 루트하며, 컴파일 설치시에 지정해준 디렉토리를 기준으로 합니다.

rabbitmq-env.conf

이 설정 파일은 RabbitMQ 서버의 전체적인 설정들, 예를들어 서버 Port, 호스트이름, 노드이름등 입니다.

이는 쉘의 환경변수로 설정이 가능한데, 이 설정파일의 변수들에 ‘RABBITMQ_’ 를 붙이면 사용가능 합니다.

rabbitmq.conf

이 파일은 기본적으로 rabbitmq-env.conf 에서 지정 가능합니다. 주의해야 할 것은 파일명을 적을때에 conf 확장자를 생략하고 적으셔야 합니다. 왜냐하면 RabbitMQ 가 확장자 conf 를 추가하기 때문입니다.

이 설정 파일에서는 RabbitMQ 운영에 관련된 내용들을 주로 다룹니다. 사용할 메모리, 인증방법, SSL 인증서 설정등 입니다.

이러한 설정들은 다음의 명령어로 확인이 가능 합니다.

 

리눅스 아파치 설치

Apache LogoApache 는 전세계 웹 서버로 가장 많이 쓰이는 HTTP 서버 입니다.

Apache 는 최신 2.4 으로 넘어오면서 많은 변화를 겪었습니다.

이 문서는 리눅스 아파치 설치 하는 방법을 설명한 것입니다.

1. 개요

CentOS 7 배포판은 RHEL 7 을 재컴파일해서 만들어진 배포판 입니다. 이전 버전과 달리 서비스 데몬 관리로 Systemd 를 채용했고 기본 파일 시스템으로 XFS 를 채용하는등 많은 변화를 겪었습니다.

CentOS 7 에 서버 프로그램을 설치하게 될 경우에 이 Systemd 와 결합을 시키는 것도 중요한 일로 떠올랐습니다. Systemd 는 단순하게 서비스 데몬을 관리하는 것뿐만 아니라 시스템의 전반적인 인프라자체이므로 매우 중요한 요소가 되었습니다.

이 문서에 Apache 2.4.10 은 바로 Systemd 와 통합하는 방법을 포함 합니다. 이 문서의 내용은 Fedora 22 배포판을 많이 채용한 것입니다.

2. Apache 2.4.10

2.4.10 버전에서는 이전과 달리 기본 MPM으로 Event 입니다. 별도로 MPM을 지정해주지 않으면 Event 로 지정되었습니다. 하지만, 이 기본 Event 가 라이브러리 의존성을 가지고 있기 때문에 라이브러리가 갖추어지지 않았다면 Prefork 와 Worker 가 공유라이브러리로 컴파일되고 설치 이후에 무엇을 쓸것인지를 지정해줘야 합니다.

2.4.10 버전의 경우에 Event 를 활성화하기 위해서는 Apr, Apr-utils 의 버전이 1.5 이상이여 합니다. 하지만 CentOS 7 배포판에서는 현재 1.4 버전임으로 컴파일 설치할때에 1.5 이상을 같이 컴파일 해줘야 합니다. 

3. Download and Unpack

Apache 2.4.10 을 Event 로 동작하도록 컴파일 하기위해서 다운로드 합니다.

  • Httpd-2.4.10
  • Apr-1.5.1
  • Apr-utils-1.5.4

다운로드한 후에 압축을 해제하고 apr, apr-utils 는 srclib 디렉토리에 압축을 해제하고 버전을 제거한 패키지 이름으로 변경해 줍니다.

4. Patch Download and Patch

이 패치는 Fedora 22 에 httpd-.2.4.10 패키지에 있는 것을 가지고 온 것 입니다. 여기에는 보안 패치와 더불어 Systemd 와 통합되는 모듈이 들어있습니다.

패치는 다음과 같이 다운로드 받습니다.

download: httpd-2.4.10_patch.tar.bz2

httpd-2.4.10 디렉토리에서 다운로드 받은 파일을 압축해제하고 패치를 적용합니다.

5.Configure and Compile and install

프로그램에 설정을 할때는 어떤 기능을 쓸것인지를 결정해야 합니다. 어떤 역활로 서버를 사용할 것인지를 고민한 후에 프로그램을 설정하는 것이 좋습니다.

위 configure 는 다음과 같은 기능을 제공하지 않습니다.

  • dav 안됨

이제 컴파일과 설치를 해줍니다.

6. mod_systemd 설치.

httpd-2.4.10 에 Systemd 와 통합을 위한 패치를 했지만 컴파일할때에 모듈설치 옵션을 ‘all’이나 ‘most’ 로하지 않는 이상 컴파일 설치가 되지 않습니다. 이는 apxs 를 이용해서 모듈 설치를 해줍니다.

위에 잘 보면 link 시에 systemd_daemon 링킹이 되지 않습니다. 이것을 다음과 같이 수동으로 다시 만들어 줍니다.

그리고 다음과 같이 설치해 줍니다.

7. systemd 파일 등록.

이제 httpd 의 systemd 파일을 등록해 줍니다. 파일은 다음과 같습니다.

‘httpd.service’ 파일로 저장하고 다음과 같이 systemd 디렉터리로 옮겨 줍니다.

httpd.service 를 systemd 에 등록하고 시작해주면 됩니다.

실행상태는 다음과 같이 확인 가능 합니다.

추가 관련내용

Apache 웹 서버, Configtest 체크 만들기

Apache 웹 서버 시스템을 다루다보면 자주 접하게 되는 문제가 Apache 웹 서버의 재시작 문제입니다. 이것이 왜 문제가 되는가 하면, 재시작을 위해서는 Apache 웹 서버의 설정 파일들이 문제가 없는지에 대한 테스트가 선행되어야 하기 때문입니다.

다행스럽게도 Apache 는 설정 파일에 대한 적합성 테스트를 제공 합니다.

만일 설정파일에 문제가 있다면 다음과 같이 됩니다.

Apache 웹 서버는 어떻게 설정 파일에 문법 체크를 하는 걸까?

1. server/main.c

httpd 실행파일은 server/main.c 에서부터 만들어집니다. 이 파일에는 main() 함수가 존재하고 Switch 문으로 httpd 의 옵션들을 받도록 되어 있습니다.

configtest 옵션을 주면 내부적으로 configtestonly 값이 1루 세팅 됩니다.

Apache 에서 configtest 를 실행하면 바로 위 구문이 실행됩니다. ap_run_test_config 가 실행되네요. ap_run* 은 일종의 매크로 같은 것인것으로 보인다.

server/config.c 에는 Apache의 설정 파일들을 읽고, 검사를 하고, 추가된 모듈이 있다면 모듈에 맞게 문법을 검사 합니다.

내용이 복잡한데, 어째되었던간에 결과는 다음과 같은 문자열을 화면에 뿌리도록 되어 있습니다.

  • ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL, “Syntax OK”);
  • return apr_pstrcat(p, “Syntax error in -C/-c directive: “, errmsg, NULL);
  • return apr_psprintf(p, “Syntax error on line %d of %s: %s”,

위와같이 문제가 없으면 ‘Syntax OK’, 문제가 있으면 ‘Syntax error’ 라는 문장을 가진 문자열을 리턴 합니다.

2. 쉘 종료 변수와 stdout, stderr

쉘은 프로그램이 정상 종료나 비정상 종료에 대해 다음과 같은 환경변수를 가집니다.

  • 0 : 정상종료
  • 1 : 비정상 종료

그런데, Apache 웹 서버도 Configtest 를 진행해서 ‘Syntax OK’ , ‘Syntax error’ 는 stderr 로 메시지를 리턴합니다.

이렇게 파일에 저장이 되지 않습니다.  다음과 같이하면 파일에 저장이 됩니다.

Apache 웹 서버는 설정 검사 결과가 통과되던 안되던 메시지는 stderr 로 메시지를 출력 합니다. 단, 쉘 리턴 변수만 달리 됩니다.

3. python 으로 체크 테스트 만들기

python 의 apache configtest 모듈이 있다면 좋았겠지만, 그런게 없더군요. 결국에는 python 에서 외부명령어를 사용하는 방법밖에 없습니다.

python 에서 외부명령어 사용을 위한 방법에는 다양하지만, subprocess 를 이용해 보겠습니다.

위 코드에서 핵심은 Popen 객체에 stderr=sys.stdout 를 주고 외부 프로세스가 끝나기를 기다려 리턴값을 받는 ‘p_status = p.wait()’ 에 있습니다.

 

CentOS 6 Xen 설치

centos logoCentOS 6을 사용하고 있다면 별다른 노력없이 Xen 가상화 서버를 구축할 수 있습니다. 현재(2014년 9월 19일) CentOS 의 최신 배포판은 6.5 입니다.

이 문서는 CentOS 6 Xen 설치에 관한 것 입니다.

 

 

1. Xen 패키지 저장소 활성화

Xen 가상화를 위해서 CentOS 6.5 에서는 Xen 가상화 패키지 설치를 쉽게할 수 있도록 저장소를 제공합니다. 이 저장소를 이용하기 위해서 다음과 같이 쉘 명령어를 입력해 줍니다.

2. xen 설치.

저장소를 활성화 했기 때문에 yum 으로 xen 을 설치할 수 있습니다.

3. grub 에 xen 하이퍼바이저 이식

xen 패키지를 설치하면 이를 위한 커널도 새롭게 설치되는데, 여기에 xen 하이퍼바이저를 부팅시에 되도록 고쳐줘야 합니다. 이것도 스크립트로 제공해 줍니다.

4. 재부팅 해줍니다.

5. 확인

재부팅이 끝나면 제대로 됐는지 다음과 같이 확인 합니다.

저의 CPU 는 하드웨어 가상화를 지원하기 때문에 HVM (전 가상화)까지 지원 합니다.

6. libvirt 설치.

Xen 을 사용하기 위해서는 xm, xl 명령어를 사용하는데 이것보다 Python 으로 작성된 프로그램을 이용하면 더 쉽게 관리를 할 수 있습니다. 이를 위해서 다음의 패키지를 설치 합니다.

다시 재부팅을 해주면 끝납니다.

CentOS 7 RabbitMQ 설치

RabbitMQ Logo RabbitMQ 는 AMQP(Advanced Message Queuing Protocol) 를 지원하는 메시징 큐 브로커 입니다. 큐(Queue) 자료구조의 동작방법 그대로 서버로서 역활을 하도록 만든 서버 입니다.

CentOS 7 RabbitMQ 설치 방법을 설명 합니다.

1. EPEL 저장소 추가.

RabbitMQ  는 Erlang 이라는 언어로 작성되었습니다. 따라서 이 패키지가 설치되어 있어야 하는데,  CentOS 7 에서는 패키지로 제공하지 않습니다. 대신에  EPEL 저장소를 추가해서 사용 합니다.

2. RabbitMQ 설치.

현재(2014년 9월 16일)  RabbitMQ 서버의 최신 버전은 ‘3.3.5-1’ 입니다. 이를 설치 합니다.

3. Web Console 활성화.

RabbitMQ 는 Web Console 을 지원 합니다. 이를 위해서 RabbitMQ 의 Console Management 플러그인을 활성화 해주고 서버를 재시작 해줍니다.

4. 서비스 등록

CentOS 7 부터 서비스 관리는 systemd 에서 하도록 변경되었지만 RabbitMQ  는 아직 여기에 대응하지 않습니다. 예전과 같이 chkconfig 도구를 이용해서 서비스를 런레벨(run level) 에 등록해 줍니다.

5. CentOS 7 에서 시작 문제.

RabbitMQ 의 최신 패키지는 CentOS 7 의 Systemd 를 지원하지 않아 구동을 한다고 하더라도 다음과 같은 오류를 만나게 됩니다.

이는 SELINUX 를 disabled 처리해주면 구동이 가능합니다.

6. Web Console 에 로그인 계정 추가.

메뉴얼에 의하면 Web Console 의 기본 계정인 guest/guest 는 로컬호스트에서 접속할때만 가능합니다. 외부에서 접속할때는 불가능 합니다. 그래서 새로운 계정을 다음과 같이 추가해줍니다.

7. firewalld 로 Web Console 접속 포트 개발

RabbitMQ 의 Web Console 은 15672 포트를 사용 합니다. 이를 firewalld 를 이용해서 개방해 줍니다.

8. http://서버IP:15672 접속.

이제 웹 브라우저를 열고 http://서버ip:15672 를 하면 로그인 화면이 나옵니다. 여기서 아까 생성한 관리자 아이디/패스워드를 입력해서 로그인이 되면 정상입니다.

RabbitMQ 서버 관리자 화면
RabbitMQ 서버 관리자 화면

Man 페이지 텍스트, PDF로 저장

Man 페이지 텍스트 파일로 저장.

 Man 페이지 PDF 파일로 저장.

Man 페이지 HTML 파일로 저장. 

먼저 패키지를 설치해야 합니다.

그리고 다음과 같이 해줍니다.

 

Man Page 컬러로 보기

리눅스의 Man Page 는 컬러가 아닙니다. 흑백으로만 나옵니다. 중요한 내용에 컬러를 입히면 눈에 잘 들어올텐데, 이걸 가능하게 하는 방법입니다.

‘source ~/.bashrc’ 를 해주면 바로 적용 됩니다.

그런데, xterm 을 사용하고 있다면 다음과 같이 .Xdefaults 에 다음과 같이 해줍니다.

그리고 다음과 같이 적용을 해줍니다.

출처: http://www.cyberciti.biz/faq/linux-unix-colored-man-pages-with-less-command/

Bash 패스워드 생성기.

쉘 스크립트에서 간단하게 패스워드를 생성할 수 있습니다.

사용법은 다음과 같습니다.

 

PostgreSQL 설치.

pgsql-logo

PostgreSQL 은 인기있는 오픈소스 데이터베이스 시스템 입니다. PostgreSQL 9.0 으로 넘어오면서 ‘Hot Stand by Replication’ 기능을 제공하게 되는등 많은 변화가 있었습니다.

이 문서는 CentOS 7 배포판에서 PostgreSQL 설치에 대한 것입니다.

 

1. 준비

다음의 패키지가 설치되어 있어야 합니다.

2. Download and Unpack

3. Configure and Compile and Install

필요한 기능이 무엇인지를 고민해 봅시다. 많은 기능들을 제공하지만 대략적으로 다음과 같은 기능을 제공하는 것이 좋습니다.

  • plpython => python-devel.x86_64
  • pltcl => tcl-devel.x86_64
  • plperf => perl-devel.x86_64
  • ssl => openssl-devel.x86_64
  • pam => pam-devel.x86_64
  • kerberos => krb5-devel.x86_64 e2fsprogs-devel.x86_64
  • nls => gettext-devel.x86_64
  • xml => libxml2-devel.x86_64 libxslt-devel.x86_64
  • ldap => openldap-devel.x86_64

PostgreSQL 9.x 를 설치하는데 있어서 필요한 기능이 무엇인지를 먼저 생각해야 합니다. 각 기능에 대한 것은 각각 홈페이지를 참고하세요.

필요한 패키지를 설치 합니다.

그리고 기능을 위한 패키지를 설치 합니다.

Compile option 을 다음과 같이 지정합니다.

mtune 을 자신의 CPU 에 맞게끔 수정해야 합니다. 자세한 사항은 여기(GCC Optimization)를 참고 하세요.

Configure를 다음과 같이 실행하고 컴파일을 합니다.

4. 후속작업

PostgreSQL 9.x 를 시스템에 이식시키기 위해서 다음과 같은 과정을 진행해 줍니다.

PostgreSQL 시스템 계정 추가

initdb 실행

Pam 설정

ldconfig 라이브러리 추가

lib64 심볼릭 링크

php와 같은 프로그램들은 설치시에 ‘/usr/lib64’ 와 같은 라이브러리 디렉토리를 검색합니다. 따라서 pgsql9.4의 lib 디렉토리를 lib64 심볼릭 링크를 만들어 줍니다.

Systemd 설정

CentOS 7 부터는 initscript 가 아닌 systemd 를 이용해 데몬 서비스들을 관리 합니다. 먼저 systemd 에 등록을 위한 파일을 다음과 같이 작성 합니다.

postgresql.service 파일

systemd 에 등록할 파일을 위와같이 작성합니다. 작성한 후에 /usr/lib/systemd/system 디렉토리에 복사주고 활성화 해줍니다.

그리고 파일 내용에 postgresql-check-db-dir 파일을 호출하는데 이는 다음과 같습니다.

postgresql-check-db-dir 파일.