상단

UCloud biz를 정리 합니다.

 
 
 

UCloud Architecture


{|cellspacing="0" cellpadding="2" border="1" width="100%" bgcolor="#FFFFFF" align="center" 
|- |width="20%" align="center" valign="middle" style="background-color:#eee;"|분류 |width="40%" align="center" valign="middle" style="background-color:#eee;"|FOSS

|width="40%" align="center" valign="middle" style="background-color:#eee;"|상용 S/W 
|- |align="center" valign="middle" style="background-color:#eee;"|Cloud OS |

  • CloudStack 2.x / Apache 2.0 : IaaS 관리

  • Platespin : P2V migration

  • enStratus : Auto Provisioning, Scale-out/up Solution

  • HAProxy

    |- 
    |align="center" valign="middle" style="background-color:#eee;"|Hypervisor 
    |

  • Citrix Xen Server 5.x

    |- 
    |align="center" valign="middle" style="background-color:#eee;"|Storage 
    |

  • MySQL : DBMS

  • OpenStack Swift : Object Storage

  • ZFS : 가상화 파일 시스템

  • NexentaStor : 가상 Storage 관리
    |

  • RRDTool : Round Robin Database Tool
    align="center" valign="middle" style="background-color:#eee;"
  • Apache HTTP Server

  • Apache Tomcat

  • Hyperic : Manage Web Application

  • OpenVPN : VPN

  • Spring

    |- 
    |align="center" valign="middle" style="background-color:#eee;"|Automation 
    |

  • Chef : 서버 설치 및 구성 자동화

    |- 
    |align="center" valign="middle" style="background-color:#eee;"|Monitoring 
    |

  • Nagios : 물리서버, Network 모니터링

  • Cacti : 모니터링 Data History 관리, Reporting

  • CAMS : VM 및 Middleware 모니터링

  • Zabbix : 모니터링

  • Collectd : System과 Network 성능정보 모니터링

    |- 
    |align="center" valign="middle" style="background-color:#eee;"|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 설치

  • [[CentOS - 설치]] 문서를 참조하여 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](mysqld.md)
 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](mysqld_safe.md)
 log-error=/var/log/mysqld.log
 pid-file=/var/run/mysqld/mysqld.pid
 
 [client](client.md)
 default-character-set = utf8
 
 [mysqldump](mysqldump.md)
 default-character-set = utf8
 
 [mysql](mysql.md)
 default-character-set = utf8
  • MySQL Start

 
 service mysqld start
 

Apache Http Server

  • [[CentOS]]에 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"
 
  • 서비스 시작

 
 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](PHP.md)
   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.md)
   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](mysqld.md)
 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](mysqld.md)
 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 관리자 가이드


 

서버 신청

 

[700px](File:UCloud get server001.png.md)
 
[700px](File:UCloud get server002.png.md)
 
[700px](File:UCloud get server003.png.md)

 

참고 문헌


 
최종 수정일: 2024-09-30 12:26:18

이전글 :
다음글 :