블로그 이미지
포도알77
IT 방랑기

calendar

      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  

Notice

2019.03.19 08:21 리뷰
 어제 메모리를 추가 증설했다. 


 기존 4G * 6개가 장착되어 있었는데, db서버를 분리를 하면서 메모리 4G * 6개를 추가로 구매하여 증설을 하였다.   


 사실 우리 서비스는 아직 사람들에게 홍보를 하지 않아서 사용자가 적다. 그래서 많이  DB 서버를 분리하는게 과연 필요한가 생각을 많이했었는데, DL385 G7 (레이드, 핫스왑 지원) 반본체(CPU, 보드, 파워)를 6만원에 팔길래 냉큼 사버렸다. 


 문제는 RAID에 엮을 SAS 디스크인데, 사실 SAS보다는 SATA가 가격대비 용량비도 좋고 무엇보다. 300GB에 15만원하는 SAS보다 차라리 500G 3만원하는 2.5 SFF규격의 SATA HDD를 레이드 묶어서 쓰면서 고장나면 새것으로 교체후 리빌딩하는게 가성비가 뛰어나다고 판단했다. 사실 SATA HDD도 잘만 쓰면 기본 2만시간을 쓸 수 있다. 


 아무튼 DDR3 10600R 4G를 구매했는데, 모듈이 16+1(레지스터) 양면이었다. 사진을 다들 큼직하게 찍어놔서, 메모리 높이가 너무 크면 어쩌나 걱정했는데 삼성도 생각은 있었는지 메모리 크기는 똑같았다. (서버는 일반 플라워타입의 쿨러가 아니라, 고속 회전하는 쿨러로 본체 앞에서 뒤로 밀어내는 구조이기 때문에, 바람이 잘 흐를 수 있도록 커버를 해둔다. 이때 메모리 높이가 크면, 커버가 안덮히는 최악의 사태가 발생한다.) 




아무튼 메모리 높이는 사진과 같이 모듈갯수와 상관없이 똑같다.







두 메모리는 동일한 스펙을 가졌다.



   




 우리 서버는 둘다 옵테론 G34 소켓을 사용하는 서버라서, 쿼드 채널을 지원한다. 그래서 각 CPU당 12개의 메모리 슬롯이 있다. 이제부터 이걸 채워야하는데..







 웹 서버에는 총 4GB*8으로 32기가를 줬다. 사실 더 증설해야 맞는것이지만 아직까지는 필요가 없어서.. 


 이때 메모리 장착은 반드시 2,5,8,11에 꽂아야 한다. 난 4개라서 쿼드 채널로 구성하는 뱅크에 꽂는줄 알았는데 그게 아닌가 보다.


   




 이게 서버 뚜껑에 적혀있는 위치와 슬롯별 채널 설정법이다.








posted by 궁금한 포도알77
2019.03.10 15:52 프로그래밍/서버
 대부분의 웹 서비스 프레임워크에서 세션을 관리하는 기능을 제공한다.  

 이런 세션 기능들은 1번 로그인을 하면, 브라우저내의 어떤 탭에서도 로그인이 유지된다. 하지만 일부 프로젝트는 반드시 1계정 1세션 유지가 정책이 되어야 하는 경우도 있다.  



 [세션의 정의와 세션 관리 기능이 동작하는 방법] 

 어떤 프레임워크를 사용하든지, 세션은 서버 기준의 1개의 일시적인 연결이다. 즉, 어떤 클라이언트가 접근하였을때 세션 ID를 만들고, 로그인시 클라이언트의 정보를 해당 세션 ID(Key)에 대한 값(Value)로 저장한다.


 그리고 마지막으로 클라이언트 브라우저에게 해당 세션 ID(세션 ID, 세션 Key를 혼용하겠음)를  전달해주면서, 해당 세션키를 이후 모든 연결에 전달하라고 요구한다. 이 경우 브라우저는 이 세션키를 쿠키에 저장하게 된다. (따라서 모든 탭에서 접근이 가능하다.==로그인 상태가 유지되어있다.)   


 따라서 1 계정 1 세션을 위해서는 세션값이 아닌 새로운 임의문자열을 로그인시마다 생성하여, 클라이언트에게 전달해야한다. 이 임의문자열을 UID라고 정의하고 계속 글을 이어간다.




 방법1) 

 우선 가장 간단한 방법은 계정 ID를 Key로하여, Value에 세션 ID와 UID을 매칭하여 저장한다음, 동일하게 클라이언트 브라우저에게 전달한다. 그리고 해당 계정이 다른 브라우저에서 로그인하였을때, 이 값(세션과 UID)과 비교하여 현재 계정이 사용중인 세션을 저장한다. 

 이렇게 세션키를 저장하면 서버는 항상 새로운 세션키 값을 저장할 수 있고, UID를 바탕으로 사용자는 항상 마지막 로그인이 발생한 세션에서만 로그인이 유지된다.  


 하지만 방법1은 틀렸다. 따라서 1 계정 1로그인 정책을 설정하기 위해서는 UID를 브라우저에 저장하는 방법(Set cookie)이 아닌, 한 탭에서만 관리되는 곳에 저장해야한다. (쿠키는 브라우저의 모든 탭에서 공유된다. 세션 스토리지, 로컬 스토리지도 마찬가지다)  


 그렇다면 탭마다 관리되는 메모리 영역은 무엇일까? 바로 HTML과 JS영역이다. 즉 서버와 통신할때, 이제부터는 항상 HTML 또는 JS 영역에서 UID 값을 읽고 이를 포함하여 전달해야한다.




 
 방법2) 

 Sync 방식에서는 페이지가 전환되어 버리므로, 이전 HTML, JS영역이 메모리상에서 제거된다. 따라서 서버에 Query 스트링으로 전달하면서, 서버가 이를 다시 릴레이해줘야한다.

 [ex] 
       (1) GET /index?uid=abcd -----> 
       (2) 서버 uid 확인 -----> 
       (3) index내의 html 태그에 uid를 포함하여 클라이언트에게 전달. 

 Async 방식에서는 페이지 전환이 없으므로, 지속적으로 html 또는 js영역에서 이를 관리하면된다.  



(요약)

 (1) 1 계정 1 세션은 기본적인 프레임워크 세션 관리 기능만으로는 불가능하다.
 (2) 브라우저의 탭은 동일한 세션 아이디를 가지므로, 동일 계정이 로그인하는 경우 이를 공유한다. 
 (3) 각 세션을 서버가 구분하기 위해서는 고유 ID를 부여하여야 한다.
 (4) 각 로그인별 고유 ID를 발급하고, 이를 클라이언트에게 전달한 다음 이 값으로 가장 최근 세션을 찾는다.
 (5) 이를 쿠키, 세션스토리지, 로컬스토리지에 저장하면, 이 또한 공유하므로 의미가 없다.
 (6) 탭별 고유 메모리 영역인 HTML, JS에 저장하자.  


 추신) Ajax의 경우에는 sendBefore, complete 이벤트 리스너를 통하여 UID를 전달할 수 있다.
$.ajaxSetup({
  beforeSend: function (xhr){
     // 모든 AJAX를 보내기전에 헤더에 UID를 포함한다.
     xhr.setRequestHeader('uid', $('.uid').text());
  },
  complete: function(xhr){
  }
});
   


posted by 궁금한 포도알77
2019.03.10 15:42 리뷰

 정말 험란했다.


 케이스 조립과 화면 출력만 거의 1시간을, 윈도우 설치 시도만 거의 6시간을 썼다.


 그리고 문제를 깨달고 이를 해결하는데만  2시간이 걸렸다. 도합 9시간짜리 작업이었다.  


 어제부로 기존 시스템에서 돌리고 있던 MSSQL 서버 2008를 다른 컴퓨터로 이전하고, 오후 9시부터 본격적으로 설치하기 시작했다.



1. 24핀, 8핀 연장선 설치



 우선 어제 도착한 마지막 드래곤볼중 하나인 맥스파인더 연장선을 설치했다.  

 맥스파인더가 다른 일반 케이블보다 3~4배 가량 비싸서, 워크스테이션에 과연 적합한가 고민을 많이 했었다. 그러나 일반 케이블 판매처에서 케이블 두께에 대해서 언급도 안되있고 아무리 좋은 것을 써봐야 18awg일 것 같아서, 맥스파인더를 구매했다. 

 우연찮게 맥스파인더 공홈에 들어갔는데, 초기형(수축튜브 마무리) 케이블을 다른제품보다 30% 정도 싸게 팔길래 이걸 구매했다. 어차피 심미용으로 구매하는게 아니기 때문에 슈축튜브로 마감이 되어있어도 무관했고, 더욱이 정확히 16awg를 사용한다고 명시되어 있어서 믿고 구매했다.

 케이블 길이는 50cm이고, 이또한 케이스가 워낙커서 선정리하는데 무리가 없었다.   




2. 케이스에 메인보드 설치

 우선 케이스에 백패널을 설치했다. 굉장히 기분이 좋은게 메인보드 판매자가 백패널을 중고로 보내줄 알았는데, 새재품이었다. 그리고 후면에 정전기 방지 패드가 붙어 있다. 여기까지는 괜찮았다.




   문제는 지금부터인데, 슈퍼마이크로 보드의 EE-ATX가 독자규격이다 보니, 홀이 맞는 부분이 거의 없었다. 6개를 제외하고 나머지가 안맞았다. 



 특히 메인보드를 넣어보면 CPU가 케이스 상단에 위치되는데, 맞는 스탠드 오프의 홀은 전부 밑에 위치했다. 그래서 가장 무겁고, 추가적으로 고정할 수 있는 방법도 없는 윗부분이 덜렁거렸다. 



 처음에는 케이스에 구멍을 뚫으려했는데, 생각보다 케이스가 두꺼워서 포기했다. 그냥 적당히 케이블타이로 고정했다.







 이게 설치를 끝낸 전체샷이다. 우선 케이블 정리를 하지 않았다. 사실상 케이스가 너무 넓어서 딱히 할 필요도 없었다. 



 또한 일반 보드 규격이 아니라 아무리 위치를 바꿔봐도 케이블 정리가 정말 깔끔하게 나올것 같지도 않았고, 미친듯이 깔끔하게 정리해봐야 어차피 다른 부품 추가하다보면 열었다 닫았다해야한다. (자기합리화)






 아래 사진들은 첫번째 CPU의 PCIE 슬롯에 장착된 카드들이다. 이 보드는 총6개의 PCIE를 제공하는데, 그중에 16배속 2개가 1번 CPU에 연결되어있다. 


 

 따라서 고배속이 필요하지 않은 사운드카드나, USB3.0은 향후에 CPU를 하나 더 추가하면 그때 옮길 예정이다. 웃긴건 처음에는 상단부터 1, 2, 3번 PCIE 슬롯인줄 알았는데, 보드 하단부터 1, 2, 3번이다. 



 그래서 초기에 부팅을하고, 화면이 안나와서 너무 당황했다. 또한 서버 메인보드는 BIOS에서 외장 그래픽으로 설정하더라도 (최신 데스크톱 보드는 설정도 필요없이 알아서 변경된다), 보드 점퍼를 바꾸지 않으면 화면이 안나온다.









      

3. 부팅 & 윈도우 설치

 문제는 지금부터다. 뭐 위에서 언급한 PCIE 슬롯과 그래픽 점퍼로 시간 버린거는 그럭저럭 넘어갈 수 있다. 어차피 내장 그래픽으로 출력은 되고 있는 상태였기 때문에...  



 애초에 사용하고 있는 시스템에서 CPU, 메인보드, 램만 교체한 것이기 때문에, 윈도우도 포맷할 각오로 USB도 준비해뒀다. 근데 윈도우 부팅까지 잘들어가더니 멈춰버렸다. 이런적이 없어서 구글링을 해보니, 너무나도 유명한 버그인듯 했다.




(이 장면에서 멈춘다. 로딩원도 같이 멈춘다. 적어도 나는..)




 사실 윈도우 10을 쓰면서, 오류를 한번도 겪은적이 없었는데 꽤나 많은 오류들이 있었던것 같다.

 위의 버그는 "윈도우 로고 멈춤"을 검색하면 정말 많이 나온다. 


 나는 이 문제를 포맷하면 해결될 줄 알았다. 그래서 포맷을 하려고 USB를 꽂고 실행했더니, 설치 과정에서 나오는 윈도우 로고에서 또 멈춘다.  


 꽤나 옛날 보드이고 (2680v2 지원보드면 데스크톱 3세대 정도에 나온 보드), 이전에도 USB3.0 호환성을 타는 문제를 겪은적이 있기 때문에 이번에는 USB 3.0을 써서 호환성을 타나 생각했다. 


 그래서 GPT 포맷도 MBR로 바꾸면서, USB 2.0으로 설치해봤다. (요즘 구하기도 힘든 USB2.0을 학회 참가 선물로 주신 한국정보과학회에 감사를 표합니다.) 또 안된다. 


 이렇게 거의 6시간을 버리고, 새벽 4시가 되었다. 그때까지만 해도 전혀 다른문제라고는 생각 못했다. 이베이에서 시킨 메인보드, CPU, 메모리였기 때문에 해외 배송중에 고장이 난건가 라면서 걱정하고 있었고, 2cpu라는 커뮤니티에 이 내용을 올리고 잤다. 



 그리고 아침에 일어나 댓글을 보니, 이베이에서는 막사면 안된다는 충고와 메모리부터 테스트해보라고 적혀있었다. 사실 보드를 받자 마자 BIOS 상에서 메모리 인식 테스트를 모두 했고,  윈도우 설치가 안되서 MS의 메모리 테스트도 해봤다. 둘다 문제가 없었기 때문에, 신경도 안썼던셈.. 그리고 첫번째 CPU에 연결된 12개의 메모리를 뺏다가 꽂았다가를 반복했었다. (손 찢어지는 줄)


 아무튼 메모리를 1개만 꽂아두고 윈도우 설치를 해봤더니, 정말 아무런 문제 없었다는듯 잘된다. 되긴 되는 구나하면서 안도와 함께 이제 CPU가 문제인지 메인보드가 문제인지 아니면 메모리가 문제인지 걱정되기 시작했다. 


 메모리 문제라면 국내에서 메모리를 구매하거나, 아직 2번 CPU가 없기때문에 나머지 12개의 메모리에서 몇개 빼서 쓴다고 문제될 것은 없었기에 메모리 문제이길 바랬다. 그러나 하나씩 연결해보고 테스트하면서 메인보드 또는 CPU 문제라는 걸 깨달았다. 


 유독 4개의 메모리 채널중 2번째 채널에만 꽂으면 부팅이 안된다. 특히 2번 채널의 첫번째 DIMM이 그렇다. 이 사실을 알아내는 과정에서 이미 메모리 탈부착을 반복했기 때문에, 메인보드 문제가 아니라고 확신이 섰고 CPU를 탈착해서 핀이 휘었는지 CPU 소켓부분이 이물질은 없는지 확인하고 아무 문제가 없어보여 지우개로 밀고 다시 넣었다. 


 그렇게 부팅을 하니, 다시 풀뱅크 상태에서 부팅이 됐다. 근데 이번에는 버벅된다. CPU와 메인보드가 접촉 불량일 수도 있겠다는 희망이 생겼고, CPU 쿨러에 힘을 줘가면서 부팅을 시도했더니 드디어 켜졌다.   버벅이는 문제는 생기지 않았고, 잘 돌아갔다. 곧바로 CPU, 메모리 테스트를 진행했고 정상 판정이 나오자 마자, 무한 리부팅을 했다. (또 안켜지면 꽝이므로)  


 몇번 동작하는 것을 확인하고, 안도와 함께 열심히 프로그램을 설치했다.   



 요약 
  1. 서버 메인보드는 더럽게 무겁다. 
  2. 케이스가 아무리 커도 서버 메인보드 스탠드 오프가 다 맞지는 않는다. 
  3. 서버 메인보드에서 외장 그래픽을 쓰려면, BIOS 설정과 점퍼 설정을 같이해야 한다.  
  4. PCI-E 레인의 경우, CPU마다 할당되어 있고, 위치는 반드시 메뉴얼을 보자.  
  5. 윈도우가 부팅되다가 멈추는 경우, 메모리 문제일 수도 있다.  
  6. 시스템이 버벅 거리거나, 메모리 인식 불량, 부팅 불량의 경우 CPU와 메인보드 점접이 잘 연결되지 않아 그럴 수 있다.            




posted by 궁금한 포도알77
prev 1 next