0. 환경
MSSQL Server: Window Server 2019 Standard Version 1809 (Build 17763.9121)
Pure Storage: FA-C50R5 Purity//FA 6.9.5
1. 개요
OpenStack 기반 Window Server VM을 신규로 구성한 이후, MSSQL MSCS 클러스터 구성을 위한 초기 세팅을 진행하였다. OS(C:)와 DATA(D:)의 경우 Cinder가 관리하는 볼륨으로 생성/사용하였다.
하지만 DB에서 사용할 볼륨의 경우 초기 클러스터 구성 시 scsi-3 pr을 통과할 수 없어 iSCSI를 이용하여 PureStorage와 직접 연결하여 구성하였다. (Cinder와 호환 이슈)
OpenStack Host에서 각 VM에 할당할 인터페이스를 물리적으로 분리 및 구분할 필요가 있었다.
(DB 통신 용도이므로 타 서비스 트래픽과 분리를 위함)
따라서 아래 구성도에 따라 인터페이스 당 2개, 총 4개 세션으로 MPIO iSCSI 연결 및 구성하였다.

처음에는 Path가 Redundant 상태였으나 윈도우 서버와 퓨어스토리지 간 iSCSI 구성을 한 이후 일정 시간이 흐르자 세션 불균형을 확인할 수 있었다. (Uneven)

스토리지 포트 연결은 각 컨트롤러에 2개씩 정상적으로 보이나 Uneven 상태인 점이 이상하여 트러블슈팅을 진행하였다.
2. 원인 분석
2-1) 스토리지에서 iSCSI 세션 연결 정보 확인
1.아래 명령어를 이용하여 연결 세션 정보를 확인하자 바로 아래와 같이 이상한 점을 확인할 수 있었다.
# purehost list --all GWSQL1

위와 같이, 모든 볼륨에 동일하게 Target Port에 동일한 CT0.ETH12가 4개 존재하는 것을 확인할 수 있었다. (GWSQL2 동일)
개요의 구성도에서 확인할 수 있듯이 iSCSI용 인터페이스를 2개로 분리 및 각자 다른 VLAN을 할당하였기에 세션은 4개가 구성되는 것이 설계대로였다. 따라서 다음에는 윈도우 서버 쪽에서 확인을 진행하였다.
2-2) 윈도우 서버에서 iSCSI 세션 연결 정보 확인
1. 윈도우 서버에 접속하여 iSCSI 초기자 속성의 즐겨찾는 대상을 확인한 결과 7개의 세션 정보를 확인할 수 있었다.

2. 이후 powershell에서 Get-IscsiConnection 명령어를 이용하여 확인한 결과, 아래와 같이 InitiatorAddress가 중복되어 세션이 생성된 것을 확인할 수 있었다. (0.0.0.0 2개, 10.101.92.131 1개)

3. 관련 이슈 검색
Everpure 공식 사이트에서 해당 이슈에 대한 레퍼런스가 있는 지 체크하였고, 2개의 분리된 VLAN에서 문제가 발생될 수 있음을 확인하였다.
How-To: Configure Windows host to connect via 2 separate VLANs to the same array using PowerShell
Problem This has been highlighted by GazProm on ES-15657 In some iSCSI based environments, it may be preferred to implement the connectivity between Windows hosts and a Everpure FlashArray over 2 VLANs in order to provide another reliability layer (configu
support.everpuredata.com
이에 대한 해결책으로 Powershell을 이용하여 Initiator IP와 Target Portal IP를 지정하여 연결을 생성하는 방식이었다.
4. 해결 및 최종 확인
아직 MSSQL 서버 구성 단계이므로 서비스에 영향은 없기에, MSSQL#2 서버부터 순차적으로 진행하였다.
4-1) MSSQL#2 서버 기존 세션 및 포털 전체 제거
1. powershell에서 아래 명령어를 이용하여 기존 iSCSI 세션을 전체 제거한다.
> Get-IscsiSession | ForEach-Object {
Disconnect-IscsiTarget -SessionIdentifier $_.SessionIdentifier -Confirm:$false
}
2. iSCSI 초기자 속성에서 즐겨찾는 대상 탭에서 모든 대상을 전체 제거한다.

3. 아래 명령어로 포털을 모두 제거한다.
> Get-IscsiTargetPortal | Remove-IscsiTargetPortal -Confirm:$false
4. 완전히 연결이 제거되었는지 확인한다.
> Get-IscsiTargetPortal
> Get-IscsiSession
> Get-IscsiTarget
4-2) MSSQL#2 서버 iSCSI 연결 재구성
1. Everpure 사이트에서 확인한 정보를 기반으로 아래에 iSCSI 연결 재구성 스크립트를 작성 후 Powershell에서 적용한다.
** 본 작업 스크립트 (MSSQL#2 서버) **
$nic1 = "10.101.92.131"
$nic2 = "10.101.93.131"
$target1 = "10.101.92.2"
$target2 = "10.101.92.3"
$target3 = "10.101.93.2"
$target4 = "10.101.93.3"
New-IscsiTargetPortal -InitiatorPortalAddress $nic1 -TargetPortalAddress $target1 -InitiatorInstanceName "ROOT\ISCSIPRT\0000_0"
New-IscsiTargetPortal -InitiatorPortalAddress $nic2 -TargetPortalAddress $target3 -InitiatorInstanceName "ROOT\ISCSIPRT\0000_0"
Start-Sleep -Seconds 2
$targetname = (Get-IscsiTarget)[0]
Connect-IscsiTarget -InitiatorPortalAddress $nic1 -TargetPortalAddress $target1 -IsMultipathEnabled $true -NodeAddress $targetname.NodeAddress -IsPersistent $true
Connect-IscsiTarget -InitiatorPortalAddress $nic1 -TargetPortalAddress $target2 -IsMultipathEnabled $true -NodeAddress $targetname.NodeAddress -IsPersistent $true
Connect-IscsiTarget -InitiatorPortalAddress $nic2 -TargetPortalAddress $target3 -IsMultipathEnabled $true -NodeAddress $targetname.NodeAddress -IsPersistent $true
Connect-IscsiTarget -InitiatorPortalAddress $nic2 -TargetPortalAddress $target4 -IsMultipathEnabled $true -NodeAddress $targetname.NodeAddress -IsPersistent $true
4-3) 작업 정상 여부 확인 및 MSSQL#1 서버에도 동일 작업 진행
1. 아래 명령어를 이용하여 작업이 의도된 대로 진행되었는지 확인한다.
> Get-IscsiTargetPortal
> Get-IscsiSession
> Get-IscsiTarget

2. MSSQL#2 서버 리부팅 이후에도 증상이 동일한지 확인한다.
3. 장애 조치(Failover) 클러스터 관리자에서 클러스터 소유자 노드를 MSSQL#2번 서버로 넘긴 이후 MSSQL#1번 서버에서도 동일한 작업을 반복 수행한다. (단 스크립트는 IP 변경 필요)
4. MSSQL#2 서버에 작업이 완료된 이후 다시 클러스터 소유자 노드를 MSSQL#1 서버로 전환하여 작업을 완료한다.
* 장애 조치 클러스터 관리자에서 소유자 노드 변경 방법
A. 실행 창에서 cluadmin.msc 입력하여 장애 조치 클러스터 관리자 실행
B. 좌측 탭에서 클러스터 확장 -> 역할을 클릭하고 모든 객체에 대해 이동 -> 노드 선택

C. MSSQL#2 서버를 선택하고 확인을 클릭, 모든 역할에 대해 반복 수행한다.

D. 클러스터를 우클릭 -> 추가 작업 -> 코어 클러스터 리소스 이동 -> 노드 선택을 클릭한다.

E. C와 동일하게 MSSQL#2 서버를 선택하고 확인을 클릭하여 이동을 완료한다.

4-4) 스토리지 정상 여부 확인
1. 퓨어스토리지 관리 GUI 접속 이후 Health -> Connections 에서 서버가 정상적으로 Redundant 상태인지 확인한다.

2. CLI에서 purehost list --all GWSQL1, purehost list --all GWSQL2 명령어를 사용하여 정상적으로 4개 세션이 수립되었는지 확인한다.

5. 모니터링
작업 후 대략 3일이 지났으나 아직까지 해당 증상은 나타나지 않았다. 다시 관련 증상이 발생될 경우 추가적으로 수정을 진행할 예정이다.







































































