UCloud

오픈소스 비즈니스 컨설팅
둘러보기로 가기 검색하러 가기

UCloud biz를 정리 합니다.

UCloud Architecture

분류 FOSS 상용 S/W
Cloud OS
  • CloudStack 2.x / Apache 2.0 : IaaS 관리
  • Platespin : P2V migration
  • enStratus : Auto Provisioning, Scale-out/up Solution
  • HAProxy
Hypervisor
Storage
  • RRDTool : Round Robin Database Tool
Manage
Automation
  • Chef : 서버 설치 및 구성 자동화
Monitoring
  • Nagios : 물리서버, Network 모니터링
  • Cacti : 모니터링 Data History 관리, Reporting
  • CAMS : VM 및 Middleware 모니터링
  • Zabbix : 모니터링
  • Collectd : System과 Network 성능정보 모니터링
Logging & Analyze
  • Splunk : 시스템 로그 정보 수집 및 분석 -> Zabbix
  • syslog-ng : syslog 프로토콜을 구현, syslog 정보를 가져옴

UCloud 기본 설정

  • CentOS 6.4 x86_64 서버를 설정 합니다.

Server 준비

  • 방안 1 : UCloud 사이트에서 서버를 신청 합니다.
  • UCloud 사용시 Port Forwarding 설정
  • "클라우드 콘솔 -> 네트워크 -> [서버 선택] -> Port Forwarding" 메뉴에서 22/tcp 등록
  • 22 port는 SSH 포트로서 ssh와 sftp (SSH File Transfer Protocol)에서 사용 합니다.
  • 방안 2 : Oracle VirtualBox에서 가상 서버를 구축 합니다.
  • 가상 서버의 Memory를 1024 MB 이상을 설정하여야 GUI 화면이 뜨면서 제대로 설치가 됩니다.
  • VirtualBox Network 설정 참조
  • Network Adapter 1 : NAT
  • Network Adapter 2 : 호스트 전용 어댑터
  • "VirtualBox Host-Only Ethernet Adapter" 설정
  • VirtualBox에서 "파일 -> 환경 설정 -> 네트워크 -> VirtualBox Host-Only Ethernet Adapter" 메뉴를 선택 합니다.
  • 어댑터
  • IPv4 주소 : 192.168.56.1
  • IPv4 서브넷 마스크 : 255.255.255.0
  • DHCP 서버
  • 서버 사용함 선택
  • 서버 주소 : 192.168.56.100
  • 서버 마스크 : 255.255.255.0
  • 최저 주소 한계 : 192.168.56.101
  • 최대 주소 한계 : 192.168.56.254

CentOS 설치

  • 설치시 "Basic Server"를 선택하여 설치 합니다.
  • Network 카드 재기동
ifconfig -a                             #--- Network 카드별로 IP 값이 표시되지 않으면 아래 실행

vi /etc/sysconfig/network-scripts/ifcfg-eth0
    ONBOOT=yes

vi /etc/sysconfig/network-scripts/ifcfg-eth1
    ONBOOT=yes

service network restart
ifconfig -a                             #--- Network 카드별로 IP값이 표시되는 지 확인
  • Putty로 eth1에 할당된 IP를 사용하여 접속 합니다.
  • UTF-8 설정
  • "창 -> 변환 -> 수신한 데이터를 이 문자셋으로 가정" 에서 "UTF-8"을 선택 합니다/
  • 작업 폴더 생성
mkdir /appl

mkdir /cloudnas
cd /cloudnas

mkdir backup
mkdir bin
mkdir config
mkdir custom
mkdir database
mkdir install
mkdir logs
mkdir template
mkdir www
cd www
mkdir html
  • vi ~/.bashrc
### ----------------------------------------------------------------------------
###     Linux Bash Shell 설정
### ----------------------------------------------------------------------------
alias dir='ls -alF'
alias dird='ls -alF | grep /' 

export LANG=ko_KR.utf8

### ----------------------------------------------------------------------------
###     Linux Bash Shell Script를 위한 설정
### ----------------------------------------------------------------------------
export CONFIG_DIR=/cloudnas/config
export DOCUMENT_SUB=none

if [ [ $DOCUMENT_SUB = 'none' ] ]; then                  #--- 복사하여 붙일때는 여기에 빈공백을 제거하세요
    CDPATH=.:/cloudnas/www/html:/cloudnas:/appl
else
    CDPATH=.:/cloudnas/www/html/$DOCUMENT_SUB:/cloudnas:/appl
fi
PATH=$PATH:/cloudnas/bin
  • .bashrc 실행
cd
. .bashrc

Network Setting

  • Network 설정 파일 확인
ifconfig -a                                #--- Network 카드의 이름을 확인 합니다. (lo, eth0, eth1)

cd /etc/sysconfig/network-scripts/
ls -alF ifcfg-*
  • vi /etc/sysconfig/network-scripts/ifcfg-eth0
#--- eth0 네트워크 카드에 DHCP 설정시
DEVICE=eth0
HWADDR=08:00:27:C5:DB:97
TYPE=Ethernet
UUID=4ccc4e1f-1ac3-42b7-8085-2f1f6ce969f0
ONBOOT=yes                                #--- no로 되어 있으면 yes로 수정 합니다.
NM_CONTROLLED=yes
BOOTPROTO=dhcp                            #--- DHCP를 사용하여 자동으로 IP를 할당 받도록 합니다.
DNS2=168.126.63.1
DNS1=164.124.101.2
USERCTL=no
PEERDNS=yes
IPV6INIT=no
  • ONBOOT가 no로 되어 있을 경우 yes로 수정한 후 network 카드를 동작하도록 하는 방법
ifdown eth0
ifup eth0
ifconfig -a
  • vi /etc/sysconfig/network-scripts/ifcfg-eth1
#--- eth1 네트워크 카드에 고정 IP 설정시
DEVICE=eth1
HWADDR=08:00:27:83:B8:E2                      #--- 원래 있던 값을 사용
TYPE=Ethernet
UUID=10ccad3a-9217-4092-a590-07537033eefb     #--- 원래 있던 값을 사용
ONBOOT=yes
IPADDR=192.168.56.151                         #--- 호스트 전용 네트워크에 설정된 값을 참조하여 설정
NETMASK=255.255.255.0                         #--- 호스트 전용 네트워크에 설정된 값을 참조하여 설정
GATEWAY=192.168.56.1                          #--- 호스트 전용 네트워크에 설정된 값을 참조하여 설정
USERCTL=no
IPV6INIT=no
PEERDNS=no
BOOTPROTO=static
  • network 카드를 재기동 합니다.
service network restart
ifconfig -a
  • eth1에 설정된 IP 정보로 putty를 사용하여 다시 접속 합니다.
  • vi /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=cloud001.cloudserver.com             #--- 호스트명과 도메인명 지정
  • 명령행에서 hostname과 domainname 설정
hostname cloud001
domainname cloudserver.com
  • vi /etc/hosts
#--- 파일의 최상단에 eth1에 설정된 IP로 host 이름을 추가 합니다.
192.168.56.151      cloud001.cloudserver.com    cloud001
  • vi /etc/resolv.conf
search local cloudserver.com
nameserver 210.220.163.82
nameserver 219.250.36.130
nameserver 164.124.101.2             #--- 데이콤에서 사용하는 nameserver IP
nameserver 168.126.63.1              #--- 코넷에서 사용하는 nameserver IP
nameserver 175.115.93.35             #--- 다우기술
nameserver 8.8.8.8                   #--- Google 제공
nameserver 8.8.4.4                   #--- Google 제공
nameserver 218.38.19.200             #--- name1.youiwe.org
nameserver 218.38.19.114             #--- ns2.youiwe.co.kr
  • vi /etc/host.conf
multi on
order hosts,bind
  • Network Service를 재기동 합니다.
service  network  restart
  • Internet 접속 여부 확인
ping -c3 google.com
  • 방화벽 설정
### yum install setup setuptool system-config-securitylevel-tui
setup
  • 참고 문헌

CentOS 추가 설치

  • CentOS 기본 업데이터
yum -y install yum-fastestmirror
yum -y update kernel

yum clean all
yum update
shutdown -r now

lsb_release  -a                            #--- CentOS 버전 확인
yum list | grep kernel
  • EPEL 다운로드 사이트에서 CentOS 버전에 맞는 설치 파일(epel-release-로 시작하는 파일)을 다운로드하여 설치 합니다.
cd install
#yum install wget
wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm -Uvh epel-release-6-8.noarch.rpm
yum repolist                           //--- epel repoistory가 잘 추가되어 있는지 repository 목록을 확인 합니다.

UCloud의 Disk Mount

Linux Storage

Software 설치

MySQL

  • Server version: 5.5.27 MySQL Community Server (GPL)
yum -y install mysql mysql-*
chkconfig --level 2345 mysqld on
service mysqld restart
mysqladmin -u root password 'xxxx'

service mysqld stop
cd /var/lib
tar cvf mysql.tar mysql
cd /cloudnas/database
tar xvf /var/lib/mysql.tar
  • vi /etc/my.cnf
[mysqld]
init_connect = "SET collation_connection = utf8_general_ci"
init_connect = "SET NAMES utf8"
default-character-set=utf8
character-set-server=utf8
collation-server = utf8_general_ci

datadir=/cloudnas/database/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1

# Disabling symbolic-links is recommended to prevent assorted security risks;
# to do so, uncomment this line:
# symbolic-links=0

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

[client]
default-character-set = utf8

[mysqldump]
default-character-set = utf8

[mysql]
default-character-set = utf8
  • MySQL Start
service mysqld start

Apache Http Server

  • Apache HTTP Server 2.2.3-65.el5.centos
yum -y install httpd httpd-*
chkconfig --level 2345 httpd on
  • 서비스 설정
service httpd stop
  • vi /etc/httpd/conf/httpd.conf
LanguagePriority ko en ...   #--- ko를 맨앞으로 위치 한다.
AddDefaultCharset UTF-8
DirectoryIndex index.php index.html

DocumentRoot "/cloudnas/www/html"
<Directory "/cloudnas/www/html">
  • 서비스 시작
service httpd start

PHP

  • PHP 5.3.3-13.el5_8
yum list installed | grep php
yum install php53 php53-*

//--- epel과 같이 섞여 있어 설치가 어려울 때
yum install php php-bcmath php-cli php-common php-dba php-devel php-embedded php-enchant php-fpm php-gd php-imap php-interbase php-intl php-ldap php-mbstring php-mcrypt php-mssql php-mysql php-odbc php-pdo php-pgsql php-process php-pspell php-recode php-snmp php-soap php-tidy php-xml php-xmlrpc php-zts

//--- pcre가 "Unicode properties support"를 지원하지 않아 PDF 생성시 오류가 발생하는 것을 방지
//--- pcretest -C 로 지원 여부 확인
yum install pcre
yum install php-pecl-apc
  • PHP 환경 설정
mkdir /var/lib/php/upload
chown apache:apache /var/lib/php/upload

vi /etc/php.ini
  [PHP]
  memory_limit = 256M
  upload_max_filesize = 10M
  post_max_size = 10M

  date.timezone = Asia/Seoul
  upload_tmp_dir = "/var/lib/php/upload"
  session.save_path = "/var/lib/php/session"

  default_charset = "UTF-8"
  magic_quotes_gpc = Off
  output_buffering = 4096
  output_handler = mb_output_handler

  [mbstring]
  mbstring.language = UTF-8
  mbstring.internal_encoding = UTF-8
  mbstring.http_input = auto
  ;mbstring.http_output = pass
  mbstring.http_output = UTF-8
  mbstring.encoding_translation = On
  mbstring.detect_order = auto
  mbstring.substitute_character = none;

Utility

  • jdk 설치
yum -y install java-1.7.0-openjdk java-1.7.0-openjdk-*
  • Apache Ant version 1.6.5 compiled on January 6 2007
yum -y install ant ant-*
  • sendmail 8.13.8-2.el 설치
yum -y install sendmail sendmail-*
  • 설치 않음 : subversion 1.6.11-10.el5_8 설치
yum -y install subversion subversion-*
  • 기타 개인적으로 작성한 Script 파일
vi .bashrc
. .bashrc

메일 서버 구축

Mail Server

참고 문헌

사이트 구축

  • 참조

NFS

NFS Server

yum -y install nfs-utils nfs-utils-*

chkconfig --level 3 nfs on
chkconfig --level 3 portmap on
service nfs restart

groupadd -g 60001 nfsgroup
useradd  -u 60001 -d /home/nfsuser -m -g nfsgroup nfsuser

mkdir /data
chown nfsuser:nfsgroup /data
chmod 755 /data

vi /etc/exports
  /nfsdisk 203.231.11.201(rw,no_root_squash,sync)

exportfs -a
exportfs -v

service nfs restart

NFS Client

groupadd -g 60001 nfsgroup
useradd  -u 60001 -d /home/nfsuser -m -g nfsgroup nfsuser

mkdir /data
mount 203.231.11.100:/data /data

//--- 오류 : mount: wrong fs type, bad option, bad superblock on 시 아래 설치
yum install nfs-utils
chkconfig --level 2345 rpcbind on
service rpcbind start

vi /etc/fstab
  172.27.177.10:/data     /data                    nfs     defaults        1 2

Mount

mount 10.16.31.200:/cloudnas /cloudnas

MySQL Data folder 변경

  • vi /etc/my.cnf
datadir=/data/mysql
  • /var/lib/mysql/ 폴더를 /data/mysql/로 복사
  • /data/mysql/ 폴더에 있는 ib* 파일을 모두 삭제 합니다.
  • vi /etc/init.d/mysqld
get_mysql_option mysqld datadir "/data/mysql"

MySQL Replication

  • 참고 문헌

Master

  • Slave에서 Master로 접속할 때 사용할 사용자를 생성 합니다.
mysql -uroot -p
   grant replication slave on *.* to 'replication003'@'%' identified by 'xxxx';
   flush privileges;
  • vi /etc/my.cnf
[mysqld]
log-bin=mysql-bin
server-id=1
//--- binlog_do_db = test1          : 동기화할 Database
//--- binlog_ignore_db = notest1    : 동기화에서 제외할 Database
  • service mysqld restart
  • 데이터 Backup
mysql -uroot -p
   flush tables with read lock;
   show master status;              : File과 Position을 저장 합니다.

mysqldump -uroot -p test1 > test1.sql
###mysqldump --single-transaction --all-databases  --extended-insert=FALSE -c -uroot -p -R > db.sql

mysql -uroot -p
   unlock tables;

  • Master 상태 확인
mysql -uroot -p
    show master status;
    show processlist;

Slave

  • vi /etc/my.cnf
[mysqld]
log-bin=mysql-bin
log-slave-update

server-id=2
master-host=clouddb001.smartprocess.co.kr
master-port = 3306
master-user = replication
master-password = xxxx
master-connect-retry = 60
//--- replicate-do-db = test1
//--- replicate-ignore-db = notest1
  • service mysqld restart
  • 데이터 Restore
mysql -uroot -p
    slave stop

mysql -uroot -p test1 < test1.sql
### mysql -uroot -p < db.sql
### rsync -av /var/lib/mysql* --exclude=*bin* --exclude=ib* --rsh='ssh ' 211.115.69.112:/var/lib/mysql

mysql -uroot -p
     ###reset slave;
     ###CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000219',MASTER_LOG_POS=2428;
    //--- change master to master_log_file = '~', master_log_pos = ~;
    slave start

  • Slave 상태 확인
mysql -uroot -p
    show master status
    show slave status;
    show slave status\G ;
    //--- "Waiting for master to send event" 메시지가 있으면 정상
    show processlist;
//--- slave start
//--- change master to master_log_file = '~', master_log_pos = ~;
//--- slave stop
  • Slave에서 백업을 할 경우
mysqldump -uuser -p --delete-master-logs > xxxxxx.sql

Dual Master

  • Master Server 1
  • mysql -uroot -p mysql
grant replication slave on *.* to 'replication003'@'%' identified by '~';
  • vi /etc/my.cnf
log-bin=mysql-bin
server-id=4

replicate-same-server-id = 0
auto-increment-increment = 2
auto-increment-offset = 1

master-host=clouddb003.smartprocess.co.kr
master-port = 3306
master-user = replication004
master-password = ~
master-connect-retry = 60
  • Master Server 2
  • mysql -uroot -p mysql
grant replication slave on *.* to 'replication004'@'%' identified by '~';
  • vi /etc/my.cnf
log-bin=mysql-bin
server-id=4

replicate-same-server-id = 0
auto-increment-increment = 2
auto-increment-offset = 2

master-host=clouddb003.smartprocess.co.kr
master-port = 3306
master-user = replication003
master-password = ~
master-connect-retry = 60
  • 참고 문헌

MySQL Replication 복구

Replication 상태 확인

  • Master
   mysql -uroot -p mysql
       show master status;        ###--- File, Position
  • Slave
   mysql -uroot -p mysql
       show slave status\G;
  • Slave_IO_State : "Waiting for master to send event"
  • Master_Log_File : Master의 File과 일치
  • Read_Master_Log_Pos : Master Position과 일치
  • Slave_IO_Running : Yes
  • Slave_SQL_Running : Yes
  • Relay_Log_Pos 과 Relay_Log_Space 이 일치
  • Read_Master_Log_Pos 과 Exec_Master_Log_Pos 이 일치
  • Last_Errno와 Last_Error가 있으면 replication이 중단된 상태임

자동 복구

  • Slave
   mysql -uroot -p mysql
       stop slave; 
       reset slave; 
       start slave;
  • Slave : 오류가 발생한 query문만 skip하여 복구
   mysql -uroot -p mysql
       set global sql_slave_skip_counter=1;
       start slave;

전형적인 복구 방법

  • Master에서 Database 백업
   mysql -uroot -p mysql
       flush tables with read lock;
       show master status;             ### File과 Position을 저장 합니다.
       exit;
   
   ###--- 전체 DB 백업
   mysqldump --single-transaction --all-databases --extended-insert=FALSE -c -uroot -p -R > allDB.sql

   ###--- 하나의 DB 백업
   mysqldump -uroot -p ${DATABASE} > ${DATABASE}.sql

   ###--- 전체 DB 파일 백업
   ### rsync -av /usr/local/mysql/* --exclude=*bin* --exclude=ib* --exclude=xewasdb* --exclude=relay* --exclude=master.info ***.***.***.***(Host IP)::R/usr/local/mysql/mysql_data/
  
   mysqldump --master-data=2 ${DATABASE} > ${DATABASE}.sql
   ### mysqldump --add-drop-table --master-data --quick -u root -p my_database > my_database.sql 
    
   mysql -uroot -p mysql
       unlock tables;
       exit;
  • Slave에서 Database 복구
   mysql -uroot -p mysql
       stop slave;
       drop database ${DATABASE};
       create database ${DATABASE};
       exit;
       
   mysql -uroot -p ${DATABASE} < ${DATABASE}.sql    
   
   mysql -uroot -p mysql
       change master to master_log_file='mysql-bin.000044', master_log_pos=132059667;
       start slave;
       
       show slave status\G;
       ### Slave_IO_Running: Yes
       ### Slave_SQL_Running: Yes
       ### Last_Errno
       ### Last_Error
       exit;

MySQL Replication 복구 참고

Apache SSL 설정

  • vi /etc/httpd/conf/httpd.conf
DocumentRoot "/~/www/html"
  • yum install mod_ssl
  • vi /etc/httpd/conf.d/ssl.conf
ServerName cloud.smartprocess.co.kr:443
SSLCertificateFile       STAR.smartprocess.co.kr.cer
SSLCertificateKeyFile    smartprocess_ssl.key
SSLCertificateChainFile  Thawte_SSL_CA_bundle.crt
  • Apache 실행시 비밀번호 물어보는 것 삭제
cp smartprocess_ssl.key smartprocess_ssl.key_org
openssl rsa -in smartprocess_ssl.key_org -out smartprocess_ssl.key

Monitoring과 Turning

튜닝#Monitoring

UCloud 오류 및 조치

이미지로 서버 추가시 주의 사항

  • vi /etc/fstab 에서 서버에 mount한 디스크에 대한 정보를 삭제한 후에 이미지를 생성하여 합니다.
  • 그렇지 않으면 추가된 서버가 정상적으로 UCloud에서 인식이 안되어 부팅 또는 Network 설정을 할 수 없음
### dev/DataVG/data        /data                   ext3    defaults        1 2

KT UCloud 관리자 가이드

서버 신청

UCloud get server001.png
UCloud get server002.png
UCloud get server003.png

참고 문헌