Korea Evangelist

Developer & Platform Evangelism, Microsoft Korea

  • Korea Evangelist

    고가용성을 위한 Windows Azure 데이터베이스 미러링 0312

    • 0 Comments

     

    이 내용은 기본적으로 고가용성에 대한 충분한 이해가 있으며, Windows Azure와 SQL서버의 여러 고가용성 기능들에 대해서 역시 이해도가 있는 개발자나 IT전문가임을 고려해 상세한 설명 없이 진행.
    미러링에 대해 기본적인 사항이 필요할 경우 향상된 가용성 기능 (미러링) – SQLER 강성욱 제작. SQL서버 미러링 기능 이해에 좋을 듯.

    Windows Azure의 끝판왕 - 고가용성 및 부하 분산 기술인 AlwaysOn에 대한 내용은 추후 제공 예정

    Tutorial: AlwaysOn Availability Groups in Windows Azure (PowerShell)

     

    SQL 서버 고가용성 미러링에 대한 첨언

    미러링은 구성 및 운영, 장애 상황에 ��한 절차 등을 충분히 미리 검토하고 전체 절차를 숙지해 두어야 한다.

    특히, 장애 상황시 역할 전환이나 스냅샷 DB 활용시 데이터 생성 시점과 동기화 등 기본적인 내용을 충분히 고려하길 권장.

    Microsoft Technet 데이터베이스 미러링(SQL Server)

     

    이 내용에서는 Windows Azure에서 구축 가능한 모니터링서버(Witness Server) 및 인증서를 사용해 각 서버에 접근하는 방식을 다룬다.

    SQL서버의 미러링 기능 등에 대해서 궁금한 사항이 있을 경우 SQLER.com의 SQL 질문과 답변 게시판을 이용하면 좋음.

     

    미러링 튜토리얼  원본문서 : Tutorial: Database Mirroring for High Availability in Windows Azure

    원문이 변경될 수 있으며, 원문에 충실히 따르길 권장.

     

    파워쉘은 쉘 스크립트 기반으로 마이크로소프트의 여러 다양한 제품들을 제어하기 위한 기술임.

    Windows Azure 도 파워쉘로 빠른 관리 가능하고, 파워쉘에서 Azure를 사용하기 위해서는 파워쉘 cmdlets을 설치해야 한다. SDK 링크에서 설치 가능

    Windows Azure PowerShell cmdlets.

    command-line tool의 Windows PowerShell – install 을 선택하면 설치 가능

    image_thumb.png

    웹 플랫폼 설치 관리자(WPI)가 설치 안되었다면 설치하고, 계속 진행한다.

    WPI는 여러 종속성(dependency)가 있는 SDK나 플러그인 등의 다운로드를 자동으로 조절해 주는 편리한 설치 관리자이다.

     

     

     

    파워쉘 관련자료 참고링크

    SQLER의 Windows Server 게시판 김재훈의 파워쉘 강좌 

     

    파워쉘 실행

    Windows Azure의 고가용성 - 미러링작업은 절차가 복잡하기 때문에 GUI로 하길 권장하지 않는다.

    파워쉘과 SQL쿼리에 이해가 있다면, 아래 내용을 따라해 10분 이내에 미러링 배포도 가능하다.

     

    powershell 명령을 실행창(윈도우키+R) 또는 프로그램에서 선택해 실행

    그러면, 아래와 유사한 화면이 시작된다.


     

     image10_thumb.png

     

    파워쉘 SDK 가져오기(import) 수행 – Azure 관련 파워쉘 명령을 실행 할 수 있다.

    Import-Module "C:\Program Files (x86)\Microsoft SDKs\Windows Azure\PowerShell\Azure\Azure.psd1"

     

    Azure 출판설정파일(PublishSetting)은 Windows Azure의 구독 정보가 기록된 파일이다.

    파워쉘의 현재 세션이 나의 Windows Azure 구독에 접근해 여러 작업을 가능하도록 하는 인증서라고 보면 된다.

    구독 파일 - publishSettings 다운로드 방법은 https://manage.windowsazure.com/publishsettings/index?client=powershell 바로 다운로드 시작 되고 저장 가능하다.

    또는 파워쉘에서 아래 명령 수행 하면 브라우저가 열리면서 설정 파일을 바로 다운로드 가능

    Get-AzurePublishSettingsFile

     

    다운로드 받은 설정 파일을 먹여 준다.  나의 경우는 위의 이미지처럼, c:\temp 폴더에 저장했고 수행했다.

     

    Import-AzurePublishSettingsFile "c:\설정파일저장폴더\설정파일"
     

     

    빠른 Windows Azure 설정을 위해 파워쉘에 변수값 지정

    현재는 일본 서부 데이터센터이고, 위치 및 선호도 그룹 이름을 ContosoAG 으로 설정했다. 가용성집합 이름은 SQLHADR 이다.  현재 VM은 SQL2012 Enterprise이고 4코어를 쓰는 Large 인스턴스이며 과금 여부에 주의한다.

    이후 VM이 생성된 후 VM에 RDP로 접근 가능한 아이디 정보는 AzureAdmin / Contoso!000 이다. – 꼭 바꿔서 수행한다.

    $location = "Japan West"
    $affinityGroupName = "ContosoAG"
    $affinityGroupDescription = "Contoso SQL HADR Affinity Group"
    $affinityGroupLabel = "IaaS BI Affinity Group"
    $workingDir = "C:\script\"
    $networkConfigPath = $workingDir + "NetworkConfig.xml"
    $virtualNetworkName = "ContosoNET"
    $storageAccountName = "<고유값으로 생성>"
    $storageAccountLabel = "Contoso SQL HADR Storage Account"
    $storageAccountContainer = "https://" + $storageAccountName + ".blob.core.windows.net/vhds/"
    $serviceName = "<고유값으로 생성>"
    $sqlImageName = (Get-AzureVMImage | where {$_.Label -like "SQL Server 2012 SP1 Enterprise*"} | sort PublishedDate -Descending)[0].ImageName
    $availabilitySetName = "SQLHADR"
    $subnetName = "Back"
    $domainUser = "Administrator"
    $sql1ServerName = "SQL1"
    $sql2ServerName = "SQL2"
    $sql3ServerName = "SQL3"
    $dataDiskSize = 100
    $vmAdminUser = "AzureAdmin"
    $vmAdminPassword = "Contoso!000"

     

    $storageAccountName 과 $serviceName은 식별 DNS로 사용되니 고유해야 한다. 아울러, DNS명이기 때문에 소문자와 숫자만 사용 가능하다.

    참고로, help azure 명령을 수행하면 Azure 파워쉘 명령 리스트 도움말을 볼수 있고, 명령들이 직관적이라 쉽게 파악 가능하다.

     

    위치/선호도 그룹(affinity group) 생성

    위치/선호도 그룹(affinity group)을 파워쉘에서 수행해 생성한다.

    New-AzureAffinityGroup `
        -Name $affinityGroupName `
        -Location $location `
        -Description $affinityGroupDescription `
        -Label $affinityGroupLabel

     

    문제 없이 실행되면 이런 결과를 파워쉘에서 볼 수 있다.(이하 생략)

    OperationDescription                    OperationId                             OperationStatus 
    --------------------                    -----------                             --------------- 
    New-AzureAffinityGroup                  7a01991c-75f5-7fdb-a32b-0f224307ad64    Succeeded

    파워쉘에서 Success 라고 안 나오면 뻘건 오류 화면이 나온다. 오류를 읽어보면 대부분 쉽게 스크립트 문제를 해결 가능하다.

     

    구성 파일을 가져와 virtual network  생성

    c:\script 폴더 내에 NetworkConfig.xml 파일로 아래 파일이 위치 해야함. 아래 XML 파일을 저장하고 위에서 설정한 c:\script\ 폴더에 둔다.

    <NetworkConfiguration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xmlns:xsd="http://www.w3.org/2001/XMLSchema"

    xmlns="http://schemas.microsoft.com/ServiceHosting/2011/07/NetworkConfiguration">
      <VirtualNetworkConfiguration>
        <Dns />
        <VirtualNetworkSites>
          <VirtualNetworkSite name="ContosoNET" AffinityGroup="ContosoAG">
            <AddressSpace>
              <AddressPrefix>10.10.0.0/16</AddressPrefix>
            </AddressSpace>
            <Subnets>
              <Subnet name="Front">
                <AddressPrefix>10.10.1.0/24</AddressPrefix>
              </Subnet>
              <Subnet name="Back">
                <AddressPrefix>10.10.2.0/24</AddressPrefix>
              </Subnet>
            </Subnets>
          </VirtualNetworkSite>
        </VirtualNetworkSites>
      </VirtualNetworkConfiguration>
    </NetworkConfiguration>

     

    파워쉘 명령으로 설정을 적용한다.

    Set-AzureVNetConfig `
        -ConfigurationPath $networkConfigPath

     

    저장소(Storage) 생성

    파워쉘 명령으로 저장소를 생성한다.

    Set-AzureSubscription `
        -SubscriptionName (Get-AzureSubscription).SubscriptionName `
        -CurrentStorageAccount $storageAccountName

     

    이어서, 저장소를 구독(Subscription)에 연결한다.,

    Set-AzureSubscription `
        -SubscriptionName (Get-AzureSubscription).SubscriptionName `
        -CurrentStorageAccount $storageAccountName

     

    VM 생성 진행 - 첫 VM인 SQL1을 생성

    # Create SQL1...
    New-AzureVMConfig `
        -Name $sql1ServerName `
        -InstanceSize Large `
        -ImageName $sqlImageName `
        -MediaLocation "$storageAccountContainer$sql1ServerName.vhd" `
        -AvailabilitySetName $availabilitySetName `
        -HostCaching "ReadOnly" `
        -DiskLabel "OS" |
        Add-AzureProvisioningConfig `
            -Windows `
            -DisableAutomaticUpdates `
            -AdminUserName $vmAdminUser `
            -Password $vmAdminPassword |
            Set-AzureSubnet `
                -SubnetNames $subnetName |
                Add-AzureEndpoint `
                    -Name "SQL" `
                    -Protocol "tcp" `
                    -PublicPort 1 `
                    -LocalPort 1433 |
                    New-AzureVM `
                        -ServiceName $serviceName `
                        –AffinityGroup $affinityGroupName `
                        -VNetName $virtualNetworkName

     

    VM2 생성

    # Create SQL2...
    New-AzureVMConfig `
        -Name $sql2ServerName `
        -InstanceSize Large `
        -ImageName $sqlImageName `
        -MediaLocation "$storageAccountContainer$sql2ServerName.vhd" `
        -AvailabilitySetName $availabilitySetName `
        -HostCaching "ReadOnly" `
        -DiskLabel "OS" |
        Add-AzureProvisioningConfig `
            -Windows `
            -DisableAutomaticUpdates `
            -AdminUserName $vmAdminUser `
            -Password $vmAdminPassword |
            Set-AzureSubnet `
                -SubnetNames $subnetName |
                Add-AzureEndpoint `
                    -Name "SQL" `
                    -Protocol "tcp" `
                    -PublicPort 2 `
                    -LocalPort 1433 |
                    New-AzureVM `
                        -ServiceName $serviceName

     

    VM3 생성

    # Create SQL3...
    New-AzureVMConfig `
        -Name $sql3ServerName `
        -InstanceSize Large `
        -ImageName $sqlImageName `
        -MediaLocation "$storageAccountContainer$sql3ServerName.vhd" `
        -AvailabilitySetName $availabilitySetName `
        -HostCaching "ReadOnly" `
        -DiskLabel "OS" |
        Add-AzureProvisioningConfig `
            -Windows `
            -DisableAutomaticUpdates `
            -AdminUserName $vmAdminUser `
            -Password $vmAdminPassword |
            Set-AzureSubnet `
                -SubnetNames $subnetName |
                New-AzureVM `
                    -ServiceName $serviceName

     

    VM이 모두 올라오는 것을 대기하고 이후 작업을 진행한다.

     

    RDP 파일 다운로드

    Foreach ($VM in $VMs = Get-AzureVM -ServiceName $serviceName)
    {
        write-host "Waiting for " $VM.Name "..."

        # loop until the VM status is "ReadyRole"
        While ($VM.InstanceStatus -ne "ReadyRole")
        {
            write-host "  Current Status = " $VM.InstanceStatus
            Start-Sleep -Seconds 15
            $VM = Get-AzureVM -ServiceName $VM.ServiceName -Name $VM.InstanceName
        }

        write-host "  Current Status = " $VM.InstanceStatus

        # Download remote desktop file
        Get-AzureRemoteDesktopFile -ServiceName $VM.ServiceName -Name $VM.InstanceName -LocalPath "$workingDir$($VM.InstanceName).rdp"
    }

    위 스크립트는 15초에 한번씩 서버별로 VM이 올라온지 확인해 올라 왔으면 RDP 파일을 편한 원격 관리 목적으로 다운로드 하는 스크립트다.

    위에서 구성한 기본 작업 폴더(c:\script)에 보면 rdp 파일을 확인 가능하다.

     

    RDP를 이용해 3대의 SQL서버에 각각 접근하고 파워쉘을 실행

    다운로드 받은 RDP를 실행해 각 서버에 AzureAdmin and password Contoso!000 계정으로 로그인한다.(ID 암호를 위에서 변경했다면 다르게 로그인을 해야 한다.)

     image_thumb_3.png

     

    3대의 서버 모두에서 파워쉘을 “관리자 모드”로 실행하고, 아래 명령을 수행해 SQL서버에 원격 접속이 가능하도록 방화벽을 열어 준다.

     

    netsh advfirewall firewall add rule name='SQL Server (TCP-In)' program='C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Binn\sqlservr.exe' dir=in action=allow protocol=TCP

     

     

    인증서를 사용하는 데이터베이스 미러링 구성 시작

    SQL1에서 미러링에 이용할 서버 인증서를 생성하고 백업한다. 참고로, SQLCMD는 SQL명령을 명령프롬프트에서 실행하도록 하는 쿼리 실행기이다.

    인증서 암호는 원하는 형태로 지정 가능하다. 실행은 마찬가지로, 파워쉘 창에서 실행하면 된다

    SQLCMD -S SQL1
    USE master;
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<Strong_Password_#1>';
    GO

    CREATE CERTIFICATE SQL1_cert WITH SUBJECT = 'SQL1 certificate';
    GO

    CREATE ENDPOINT Endpoint_Mirroring
       STATE = STARTED
       AS TCP (LISTENER_PORT=5022, LISTENER_IP = ALL)
       FOR DATABASE_MIRRORING (AUTHENTICATION = CERTIFICATE SQL1_cert, ENCRYPTION = REQUIRED ALGORITHM AES, ROLE = ALL);
    GO

    BACKUP CERTIFICATE SQL1_cert TO FILE = 'SQL1_cert.cer';
    GO

     

    SQL2에서도 미러링에 이용할 서버 인증서를 생성하고 백업한다.

    SQLCMD -S SQL2
    USE master;
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<Strong_Password_#2>';
    GO

    CREATE CERTIFICATE SQL2_cert WITH SUBJECT = 'SQL2 certificate for database mirroring';
    GO

    CREATE ENDPOINT Endpoint_Mirroring
       STATE = STARTED
       AS TCP (LISTENER_PORT=5022, LISTENER_IP = ALL)
       FOR DATABASE_MIRRORING (AUTHENTICATION = CERTIFICATE SQL2_cert, ENCRYPTION = REQUIRED ALGORITHM AES, ROLE = ALL);
    GO

    BACKUP CERTIFICATE SQL2_cert TO FILE = 'SQL2_cert.cer';
    GO


    SQL3에서도 미러링에 이용할 서버 인증서를 생성하고 백업한다.

    SQLCMD -S SQL3
    USE master;
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<Strong_Password_#3>';
    GO

    CREATE CERTIFICATE SQL3_cert WITH SUBJECT = 'SQL3 certificate for database mirroring';
    GO

    CREATE ENDPOINT Endpoint_Mirroring
       STATE = STARTED
       AS TCP (LISTENER_PORT=5022, LISTENER_IP = ALL)
       FOR DATABASE_MIRRORING (AUTHENTICATION = CERTIFICATE SQL3_cert, ENCRYPTION = REQUIRED ALGORITHM AES, ROLE = ALL);
    GO

    BACKUP CERTIFICATE SQL3_cert TO FILE = 'SQL3_cert.cer';
    GO

     

    위에서 생성한 인증서는 모두 각 서버의 C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA 폴더에 있다.

    각 서버가 나머지 2개의 서버 인증서를 모두 가지고 있도록 인증서를 복사한다. 예를 들면, SQL1은 SQL2와 SQL3의 인증서를 가지도록 복사한다. SQL2와 SQL3도 마찬가지.

     

    SQL1에서 SQL2와 SQL3의 인증서로 로그인을 허용하는 퍼미션을 구성한다.

    CREATE LOGIN DBMirroringLogin WITH PASSWORD = 'Contoso!000';
    GO

    CREATE USER DBMirroringLogin FOR LOGIN DBMirroringLogin;
    GO

    CREATE CERTIFICATE SQL2_cert AUTHORIZATION DBMirroringLogin FROM FILE = 'SQL2_cert.cer'
    GO

    CREATE CERTIFICATE SQL3_cert AUTHORIZATION DBMirroringLogin FROM FILE = 'SQL3_cert.cer'
    GO

    GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [DBMirroringLogin];
    GO


    SQL2에서 SQL1와 SQL3의 인증서로 로그인을 허용하는 퍼미션을 구성한다.

    CREATE LOGIN DBMirroringLogin WITH PASSWORD = 'Contoso!000';
    GO

    CREATE USER DBMirroringLogin FOR LOGIN DBMirroringLogin;
    GO

    CREATE CERTIFICATE SQL1_cert AUTHORIZATION DBMirroringLogin FROM FILE = 'SQL1_cert.cer'
    GO

    CREATE CERTIFICATE SQL3_cert AUTHORIZATION DBMirroringLogin FROM FILE = 'SQL3_cert.cer'
    GO

    GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [DBMirroringLogin];
    GO

     

    SQL3에서 SQL1와 SQL2의 인증서로 로그인을 허용하는 퍼미션을 구성한다.

    CREATE LOGIN DBMirroringLogin WITH PASSWORD = 'Contoso!000';
    GO

    CREATE USER DBMirroringLogin FOR LOGIN DBMirroringLogin;
    GO

    CREATE CERTIFICATE SQL1_cert AUTHORIZATION DBMirroringLogin FROM FILE = 'SQL1_cert.cer'
    GO

    CREATE CERTIFICATE SQL2_cert AUTHORIZATION DBMirroringLogin FROM FILE = 'SQL2_cert.cer'
    GO

    GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [DBMirroringLogin];
    GO

    작업을 수행할 DB는 MyDB1 이다. DB를 생성하고, SQL1에서 풀 백업과 로그 백업을 수행한다.

     

    CREATE database MyDB1
    GO

    BACKUP DATABASE MyDB1 TO DISK = 'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\BACKUP\MyDB1.bak';
    GO

    BACKUP LOG MyDB1 TO DISK = 'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\BACKUP\MyDB1.log';
    GO


    생성된 백업 파일들(풀백업 - BAK 파일과 로그 백업 - LOG 파일)을 SQL2의

    C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\BACKUP

    폴더로 복사한다.

     

    SQL2에서 미러링으로 사용 되도록 WITH NORECOVERY 모드로 복구하고, SQL1을 미러링 파트너로 구성한다.

    RESTORE DATABASE MyDB1 FROM DISK = 'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\BACKUP\MyDB1.bak' WITH NORECOVERY;
    GO

    RESTORE LOG MyDB1 FROM DISK = 'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\BACKUP\MyDB1.log' WITH NORECOVERY;
    GO

    ALTER DATABASE MyDB1 SET PARTNER = 'TCP://SQL1:5022';
    GO

     

    SQL1에서 SQL2를 미러링 파트너로, SQL3을 모니터링(Witness)  서버로 구성한다.

    ALTER DATABASE MyDB1 SET PARTNER = 'TCP://SQL2:5022';
    GO

    ALTER DATABASE MyDB1 SET WITNESS = 'TCP://SQL3:5022';
    GO

     

    자 이렇게 해서 미러링 구성은 모두 끝났다. 이제 동작 여부를 테스트 한다.

     

    미러링 테스트 수행

    --SQL1에서 수행한다. 테이블을 만들고 데이터를 삽입/조회한다.
    use MyDB1
    go

    create table sqler01(
        sqlerNumber int
    ,    mystring varchar(10)
    )
    go

    insert into sqler01(sqlerNumber, mystring) values(1, 'SQLER')
    insert into sqler01(sqlerNumber, mystring) values(2, 'Mirror')
    go

    select * from sqler01
    go

     

    주서버(Primary)인 SQL1에서 처리하고 이제 미러링 서버인 SQL2에서 아래 내용을 수행해 미러링을 확인한다.

    --SQL2에서 수행
    use MyDB1
    go

    --미러링, Recovery 상태라 접근 불가
    select * from sqler01
    go


    --읽기 전용 스냅샷 DB를 생성한다. DB명은 snapshot_MyDB1
    -- 이 스냅샷 DB는 Recovery 상태인 DB의 상태를 새 DB로 복사하는것이며, 이 DB를 수정해도 SQL1이나 다른 곳으로 데이터가 동기화 되지 않는 DB이다. 추후 AlwaysOn에서 상세히 다룬다.create database snapshot_MyDB1
    on (name = MyDB1, filename='C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\snapshot_MyDB1.mdf')
    as snapshot of MyDB1
    go

    -- 복사한 스냅샷 DB에서 데이터 조회
    use snapshot_MyDB1
    go

    select * from sqler01
    go

     

    이제 장애 상황을 가정해 SQL1을 중지시킨다.

    --SQL1 에서 SQL서버 중지 명령 실행
    shutdown

     

    SQL1의 이벤트 로그를 확인해 보면 서버가 중지된 것을 확인 가능하고, 모니터링 서버인 SQL3에 이벤트가 바로 발생한 것을 볼수 있다.

    1초 이내에 Failover되어 SQL2가 Recovery 모드에서 Principle DB로 역할이 변경되고 서비스가 지속된다.

     

    참고자료

    향상된 가용성 기능 (미러링) – SQLER 강성욱 제작. SQL서버 미러링 기능 이해에 좋다.

    Tutorial: Database Mirroring for High Availability in Windows Azure

    SQLER의 Windows Server 게시판 김재훈의 파워쉘 강좌 

    Tutorial: AlwaysOn Availability Groups in Windows Azure (PowerShell)

    SQLER.com의 SQL 질문과 답변 게시판을
  • Korea Evangelist

    공용 클라우드와 On-premise를 잇는 전용도로 - Windows Azure ExpressRoute

    • 0 Comments

    안녕하세요, 김대우입니다.

    이번에 소개해 드릴 내용은 Windows Azure ExpressRoute 에 대한 내용이에요.

    국내에는 크게 이슈화 되지 않았지만, 해외 커뮤니티에서는 좋은 반응을 얻고 있는 내용이라 공유합니다.

    공식발표 내용 Announcing Windows Azure ExpressRoute, new partnership with Level 3 and exciting updates to other Azure Services

    ExpressRoute는 이미 작년, 2013년 9월 AT&T와 Microsoft의 공식발표로 어느 정도 예상되었던 내용입니다.

    Windows Azure ExpressRoute는 무엇인가

    ExpressRoute는 한마디로, Windows Azure 데이터센터와 인프라를 On-premise에 사설 커넥션(Private Connection)을 제공 가능한 서비스 입니다.

    마이크로소프트의 하이브리드 클라우드 전략과 Cloud OS 비전의 초석이 되는 인프라로, 높은 보안성은 물론 안정적이고 빠른 응답속도로 제공되는 사설 네트워크를 통해 On-premise와 클라우드 환경의 통합을 제공하는 서비스 입니다.

    4555.ExpressRoute.png

    여러 사용 시나리오를 고려해 볼 수 있을 것 같은데요.

    소개된 것처럼,

    - 클라우드의 무한대 리소스를 On-premise의 저장소나 백업, 복구를 위해 사용 가능한 시나리오

    - On-premise의 데이터센터를 안전한 사설망으로 확장

    - 인터넷망을 거치지 않는 보안성 높은 하이브리드 클라우드 어플리케이션 서비스 제작

    등의 여러 시나리오를 생각해 볼 수 있을거에요.

    Windows Azure ExpressRoute 공식 소개 사이트

    Windows Azure ExpressRoute FAQ

    Windows Azure: Government cloud computing

    2014년 3월 현재 워싱턴 D.C.와 실리콘 밸리를 대상으로 프리뷰 서비스가 제공되고 있습니다.

    프리뷰 서비스 지역인 워싱턴 D.C. 에서 느껴지시는 것처럼, 극도의 보안과 안정성을 요구하는 공공서비스가 주요한 대상이 될 수 있을 듯 합니다.

    image

    Windows Azure에서 구성하는 화면

    필요할 때마다 늘려서 사용하는 On-premise의 서비스!

    물론, 기존 On-premise와 터널링으로 제공되는 Windows Azure Virtual Networking – site-to-site connectivity와 함께 여러 비즈니스와 다양하게 결합 가능할 것입니다.

    혹시 아나요, 국내에도 AT&T 처럼 캐리어가 생겨서 Windows Azure ExpressRoute를 국내에서도 바로 제공하게 될지요.

    참고링크

    Announcing Windows Azure ExpressRoute, new partnership with Level 3 and exciting updates to other Azure Services

    Windows Azure ExpressRoute 공식 소개 사이트

    Windows Azure ExpressRoute FAQ

    Windows Azure: Government cloud computing

    Windows Azure ExpressRoute 프리뷰 서비스 신청

    클라우드 보안 무엇이 이슈인가? - 클라우드와 보안 (1/3)

    인프라 보안이 플랫폼 보안과 어플리케이션 보안으로 변화 - 클라우드와 보안 (2/3)

    Azure가 제공하는 클라우드 서비스 보안 인프라 - 클라우드와 보안 (3/3)

    Azure Connect - Azure를 회사망의 일부처럼 사용하는 하이브리드 클라우드(hybrid cloud) 구축  (Azure Connect는 Windows Azure Virtual Network 으로 포함됨)

    Windows Azure Virtual Networking

  • Korea Evangelist

    Windows Azure를 무료/저렴하게 사용하는 방법 - MSDN 구독, Bizspark, MPN, 30일 무료 평가판

    • 0 Comments

    안녕하세요. 김대우입니다.

    이번에 소개해 드릴 내용은 제목처럼 Windows Azure를 무료/저렴하게 사용하는 방법입니다.

    특히, 스타트업이나 소규모 개발사에게 대단히 큰 혜택인 Bizspark은 큰 도움 되실거에요.

    바로 내용을 시작해 보도록 할게요.

    Windows Azure 30일 무료 평가판

    30일간 24만원 상당의 크레딧을 받아 무료로 체험이 가능해요.

    http://www.windowsazure.com/ko-kr/pricing/free-trial/

    전화번호 인증 절차나 본인 인증을 위한 신용카드 인증이 있지만, 서비스는 모두 무료로 제공받은 크레딧으로만 사용되며 절대 과금되지 않습니다.

    Windows Azure 회원 제안

    http://www.windowsazure.com/ko-kr/pricing/member-offers/

    1) Bizspark 가입자

    Bizspark은소규모 모바일 게임사나 스타트업 분들께, 유용한 프로그램이에요. 다른 클라우스 서비스 사업자와 차별화 할 수 있는 부분이기도 하며, 제가 만나 뵙는 많은 개발사 분들께서 선호하는 프로모션이기도 합니다.

    Bizspark 가입 조건은,

    - 소프트웨어나 앱을 개발하는 회사

    - 설립된지 5년 미만(사업자 등록 기준)

    - 연간 10억 미만의 매출

    이라는 조건에 충족되면 가입 하실 수 있고 Windows Azure 무료 제공은 물론 다양한 혜택도 받으실 수 있어요.

    http://www.microsoft.com/bizspark/default.aspx

    BizSpark 회원은 Visual Studio Ultimate with MSDN 구독을 통해 MSDN 구독은 기본, 추가로 Windows Azure 혜택을 받게 됩니다

    특히, Bizspark은 첫 달에 24만원의 크레딧을 받을 수 있고, 첫 달 이후에는 매달 18만원의 크레딧을 받을 수 있습니다.

    http://www.windowsazure.com/ko-kr/offers/ms-azr-0057p/

    주변에 클라우드 서비스 도입을 고민하고 계신  소규모 게임사나 스타트업이 있다면 적극 Bizspark를 홍보해 주세요.

     

    만약, 해당 월에 크레딧 사용량을 넘게 되면?

    크레딧으로 제공되는 Windows Azure 구독(Subscription)은 자동으로 유료화 되지 않고 중지됩니다. 만약 계속 서비스를 받고 싶으실 경우 “지출 한도 해제”를 직접 하시거나, 다음 달이 되어 다시 크레딧을 받을 때까지 기다려야 합니다.

    2) MSDN  구독자

    연단위로 MSDN을 구독 받고 계시다면 무료 Windows Azure 크레딧을 받으실 수 있습니다.

    http://www.windowsazure.com/ko-kr/pricing/member-offers/msdn-benefits/

    MSDN 구독 링크

    특히, 최상의 MSDN 구독인 “VISUAL STUDIO ULTIMATE WITH MSDN”  구독자일 경우 월간 18만원 상당의 크레딧을 받아 무료로 Windows Azure를 사용할 수 있습니다.

    http://www.windowsazure.com/ko-kr/pricing/member-offers/msdn-benefits-details/

    MSDN 구독을 하고 계시다면, 무료로 얻을 수 있는 기회! 참고로, 저도 이 MSDN 구독으로 Windows Azure를 신나게 사용하고 있습니다.

    3) MPN(Microsoft Partner Network) 회원사

    MSN은 마이크로소프트 파트너사로 등록해 Microsoft 플랫폼을 대상으로 솔루션 및 서비스를 개발 하는 회사를 의미합니다.

    Microsoft Partner Network Cloud Essentials 에 가입하면 무료로 Windows Azure를 사용 가능한 크레딧을 받을 수 있습니다.

    첫 달 24만원의 크레딧을 받으실 수 있고, 매달 12만원의 크레딧이 제공됩니다.

    http://www.windowsazure.com/ko-kr/offers/ms-azr-0051p/

    만약, 해당 월에 크레딧 사용량을 넘게 되면?

    크레딧으로 제공되는 Windows Azure 구독(Subscription)은 자동으로 유료화 되지 않고 중지됩니다. 만약 계속 서비스를 받고 싶으실 경우 “지출 한도 해제”를 직접 하시거나, 다음 달이 되어 다시 크레딧을 받을 때까지 기다려야 합니다. 

    무료 구독(Subscription)을 다른 구독으로 이전할 경우

    무료로 사용하던 Windows Azure 구독을 다른 구독으로(유료 종량제 구독 등) 옮길 경우에는 무료로 제공되는 기술지원을 통해 구독을 이전 받을 수 있습니다.

    Windows Azure 기술지원 사이트 에서 신청하면 무료로 처리됩니다.

    많은 도움 되시길 바랍니다.

    참고링크 : 

    예전 포스팅 - Azure를 개발자가 무료로 테스트 하는 방법

    Windows Azure 지출 Windows Azure 한도 해제

  • Korea Evangelist

    테크데이즈 미니 토요세미나 발표자이신 김경균님을 미리 만나 보았습니다

    • 0 Comments

    오늘은 유비베이스의1 김경균 님을 만나 뵈었습니다.

    김명신: 안녕하세요 김경균님. 최근에 하시고 계신 일에 대해서 간단히 소개 부탁드립니다.

    김경균: 네, 최근에 유비베이스라는 회사에서 주로 마이크로소프트에서 개발한 Lync라는 기업용 메신저 소프트웨어를 교환기나 외부 시스템과 연동하는 일을 수개월간 진행하고 있습니다. 이러한 메시징 소프트웨어는 단순한 TCP/IP 통신 외에도 VoIP(Voice Over IP)기반의 통신이나, CSTA(Computer-Supported Telecommunication Application) 관련 프로토콜, Telephone API 등과 같이 일반 기업용 응용 프로그램 개발 시에 사용하는 기술과는 조금 다른 기술에 대한 이해를 필요로 합니다. 외부 시스템이나 장비 연동을 하려면 아무래도 잘 작성된 문서나 스펙에 의존할 수 밖에 없는데요, 최근 프로젝트는 전임자의 퇴사와 부실한 문서화 등으로 상당히 고전하고 있는 것이 사실입니다. 물론 잘못된 문서보다는 나을 수 있을지 모르겠으나, 연동을 위해서 응용 프로그램을 디버깅해야 하는 유쾌하지 못한 상황에 처해 있는 것은 사실입니다.

    김명신: 사실 국내 개발 프로젝트들을 살펴보면 너무나 과도한 문서화를 요구해서, 개발보다 문서작성에 시간이 더 많이 걸린다고 불만을 토로하시는 개발자도 있고, 김경균님처럼 부실하게 문서를 만들어 놓은 탓에 차기 프로젝트를 진행하는 데 걸림돌이 되는 경우도 있는 것 같습니다. 개발 프로젝트에 있어 문서화의 정도는 어느 수준이 적합할지요?

    김경균: 저도 문서화에 대한 다양한 시각이 있음을 알고 있습니다. 어떤 개발자들은 소스 그 자체가 이미 완벽한 문서이므로 추가적인 문서는 필요하지 않으며, 소스가 문제를 정확히 설명할 수 있도록 작성하라는 극단적인 주장도 있고, 일부 국내 대기업에서와 같이 소프트웨어 공학의 연구 과정이나 CMMI 등을 기준으로 자체 개발한 거의 100여종에 이르는 산출물 리스트를 접한 적도 있습니다. 개인적인 생각으로는 문서화는 가능한 최소화 하는 것이 좋지 않을까 합니다. 개발 진행 과정의 편의를 돕기 위한 문서라면 모를까 대부분의 문서들이 프로젝트 완료 이후에는 그 가치가 현저히 떨어지거나 쓸모 없게 되는 경우가 많은데, 이런 문서들의 작성은 최소한으로 하는 것이 좋을 것 같습니다. 물론 외부 시스템과의 연동 규격서나, 운영 매뉴얼 등은 반드시 있어야 하는 문서 중에 하나일 것으로 생각됩니다. 또한 업무 처리 로직이 너무 복잡한 경우에도 반드시 문서화가 필요한 부분일 수는 있겠습니다. 물론 소스 코드는 그와 상관 없이 깔끔하게 작성할 필요가 있겠지요.

    김명신: 지금 진행하시고 계신 프로젝트 이외에도 국내 대기업과 상당히 다양한 개발 프로젝트를 진행하신 것으로 알고 있습니다. 현업에서 그러한 프로젝트를 진행하시면서 겪으셨던 어려움이나 에피소드 같은 것이 있을까요?

    김경균: 실제 현업에서 개발을 담당하다 보면 여러 가지 형태의 제약이나 어려움이 없을 수 없습니다. 그 중에 가장 큰 것이 무엇이냐 라고 물어보신다면 역시 사람의 문제라 말씀드릴 수 있을 것 같습니다. 개발 프로젝트의 진행 중에는 특별한 경우가 아니라면 다양한 업무와 역할을 담당하는 개발자 분들과 같이 일을 하는 것이 보통이겠지요. 저 같은 경우는 주로 프로젝트의 핵심 공통 모듈 개발을 많이 진행하곤 하였는데, 다른 개발자 분들과의 협업 시에 역할 분담과 기술 지원에 애를 많이 먹었던 기억이 있습니다. 공통 모듈은 보통의 경우 프로젝트의 주요 기능을 다루거나 혹은 다른 개발자분들께서 자주 사용하시는 부분들에 대한 추상화 계층을 제공하기 위한 경우가 많은데요, 이 모듈은 왜 이렇게 만들었느냐는 긍정적인 비판 외에도, 이것은 왜 만들어 주지 않느냐 혹은 이 모듈은 사용할 수 없다라는 식의 이야기도 간혹 듣곤 했습니다. 사실 공통 모듈 개발이라는 것이 외부에서 보면 뭔가 하는 일이 없어 보이기도 하고, 뭔가 잘못되면 공통 모듈의 문제인 것만 같고 그런 것 같습니다. 프로젝트의 성공이 공통 모듈을 잘 개발해서라고 평가되는 경우는 별로 없지만 실패의 원인을 공통 모듈로부터 찾으려는 시도는 사뭇 비일비재 합니다. 또 다른 관점에서는 기술이 문제일 경우도 있더군요. 정확히는 기술 그 자체의 문제라기 보다는 기술을 이해하지 못하는 개발자의 문제라고 보는 편이 좀 더 정확한 것 같습니다. 개발자의 업무와 역할은 사실 요구되는 일과 그 결과가 다른 업종에 비해서 명확하기 때문에, 같이 일을 해보고 그 결과를 드려다 보면 개발자의 성향이나 능력치가 드러날 수 밖에 없는 것 같습니다. 수년 전에 외부의 커뮤니티에서 꽤나 이름이 알려진 개발자분과 함께 일할 기회가 있었습니다. 하지만 수개월 후에 그분이 만들어 내신 결과물은 명성에는 걸맞지 않은 수준이었고요, 그 분도 그걸 아셨는지 더 이상 일을 하지 못하시고 떠나시더라고요. 개발자는 명성 보다는 능력과 결과로 본인을 증명할 수 있어야 한다고 생각합니다.

    김명신: 그렇다면 개발자가 반드시 가져야 하는 역량이라는 것이 있을까요? 제 주위의 일부 학생들은 개발 그 자체가 좋긴 하지만, 업종 자체가 3D이고, 젊었을 때 잠시 잠깐 밖에 할 수 없는 일이기 때문에 개발자로서의 수명이 너무 짧은 것 같다고 토로하는 분이 있는 것 같습니다. 이 점에 대해서는 어떻게 생각하시는지요?

    김경균: 제 주위에 훌륭한 개발자라고 생각되는 몇몇 분들을 보면 나름의 특징들이 조금 있기는 합니다. 대부분이 어떤 문제 상황에 봉착했을 때, 문제 해결을 위해서 과도하리만큼 놀라운 집중력을 보이는 분들이 많은 것 같아요. 정보통신업이라는 것이 고도의 지식집약적 산업이고, 육체적인 노동 보다는 지적 노동을 필요로 한다는 점에서 이는 사실 특별한 것은 아니라고 할 수도 있겠습니다만 다른 업종에 종사하시는 분들에게는 이러한 특징으로 인해 개발자들은 조금 이상하거나 다르다고 생각하실 수도 있을 것 같다는 생각을 해보았습니다. 그리고 정보통신 산업이 3D 산업인 나라는 아마 한국밖에 없지 않을까 합니다. 소프트웨어 개발과 관련된 다양한 직업들 예를 들면 컨설팅 업무나, 소프트웨어 아키텍트, 개발자 등에 이르기 까지 정보통신 관련업은 많은 나라에서 가장 각광 받는 직업이자 최고의 부가가치를 생산하는 산업으로 인정 받고 있는 분야입니다. 이러한 분야가 3D 산업으로 분류되는 것은 그 분야에 있는 분들에게도 좋지 않겠지만 국가적으로도 불행한 일이 아닐 수 없다고 생각합니다. 게다가 개발자가 수명이 정해져 있다는 것에도 동의하기 어렵습니다. 개발은 젊어서만 할 수 있다고 생각하는 것은 편견에 가깝고요, 자기계발을 꾸준히 하여 개발 역량을 보전할 수만 있다면 나이와 상관없이 개발은 계속하실 수 있으리라 생각합니다. 하지만 이는 개인의 역량의 문제로만 볼 수는 없고 사회적인 통념이나 보수의 문제와 연관 지어 고민해볼 부분인 것 같습니다. 실제로 많은 SI업체들이 경력이 많고 개발을 잘 하는 고급 개발자 한명보다 적당한 중급 혹은 초급 개발자 여러명을 선호합니다. 이는 개발업종을 사람의 머리수로 계산하는 어처구니 없는 사고방식일 뿐입니다. 응용 프로그램의 본수로 프로젝트의 규모를 측정하고, 그것을 근간으로 개발자 수를 산정하기 때문인데요, 제 개인적인 생각으로는 아무리 단순한 개발이라도 고급개발자 한 명이 중급 개발자 여러 명보다 훨씬 낫다고 생각합니다. 이런 비유가 어떨지 모르겠지만 중급 개발자가 삽이라면 고급 개발자는 포크레인인 것이지요. 그럼에도 기술적인 사리판단이 정확하지 않은 매니저들이 고급 개발자들 보다는 중급 혹은 초급 개발자들을 선호함에 따라 실제로 능력과 경험을 겸비한 개발자들이 설자리가 점점 좁아지는 것이 사실입니다. 이는 안타까운 현실임에는 분명한 것 같습니다.

    김명신: 기술 그 자체에 대한 이야기를 조금 나누어 보면 어떨까요? 최근에 공부하시면서 가장 재미있었던 부분이나 혹은 가능성을 발견하신 부분이 있으시다면 어떤 부분일까요?

    김경균: 대학교 다닐 때 C++와 같은 언어를 배우기는 했지만, 사회생활을 시작하면서 본격적으로 접한 언어가 C#이었습니다. 그런데 C#에서는 델리게이트라는 요소가 있습니다. 처음 C# 언어를 공부할 때는 제가 이 부분을 잘 알지를 못했어요, 게다가 이벤트 드리븐 아키텍쳐(event driven architecture)나 최근 JavaScript에서 문제점이라고 지적하는 콜백을 근간으로 한 비동기 모형 등은 사실 별로 관심사가 아니었어요. 그런데 어느날 이벤트를 근간으로 한다는 것에 대한 호기심이 생겼고, 그것이 델리게이트로 무명 메��드(anonymous method)로 다시 람다 표현식(lambda expression)으로 그리고 LINQ로 발전하고, 그 적용영역이 확장되는 것을 보면서 즐거웠던 기억이 있습니다.

    김명신: 수년간 ASP.NET MVP로 활동을 하신 것으로 알고 있습니다. 마이크로소프트의 웹 개발 기술은 사실 ASP로부터 시작해서 이미 상당히 오랫동안 거의 정점에 이를 만큼 그 완성도가 높다고 평가 받고 있습니다. 이에 대해서 의견이 있으실까요?

    김경균: 그렇습니다. 말씀하신 바와 같이 마이크로소프트의 ASP와 ASP.NET이라는 이름으로 상당히 오랫동안 웹 개발 기술을 계승 발전시켜 왔습니다. 하지만 그 내면을 드려다 보면 상당한 자기 혁신과 변혁의 노력들을 살펴볼 수가 있습니다. ASP에서 ASP.NET으로의 전환이 그 한 단면일 수 있습니다. 스크립트와 마크업을 교묘히 섞어 사용하던 ASP의 시대에서 서버 사이드 컴포넌트와 이벤트 드리븐 방식의 ASP.NET으로의 변화는 진일보한 발전임에 분명하였습니다. 그 이후에는 다시 MVC 모형을 전폭적으로 수용한 ASP.NET MVC 모형이 최근 버전 5.1까지 출시가 되었지요. 게다가 WebPage나 SPA와 같은 웹 페이지 개발 기술과 더불어 WebAPI, SignalR 과 같은 웹 서비스 개발 기술, IIS와 같은 웹 애플리케이션 호스팅 기술, 최근에는 트렌드에 맞추어 경량화 웹서버, 경량화 웹 플랫폼 기술, 웹 호스팅 환경과 웹 어플리케이션의 분리를 도모하는 등 끊임없이 발전하고 진화하는 모습을 보여주고 있습니다. 사실 정점에 이르는 완성도보다는 현실의 변화를 즉각적으로 반영하고 따라가 주기를 많은 개발자들이 희망한다고 생각합니다. 물론 그 다음은 기술적 리더쉽이겠지요. 부족한 부분이 많이 있다고 생각은 듭니다만, 마이크로소프트가 최근에 웹 개발 프레임워크를 전격적으로 .NET Framework과 분리하여 1~2년만에 한번씩 업데이트가 나오던 이전과 다르게 수주에서 수개월에 한번씩 최신의 업데이트가 나오는 것은 상당히 고무적이라고 생각이 듭니다.

    김명신: 아 그렇군요. 변화 무쌍한 웹 개발 트렌드를 따라가는 것이 쉽지는 않을 것 같다는 생각이 많이 드네요. 그럼에도 불구하고 이번 세션에서 발표하실 내용은 ASP.NET의 고전이라 할 수 있는 웹폼에 대한 내용인 것으로 알고 있습니다.7824_clip_image004_thumb_55AC0446

    김경균: 그렇습니다. 현재까지 ASP.NET을 이용하여 웹 사이트를 개발하시는 분들의 대다수가 여전히 웹폼을 즐겨 쓰시는 것으로 알고 있습니다. 최신 기술 변화의 흐름을 놓치지 않는 것만큼이나 중요한 것이 기존 기술에 대한 계승 발전일터인데요, 이런 관점에서 웹폼은 여전히 현재 진행형인 기술입니다. 최근에는 와우! 하는 새로운 기술은 덜 도입되었지만 개발자들의 피드백을 중심으로 정말 필요한 기술들이 제법 추가되었습니다. 개인적으로는 가려운 부분만을 정확히 찍어서 긁어주는 듯한 느낌을 많이 받았습니다. 아주 많은 부분에서 획기적인 변화가 있었던 것은 아니기 때문에, 제가 이번 테크데이즈 미니 토요 세미나에서 정리해 드리는 부분만 잘 이해하신다면 그것만으로도 충분하지 않을까 생각하고 있습니다.

    김명신: 그렇게 말씀 해 주시니까 그 세션은 꼭 들어가야겠다는 생각이 드는군요. 그럼 토요일 행사장에서 뵙겠습니다. 감사합니다.

    김경균: 감사합니다.

    테크데이즈 미니 토요세미나 안내

  • Korea Evangelist

    클라우드 트래픽 부하 분산 - (3) Windows Azure 트래픽 관리자 서비스 구축 03060

    • 0 Comments

    안녕하세요. 김대우입니다. 이제 Windows Azure 트래픽 관리자 마지막 포스팅이네요.

    지금까지 포스팅을 통해 클라우드 환경에서의 트래픽 분산의 필요성과 서비스 시나리오를 알아 보았습니다.

    클라우드 트래픽 부하 분산 - (1) Windows Azure 트래픽 관리자(Traffic Manager)

    클라우드 트래픽 부하 분산 - (2) Windows Azure 트래픽 관리자 서비스 시나리오

    클라우드 트래픽 부하 분산 - (3) Windows Azure 트래픽 관리자 서비스 구축

    당연히 실제 서비스 구축 과정을 살펴 보도록 하겠습니다. 비록, 테스트 도메인이 없어 아쉽지만 아래 캡처한 강좌 화면만 보셔도 감이 오실거에요. 트래픽 관리자는 Windows Azure 관리 포털 좌측 하단의 Traffic Manager를 선택하고 “새로만들기” 하시면 됩니다.

    image_2.png

    익숙하신 화면이지요.(대쉬보드를 보시면 한글화 되어 있습니다.) “DNS 접두사(Prefix)”는 꼭, 이미 구성된 CNAME으로 링크해 주시면 됩니다.

    CNAME에 대한 소개는 이전에 제가 작성한 포스팅인

    Windows Azure Website와 클라우드 서비스에 나의 도메인을 연결 - CNAME만 기억하세요!

    내용을 참조 하시면 됩니다.

    만약, AWS의 Route 53에 익숙하다면 이 과정은 관리할 도메인인 "Hosted Zone"을 만드는 과정과 유사합니다.

    만약, 클라우드 트래픽 부하 분산 - (2) Windows Azure 트래픽 관리자 서비스 시나리오 을 차근차근 보셨다면 이제 원하시는 서비스의 선택이 가능하실 거에요. 먼저, 자 첫 시나리오인 "(1) 높은 성능을 제공하는 클라우드 어플리케이션을 구성 - 성능(Performance) 정책"을 구현하기 위해 “성능(Performance)”를 선택 후 생성합니다.

    image_4.png

    만드는데 시간이 오래 걸리지 않습니다. 말 그대로 몇 초 만에 후닥닥 만들어지죠.  이 화면은 만들어진 대쉬보드 화면입니다.

    상태 모니터링이나 DNS 요청 수 등을 이 대쉬보드에서 보실 수 있어요.

    image_6.png

    그럼 바로 끝점(End Point)을 구성하도록 하겠습니다. - 끝점 구성 역시 간단해요, 어느 클라우드 서비스에 분산해 라우팅 시킬지 골라서 선택하는 과정입니다. 만약, AWS의 Route 53에 익숙하다면 이 과정은 "Record Set"을 만드는 과정과 유사합니다.

    image_8.png

    끝점 추가(Add Endpoint)를 선택하면 이미 내가 만들어 서비스되고 있는 다양한 지역의 클라우드 서비스가 나옵니다.

    느낌이 오시죠? 각 데이터센터 지역에 구성된 서비스 중, 묶고 싶은 서비스를 선택하면 끝!

    위의 화면에서는 북유럽과 미국 동부 지역을 묶었습니다. – 원하는 만큼 묶으시면 됩니다.

    image_10.png

    잠시 후 이렇게 서비스가 묶어지고 온라인 상태가 되죠. 이제 테스트를 해 보시면 됩니다. 여러 방법의 테스트가 가능한데요, 간단하게 하시는 방법은 각 지역에 Windows Azure 가상머신을 만들고 원격 데스크톱으로 접속해 브라우저로 요청을 해 보는 방법입니다.

    대쉬보드의 구성(Configure)에서 DNS TTL 시간을 30초 정도로 줄이고 테스트하면 더 빨리 테스트 가능하겠지요.(기본 DNS TTL 세팅은 300초)  

    성능 시나리오를 살펴 보셨으면 이제 두 번째 시나리오를 살펴 보도록 할게요. "(2) 장애복구 계획을 목표로 트래픽 관리자를 구성 - 장애조치(Failover) 정책" 시나리오 입니다.

    image_12.png

    이 시나리오 역시 간단합니다. 이전 포스팅에서 소개해 드린 것처럼, 장애 조치(Failover)로 처리할 경우는 주 서비스(Primary)를 구성하는 절차가 선행되어야 합니다. 이렇게 주 서비스를 선택해 구성하고, 주 서비스를 강제로 중지 시켜서 테스트 해 보시면 Failover가 잘 처리되는 것을 확인 가능합니다.

    마지막으로 살펴볼 시나리오는 "(3) 서비스 중인 클라우드 어플리케이션에 대해 서비스 중지(유지보수 시간) 없이 업그레이드를 제공"하는 시나리오 입니다. 간단히 처리해 보실 수 있어요.

    image_14.png

    유지보수 시간 없이 어플리케이션을 업데이트 하는 시나리오의 경우에는 이렇게 해당 끝점을 잠시 중지시키고 서비스 업데이트/테스트 하시면 됩니다. 테스트가 다 되면 다시 온라인 시키면 부하 분산이 이루어지지요.

    클라우드 기반 부하 분산 서비스, Windows Azure 트래픽 관리자의 내일

    클라우드의 미래는 IaaS가 아니라 PaaS다 라고 늘상 말씀 드렸습니다.(Windows Azure는 IaaS와 PaaS를 모두 제공하죠) 그리고, 앞으로의 클라우드는 On-premise에 더해지는 Private Cloud, Public Cloud를 아우르는 하이브리드 클라우드가 주도하게 될 것입니다. 내일의 트래픽 관리자 모습도 쉽게 예측 가능할 것 같아요. 클라우드 대상 서비스 뿐만 아니라, On-premise와 하이브리드 클라우드 전체에 대한 트래픽 관리에, 클라우드의 내일인 PaaS기반 서비스와 더 유기적으로 동작해 PaaS 기반 서비스의 일부로 분명 자리잡게 될겁니다.

    이렇게 해서 Windows Azure Traffic Manager에 대해 알아 보았습니다. 클라우드 기반 트래픽 부하 분산 서비스로 고민하시는 많은 개발자 분들께 도움 되시면 좋겠습니다. 감사합니다.

    참고링크

    클라우드 트래픽 부하 분산 - (1) Windows Azure 트래픽 관리자(Traffic Manager)

    클라우드 트래픽 부하 분산 - (2) Windows Azure 트래픽 관리자 서비스 시나리오

    클라우드 트래픽 부하 분산 - (3) Windows Azure 트래픽 관리자 서비스 구축

    Windows Azure Traffic Manager 서비스 소개 - 공식 한글 사이트
    Windows Azure Website와 클라우드 서비스에 나의 도메인을 연결 - CNAME만 기억하세요!
    Traffic Manager Overview
    Edge Show 86 - Windows Azure Traffic Manager Demos - 동영상
    About Traffic Manager Load Balancing Methods
    Traffic Manager Configuration Tasks
    트래픽 관리자 가격 정보
    About Traffic Manager Monitoring

Page 6 of 122 (606 items) «45678»