2015년 1월 31일 토요일

openstack 설치 후 dashboard 실행 시 Could not reliably determine the server's fully qualified domain name 에러 해결 방법

대시보드까지 잘 들어가져서 성공적으로 설치된 줄 알았는데 'Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message' 이런 에러가 나오면서 인스턴스가 생성이 안되네요.

인터넷 검색해보니 간단한 방법으로 해결이 된다고 합니다.

1.  /etc/httpd/conf/httpd.conf 파일 수정하기

#  vi /etc/httpd/conf/httpd.conf

주석처리 되어 있는 ServerName의 주석을 해제하고 localhost를 입력하면 됩니다.

ServerName localhost

2. httpd 재시작하기

centos7 방화벽 끄기

centos7 방화벽 끄기

1. 방화벽 상태 확인하기

# systemctl list-unit-files | grep firewall
firewalld.service                           enabled

2. 방화벽 내리기

# systemctl stop firewalld

완전히 내리기

# systemctl disable firewalld

이상입니다.

2015년 1월 30일 금요일

openstack 구성 요소 알아보기 - Nova에 대하여

openstack 구성 요소 알아보기 - Nova에 대하여


nova는 openstack 초창기 모델부터 있었던 openstack의 필수 구성요소 중 하나입니다. nova는 중요한 요소이니만큼 하는 openstack 곳곳에서 하는 일이 많습니다. nova에 대해서 찾는데 잘 안나와서 외국 사이트 뒤져서 번역하고 의역을 했더니 조금 이해 안되시는 내용일 있을 수 있습니다.
지금부터 nova에 대해서 천천히 적어보겠습니다.

nova 개념도



openstack이 하는 일들을 구분하여 그림으로 나타낸 그림인데 빨간색으로 표시된 부분이 nova의 영향을 받는 부분입니다.

nova-api란?


  • Nova에서 중추적인 역할을 수행하는 데몬 

  • Nova-api는 openstack API 또는 EC2 API 쿼리에 다른 요소들과 연결이 가능한 매개체를 제공 

  • 인스턴스를 실행하는 것과 같은 대부분의 조직화 활동을 개시되게 하고 몇몇의 정책을 실행


nova-scheduler란?


  • 대기열로 부터 VM 인스턴스 요청을 수행하고 nova가 적정한 위치에서 실행되도록 결정

  • Nova-schedule은 스케쥴링을 위한 알고리즘을 운영할 수 있는 구조를 구현

nova-compute란?


  • Nova-compute는 VM 인스턴스를 생성하고 제거하는 역할을 하는 데몬

  • 대기열에서 작업을 수락하고 데이터베이스의 상태를 업데이트 하는 동안 KVM 인스턴스 시작과 같은 시스템 일련의 명령을 수행

nova-conductor란?


  • Nova-conductor는 grizzly 버전부터 생긴 모듈로 nova-compute와 데이터베이스 사이에서 상호작용을 조절하는 역할 수행

  • Nova-compute에 의해 만들어진 클라우드 데이터베이스에 직접 접근하여 제거하는 것을 목표로 함

nova-volume이란?


  • Nova-volume은 인스턴스들을 계산하기 위해 지속적인 볼륨들의 창조, 결합, 분리를 관리

  • Nova-volume은 다양한 디스크 유형의 볼륨들을 사용할 수 있음


nova-network란?


  • Nova-network는 대기열로 부터 네트워킹 업무들을 수행

  • 네트워킹 업무를 수행하면서 브리지 인터페이스를 셋팅하거나 방화벽 정책을 변경하는 등의 네트워크를 다루기 위한 작업을 수행함 

nova-dhcpbridge란?


  • Nova-dhcpbridge는 데이터베이스 안에 있는 dnsmasq dhcp-script 기능을 사용함으로써 IP 주소를 임대하고 기록하는 역할을 수행

console 관련 구성 요소들


  • Nova-consoleauth

  • Nova-novncproxy

  • Nova-xvpnvncproxy

  • Nova-cert



nova 동작 논리도


대표적으로 중요한 구성 요소들만 적어봤습니다. 이런 구성요소들이 모이면 nova 논리도를 만들게 됩니다. 논리도는 nalee의 IT 이야기를 참조했습니다.



openstack의 구성 요소 중 nova에 대해서 알아봤는데요 nova의 궁극적인 목적은 인스턴스를 생성, 삭제, 관리하며 사용자와 vm을 연결시켜주는 역할을 하는 것입니다. 

이상입니다.

2015년 1월 25일 일요일

centos 호스트 이름 변경하기

리눅스를 처음에 설치하면 개성없는 호스트 이름으로 설정이 됩니다. 좀 더 개성 있는 자신의 리눅스를 만들기 위해서 그리고 좀 더 효율적으로 리눅스를 관리하기 위해서 호스트 이름을 변경해주는 것이 좋습니다.


1. 호스트 이름 확인하기





▲ 밑에 나오는 것이 현재 자신의 리눅스 이름입니다.


2. 호스트 이름 변경하기

# vi /etc/sysconfig/network





▲ 위 처럼 'HOSTNAME = 호스트 이름' 이렇게 작성해주면 됩니다.


2-1. centos7 부터는 호스트 이름 변경 방식이 조금 달라졌는데요 우분투와 비슷하게 바뀌었다고 합니다.






▲ 기존의 방식에서 hostnamectl 이라는 명령어를 이용하여 변경하게 바뀌었습니다. centos7 부터 첫번째 방식으로 하면 변경이 안돼요.


3. 호스트 등록하기

# vi /etc/hosts








▲ 서버의 호스트 이름을 변경해주면 같은 대역대의 관리하는 서버들을 /etc/hosts 파일에 등록해주면 나중에 관리가 더 용이합니다.


4. 재시작하기

# shutdown -r 0


5. 확인하기





▲ 재부팅 후 위처럼 나오면 성공!

2015년 1월 20일 화요일

DB 백업의 종류에는 어떤 것이 있을까?

DB 백업에는 대표적으로 완전백업, 차등백업, 로그백업 총 세 가지가 있는데요. 이번에는 세 가지 백업 방식에 대해서 적어보도록 하겠습니다.

1) Full Backup


하나부터 열까지 모든 것을 백업하는 방식이에요. .mdf 파일에 들어있는 모든 데이터를 백업을 받습니다.
그런데 풀 백업이 이루어지는 동안에도 트랜잭션이 계속 진행되기 때문에 실제로는 아직 Commit되지 않은 작업이 백업 시 포함될 수 있습니다. 나중에 이 백업을 Restore 했을 때 Commit되지 않은 데이터가 들어있다면 좀 이상해지겠죠? 그래서 실제로 풀 백업을 받을 때는 현재 진행중인 트랜잭션에 대한 트랜잭션 로그도 함께 백업됩니다.
풀 백업이 중요한 것은, 풀 백업이 보관되어 있지 않다면 Differential Backup이나 트랜잭션 로그 백업을 아무리 열심히 받았어도 아무 소용이 없기 때문입니다.

2) Differential Backup (차등 백업 or 차분 백업)


이건 OS 백업 받을 때의 Differential Backup과 유사합니다. "가장 마지막에 Full Backup 받은 이후의 변경 부분에 대한 백업"입니다. 마지막에 받은 Differential Backup 이후의 변경사항을 백업 받는 것이 아닙니다. (SQL Server에는 Incremental Backup이란 개념이 없습니다.) 만약 10월 1일에 풀 백업을 받은 후 10월 5일, 10일 15일에 Differential 백업을 받았다면 DB를 15일자로 되돌리기 위해서는 10월 1일 풀 백업을 Restore한 후 15일자Differential 백업을 Restore하면 됩니다. (Intremental Backup과 달리 5일, 10일, 15일자를 모두 Restore할 필요가 없다는 거죠.)

3) Transaction Log Backup (로그 백업)


트랜잭션 로그 백업에 대해 이해하려면 먼저 트랜잭션 로그란 놈에 대해서 이해를 해야겠죠?
트랜잭션 로그란 SQL Server에서 실행되는 모든 SQL문을 기록한 로그입니다. 어느 세션이 어떤 SQL을 실행했는지가 순차적으로 기록됩니다. 우리가 트랜잭션을 Rollback 시켰을 때 Begin Tran 시점 이전으로 되돌릴 수 있는 것은 트랜잭션을 시작한 이후의 모든 작업내용이 트랜잭션 로그에 기록되어 있기 때문입니다 

로그 백업은 위의 데이터 백업과는 다른 몇 가지 특성이 있습니다.

① 일단 백업된 트랜잭션 로그는 자동으로 삭제됩니다. 이때 ldf파일 사이즈가 줄어들지는 않지만 ldf 내에서 로그가 삭제되기 때문에 해당 ldf 파일에는 새로운 로그를 기록할 수 있는 빈 공간이 확보됩니다. 따라서, 주기적으로 트랜잭션 로그를 백업 받으면, 별도로 로그를 삭제하지 않더라도ldf 파일이 계속 커지는 것을 방지할 수 있습니다.
② 트랜잭션 로그는 가지고 있는 최신 풀 백업 혹은 풀 백업 + DifferentialBackup 세트로부터 복원을 원하는 시점까지의 모든 백업 본이 존재하지 않으면 아무 의미가 없습니다. 백업 받은 로그 중 한 세트라도 분실하면 소용 없다는 의미입니다.  물론 풀 백업을 한번도 받은 적이 없다면 트랜잭션 로그는 소용없습니다.
③ 트랜잭션 로그가 온전하다면 Fault가 발생한 Database를 Fault 발생 직전의 시점으로 복원할 수 있습니다. 또한, 특정 시점으로의 Rollback 등 미세한 복원이 가능합니다.

AWS를 지탱하는 4가지 구성 요소



현재 클라우드를 논하는 데 있어 가장 많은 비중을 차지하는 서비스는 바로 아마존의 AWS일 것입니다. AWS는 현재 클라우드 서비스를 운영하는 업체들에 있어 많은 영감을 주었으며 사용하는 업체들도 많이 있을 정도로 클라우드의 대표라고 할 수 있습니다.

오늘은 AWS를 구성하는 요소들을 적어보겠습니다. AWS를 구성하는 요소는 크게 4가지로 나눌 수 있는데요.

4가지는 Storage, Computing, Networking, Database입니다. AWS를 구성하는 4가지 요소 지금부터 간력하게 적어보겠습니다.

1. Storage


1) Amazon S3 (Amazon Simple Storage Service)

Amazon S3는 미션 크리티컬한 데이터 및 기본 데이터 저장을 위한 내구성이 뛰어난 스토리지 인프라를 제공합니다.


객체는 지역 내에서 여러 시설의 여러 장치에 중복 저장됩니다.

AWS는 Amazon S3 버젼관리, AWS MFA (Multi-Factor Authentication), 버킷 정책 및

IAM(Identity and Access Management)을 통해 데이터 보존 및 보관을 위한 추가 보호 수단을 제공합니다.



2) Amazon EBS (Amazon Elastic Store)

Amazon EBS는 데이터 볼륨의 PIT (Point in Time) 스냅샷을 생성하는 기능을 제공합니다.

스냅샷은 새로운 Amazon EBS 볼륨을 시작하는 기점이 될 수 있으며 데이터를 장기간 보호할 수 있습니다.

일단, 볼륨을 생성하면 실행 중인 Amazon EC2 인스턴스에 연결할 수 있습니다.

Amazon EBS 볼륨은 인스턴스 수명과 관계없이 지속되는 오픈 인스턴스 스토리지를 제공합니다.


3) AWS Import/Export

AWS Import/Export 는 전송용 이동식 스토리지 장치를 사용하여 대용량 데이터를 AWS 에서 더욱 빠르게 이동할 수

있도록 지원합니다. AWS 는 Amazon 의 고속 내부 네트워크를 사용해 인터넷을 우회하여 스토리지 장치에서 직접

데이터를 송수신합니다. 용량이 큰 데이터 세트의 경우 AWS Import/Export 가 대개 인터넷 전송보다 빠르며

연결을 업그레이드하는 것보다 비용 효율성이 높습니다. AWS Import/Export 를 사용하여 Amazon S3 버킷

안팎으로 또는 EBS 스냅샷으로 데이터를 마이그레이션할 수 있습니다.


4) AWS Storage Gateway

AWS Storage Gateway 를 사용하면 AWS 클라우드 스토리지와 온 프레미스 애플리케이션 사이에 데이터를

원활하게 마이그레이션할 수 있습니다. AWS Storage Gateway 는 볼륨 데이터를 사용자 인프라 및 AWS 에 로컬로

저장합니다. 이를 통해 기존 온 프레미스 애플리케이션에서 데이터를 비용 효율적이고 안전하고 견고한 AWS

스토리지 인프라에 원활하게 저장하고 이 데이터에 액세스할 때의 지연 시간을 줄입니다.


2. Computing


1) Amazon EC2 (Amazon Elastic Compute Cloud)

Amazon EC2는 클라우드에서 규모를 자유 자재로 변경할 수 있는 컴퓨팅 파워를

제공합니다. 몇 분 이내에 EC2 인스턴스를 생성할 수 있는데, 이는 온전한 제어 권한이 귀하에게 있는 가상

머신입니다. 재해 복구 측면에서는 이처럼 귀하가 제어할 수 있는 가상 머신을 신속하게 생성할 수 있는 기능이

필수적입니다. Amazon EC2 의 모든 기능을 설명하는 것은 이 문서의 범위를 벗어납니다. 여기서는 재해 복구와

가장 밀접한 관련이 있는 Amazon EC2 의 측면을 중점적으로 다룹니다.


2) Amazon EC2 VM Import

Amazon EC2 VM Import 기능을 사용하면 가상 머신 이미지를 기존 환경에서 Amazon EC2 인스턴스로 손쉽게

가져올 수 있습니다.

3. Networking

1) Amazon Route 53

Amazon Route 53 는 가용성과 확장성이 높은 DNS (도메인 이름 시스템) 웹 서비스입니다. 이 서비스는 개발자와
기업이 매우 신뢰할 수 있고 비용 효율적인 방식으로 최종 사용자를 인터넷 애플리케이션에 라우팅할 수 있도록
설계되었습니다.
엘라스틱 IP 주소는 동적 클라우드 컴퓨팅에 적합하게 설계된 고정 IP 주소입니다. 그러나 기존의 고정 IP 주소와
달리 엘라스틱 IP 주소를 사용해 공인 IP 주소를 특정 지역 내에 있는 계정의 인스턴스에 프로그래밍 방식으로
다시 매핑하여 인스턴스 또는 가용 영역 장애를 마스킹할 수 있습니다. 재해 복구를 위해 대부분의 필수 시스템에
대한 IP 주소를 사전 할당하여 재해가 발생하기 전에 IP 주소를 미리 알 수 있습니다. 이로써 재해 복구 계획을
간단히 실행할 수 있습니다.


2) Elastic Load Balancing
Elastic Load Balancing 은 수신되는 애플리케이션 트래픽을 여러 Amazon EC2 인스턴스에 자동으로 분산합니다.
따라서 애플리케이션의 내결함성을 크게 높이고, 수신되는 애플리케이션 트래픽에 응답하는 데 필요한 로드
밸런싱 용량을 원활하게 제공할 수 있습니다. 엘라스틱 IP 주소를 사전 할당하는 것과 마찬가지로, Elastic Load
Balancer 를 사전 할당하여 DNS 이름을 미리 알 수 있어 재해 복구 계획을 간단히 실행할 수 있습니다.


3) Amazon VPC (Amazon Virtual Private Cloud)
Amazon VPC를 사용해 Amazon Web Services 클라우드에서 개인적이고 격리된
공간을 프로비저닝하고, 가상 네트워크를 정의해 AWS 리소스를 시작할 수 있습니다. 또한, IP 주소 범위, 서브넷
생성, 라우팅 테이블과 네트워크 게이트웨이의 구성을 선택하는 등 가상 네트워킹 환경을 완벽히 제어할 수
있습니다. 이렇게 하면 기업 데이터 센터와 VPC 를 VPN 으로 연결하여 AWS 클라우드를 기업 데이터 센터의
연장선으로 활용할 수 있습니다. 재해 복구 측면에서는 Amazon VPC 를 사용하여 기존 네트워크 토폴로지를
클라우드까지 확장할 수 있습니다. 이는 특히 일반적으로 내부 네트워크에 있는 기업 애플리케이션을 복구할
때에 적합합니다.


4) Amazon Direct Connect
Amazon Direct Connect 를 사용해 귀하의 프레미스에서 AWS 로 전용 네트워크를 간편하게 연결할 수 있습니다.
많은 경우, 이 서비스는 네트워크 비용을 줄이고, 대역폭 처리량을 높이며, 인터넷 기반 연결보다 더 일관된
네트워크 환경을 제공합니다.




4. Database


1) Amazon Relational Database Service (Amazon RDS)

Amazon RDS 를 사용해 클라우드에서 관계형 데이터베이스를 더욱 간편하게 설정, 관리 및 확장할 수 있습니다.

Amazon RDS 를 재해 복구 준비 단계에서 사용하여 이미 실행 중인 데이터베이스에 있는 중요 데이터를

보존하거나 복구 단계에서 사용하여 생산 데이터베이스를 실행할 수도 있습니다.


2) Amazon SimpleDB
Amazon SimpleDB는 데이터베이스 관리 작업 부담을 덜어주는 고가용성의 유연한 비관계형 데이터
스토리지입니다. 이 스토리지는 재해 복구 준비 및 복구 단계에서도 사용할 수 있습니다.

감사합니다.

2015년 1월 7일 수요일

centos7에서 방화벽 설정하기

Centos7부터는 기본적으로 iptables가 없습니다. 그래서 부득이하게 firewall이라는 방화벽을 이용해야 합니다.

centos 이전 버전처럼 iptables를 이용하는 방법은 있습니다.

# yum install -y iptables-services

위와 같이 iptables-services라는 것을 다운 받으면 이전의 iptables를 이용할 수 있습니다.

그러면 지금부터는 iptables의 대체자인 firewall 사용법에 대해서 적겠습니다.

방화벽에 추가하기


# firewall-cmd --permanent --zone=public --add-port=80/tcp


방화벽 확인하기


# vi /etc/firewalld/zones/public.xml

firewall은 재시작이 필요없습니다.

2015년 1월 6일 화요일

mysql 사용자 계정 생성 및 삭제

mysql에서 사용자 계정 생성 및 삭제하는 방법입니다.

1. 사용자 계정 생성

mysql>GRANT USAGE ON [database명].[table명] TO [user명]@[server명] IDENTIFIED BY ['패스워드'];

2. 생성된 사용자 계정 계정 권한 설정

mysql>GRANT ALL ON [database명].[table명] TO [user명]@[server명];  // 모든 권한 주기
mysql>GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,INDEX,ALTER ON [database명].[tabel명] TO [user명]@[server명];   // 특정 권한 주기

mysql>REVOKE ALL ON [database명].[table명] FROM [user명]@[server명];  // 모든 권한을 삭제
mysql>REVOKE DROP ON [database명].[table명] FROM [user명]@[server명];   // 특정 권한 삭제

3. 계정 권한을 새로 로드

mysql> FLUSH PRIVILEGES;

4. 사용자 계정 삭제

mysql>DROP USER [user명]@[server명];

감사합니다.

Nginx + SSL 서버 구축하기

ssl 인증서버를 nginx와 연동시키는 방법입니다.
기본적으로 nginx와 ssl module이 설치되어 있어야 합니다.

구축 순서는 SSL 인증키 만들기 -> nginx에 적용시키기 순으로 이어집니다.


SSL 인증서 만들기


1. 개인키(.key)와 인증서 서명 요청 파일을 생성합니다.

# openssl req -new -newkey rsa:2048 -nodes -keyout <파일명>.key -out <파일명>.csr

Generating a 2048 bit RSA private key
...+++
.............................................+++
writing new private key to '<파일명>.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:kr
State or Province Name (full name) []:korea
Locality Name (eg, city) [Default City]:seoul
Organization Name (eg, company) [Default Company Ltd]:jun's company
Organizational Unit Name (eg, section) []:infra team
Common Name (eg, your name or your server's hostname) []:jun
Email Address []:<이메일>

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:비밀번호
An optional company name []:비밀번호

주황색으로 된 부분만 알맞게 입력하시면 됩니다.

2. 파일 확인하기

# ls -al

-rw-r--r--  1 root root  1098 Jan  6 20:46 <파일명>.csr
-rw-r--r--  1 root root  1704 Jan  6 20:46 <파일명>.key

3. 자체 서명된 SSL 인증서 생성하기

# openssl x509 -req -days 365 -in <파일명>.csr -signkey <파일명>.key -out <파일명>.crt

4. password phase 삭제하기

# cp <파일명>.key <파일명>.key.secure
# openssl rsa -in <파일명>.key.secure -out <파일명>.key


nginx에 등록하기


1. nginx.conf 편집하기

# vi /usr/local/nginx/conf/nginx.conf 

HTTPS 섹션을 찾아서 변경해주세요.

 # HTTPS server
    #
    server {
        listen       443;
        server_name  localhost;
        
        ssl     on;
        ssl_certificate /root/192.168.137.61.crt;
        ssl_certificate_key     /root/192.168.137.61.key;
        ssl_session_timeout  5m;
        ssl_protocols SSLv2 SSLv3 TLSv1;
        ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
        ssl_prefer_server_ciphers   on;
    
        location / {
            root   <홈페이지 경로 예) /home/jun>;
            index  index.php index.html;  // html을 이용한다면 제일 첫 부분에 html로 변경
        }
    }

2. nginx에 ssl 모듈 있는지 확인하기

# /usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.7.7
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-11) (GCC)
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --with-http_ssl_module  // ssl_module 유무 확인

3. ssl 모듈 없으면 nginx 컴파일링하기

# ./configure --prefix=/usr/local/nginx --with-http_ssl_module

# make && make install

4. 설정 오류 검사하기

# /etc/init.d/nginx configtest
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

4-1. http로 접속 했을 경우에 https로 리다이렉션하기

# vi /etc/init.d/nginx

server {
        listen       80;
        server_name  192.168.137.61;
        rewrite ^(.*) https://192.168.137.61$1 permanent; // 이 줄을 추가하면 http://192.168.137.61로 접속하면 https로 바뀌어서 접속됩니다.

5. 재시작하고 확인

# /etc/init.d/nginx restart

웹 브라우저에서 http://홈페이지 주소