Openstack #1 개요

※ 이 포스트는 실제 설치및 설정을 수행하면서 작성하고 있습니다. 계속 업데이트 됩니다.

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

오픈스택(OpenStack)은 IaaS 형태의 클라우드 컴퓨팅 오픈 소스 프로젝트이다. 2012년 창설된 비영리 단체인 OpenStack Foundation에서 유지, 보수하고 있으며 아파치 라이선스하에 배포된다.
AMD, 인텔, 캐노니컬, 수세 리눅스, 레드햇, 시스코 시스템즈, 델, HP, IBM, NEC, VM웨어, 야후! 등 150개 이상의 회사가 이 프로젝트에 참가하고 있으며, 주로 리눅스 기반으로 운용과 개발이 이루어진다.
프로세싱, 저장공간, 네트워킹의 가용자원을 제어하는 목적의 여러 개의 하위 프로젝트로 이루어져 있다. 대시 보드 프로젝트는 다른 하위 프로젝트의 운영 제어를 웹 인터페이스를 통해 담당한다.
오픈스택은 열린 설계와 개발을 지향한다. 커뮤니티는 6개월의 릴리즈 사이클로 개발을 진행하고 있다. 매 사이클의 기획단계에서는 오픈스택 디자인 서밋(OpenStack Design Summit)을 개최하여, 개발자 작업을 지원하고, 로드맵을 설정하고 있다.

2010년 7월 랙스페이스(Rackspace)사와 미국 항공우주국이 오픈스택 오픈 소스 프로젝트를 시작하였다. 오픈스택은 일반적인 서버에서 클라우드 컴퓨팅 서비스를 생성하고 실행할 수 있도록 해준다. 첫 번째 릴리즈 (코드명 Austin)는 프로젝트 시작 4개월 이후에 공식 릴리스되었고, 이후 공식 버전은 6개월마다 릴리스된다. 처음에는 미국 항공우주국의 네불라 플랫폼과 랙스페이스의 클라우드 파일 플랫폼의 소스를 기반으로 하였다. 오픈스택은 우분투와 레드햇 배포판에 포함되었다. 1위키백과에서 발췌

아주 쉽게 얘기하자면 AWS, AZURE, GCP 등에서 제공하는 클라우드 서비스 플랫폼 자체다.
여러 컴퓨터를 엮어 한 곳에서 관리되는 가상머신 호스트 정도로 이해 해도되겠다.
IaaS (Infrastructure as a Service2서비스로서의 인프라스트럭처: 서버, 스토리지, 네트워크를 필요에 따라 인프라 자원을 사용할 수 있게 클라우드 서비스를 제공하는 형태이다. 대표적인 기술로는 서버 가상화, 데스크톱 가상화 등이 있다. 아마존 웹 서비스, 마이크로소프트 애저, 구글 클라우드 플랫폼, 네이버 클라우드 플랫폼, Esxi, citrix Xen server 등) 플랫폼이다.

왜 필요한가? 에 대해선 이렇게 생각할 수 있겠다. IPv4체계의 IP부족 해결을 위해 CIDR을 사용하고, 대량의 데이터 처리를 위해 hadoop(MapReduce)를 사용하는 것 처럼.
CIDR의 경우는 원래 있던 네트워크 자원을 잘게 쪼개서 쓰는 개념이다. 3무조건 10개 들이 묶음으로 사야 했던 것을 5개들이 3개들이 2개 들이로 묶어서 파는 느낌 즉, 성능 좋은 컴퓨터가 열대 있는데 평소에는 이 컴퓨터 한대의 자원 10%밖에 안되는 작업을 10개 각각 돌리다보니 총 자원이 90%가 놀고 있는 것이 아닌가? 그럼 이걸 가상머신으로 쪼개서 써보자. 헌데 10대를 관리하기 힘드니까 10개를 하나로 묶어서 하나처럼 만든다음 이 안에서 가상머신을 만들어 써보자. 정도로 생각해볼 수 있겠다.

오픈스택은 구성 요소별로 다양한 코드 이름이 있는 모듈 방식의 아키텍처를 가지고 있다.
돌려 말하면 완전한 오픈스택 서비스를 위해서는 아래 모듈을 모두 설치 해야 한다는 말인가!!? 하고 질문 할 수 있지만 세상은 넓고 똑똑한 사람은 많다. Packstack이나, Devstack 등을 이용하면 (상대적으로) 쉽게 구성을 할 수 있다.

Nova : Coumpute (Hyperviser, 가상 서비스 엔진)
오픈스택 컴퓨트 (Nova)는 IaaS 시스템의 주가 되는 부분인 클라우드 컴퓨팅 패브릭 컨트롤러(fabric controller)이다.
컴퓨터 자원의 풀을 관리하고 자동화하도록 설계되어 있으며 베어 메탈, 고성능 컴퓨팅(HPC) 구성뿐 아니라 널리 이용 가능한 가상화 기술들과 함께 동작할 수 있다.
하이퍼바이저 기술(가상 머신 모니터)로서 KVM, VM웨어, 젠 중 하나를 선택할 수 있으며, 여기에 하이퍼-V 및 LXC와 같은 리눅스 컨테이너 기술을 함께 사용할 수 있다.

컴퓨트의 아키텍처는 어떠한 사유 하드웨어 및 소프트웨어 요구 사항 없이 표준 하드웨어 위에서 수평적 확장을 하기 위해 설계되어 있으며 레거시 시스템들과 서드파티 기술들과 연동하는 기능을 제공한다.

종단 간 성능을 모니터링하려면 Nova, Keystone, Neutron, Cinder, Swift 등의 서비스로부터 메트릭을 추적하는 것뿐 아니라 메시지 전달을 위해 오픈스택 서비스들이 사용하는 RabbitMQ의 모니터링이 필요하다.

Neutron
오픈스택 네트워킹(Neutron)은 네트워크와 IP 주소들을 관리하기 위한 시스템이다.
오픈스택 네트워킹은 네트워크가 병목 현상에 처하지 않도록 보증하며 심지어는 네트워크 구성을 통해서 사용자에게 자체 서비스 기능을 제공한다.

오픈스택 네트워킹은 각기 다른 애플리케이션이나 사용자 그룹을 위한 네트워킹 모델을 제공한다.
표준 모델은 서버와 트래픽을 분리시키는 VLAN이나 플랫 네트워크를 포함한다.
오픈스택 네트워킹은 IP 주소를 관리함으로써 전용 정적 IP 주소나 DHCP를 허용한다.
유동 IP 주소들은 트래픽이 IT 인프라스트럭처 안의 모든 리소스에 동적으로 이어질 수 있게 함으로써 사용자들은 유지보수나 실패 상황에서 트래픽을 다른 곳으로 넘겨줄 수 있다.

사용자들은 자신의 네트워크를 만들고 트래픽을 통제하며 서버와 장치들을 하나 이상의 네트워크에 연결할 수 있다.
관리자들은 오픈플로(OpenFlow)와 같은 소프트웨어 정의 네트워킹(SDN) 기술을 이용하여 높은 수준의 멀티테넌시와 막중한 규모를 지원할 수 있다.
오픈스택 네트워킹은 침입 탐지 시스템(IDS), 부하 분산, 방화벽, 가상 사설망(VPN)과 같은 추가 네트워크 서비스들을 배치시키고 관리할 수 있는 확장 프레임워크를 제공한다.

Cinder : Block Storage (우리가 쓰는 HDD,SSD 같은 저장소)
오픈스택 블록 스토리지(Cinder)는 오픈스택 컴퓨트 인스턴스에 사용할 지속적인 블록 레벨 스토리지 장치들을 제공한다.
블록 스토리지 시스템은 블록 장치들을 서버에 작성, 부착, 제거하는 일을 관리한다.
블록 스토리지 볼륨들은 클라우드 사용자들이 자신만의 스토리지의 필요한 부분을 관리하기 위한 대시보드 및 오픈스택 컴퓨트와 완전히 연동된다.
로컬 리눅스 서버 스토리지뿐 아니라 Ceph, 클라우드바이트, Coraid, EMC(ScaleIO, VMAX, VNX and XtremIO), GlusterFS, 히타치 데이터 시스템, IBM 스토리지(IBM DS8000, Storwize 계열, SAN 볼륨 컨트롤러, XIV 스토리지 시스템, GPFS), 리눅스 LIO, 넷앱, 넥센타, 님블 스토리지, Scality, 솔리드파이어, HP (스토어버추얼, 3PAR 스토어서브 계열), 퓨어 스토리지를 포함한 스토리지 플랫폼들을 사용한다. 블록 스토리지는 데이터베이스 스토리지, 확장 가능 파일 시스템과 같은 성능에 민감한 시나리오에 적절하며, 서버에 로우 블록 레벨 스토리지에 대한 접근을 제공한다.
스냅샷 관리는 블록 스토리지 볼륨에 저장된 데이터를 백업하는 강력한 기능을 제공한다.
스냅샷들은 새로운 블록 스토리지 볼륨들을 만들기 위해 사용하거나 복원할 수 있다.

Keystone : (인증, 사용자 식별)
오픈스택 아이덴티티(Keystone)는 사용자들이 접근할 수 있는 오픈스택 서비스들에 매핑되는 사용자들의 중앙 디렉터리를 제공한다.
클라우드 운영 체제를 통하는 공통 인증 시스템으로 활동하며 LDAP과 같은 기존의 백엔드 디렉터리 서비스들과 통합할 수 있다.
표준 사용자 이름과 암호 자격 정보, 토큰 기반 시스템, AWS 스타일(예: 아마존 웹 서비스) 로그인을 포함한 여러 형태의 인증을 지원한다.
또, 카탈로그는 단일 레지스트리의 오픈스택 클라우드에 배치된, 쿼리 가능한 모든 서비스 목록을 제공한다. 사용자들과 서드 파티 도구들은 사용자들이 어느 리소스에 접근할지를 프로그래밍적으로 결정할 수 있다.

Glance
오픈스택 이미지(Glance)는 디스크 및 서버 이미지를 위한 검색, 등록, 배급 서비스를 제공한다.
저장된 이미지들은 템플릿으로 사용이 가능하다. 수에 제한이 없는 백업본을 저장하고 카탈로그화하는데 사용할 수도 있다.
이미지 서비스는 Swift를 포함한 다양한 백엔드에 디스크와 서버 이미지들을 저장할 수 있다.
이미지 서비스 API는 디스크 이미지에 관한 정보를 조회하기 위해 표준 REST 인터페이스를 제공하며 클라이언트가 이미지를 새로운 서버에 스트리밍할 수 있게 한다.

Heat와 같이 이미지와 상호작용이 필요한 다른 오픈스택 모듈들은 Glance를 통해 이미지 메타데이터와 통신해야 한다.
또한, 노바는 이미지에 대한 정보를 표시할 수 있으며 인스턴스를 만들기 위한 이미지의 변경 사항을 구성한다. 한편, Glance는 이미지를 추가, 삭제, 공유, 복제할 수 있는 유일한 모듈이다.

Swift
오픈스택 오브젝트 스토리지(Swift)는 확장 가능한 여분의 스토리지 시스템이다.
오브젝트와 파일들은 데이터 센터 내 서버를 통해 퍼져있는 여러 개의 디스크 드라이브에 기록되며, 오픈스택 소프트웨어는 클러스터를 통한 데이터 복제 및 무결성을 보장하는 일을 맡는다.
스토리지 클러스터들은 단순히 새로운 서버들을 추가함으로써 수평적으로 확장한다. 서버나 하드 드라이브가 고장이 나면, 오픈스택은 활성화된 다른 노드의 내용물을 클러스터 내의 새로운 위치들로 복제한다.
오픈스택이 각기 다른 장치 간 데이터 복제 및 배포를 보증하는 소프트웨어 로직을 사용하기 때문에 비싸지 않은 하드 드라이브와 서버들을 사용할 수 있다.

Horizon : 대시보드 (사용자 인터페이스, Openstack 웹 페이지 등)
오픈스택 대시보드(Horizon)는 관리자와 사용자들에게 클라우드 기반 자원 배치의 접근, 제공, 자동화를 위한 그래픽 인터페이스를 제공한다.
설계는 청구, 모니터링, 추가 관리 도구와 같은 서드파티 제품과 서비스들을 수용한다. 대시보드는 또한 이용하기 원하는 서비스 제공자 및 기타 상용 벤더들을 위해 브랜드화가 가능하다.
대시보드는 사용자들이 오픈스택 자원들과 상호작용할 수 있는 여러 방법 가운데 하나이다. 개발자들은 네이티브 오픈스택 API나 EC2 호환 API를 사용하여 자원을 관리하기 위해 액세스를 자동화하거나 도구를 빌드할 수 있다.

Heat : Orchestration
Heat는 오픈스택 네이티브 REST API와 클라우드포메이션 호환 쿼리 API를 통해 여러 개의 복합 클라우드 애플리케이션들을 조직하기 위한 서비스이다.

Mistral
Mistral은 워크플로를 관리하는 서비스이다.
사용자는 보통 YAML 기반 워크플로 언어를 이용하여 워크플로를 작성한 다음 REST API를 통해 Mistral에 워크플로 정의를 업로드한다.
그 뒤 사용자는 이 워크플로를 동일한 API를 통해서 수동으로 시작하거나 일부 이벤트에 대해 워크플로의 시작을 작동시킬 수 있다.

Ceilometer
오픈스택 텔레메트리(Ceilometer)는 현재 및 미래의 모든 오픈스택 구성요소를 통해 고객 청구 확립이 필요한 모든 카운터를 제공하는, 청구 시스템을 위한 단일 연락 지점을 제공한다.
카운터 전달은 추적 및 감사가 가능하며, 카운터는 새로운 제품들을 지원하기 위해 쉽게 확장 가능하여야 하며 데이터 수집을 하는 에이전트들은 전체 시스템과는 독립적인 것이 좋다.

Trove
Trove는 관계형 및 비관계형 데이터베이스 엔진을 제공하는 서비스로서의 데이터베이스(database-as-a-service)이다.

Sahara : Elastic Map reduce
Sahara는 하둡 클러스터를 쉽고 빠르게 제공하기 위한 구성 요소이다. 사용자들은 하둡 버전 번호, 클러스터 토폴로지 유형, 노드 상세 정보(디스크 사용률, CPU, RAM 설정 정의)와 같은 여러 변수들을 지정하게 된다.
사용자가 모든 구성 요소들을 제공한 다음 Sahara는 수 분 안에 클러스터를 배치한다. Sahara는 또한 요청을 받으면 작업자 노드를 추가하거나 제거함으로써 기존의 하둡 클러스터를 확장하는 수단을 제공한다.

Ironic
Ironic은 가상 머신 대신 베어 메탈 머신을 준비시키는 오픈스택 프로젝트이다.
처음에는 노바 베어 메탈 드라이버로부터 분기되었고, 별도의 프로젝트로 발전해오고 있다.
베어메탈 하이퍼바이저 API이자, 베어 메탈 하이퍼바이저와 상호 작용하는 플러그인들의 집합으로 생각할 수 있다. 기
본적으로 PXE와 IPMI를 사용하여 머신을 예비하고 켜고 끌 수 있지만, Ironic은 벤더 특화 플러그인들을 지원, 확장하여 추가 기능을 구현할 수 있다.

Zaqar
Zaqar는 웹 개발자들을 위한 멀티테넌트 클라우드 메시징 서비스이다. 이 서비스는 완전한 RESTFul API로, 개발자들이 다양한 통신 패턴을 사용하여 SaaS와 모바일 애플리케이션들의 다양한 구성 요소 사이에 메시지를 보내는데 사용할 수 있다.
기반이 되는 이 API는 확장성과 보안을 염두에 두고 설계된 효율적인 메시징 엔진이다.
다른 오픈스택 구성 요소들은 Zaqar와 통합하여 이벤트를 최종 사용자에게 표현하고 클라우드 위의 계층에서 실행되는 게스트 에이전트와 통신할 수 있다.

Manila
오픈스택 공유 파일 시스템(Manila)은 오픈 API를 제공하여 벤더 독립적인 프레임워크 안의 공유물들을 관리한다.
초기 표준에는 공유물에 대한 작성, 삭제, 접근 권한 부여/거부 기능을 포함하며 독립적으로나 각기 다른 다양한 네트워크 환경에서 사용할 수 있다.
EMC, 넷앱, HP, IBM, 오라클, Quobyte, 히타치 데이터 시스템의 상용 스토리지 어플라이언스들뿐 아니라 레드햇 GlusterFS와 같은 파일시스템 기술 또한 지원된다.

Designate
Designate은 DNS를 관리하는 멀티테넌트 REST API이다.
이 구성 요소는 서비스로서의 DNS를 제공하며 PowerDNS, BIND를 포함한 수많은 백엔드 기술들과 호환된다.
하나의 테넌트마다 DNS 존을 관리하기 위해 기존의 DNS 서버와 상호 작용하는 등의 목적으로 DNS 서비스를 제공하지는 않는다.

검색 (Searchlight)
Searchlight는 다양한 오픈스택 클라우드 서비스를 통해 고급 및 일정한 검색 기능을 제공한다.
데이터를 ElasticSearch로 색인화함으로써 다른 오픈스택 API 서버로부터 사용자 검색 결과를 가져와서 성취된다.
Searchlight는 Horizon에 연동되고 있으며 명령 줄 인터페이스도 제공한다.

키 매니저 (Barbican)
Barbican은 기밀 정보의 스토리지에 보안을 제공하고 준비하고 관리하는 REST API이다.
단명하는 대형 클라우드를 포함한 모든 환경에 유용하게 쓰일 수 있도록 하는 것이 목적이다.


CentOS 8 Linux 설치

SuDO : SuperUser DO

CentOS 7 네트워크설정

이전 포스트 CentOS 설치 미디어(ISO) 다운로드 를 참고하여 CentOS 설치 이미지를 다운로드 하고 설치 미디어를 만들어 부팅한다.

정상적으로 설치 미디어로 부팅이 된다면 다음 절차들을 참고하여 설치를 진행한다.
※ 예시는 CentOS8을 기준으로 하였지만 CentOS7도 다르지 않다.

설치가 완료되면 재부팅한다.
root 패스워드를 설정하지 않았으므로 root 계정으로는 로그인할 수 없다.
sudo 명령을 이용해 권한을 바꿔가면서 작업 하는 것을 권장하지만 꼭 root 로 로그인 해야 한다면 아래를 참고하여 password를 변경하면 된다.

login as: haedong
haedong@192.168.103.176's password:
Last login: Wed Dec  9 15:08:34 2020 from 192.168.4.199
[centos7:/home/haedong:]$ sudo -i
[sudo] haedong의 암호:
[centos7:/root:]# passwd root
root 사용자의 비밀 번호 변경 중
새  암호:
새  암호 재입력:
passwd: 모든 인증 토큰이 성공적으로 업데이트 되었습니다.
[centos7:/root:]#

CentOS 설치 미디어(ISO) 다운로드

센트OS(영어: CentOS)는 센트OS 프로젝트에서 레드햇 제휴로 개발한 컴퓨터 운영 체제이다. 업스트림 소스인 레드햇 엔터프라이즈 리눅스와 완벽하게 호환되는 무료 기업용 컴퓨팅 플랫폼을 제공할 목적으로 만들어진 리눅스계 운영 체제 가운데 하나다. 6.4 버전부터 베타 버전은 파워PC에서 사용가능할 것으로 예상되지만, 공식적으로 물리 주소 확장 기능을 가진 x86과 x86-64 아키텍처를 지원한다.

레드햇 엔터프라이즈 리눅스의 소스 코드를 그대로 가져와 빌드해 내놓으며 이 과정에서 이루어지는 변형은 레드햇의 상표가 잘리고 그 자리에 CentOS의 상표가 붙는(상표권 분쟁을 피하기 위해) 정도뿐이다. 판수 또한 레드햇 엔터프라이즈 리눅스의 판수를 그대로 가져오며(소수점 아래 숫자는 업데이트 차수를 가리킨다) 오늘날에는 레드햇 엔터프라이즈 리눅스의 행보를 가장 잘 따라가는 운영 체제라고 알려져 있다. 사용하는 꾸러미 형식은 RPM이다. 1위키백과에서 발췌

즉, RedHat Enterprise Linux 와 같다.

미러 사이트 등을 통해서 iso 파일과, torrent 파일을 이용해 배포하고 있다.

정보와 설치 미디어는 CentOS 홈페이지에서 다운로드 할 수 있다.

또는

 

 

 

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개 행)

PostgresQL #.1 설치 및 구동

개요

PostgreSQL은 확장 가능성 및 표준 준수를 강조하는 객체-관계형 데이터베이스 관리 시스템(ORDBMS)의 하나이다. BSD 허가권으로 배포되며 오픈소스 개발자 및 관련 회사들이 개발에 참여하고 있다. 데이터베이스 서버로서 주요 기능은 데이터를 안전하게 저장하고 다른 응용 소프트웨어로부터의 요청에 응답할 때 데이터를 반환하는 것이이다. 소규모의 단일 머신 애플리케이션에서부터 수많은 동시 접속 사용자가 있는 대형의 인터넷 애플리케이션(또는 데이터 웨어하우스용)에 이르기까지 여러 부하를 관리할 수 있으며 macOS 서버의 경우 PostgreSQL은 기본 데이터베이스이다. 마이크로소프트 윈도우, 리눅스(대부분의 배포판에서 제공됨)용으로도 이용 가능하다. PostgresQL의 전신은 Ingres DB로 실제 프로젝트의 공식 명칭은 “post-Ingres” 데이터베이스이다.

설치

Postgresql 사이트에서 yum 리포지터리 RPM을 다운로드 받을 수 있다.

이렇게 제공된다. 아래 텍스트를 복사-붙여넣기 하여 설치하면 된다.
 # repository RPM 설치
 # 설치하면 postgresql repo 파일이 /etc/yum.repos.d 아래 생성된다.
[root@centos7:/root/]# yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
 # PostgresQL 설치
[root@centos7:/root/]# yum install -y postgresql12-server
 
 # 이렇게 설치 해도 된다.
[root@centos7:/root/]# yum install -y postgresql12-*

초기화
initdb를 이용해 데이터 디렉토리 생성 및 지정이 필요하다.
postgresql 서버를 설치하면 postgres 계정이 자동으로 생성되고 DBMS의 최고 권한은 이 postgres 계정이 가지게 된다. 서버 프로세스의 구동부터 모든 작업이 postgres 계정으로 진행되어야 하므로 디렉토리 생성등을 할 경우 postgres 계정에 모든 권한을 부여해야 한다.

 # DB 초기화 등 작업

 # 초기화 :  /var/lib/pgsql/12/data 가 데이터 디렉토리로 '자동'지정된다.
[postgres@centos7:/home/]$ /usr/pgsql-12/bin/initdb 
이 데이터베이스 시스템에서 만들어지는 파일들은 그 소유주가 "postgres" id로
지정될 것입니다. 또한 이 사용자는 서버 프로세스의 소유주가 됩니다.

데이터베이스 클러스터는 "ko_KR.UTF-8" 로케일으로 초기화될 것입니다.
기본 데이터베이스 인코딩은 "UTF8" 인코딩으로 설정되었습니다.
initdb: "ko_KR.UTF-8" 로케일에 알맞은 전문검색 설정을 찾을 수 없음
기본 텍스트 검색 구성이 "simple"(으)로 설정됩니다.

자료 페이지 체크섬 기능 사용 하지 않음

이미 있는 /var/lib/pgsql/12/data 디렉터리의 액세스 권한을 고치는 중 ...완료
하위 디렉터리 만드는 중 ...완료
사용할 동적 공유 메모리 관리방식을 선택하는 중 ... posix
max_connections 초기값을 선택하는 중 ...100
기본 shared_buffers를 선택하는 중... 128MB
기본 지역 시간대를 선택 중 ... Asia/Seoul
환경설정 파일을 만드는 중 ...완료
부트스트랩 스크립트 실행 중 ... 완료
부트스트랩 다음 초기화 작업 중 ... 완료
자료를 디스크에 동기화 하는 중 ... 완료

initdb: 경고: 로컬 접속용 "trust" 인증을 설정 함
이 값을 바꾸려면, pg_hba.conf 파일을 수정하든지,
다음번 initdb 명령을 사용할 때, -A 옵션 또는 --auth-local,
--auth-host 옵션을 사용해서 인증 방법을 지정할 수 있습니다.

작업완료. 이제 다음 명령을 이용해서 서버를 가동 할 수 있습니다:

    ./pg_ctl -D /var/lib/pgsql/12/data -l 로그파일 start
# 초기화 : -pgdata= 로 지정한 디렉토리가 지정된다. 
 # 이경우 지정한 디렉토리의 소유자는 postgres이어야 하고 모든 권한을 가져야 한다.
[root@centos7:/home/]# mkdir /home/postgres
[root@centos7:/home/]# chown -R postgres /home/postgres
 # 쉘에 주의하자 여기까지는 root 이다.
[postgres@centos7:/home/]$ mkdir /home/postgres/data
[postgres@centos7:/home/]$ /usr/pgsql-12/bin/initdb  --pgdata=/home/postgres/data

/usr/pgsql-12/bin/postgresql-12-setup initdb
systemctl enable postgresql-12
systemctl start postgresql-12

구동
initdb 작업 결과의 명령대로 구동하면 된다.

[postgres@centos7:/home/]$ /usr/pgsql-12/bin//pg_ctl -D /var/lib/pgsql/12/data -l /var/lib/pgsql/12/data/pgsql.log start
서버를 시작하기 위해 기다리는 중.... 완료
서버 시작됨

확인

[root@host0 bin]# netstat -nltp |grep postgres
tcp        0      0 127.0.0.1:5432          0.0.0.0:*               LISTEN      96383/postgres

CentOS swap 영역 해제하기

swap 의 사전적 의미. (daum 사전)

개요

Linux의 swap 메모리, swap 영역은 정확히 사전적 의미그대로의 영역을 말한다.
(윈도우는 가상 메모리)

CPU(Cache) – RAM – HDD (혹은 SSD를 포함하는 모든스토리지) 가 있는 컴퓨터는
사용자가 특정한 프로그램을 실행하면
1. HDD에서 필요한 데이터를 읽어서
2. RAM에 일정량을 저장하고
3. 다시 CPU의 Cache 메모리에 일정량을 저장하고
4. CPU에서 연산을 하고
5. 결과를 반환한다.


보통은 위 5단계에서 아무런 문제가 일어나지 않지만 요즘 게임을 하거나, 사진을 찍어서 편집을 하고 하다보면 메모리(RAM) 사용량이 늘어나는 것을 볼 수 있다.

예컨대 RAM이 4GB인데 동영상 편집을 할 때 동영상의 크기가 8GB를 넘어간다면?

바로 이 때 Paging(단편화1 복잡하게 생각 할 필요 없다. 책을 한권 램에 올려야 하는데 램의 크기가 작아서 페이지를 떼어서 올리는 것이라고 생각하면 된다. 우리가 실행하는 게임이건 포토샵이건 다 매 한가지다.) 이라는 작업이 일어나고 swapping 이 필요해 진다.

일단 동양상 편집을 위해 4GB램의 PC에서 8GB짜리 동영상을 로드하게 되면
1. 우선 HDD에 있는 8GB의 데이터 중 4GB의 데이터가 램으로 이동한다.
2. 사용자가 현재 램에 있는 4GB의 동영상 편집을 수행한다.

그런데 이 때 현재 램에 있는 4GB 말고 나머지 반쪽의 내용을 불러와야 한다면?
1. 현재 4GB의 동영상을 HDD의 스왑 파티션으로 이동한다. 2여기서 램에 있는 내용을 삭제 하지 않는 이유는 사용자가 아직 기존에 램에 있던 4GB의 데이터의 작업을 완료하지 않았기 때문이다.
2. HDD에 남아있던 나머지 뒤쪽 4GB를 램에 올린다.
3. 다시 편집 작업을 한다.

그래서 보통 물리 메모리(RAM)의 1배~2배 정도로 설정을 하는데 익히 알고 있다시피 HDD건, SSD건 RAM보다 느린데다가, swap 되는 데이터의 크기 두배3RAM에 있는 데이터를 읽어서, swap에 쓰고 다시 HDD의 데이터를 읽어서 RAM에 올려야 하므로swap으로 만큼 읽고 쓰기가 일어나므로 swapping 이 잦아지면 작업 지연이 생길 수 밖에 없다. 4지금이야 대부분의 PC에 SSD가 달려있어서 잘 못느끼지만 HDD가 주류이던 시절 게임을 하다 지역 이동을 하거나 할 때 본체의 빨간불이 깜빡이며 열심히 HDD가 돌아가고 화면이 멈춰있거나 느려지거나.. 경험 했을 것이다.

swap 영역 해제

 # 현재 swap 정보 확인
[root@centos7:~]# free -h
              total        used        free      shared  buff/cache   available
Mem:            62G        5.5G         54G        264M        2.9G         56G
Swap:           31G          0B         31G

[root@centos7:~]# blkid
/dev/sda1: UUID="d8888888-80c0-4156-8b73-6b5323dd2c01" TYPE="xfs"
/dev/sda2: UUID="p22222-84DI-Hvny-RZ7Z-FbHq-QBq2-tTl5yK" TYPE="LVM2_member"
/dev/sdb1: UUID="45555555-0ca0-4b99-86b5-33e45689fc10" TYPE="xfs"
/dev/mapper/centos-root: UUID="5999999-877a-4fe9-a464-5376cb476310" TYPE="xfs"
/dev/mapper/centos-swap: UUID="2333333-b2d1-4f58-9123-865739a3c2eb" TYPE="swap"    

 # 현재 swap 영역을 사용하고 있으면 해제할 수 없다.
 # swap 영역이 여러개일 때
[root@centos7:~]# swapoff  /dev/mapper/centos-swap

 # 현재 모든 swap을 해제 할 때
[root@centos7:~]# swapoff -a

# 해제 여부 확인.
 # swap 이 모두 0B인 것을 확인할 수 있다.
[root@centos7:~:]# free -h
              total        used        free      shared  buff/cache   available
Mem:            62G        7.7G         52G        161M        3.0G         54G
Swap:            0B          0B          0B
# swap 파티션 마운트 정보 변경
[root@centos7:~:]# vi /etc/fstab
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=d675d2d3-80c0-1234-8j72-6b5323dd2c01 /boot                   xfs     defaults        0 0
# type이 swap 인 파티션에 대해 주석 처리 해 준다.
# 삭제 해도 된다.
#/dev/mapper/centos-swap swap                    swap    defaults        0 0
/dev/sdb1       /data  xfs     defaults        0       0

NTP 설정 (서버 구축 & 클라이언트)

네트워크 타임 프로토콜(Network Time Protocol, NTP)은 패킷 교환, 가변 레이턴시 데이터 네트워크를 통해 컴퓨터 시스템 간 시간 동기화를 위한 네트워크 프로토콜이다. 1위키백과에서 발췌

동일한 시간을 사용해야 하는 장비들 간 시간을 동기화 하기 위한 프로토콜이다.
외부 서비스를 하지 않고, 단일 서버만 운영되는 경우는 큰 의미가 없을 수도 있으나, 네트워크로 연결 되어있고, 구성요소간 시간이 동일해야 하는 경우 2예: hadoop 클러스터간 동기화, 결재 서비스를 하는 서버가 여러대로 구축 되어있을 경우 등 NTP 서버를 기준으로 시간을 동기화 한다.

NTP 서버

설치

 [root@ntp-server: ~ ]# yum install -y ntp
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
everything-disc                                                                                                                                         | 2.9 kB  00:00:00
Resolving Dependencies
--> Running transaction check
중략
--> Finished Dependency Resolution

Dependencies Resolved

===============================================================================================================================================================================
 Package                             Arch                               Version                                              Repository                                   Size
===============================================================================================================================================================================
Updating:
 ntp                                 x86_64                             4.2.6p5-29.el7.centos                                everything-disc                             548 k
Updating for dependencies:
 ntpdate                             x86_64                             4.2.6p5-29.el7.centos                                everything-disc                              86 k

Transaction Summary
===============================================================================================================================================================================
Upgrade  1 Package (+1 Dependent package)
중략
Downloading packages:
No Presto metadata available for everything-disc
(1/2): ntpdate-4.2.6p5-29.el7.centos.x86_64.rpm                                                                                                         |  86 kB  00:00:00
(2/2): ntp-4.2.6p5-29.el7.centos.x86_64.rpm                                                                                                             | 548 kB  00:00:00
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                                                          5.8 MB/s | 635 kB  00:00:00
중략
Running transaction
  Updating   : ntpdate-4.2.6p5-29.el7.centos.x86_64                                                                                                                        1/4
중략
  Verifying  : ntp-4.2.6p5-28.el7.centos.x86_64                                                                                                                            4/4

Updated:
  ntp.x86_64 0:4.2.6p5-29.el7.centos

Dependency Updated:
  ntpdate.x86_64 0:4.2.6p5-29.el7.centos

Complete!

서버 구축을 위한 설정
이 꼭지에서 수정한 설정파일로 nptd를 구동한 서버는 ‘기준’ 이 된다.
이 서버를 바라보는 클라이언트들은 이 서버를 기준으로 시간이 동기화 된다.

 # 서버도 /etc/ntp.conf 클라이언트도 동일하게 /etc/ntp.conf 파일을 수정한다.
 # 설정 변경.
[root@ntp-server: ~ ]# vi /etc/ntp.conf
#이대로 붙여 넣는다.
restrict default kod nomodify notrap nopeer noquery
restrict -6 default kod nomodify notrap nopeer noquery
restrict 127.0.0.1
restrict -6 ::1
restrict 0.0.0.0 mask 0.0.0.0 nomodify notrap
 # 특별한 경로를 사용하는 경우만 여기서부터
includefile /etc/ntp/crypto/pw
keys /etc/ntp/keys
 # 여기까지 수정한다.
server 127.127.1.0 # local clock
fudge 127.127.1.0 stratum 3
 # 서버 시작
[root@ntp-server: ~ ]# service ntpd start
Starting ntpd:                                             [  OK  ]
 # 구동확인, NTPd는 123번 포트, UDP 프로토콜로 통신한다.
[root@ntp-server: ~ ]# netstat -nlup
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name
udp        0      0 192.168.4.160:123           0.0.0.0:*                               10290/ntpd
udp        0      0 192.168.4.254:123           0.0.0.0:*                               10290/ntpd
udp        0      0 127.0.0.1:123               0.0.0.0:*                               10290/ntpd
udp        0      0 0.0.0.0:123                 0.0.0.0:*                               10290/ntpd
udp        0      0 0.0.0.0:636                 0.0.0.0:*                               1013/portreserve
udp        0      0 192.168.4.160:53            0.0.0.0:*                               25447/named
udp        0      0 192.168.4.254:53            0.0.0.0:*                               25447/named
udp        0      0 127.0.0.1:53                0.0.0.0:*                               25447/named
[root@ntp-server: ~ ]# ntpq -pn
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*127.127.1.0     .LOCL.           3 l   39   64   37    0.000    0.000   0.004

동기화를 위한 클라이언트 설정

[root@ntp-client: ~ ]# vi /etc/ntp.conf
 # 아래에 NTP 서버의 IP만 고쳐서 붙여넣는다.
driftfile /var/lib/ntp/drift
restrict default nomodify notrap nopeer noquery
restrict 127.0.0.1
restrict ::1

 # 위에서 ntp 서버로 설정한 서버의 IP가 192.168.0.1 이라면
server 192.168.0.1 iburst

includefile /etc/ntp/crypto/pw
keys /etc/ntp/keys
disable monitor
 # 서비스 재시작. 시간 동기화는 꾸준히 해야 하기 때문에 데몬을 구동한다.
[root@ntp-client: ~ ]# service ntpd restart
 # 서버측과의 결과 값과 비교해 보자.
 # 현재 클라이언트의 시각과 딜레이등의 정보가 표시 되는 것을 확인할 수 있다.
[root@ntp-client: ~ ]# ntpq -pn
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 192.168.0.1   LOCAL(0)         4 u    1   64    1    0.683  197.879   0.081