2015년 2월 21일 토요일

독립적으로 인스턴스를 관리할 수 있게 openstack 사용자 계정 생성하기

독립적으로 인스턴스를 관리할 수 있게 openstack 사용자 계정 생성하기

openstack을 구축했다면 관리자가 아닌 사용자 개념에서 인스턴스를 관리할 수 있도록 계정을 만들어줘야 합니다.
openstack을 매뉴얼대로 설치했다면 

# keystone role-list를 입력했을 때 _member_ 와 admin 두 역할이 출력됩니다.

admin은 흔히 알고 있는 관리자의 개념이고 _member_는 일반 사용자의 개념입니다.
관리 차원이 아닌 openstack을 이용하는 일반 사용자에게 계정을 생성해 주려면 admin이 아닌 _member_ 역할을 부여해야 합니다.

간단히 알고 가는 openstack 계정 상하관계



최상위 그룹은 role입니다. 어떤 role에 속하냐에 따라서 사용자의 계급이 정해지죠. 일반 사용자는 아무리 노력해도 관리자 권한을 얻지 못해요.

이제 사용자의 role이 정해지면 다음은 tenant별로 나뉘게 됩니다. 같은 tenant에 속한 사용자들은 가족이 되는거죠. 가족이 되면 보통 집안에 있는 모든 것을 공유하잖아요. 그래서 다른 사용자의 인스턴스를 관리할 수가 있게 됩니다. 

마지막으로 tenant에는 사용자 계정이 입주하게 됩니다. 일반 사용자는 자신의 계정을 통해 인스턴스를 생성하고 삭제하며 마음대로 자신의 방식대로 방을 꾸밀 수 가 있게 되는거지요.

인스턴스를 개별적으로 관리하기 위한 계정 생성 예

yankees라는 tenant에 입주할 사용자계정 jeter를 만듭니다.

# keystone user-create --name=jeter --pass=jeter_PASS --email=<이메일>
# keystone tenant-create --name=yankees --description="service"
# keystone user-role-add --user=jeter --role=_member_ --tenant=yankees

redsox라는 tenant에 입주할 사용자계정 ortiz를 만듭니다.

# keystone user-create --name=ortiz --pass=ortiz_PASS --email=<이메일>
# keystone tenant-create --name=redsox --description="service"
# keystone user-role-add --user=ortiz --role=_member_ --tenant=redsox

이렇게 계정을 만들면 _member_라는 같은 role을 가진 두 개의 각기 다른 tenant와 user를 만들 수 있습니다. 물론 tenant가 다르니 jeter와 ortiz는 서로 무슨 인스턴스를 가지고 있는지 모르게 됩니다. 하지만 admin role을 가진 관리자는 이 둘의 인스턴스를 모두 들여다 볼 수 있습니다. 

조금씩 틀린 내용이 있을 수 있으니 지적 환영합니다.

이상~!

2015년 2월 17일 화요일

vsftpd를 이용한 ftp 서버에 filezilla로 파일 업로드하기

vsftpd를 이용한 ftp 서버에 filezilla로 파일 업로드하기



리눅스에 vsftpd를 이용해서 ftp 서버를 구축했다면 파일 업로드까지 해봐야 마무리를 지은거라고 할 수 있죠. 그래서 이번에는 ftp 서버에 파일을 업로드하는 방법을 적어보겠습니다.


준비물

◎ vsftpd로 구축한 frp 서버(centos 6.6 기준입니다.)
◎ 클라이언트에 설치된 filezilla
◎ 업로드용 파일

1. cmd 창에서 업로드 해보기

윈도우 시작 키 + r  -> cmd 입력

cmd 창에서 밑에 처럼 입력하여 자신의 ftp 서버에 접속해주세요.



다음 테스트로 아무 파일이나 업로드해주세요.
밑에 처럼 파일이 정상적으로 올라간다면 일단은 테스트 환경이 구축된 것입니다.





2. filezilla로 업로드해보기

vsftpd를 기본적인 설정으로 설치했다면 filezilla로 ftp 서버에 접속한다면 이런 메시지를 보시게 될 것입니다.

filezilla는 기본적으로 패시브모드를 지원하기 때문에 ftp 서버에서 패시브 모드 설정을 해주어야 합니다.

여기서 패시브와 액티브의 차이를 간략하게 설명하자면, 서버와 클라이언트는 각자 지정된 ftp 전송 포트를 가지고 있습니다. 
각자 command와 data용 포트를 가지고 있는데 서버는 cmd 21번, data20번이고 클라이언트는 1024번 포트 부터 마지막번 포트 중 사용하지 않는 임의의 포트를 cmd용 data용으로 지정하여 사용합니다.

액티브 모드 전송 방식


액티브 모드로 filezilla를 통해 서버에 접속한 클라이언트는 서버에 원하는 포트를 열어달라고 요청을 합니다. 하지만 ftp는 20번 포트만 데이타 전송 전용 포트로 열고 있어 대부분의 유저들은 방화벽에 막히게 되어 filezilla 유저들은 파일 전송에 실패합니다. (아마도 윈도우 자체 ftp 서비스는 20번 포트만 열어달라고 요청을 하기 때문에 액티브 모드에서도 전송이 잘 되는 것 같습니다.)

정리하자면, 액티브 모드는 클라이언트가 갑이 되어 자신이 접속하고자 하는 포트만 찾게 되고 자신이 원하는 포트가 막혀있으면 전송자체가 되지 않는 시스템입니다. 중요한건 클라이언트가 갑! 서버가 을! 

패시브 모드 전송 방식




패시브 모드는 클라이언트의 갑의 횡포를 길들이기 위해 탄생했습니다. 액티브 모드에서 클라이언트가 갑이었다면 패시브 모드에서는 역으로 서버가 갑이 되어 20번 포트만 원하는 클라이언트에 맞서기 위해 임의의 포트를 열고 기다리고 있습니다. 

여기서 서버가 열고 있는 포트는 1024 ~ 65535 포트 중 동시에 받고자 하는 클라이언트의 수에 맞춰집니다. 이렇게 포트를 열고 있으면 클라이언트는 20번 포트를 거치지 않고 패시브모드용 포트를 통해 자료를 주고받고 할 수 있게 됩니다.
패시브 모드에서 중요한 건 서버가 갑! 클라이언트가 을!


3. ftp 서버 vsftpd 설정 변경하기

# vi /etc/vsftpd/vsftpd.conf

밑의 내용을 추가해주세요.

pasv_enable=YES
pasv_min_port=50001
pasv_max_port=50010  // 임의로 50001 ~ 50010 포트를 열고 대기하도록 지정했습니다.

# vi /etc/sysconfig/iptables

iptables에 50001:50010 포트를 등록해줍니다.

# /etc/init.d/vsftpd restart
# /etc/init.d/iptables restart

4. filezilla로 접속하기

아까랑 같은 방법으로 filezilla를 통해 ftp 서버에 접속시도합니다.

이번에는 마지막 줄에 succesful이라는 문구나 나오는 것을 볼 수 있습니다~!
이제 마음대로 파일을 업로드하고 다운로드 할 수 있습니다.

이상~! 

2015년 2월 15일 일요일

fdisk를 이용하여 lvm superblock 만들기

fdisk를 이용하여 lvm superblock 만들기

이번 포스트는 여러 물리 하드디스크를 논리적으로 하나의 하드디스크로 만드는 lvm에 대해서 적어보겠습니다. 요새 openstack을 자주 하다보니까 은근히 기본기도 탄탄해지는 것 같습니다. 
제가 테스트하는 서버의 상태는 물리 하드디스크 4개를 연결시켰고 하드 1개는 부팅과 root 디렉토리로 쓰고 있고 나머지 3개는 openstack 블록 스토리지용으로 사용을 하려고 합니다.

1. fdisk로 물리볼륨 생성하기

# fdisk -l // 현재 이용가능한 하드디스크 확인


저는 sdb, sdc, sdd 세개 하드디스크에 볼륨이 생성되어있지 않습니다. 

# fdisk /dev/sdb  // sdb에 볼륨을 생성하기 위해 fdisk를 이용합니다.
① n: 새로운 볼륨 생성
② p: 프라이머리 파티션 생성
③ 1: 파티션 숫자
④ 용량 설정 그냥 엔터 누르면 자동으로 용량 모두 사용
⑤ t: 볼륨 타입 설정
⑥ 8e: LVM 볼륨 타입
⑦ p: 설정한 내용 보기
⑧ w: 저장하고 종료

sdb를 했으니까 같은 방법으로 sdd까지 합니다.

2. pvcreate로 물리볼륨을 논리볼륨으로 변경

# pvcreate /dev/sdb1
Physical volume "/dev/sdb1" successfully created
# pvcreate /dev/sdc1
Physical volume "/dev/sdb1" successfully created
# pvcreate /dev/sdd1
Physical volume "/dev/sdb1" successfully created

3. vgcreate로 물리볼륨을 하나로 합침

# vgcreate (원하는 블록 이름 지정) /dev/sdb1 /dev/sdc1 /dev/sdd1

# vgdisplay


4. lvcreate로 합친 물리 볼륨을 하나의 논리볼륨으로 구성

# lvcreate -l 228930 -n super_block1 super_block  // 숫자 부분은 vgdisplay 입력 후 나오는 Free PE 부분의 숫자 입력

# lvdisplay /dev/super_block/super_block1


5. 파일시스템 생성

# mkfs.ext4 /dev/super_block/super_block1  // 논리파티션 파일시스템 작성

6. 마운트 및 오토마운트 설정

# mkdir /data1
# mount /dev/super_block/super_block1 /data1
# vi /etc/fstab
밑의 줄을 설정 파일에 추가
/dev/super_block/super_block1    /data1     ext4     defaults     0  0 

이것으로 재부팅 후에도 추가적인 작업 없이 새롭게 추가된 논리볼륨을 이용할 수 있습니다.

이상~!

2015년 2월 14일 토요일

centos에 vsftpd 설치하기

centos에 vsftpd 설치하기

윈도우에서 리눅스에 파일을 업로드하기 위해서는 리눅스 서버에 ftp를 설치해야 합니다. 그래서 이번에는 파일을 업로드하기 위해서 vsftpd를 설치하도록 하겠습니다. vsftpd는 많은 리눅스 개발 단체에서 기본 ftp 데몬으로 사용하고 있을 정도로 활용성과 보안면에서 뛰어난 데몬이라고 합니다. 

vsftpd는 centos 6.6에서 설치했습니다.

1. vsftpd 설치하기

# yum install -y vsftpd

2. vsftpd.conf 설정하기

# vi /etc/vsftpd/vsftpd.conf

밑에 해당하는 줄을 찾아서 다음과 같이 변경합니다.

anonymous_enable=NO  //익명 접속 가능 여부
local_enable=YES  // 로컬 계정 사용자의 접속 허용 여부
write_enable=YES  // write 명령어 허용 여부
local_umask=022  // 로컬 계정 사용자용 umask
xferlog_enable=YES  // 파일 전송 로그 기록 여부
connect_from_port_20=YES  // 20번 포트로 접속 허용 여부
xferlog_file=/var/log/xferlog  // 파일 전송 로그 파일명
xferlog_std_format=YES  // xferlog 표준 포맷으로 로그를 남길지 여부
chroot_local_user=YES  // 사용자의 홈 디렉토리를 변경 제한을 위한 설정
listen=YES  // standalone으로 운영하려면 YES
pam_service_name=vsftpd  // PAM 파일명을 지정
userlist_enable=YES
tcp_wrappers=YES

3. 방화벽에 포트 추가

# vi /etc/sysconfig/iptables

밑의 줄을 추가합니다.

-A INPUT -m state --state NEW -m tcp -p tcp --dport 20:21 -j ACCEPT

4. 데몬 재시작 및 chkconfig에 등록

# /etc/init.d/iptables restart
# /etc/init.d/vsftpd start
# chkconfig vsftpd on

이상~!


mysql 데이터 타입

mysql 데이터 타입


리눅스를 사용하시는 분들 중에 mysql 안 만져보신 분들은 없을텐데요. 저도 mysql을 다루어 보면서 데이터베이스를 공부하고 있습니다.​ 이번 포스트는 mysql의 데이터 타입에 대해서 적어보도록 하겠습니다. 

▶ char 데이터 타입

char와 varchar의 공통점은 모두 텍스트 기반 데이터 타입이라는 것입니다. 두개로 나눈 것은 차이점이 있기 때문인데 차이점은 용량 할당방식에 있습니다. char는 욕심쟁이처럼 처음에 지정해주는 용량을 모두 사용(임의의 텍스트로 채움)하는 반면 varchar는 처음에 지정한 용량이 있다고 하더라고 필요한 만큼만 사용하고 나머지는 빈공간으로 남깁니다. varchar가 무조건 좋은 것은 아닌데 varchar는 오버헤드가 필요하기 때문에 한국사람 이름 같이 길이가 일정한 데이터가 많을 경우에는 char가 더 효율적이라고 할 수 있습니다.

타입명사용되는 바이트설명
char(n)n ≤ 255char는 처음에 지정한 바이트 숫자가 용량으로 할당된다.
예) char(5) 'jun'은 5바이트, char(50) 'jun'은 50바이트
varchar(n)n ≤ 65535varchar는 사용한 바이트만큼만 용량으로 할당된다.
예) varchar(5) 'jun'은 3바이트, varchar(50) 'jun'도 3바이트

▶ binary 데이터 타입

binary 데이터 타입은 관련된 문자 세트가 없는 문자의 전체 바이트를 저장하는데 사용됩니다.

타입명사용되는 바이트설명
binary(n) 
byte(n)
n ≤ 255char의 형태로 바이너리 데이터를 가진다.
varbinary(n)n ≤ 65535varchar의 형태로 바이너리 데이터를 가진다.


▶ text와 varchar 데이터 타입

text와 varchar는 비슷하지만 작은 차이점이 있습니다. 
눈에 띄는 차이점은 길이 차이입니다. varchar보다 text가 훨씬 깁니다.
다른 차이점은 varchar는 index가 가능하지만 text는 index가 불가능합니다.
그래서 검색에는 varchar가 더 용이합니다.

타입명사용되는 바이트설명
tinytext(n)n ≤ 255문자열로 취급한다.
text(n)n ≤ 65535문자열로 취급한다.
mediumtext(n)n ≤ 16777215문자열로 취급한다.
longtext(n)n ≤ 4294967295문자열로 취급한다.

▶ BLOB 데이터 타입

BLOB(Binary Large OBject)는 65535 바이트를 넘는 바이너리 데이터에 유용합니다. 하지만 기본값을 가질 수 없습니다.


타입명사용되는 바이트설명
tinyblob(n)n ≤ 255바이너리 데이터로 취급한다.
blob(n)n ≤ 65535바이너리 데이터로 취급한다.
mediumblob(n)n ≤ 16777215바이너리 데이터로 취급한다.
longblob(n)n ≤ 4294967295바이너리 데이터로 취급한다.

▶ 
숫자형 데이터 타입

타입명사용되는 바이트최소값최대값
tinyint1-128
0
127
255
smallint2-32768
0
32767
65535
mediumint3-8388608
0
8388607
16777215
int or integer4-2147483648
0
2147483647
4294967295
bigint8-9223372036854775808
0
9223372036854775807
18446744073709551615
float4-3.40E+45
(no unsigned)
3.40E+45
(no unsigned)
duble or real8-1.7976E+320
(no unsigned)
1.7976E+320
(no unsigned)

이상~!

mysql에서 테이블과 컬럼 생성, 수정, 삭제하는 방법

mysql에서 테이블과 컬럼 생성, 수정, 삭제하는 방법

mysql을 설치하고 나면 데이터베이스를 생성하고 테이블에 데이터를 입력하는 단계를 거칩니다. 이번 포스팅에서는 테이블과 컬럼을 생성하고 수정하고 삭제하는 과정을 간략하게 설명해보았습니다.

▶ 테이블 생성
mysql> create table [테이블명] (컬럼명 타입, 컬럼명 타입);  // 타입은 다양하지만 기본적으로 사용하는 타입은 varchar, char 같은 문자형 타입, int 같은 숫자형 타입이 있습니다. 더 자세한 내용은 밑의 하이퍼링크를 눌러주세요.

▶ 테이블 삭제
mysql> drop table [테이블명];

▶ 테이블명 수정
mysql> alter table [테이블명] rename [변경할테이블명];

▶ 컬럼 추가
mysql> alter table [테이블명] add [컬럼명] [타입] [옵션];
예) alter table [테이블명] add [컬럼명] varchar(20) not null '';

▶ 컬럼 삭제
mysql> alter table [테이블명] drop [컬럼명];

▶ 컬럼명 변경 및 타입 변경
mysql> alter table [테이블명] change [컬럼명] [변경할컬럼명] varchar(12);

▶ 컬럼 타입 수정
mysql> alter table [테이블명] modify [컬럼명] varchar(14);

이상~!

링크 클릭! mysql 데이터 타입

mysql 테이블에 있는 데이터 삭제하기

mysql 테이블에 있는 데이터 삭제하기

mysql에 컬럼을 잘못 입력하거나 내용을 잘못 입력했을 경우 수정하는 방법도 있지만 아예 지우고 다시 하는 방법이 가장 편할 때가 있습니다. 저도 이번에 테이블에 있는 데이터가 꼬이는 바람에 테이블의 데이터를 삭제하는 방법을 이용했습니다.

# mysql -u root -p // mysql에 접속합니다.

mysql> use 데이터베이스;
mysql> show tables;
mysql> delete from 테이블명 [where 검색조건]; 
delete from 테이블명 뒤에 별도의 조건을 입력하지 않으면 해당 테이블의 데이터가 모두 삭제됩니다.

* 사용 예 

mysql> delete from instance where name = jun;
mysql> delete from instance where size = 20;

이런 식으로 지우고자 하는 조건들을 입력하면 조건에 해당하는 데이터만 삭제됩니다.

이상~!

2015년 2월 8일 일요일

yum repository가 꼬였을 경우 yum 초기화하기

yum repository가 꼬였을 경우 yum 초기화하기

yum 명령어를 이용해서 어플리케이션을 설치하다보면 가끔 repository가 꼬여서 yum install 등 옵션이 먹히지 않게 됩니다. 저 같은 경우는 openstack repository를 설치하다가 이런 경우가 몇 번 있었는데요. 간단하게 해결할 수 있는 방법이 있어서 글을 적어봅니다.

1. /etc/yum.repos.d/ 이동해서 repository 지우기

# cd /etc/yum.repos.d/ //repository 저장 디렉토리로 이동 
# ls -al  // repository 확인
# rm -f 삭제할 repository  // base는 지우시면 안돼요. 지웠다가 낭패 봤어요...
# ls -al  // 확인

2. /var/cache/yum/에서 캐쉬디렉토리 삭제

# cd /var/cache/yum/
# ls -al // 캐쉬 디렉토리 확인
# rm -rf x86_64

3. headers, packages, metadata 삭제

# yum clean headers
# yum clean packages
# yum clean metadata

2015년 2월 7일 토요일

gz와 bz2 압축하기와 압축해제하기

gz와 bz2 압축하기와 압축해제하기

1. gzip 압축하기와 압축해제하기

- 압축하는 방법
# gzip 파일명

- 압축해제 방법
# gzip -d 파일명.gz 
# gunzip 파일명.gz  // 2가지 방법 존재


2. bzip2 압축하기와 압축해제하기

- 압축하는 방법
# bzip2 파일명

- 압축해제 방법
# bzip2 -d 파일명.bz2 
# bunzip2 파일명.bz2  // 역시 2가지 방법 존재

단, 파일명.tar.gz는 tar 압축해제 방법으로 해제!

2015년 2월 2일 월요일

glance 설치 중 CRITICAL glance [-] ValueError: Tables "migrate_version" have non utf8 collation, please make sure all tables are CHARSET=utf8 에러를 만났을 때

glance 설치 중 CRITICAL glance [-] ValueError: Tables "migrate_version" have non utf8 collation, please make sure all tables are CHARSET=utf8 에러를 만났을 때

glance table을 생성하다 보면 'CRITICAL glance [-] ValueError: Tables "migrate_version" have non utf8 collation, please make sure all tables are CHARSET=utf8' 이런 에러를 만날 수 있습니다. 이런 에러가 나오면 table이 제대로 생성이 안되는 현상이 나타납니다. 저 에러는 /var/log/glance/api.log의 맨 밑에서 찾아볼 수 있습니다.

이 에러가 나오면 당황하지 말고 mysql에 해당 명령어를 입력해주면 됩니다.

# mysql -u root -p
mysql> use glance;
mysql> alter table migrate_version convert to character set utf8 collate utf8_unicode_ci;
mysql> flush privileges;
mysql> exit

다시, 
# su -s /bin/sh -c "glance-manage db_sync" glance 
해당 명령어를 입력하면 테이블에 올바르게 생성된 것을 볼 수 있습니다.