(MongoDB) Configure a Hidden Replica Set Member

* Hidden member는 primary가 될 수 없지만 election에는 참여할 수 있다. <고려사항> 가장 일반적인 hidden memeber들은 delayed members를 지원하는 역할이다. 만약 당신이 한 멤버가 primary되는 것을 막고자 한다면 priority를 0로 설정하면된다. settings.chainingAllowed 세팅은 세컨더리 멤버들이 다른 세컨더리 들과 동기화하는 것을 허락한다면, 초기화적으로 MongoDB는 sync타겟 선정을 위해 hidden member들 중 non-hidden member들을 선택한다. MongoDB는 마지막 의지로 hidden member를 선택할 것이다. 만약 당신이 세컨더리가 Hidden member들과 동기화 되길 원한다면, replSetSyncFrom 데이터베이스 커맨드를 사용하면 된다. <replSetSyncFrom> { replSetSyncFrom: "hostname<:port>" } name과 port넘버에 해당하는 멤버로 부터 replicate를 한다. 몽고디비 3.2버전부터는 1 vote를 받은 멤버들은 0 vote 멤버들로 부터 sync를 할 수 없다. <Examples> 세컨더리 멤버들이 hidden이 되기 위해서는 members[n].priority 값은 0 그리고 members[n].hidden은 true로 설정한다.

Http Post전송시 application/x-www-form-urlencoded 과 json형식의 차이 및 주의점

* 서블릿 컨테이너는 컨텐츠 타입이 application/x-www-form-urlencoded 이면 request의 body를 읽어 Map형태로 변환한다. -> application/x-www-form-urlencoded 헤더 타입이면서 HTTP POST 요청시 getParameter("data")와 같은 방법으로 추출 가능 ->text/plain 헤더 타입이면서 HTTP POST 요청 시 getParameter("data") 와 같은 방법으로 추출 불가능 request body를 stream을 이용하여 읽어와야 함

(MongoDB) Adjust Priority for Replica Set Member

 priority는 timing과 primary 선정을 위한 outcome의 영향을 미친다. 높은 priority멤버들은 보다 더 많이 election을 요청한다 그리고 보다 더 많이 이긴다. <Overview> Replica set의 priority는 primary를 위한 timing과 elections의 결과에 영향을 미친다. Higher-priority 멤버들은 더 elections를 요청하는 것이 많고 또한 이길확률 또한 높다. priority 값은 floating point이며 0에서 1000사이로 표현된다.  default 값은 1이다. 투표하지 못하는 member의 priority는 0로 해야한다. Priority가 0이상인 멤버는 0표를 받을 수 없다. aribiter를 위해서는 priority값은 1이어야 한다. 1. replica set설정을 변수에 복사한다. cfg = rs.conf() 2. 멤버 각각의 priority value를 바꾼다. cfg.members[0].priority = 0.5 cfg.members[1].priority = 2 cfg.members[2].priority = 2 3. 새로운 설정을 할당한다. rs.reconfig(cfg)

Request 에서 Parameter 정보 추출

protected HashMap<String, Object> getRequestParam() {   ServletRequestAttributes sra = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();  HttpServletRequest request = sra.getRequest();  HashMap<String, Object> params = new HashMap<>();  Enumeration paramNames = request.getParameterNames();  while(paramNames.hasMoreElements()) {   String paramNames = pramNames.nextElement().toString();   params.put(paramName, request.getParameter(paramName));  }  return params; }

(MongoDB) Replica Set Arbiter

이미지
* Arbiter 는 데이터셋을 복사할 수 없고 primary가 될 수 없다. 레플리카 셋들은 arbiters를 가질 수 있고 primary를 선정하기 위해 투표를 한다. Arbiters 항상 1개의 표를 행사한다. 결국 Primary가 죽어 새로운 Primary를 선정하기 위해서는 투표가 이뤄지게되고, Arbiter가 한표를 행사하게 되면서 홀수 표가 되어 새로운 레플리카셋을 생성하는 오버헤드가 없어지게 된다. 중요사항 :  Do not run an arbiter on systems that also host the primary or the secondary members of the replica set aribter를 가지고 있는 레플리카 셋에서, 프로토콜 버전1 (pv1) 은 프로토콜 버전 0 (pv 0)과 비교했을 때 rollback의 가능성을 증가시킨다. w:1  예) 예를들어 다음과 같은 replica set에서 arbiter가 있으므로 투표결과가 홀수가 되게 만든다. <Security> Authentication : aribiter는 데이터를 저장하지 않는다. 그래서 aribiter는 유저테이블 그리고 권한인증을 위한 맵핑정보가 없다. 그래서 local host Exception을 이용해 로그를 남긴다. Communication : arbiters와 다른 set 멤버들간의 유일한 커뮤니케이션은 투표, heartbeats 그리고 configuration data이다. 이것들은 암호화되지 않는다. 그러나 만약 몽고db 배치가 TLS/SSL이면 커뮤니케이션은 암호화된다. * Local host Exception ?

(MongoDB) Delayed Replica Set Members

이미지
* Delayed memebers 는레플리카 복사본을 포함한다. Delayed memebers은 rolling backup 을 한다. 또는 "historical"이라는 데이터셋의 스냅샷을 작동한다. 그것은 다양한 실수를 대비해 복원시켜주는 기능이다.  <Consideration> Requirements priority 0이어야 한다.  hidden memeber이어야 한다. primary를 결정하기 위한 투표를 해야 한다.  Behavior Delayed memebers는 delay에 대한 오피로그를 복사하고 적용한다. dealy의 시간양을 선택했을 때,  딜레이 시간을 다음과 같이 고려한다. must be equal to or greater than your expected maintenance window durations. must be  smaller  than the capacity of the oplog. For more information on oplog size, see  Oplog Size . Sharding 샤드 클러스터에서는, delayed memebers 는 balancer가 enable되었을때 제한된 기능을 가지고 있다. 왜냐하면 delayed members 들은 딜레가 있을 때 대량의 마이그레이션이 발생하기 때문이다. 예) 5개의 replica set이 있고,  primary와 모든 secondaries가 데이터셋을 복제한다. 그때 한 멤버가 약 1시간동안 delay를 적용한다. 이러한 delayed member는 hidden 이고 priority 0 멤버이다. 설정 A delayed member는 members[n].priority 가 0가 되어야 한다. 그리고 members[n].hidden은 true로 설정되어야한다.

(MongoDB) Hidden Replica Set Members

이미지
* Hiddent 멤버는 primary`s데이터 셋을 복사해놓지만 클라이언트 애플리케이션에 보이지 않는다. Hidden members는 항상 priority 0 멤버이며 primary가 될 수 없다. * db.isMaster() 를 치더라도 히든 멤버는 노출되지 않는다. 그러나 투표에는 참여한다. <Behavior> Read Operation 클라이언트는 읽기를 적절한 히든 멤버들에게 분배시키지 못한다. 결과적으로 이러한 멤버들은 트래픽을 받지 않는다. 그러므로 Hidden members는 reporting이나 backups와 같은 헌신적인 일들을 하는데 주로 쓰인다. Delayed member들은 히든이 된다. 샤드클러스터에서는 mongos는 히든 멤버들과 상호작용하지 않는다. Voting 히든 멤버들은 replica set 투표에 참여한다. MMAPv1 스토리지 엔진을 사용하는 경우, db.fsyncLock() 와 db.fsynUnlock()을 사용하여 히든멤버가 stop하는것을 막을 수 있다. 버전 3.2에서는 db.fsyncLock() 는 데이터 파일들이 변화하는 것을 막을 수 있다.그러므로 일관성을 제공하고 백업의 목적을 달성 할 수 있다. 이전 버전의 몽고디비에서는 db.fsyncLock()은 Wired Tiger에서의 로우 레벨의 백업을 보장하지 않았다.