SQL Server on Windows 개요

해당 실습은 클라우드 서비스가 아닌 on-premises 구축이다.

클라우드를 이해하기 위해 on-premises의 물리 서버, 네트워크 스위치, 스토리지, OS 등의 핵심 인프라가 존재한다.

즉 이런 전체 인프라 시스템의 핵심을 파악하는 실습이다.

 

나중에 내가 일할 곳이 반드시 클라우드 환경이라는 보장도 없고, on-premises 환경이라는 보장도 없다.

클라우드 환경이라고 해도 내가 공부한 부분이, 내 담당 업무일지 아닐지는 전혀 알 수 없다.

이번 실습은 이를 대비하기 위해 전반적인 흐름이 어떻게 이루어지는지 알기 위함이다.

 

그밖에도 금융과 보안 산업의 기업은 on-premises를 선호한다.

데이터의 통제, 법적 규제 준수, 맞춤 보안, 내부 감사, 정보 유출 감소, 예측 가능한 성능, 독립 인프라 관리, 장기 비용 효율 등의

다양한 이유로 인해서 해당 산업군은 on-premises를 아직 선호하고 있다.

 

SQL Server on Windows 실습

위 사진과 같은 형태로 on-premises를 구축한다.

SQL Server(SQL VM)를 2개를 설치하는 이유는 고가용성(High Availability) 때문이다.

단순 흐름 이해 실습을 위해서라면 하나의 SQL Server만 생성하여 실습해도 상관없어 보인다.

 

실습에 사용하기 위한 리소스 그룹을 생성한다.

 

사용할 모든 VM들이 서로 통신할 수 있도록 만들어진 '가상 네트워크' 공간을 생성한다.

 

네트워크 공간을 생성할 때 IP주소 설정탭에서 한 가지만 변경한다.

2번째 octet(옥텟) 값만 변경하면 된다. 변경할 값은 겹치지 않게 임의로 원하는 숫자를 사용하면 된다.

사실 이것도... 사용하려는 상황에 따라 다르게 설정하지만, 여기서는 내가 5번째 수강생이라, 10.5.0.0/16을 사용했다.

이게 무슨 의미인지 가볍게 설명하자면 아래와 같다.

(참고로 octet이란 ■. ■. ■. ■와 같은 IP주소에서 ■ 한 부분을 말한다.)

 

IPv4 인터넷 프로토콜은 32bit 주소 체계를 사용한다.

IPv4 주소는 '서브넷 마스크(Subnet Mask)'라는 32bit 값과 함께 사용한다.

가령 192.168.100.1/24라는 IP가 있을 때, /(슬래시)를 기준으로 좌측은 IP주소, 우측은 'subnet mask'를 말한다. 

 

IPv4 주소는 네트워크 부분(Network Part)과 호스트 부분(Host Part)으로 나눈다.

이때 서브넷 마스크에서 1은 네트워크 부분을, 0은 호스트 부분을 표시한다.

즉 '10진수. 10진수. 10진수. 10진수'라는 주소가 있을 때, 어디까지가 네트워크인지 구분하는 표기법이 서브넷 마스크다.

 └ 네트워크 부분은 '어떤 IPv4 네트워크에 있는가'를 나타내는 값

 └ 호스트 부분은 '어떤 단말인가'를 나타내는 값

 └ 구분을 하기 위한 값으로 0과 1이 번갈아 나오지 않고, 한 번 0이 나오면 그 뒤의 값은 전부 0이다.

 

서브넷 마스크 표기에는 2가지 방법이 있다.

10진수 표기법으로 32bit를 쪼개서 옥텟으로 구분하여 표기하는 방식(EX. 255.255.255.0)이 있고,

CIDR 표기법으로 10진수 표기에서 있는 1의 수를 IPv4 주소 뒤에 붙이는 방식(Ex. 192.168.100.1/24)이 있다.

 

정리하자면 10.5.0.0이라는 가상 네트워크 주소를 만들 거고,

Subnet Mask가 16이니 65,536(2^(32-16))개의 단말이 접속 가능하게 만들겠다는 의미다.

 

생성한 '가상 네트워크' 자원에서 '설정 > 주소 공간'으로 들어간다.

이후 주소 공간 CIDR의 Subnet mask가 16인지, 주소 범위는 3번째와 4번째 octet이 0.0 ~ 255.255인지 확인한다.

아니라면 주소 공간을 16으로 바꿔준다.

 

2개의 SQL Subnet을 생성한다고 했을 때, 1개의 DC(Domain Controller) Subnet까지 총 3개의 Subnet을 사용한다.

이를 위해서 Subnet mask를 16으로 할당하여 여러 개의 Subnet을 사용할 수 있게 하는 거다.

 

이후 서브넷 탭으로 이동해서 DC-subnet, SQL-subnet-1, SQL-subnet-2를 생성한다.

이때 이름은 본인이 구분할 수 있는 이름이면 상관없다.

또한 서브넷의 순서대로 3번째 4번째 octet과 subnet mask를 0.0/24, 1.0/24, 2.0/24로 설정한다.

3번째 octet은 본인이 구분할 수 있는 다른 숫자라면 상관없다. (가령 10.5.19.0/24 같은 형태)

 

이는 10.5.0.0라는 커다란 전체 가상 네트워크에서 10.5.n.0이라는 주소를 사용한다는 의미이다.

그리고 10.5.n.0의 subnet mask는 24로 설정했다.

고로 각 10.5.n.0에서 사용 가능한 단말의 개수는 256개가 된다. (2^(32-24))

 

이렇게 3개의 vnet을 설정하면 된다.

그런데 잠시, 분명 사용 가능한 단말의 개수는 256개라고 했는데, 여기서 사용 가능한 IP는 251개다.

이는 네트워크 주소(10.5.n.0), 브로드캐스트 주소(10.5.n.255)는 항상 제외하고 254개만 사용한다.

여기에 추가로 Azure는 게이트웨이 주소(10.5.n.1), DNS 서버용(10.5.n.2), 예비 대비용(10.5.n.3)으로 3개를 더 제외한다.

따라서 251개만 사용할 수 있는 상태다.

 

이러면 현재 위의 구조에서 빨간색으로 네모친 Subnet 3개를 만든 상황이다.

이제는 VM(가상 머신)을 만들 차례다.

 

가장 먼저 DC VM을 만들어준다.

DC(도메인 컨트롤러; Domain Controller)는 윈도우 서버 시스템에서 네트워크의 핵심적인 역할을 수행하는 서버다.

'도메인'이라는 중앙 집중식 관리 영역 내에서 사용자, 보안 정책 등 모든 자원을 관리하고 인증하는 역할을 담당한다.

 

Azure Resource에서 '가상 머신'을 검색해서 여러 설정을 진행한 뒤 생성한다.

여기서는 크게 '가상머신 이름', '이미지', '크기', '관리자 계정'을 신경써서 만들어야 한다.

 

가상머신 이름은, 본인이 이게 DC VM이라는 걸 구분할 수 있는 고유한 이름이면 상관없다.

이미지는, 본인이 어떤 운영체제의 가상머신을 만들지 고른다. 여기서는 Windows Server 2019를 사용한다.

크기는, 클라우드 가상 머신의 성능을 말한다. 여기서는 Stndard D2s_v3를 사용한다.

관리자 계정은, Domain Controller에 접속할 계정으로 구분할 수 있는 어떤 ID, PW든 상관없다.

여기서는 DomainAdmin이라는 이름으로 만들었고, 이하 'DC계정'으로 명명한다.

 

디스크 탭에서도 간단한 설정을 한다.

상황과 자금 상황에 맞게 'OS 디스크 유형'을 변경하면 된다.

수강생이 많아 자원이 많이 들어간다는 이유로 여기서는 '표준 HDD'로 진행한다.

(사진에서는 잘못 눌러서 표준 SSD인데, 읽기/쓰기 속도에서 큰 차이는 없어 그냥 진행했다.)

 

네트워킹 탭에서 미리 만든 DC(도메인 컨트롤러)의 서브넷으로 설정하고 생성해야 한다.

이후 검토 + 만들기로 VM을 생성한다. 

 

VM을 생성하고 나면, DC(Domain Controller)에서 사용할 VM의 네트워킹 인바운드 규칙을 설정한다.

인바운드 대상 포트 번호는 1433(SQL Port 용도), 5022(Mirroring Port 용도)다.

 

인바운드 규칙까지 설정하고 나면 Domain Controller 서버 설정을 하러 갈 차례다. 

RDP(Remote Desktop Protocol) 프로그램으로 DC VM에 접속한다.

이때 접속하는 ID, PW(사용자 자격 증명)은 DC 계정으로 접속한다.

 

잠시 기다리면 Server Manager 창이 뜨는데 여기서 Add roles and features를 선택한다.

이후 Server Roles 탭에서 Acitve Directory Domain Service와 DNS Server를 활성화한다.

그리고 Next를 끝까지 눌러 설치를 진행한다.

 

Active Directory Domain Services(AD DS)는 사용자, 컴퓨터, 그룹 등 네트워크 자원을 중앙에서 관리하는 시스템이다.

쉽게 말하면 '회사 컴퓨터 로그인 시스템'이라고 볼 수 있다.

애초에 해당 VM을 DC의 용도로 사용할 목적이니 당연히 활성화해야 하는 항목이다.

이를 활성화하면 '도메인 기반 로그인(SSO)', '정책 배포(GPO)', '디렉터리 서비스(LDAP 기반)' 등이 가능하다.

 

DNS Server는 도메인 이름을 IP 주소로 변환해주는 시스템이다.

Active Directory Domain Services는 DNS 없이 제대로 동작할 수 없는 항목이다.

따라서 AD DS를 사용하고, 손쉽게 domain으로 접속하기 위해서 활성화하는 항목이다.

 

위에서 Active Directory Domain Services(AD DS)를 활성화했기 때문에 좌측의 탭에서 설정할 수 있다.

이제 이 VM 서버를 DC(Domain Controller)로 승격하여 사용한다.

 

세부 설정이다.

위 사진처럼 설정을 진행하고 domain은 본인이 어떤 도메인을 root로 사용할지 적으면 된다.

Domian Controller Options에서 입력하는 password는 DC계정의 password를 입력한다.

 

이렇게 DC 서버로 승격하는 설정을 하고 나면, DC 설정을 적용하기 위해 재부팅을 시작한다.

재부팅에 꽤 오랜 시간이 걸리니 유의하자.

 

재부팅을 기다리는 사이에 아까 생성한 DC VM의 IP와 DNS를 이어준다.

'네트워킹 > 네트워크 설정' 탭에 들어가면 '개인 IP 주소'가 있다.

이 IP 주소는 DC-VM-1dt008-1의 주소를 가리킨다. 이 주소를 복사한다.

 

복사한 주소를 '설정 > DNS 서버' 탭에 들어가서 사용자 지정으로 바꾼 다음, IP 주소를 추가한다.

이제 DNS를 사용하여 접속하면 자동으로 IP 매핑을 하여 접속할 수 있다.

 

이제 3개의 Subnet과 DC VM 1개의 설정이 끝났다.

환경에 대한 설정이 끝났으니, 이제 프로그램을 설치하고 관리할 사람이 필요하다. 이를 위해 2개의 계정을 만든다.

하나는 감독 계정으로, 모든 VM에 로그인해서 SQL Server를 설치하고, 클러스터와 가용성 그룹을 설정하는 계정이다.

다른 하나는 일꾼 계정으로, SQL Server 서비스를 실행하고 데이터를 처리하는 계정이다.

 

Pythonic하게 비유를 하자면 이제까지 파이썬 설치와 환경변수 설정을 했다면

Master(감독 계정)는 라이브러리나 extension을 설치하고 코드를 짜는 사람인 거고,

Slave(일꾼 계정)는 작성한 코드를 계속해서 실행해주는 사람이다.

이때 Master는 설치를 주로 하기에 install이라는 이름의 계정으로 생성했다.

 

DC VM의 Server Manager 창을 위처럼 다시 띄운다.

우상단의 'Tools > Active Directory Administrative Center' 탭으로 들어간다.

 

'좌측의_내가_작성한_최상위_도메인 > Users > New > User'로 계정을 만들기 위해 들어간다.

 

감독 계정을 만든다.

Full name과 User AccountName에 설치를 주로 할 계정이기에 install이라는 이름을 지어줬다. 

비밀번호는 admin123%으로 했지만, 본인이 기억할 수 있는 거라면 뭐든 상관없다.

이 계정을 이제 MASTER 계정이라고 명명한다.

일꾼 계정을 만든다.

Full name과 User AccountName에 코드를 주로 돌리기에 SQLslave라는 이름을 지어줬다. 

비밀번호는 slave123%으로 했지만, 본인이 기억할 수 있는 거라면 뭐든 상관없다.

이 계정을 이제 SLAVE 계정이라고 명명한다.

 

MASTER 계정은 모든 VM에 접속해서 설치, 설정을 해야 하는 계정이다.

그렇기에 모든 곳에 들어가서 작업할 수 있는 권한을 설정해야 한다.

'Builtin > Properties' 탭으로 들어간다.

 

MASTER 계정에 대한 권한 설정 세부 사항이다.

위와 같은 순서대로 접속하여 Permissions에 Full Control을 골라준다.

 

계정 생성까지 끝났으니 이제 실제 SQL Server를 실을 VM을 만들 차례다.

이렇게 생성하는 VM은 SQL VM이라고 명명하겠다.

 

단순 참고 사항으로 on-premises 같은 경우 공용 IP 주소를 사용하지 않는다.

보안을 위해 대부분 개인 IP 주소만 사용한다.

외부에서 직접 접속할 수 없게 만들어 해킹과 같은 위협으로부터 VM을 보호한다고 한다.

 

Azure Resource에서 '가상 머신'을 검색해서 여러 설정을 진행한 뒤 생성한다.

DC VM을 만들 때와 같이 '가상머신 이름', '이미지', '크기', '관리자 계정'을 신경써서 만들어야 한다.

 

DC VM 때와 마찬가지로 자원을 절약해야 한다면, 디스크 설정을 변경하자.

 

네트워킹 탭에서 아까 만들어둔 10.5.n.0에 해당하는 서브넷을 이제 사용할 때가 됐다.

서브넷 탭에서 1번과 2번 중에 원하는 서브넷으로 이어준다.

이후 검토 + 만들기로 SQL VM을 생성한다. 

 

같은 방식으로 2번째 SQL VM도 생성한다.

다만 이때 '기본 사항 > 가용성 영역'에서 Zone 2으로 변경하고 만들어도 된다. (굳이 안 해도 된다는 말과 같다.)

이 가용성 영역은 VM을 만드는 데이터 센터의 위치를 말한다.

그러니까 1번 Azure 데이터 센터에 만들래? 2번 Azure 데이터 센터에 만들래?라고 물어보는 것이다.

당연히 어느 데이터 센터에 만들든 상관없지만, 가용성 영역을 나눈다면 이 자체로 HA(고가용성)을 추구하는 것이다.

어찌됐든 편한 방법으로 2개의 SQL VM을 생성하자.

 

아까 DC-subnet, SQL-subnet-1, SQL-subnet-2를 만들었고,

각각의 subnet에는 subnet mask를 24로 설정하여 256개의 단말(네트워크)을 등록할 수 있었다.

물론 5개의 예약 IP 때문에 실질적으로 사용 가능한 주소는 251개 뿐이었다.

이제 생성한 2개의 SQL VM을 SQL-subnet의 단말로서 등록해야 한다.

마치 공유기(subnet)에서 핸드폰(SQL VM)과 연결하여 네트워킹하는 것처럼 말이다.

 

이를 위해 '네트워크 > 네트워크 설정 > 네트워크 인터페이스/IP 구성'으로 들어간다.

 

IP 설정을 추가하여 어떤 주소로 사용할지 정해야 한다.

0, 1, 2, 3, 255는 이미 예약 IP로 사용하고 있기에 다섯 개를 제외한 그 어떤 숫자를 써도 상관없다.

여기서는 임의로 10.5.1.7로 설정했다.

3번째 octet이 1인 이유는 첫 번째 subnet에 등록한 SQL VM이기 때문이다.

마찬가지로 2번째 SQL VM에 대해서도 10.5.2.n으로 설정한다.

 

이제 두 개의 SQL VM을 '도메인'에 가입(join)하는 과정을 진행한다.
앞서 만든 SQL VM들을 root.domain.com이라는 거대한 '네트워크 마을(도메인)'의 정식 주민으로 등록하는 과정이다.

 

위 사진처럼 SQL VM의 RDP로 각각 접속하여 Server Manager 창이 뜰 때까지 기다린다.

이후 좌측의 Local Server 탭으로 들어가서 상단의 Workgroup을 눌러준다.

Change로 들어가 Member of Domain을 눌러 DC VM에서 설정한 Domain 이름으로 연결한다.

관리자 계정과 암호에는 DC VM의 도메인에 가입하는 과정이기 때문에 DC 계정을 입력한다.

 

만약 모든 VM의 ID와 PW를 동일하게 설정했다면, ROOT\DomainAdmin 이런 식으로 명시해줘야 인식한다.

SQL-VM-1과 SQL -VM-2 모두 RDP로 접속하여 Workgroup을 바꿔준다.


도메인에 가입해야 이유는 다음과 같다.

 └ 중앙 관리: Domain Controller가 모든 VM을 한꺼번에 관리할 수 있다. 보안 정책, 사용자 권한 설정을 한 번에 적용할 수 있다.
 └ 보안 강화: 도메인에 속한 모든 컴퓨터끼리는 서로 안전하게 통신할 수 있게 된다.
 └ 쉬운 접근: 특정 VM의 이름을 직접 외울 필요 없이, 도메인 이름으로 쉽게 찾아서 접근할 수 있다.

 

DC subnet, DC VM, SQL Sub net, SQL VM을 전부 만들고 설정했다.

이제 MASTER 계정을 2개의 SQL VM에 등록하여 설치, 관리하게 만들어야 한다.

 

각 SQL VM에 RDP로 접속하여 Server Manager 창으로 들어간다.

우상단의 'Tools > Computer Management' 탭으로 들어간다.

 

'Local Users and Groups > Groups > Administrators > Add'로 들어간다.

그리고 MASTER 계정의 아이디(install)을 추가한다.

그러기 위해서는 도메인 네트워크의 permissions이 필요하기에 DC 계정으로 허락한다.

이 과정을 2개의 SQL VM에 대해 전부 설정한다.

 

그리고 모든 VM에 로그인하기 위해서 로그인 설정을 진행한다.

각 SQL VM에 RDP로 접속하여 Server Manager 창으로 들어간다.

우상단의 'Tools > Active Directory Users and Computers' 탭으로 들어간다.

 

'자신이_만든_도메인 > Users > 자신의_MASTER_계정(여기서는 install)'으로 들어간다.

Account 탭으로 들어가서 첫 번째 설정을 끄고, 세 번째 설정을 켠다.

User must change password at next logon은 처음 로그인하기 전 반드시 비밀번호를 바꿔야 하는 설정이고,

Password never express는 비밀번호를 이후 바꾸지 않아도 되는 설정이다.

이 과정을 2개의 SQL VM에 대해 전부 설정한다.

 

이제 본격적으로 MASTER 계정으로 접속해 프로그램 설치를 진행할 차례다.

SQL VM 1과 2 모두 MASTER 계정(install)을 통해 접속한다.

 

이제 각 SQL VM에 MSSQL과 SSMS를 설치한다.

 

Custom으로 설치한다.

 

설치 진행을 하고 Installation에서 첫 번째 항목으로 진행한다.

 

Feature Selection 탭까지 와서 위의 6개 항목을 활성화하고 설치를 진행한다.

 

Server Configuration에서 SQL Server Agent를 자동으로 선택한다.

 

Database Engine Configuration에서 위 사진과 같이 설정해준다.

여기서 Enter password는 SQL Server를 위한 새로운 비밀번호다. 여기서는 sqlserver123%로 설정했지만 편할대로 하면 된다.

 

이후 SSMS 링크에 접속하여 각 SQL VM에 설치한다.

 

각 SQL VM에서 cmd를 열어 wf.msc를 입력하거나, 직접 방화벽 설정으로 들어간다.

Properties로 들어가 방화벽 설정을 꺼준다.

 

SQL VM에서 SSMS를 열어 접속이 잘 되는지 확인해보자.

Login은 SA고, Password는 SQL Server를 설정할 때 입력한 비밀번호다. 여기서는 sqlserver123%에 해당한다.

 

 

 

 

+ Recent posts