μž‘μ—…

μž‘μ—…


운영

κ΅¬μ„±νŒŒμΌμ΄ μ€€λΉ„λ˜λ©΄ 볡제λ₯Ό μš΄μ˜ν•˜λŠ” λ‹¨κ³„λ‘œ μ΄ν–‰ν•©λ‹ˆλ‹€. λ¦¬μ†ŒμŠ€ 기동, 쀑지, 동기화/볡제, 절체 λ“±μ˜ 운영 사둀λ₯Ό μ°¨λ‘€λ‘œ μ„€λͺ…ν•©λ‹ˆλ‹€.

볡제 μš΄μ˜μ€ λ¦¬μ†ŒμŠ€ λ‹¨μœ„λ‘œ μˆ˜ν–‰ν•©λ‹ˆλ‹€.

λ¦¬μ†ŒμŠ€ μ‹œμž‘

졜초 λ¦¬μ†ŒμŠ€λ₯Ό μ‹œμž‘ν•˜κΈ° 전에 메타 데이터λ₯Ό μƒμ„±ν•˜λŠ” μ΄ˆκΈ°ν™” 과정을 μˆ˜ν–‰ν•΄μ•Ό ν•©λ‹ˆλ‹€. 메타 데이터 μ΄ˆκΈ°ν™”λŠ” λ¦¬μ†ŒμŠ€ 졜초 μ‹œμž‘ μ‹œ ν•œλ²ˆ 만 μˆ˜ν–‰ ν•©λ‹ˆλ‹€.

fsradm meta create [λ¦¬μ†ŒμŠ€λͺ…] {–force | -f}

λ¦¬μ†ŒμŠ€λ₯Ό μΆ”κ°€ ν•©λ‹ˆλ‹€.

fsradm add [λ¦¬μ†ŒμŠ€λͺ…]

메타 데이터가 μƒμ„±λœ λ¦¬μ†ŒμŠ€λ₯Ό 볡제 λŒ€μƒμœΌλ‘œ μ μž¬ν•©λ‹ˆλ‹€.

fsradm attach [λ¦¬μ†ŒμŠ€λͺ…]

적재 된 λ¦¬μ†ŒμŠ€λŠ” 아직 μƒλŒ€ λ…Έλ“œμ™€ 연결을 μ‹œλ„ν•˜μ§€ μ•ŠλŠ” 쀑립 μƒνƒœμž…λ‹ˆλ‹€. μ—°κ²° λͺ…령을 톡해 볡제 연결을 μ‹œλ„ν•©λ‹ˆλ‹€.

fsradm connect [λ¦¬μ†ŒμŠ€λͺ…] [μƒλŒ€λ…Έλ“œλͺ…]

up λͺ…령을 톡해 add, attach, connect λ₯Ό 순차적으둜 μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 보톡 λ¦¬μ†ŒμŠ€λ₯Ό 기동할 λ•Œ up λͺ…령을 μ‚¬μš©ν•©λ‹ˆλ‹€.

fsradm up [λ¦¬μ†ŒμŠ€λͺ…]


λ¦¬μ†ŒμŠ€ 쀑지

λ¦¬μ†ŒμŠ€μ˜ 연결을 disconnect λͺ…λ ΉμœΌλ‘œ ν•΄μ œν•  수 μžˆμŠ΅λ‹ˆλ‹€.

fsradm disconnect [λ¦¬μ†ŒμŠ€λͺ…] [μƒλŒ€λ…Έλ“œλͺ…]

연결이 ν•΄μ œλœ λ¦¬μ†ŒμŠ€λ₯Ό λΆ„λ¦¬ν•©λ‹ˆλ‹€.

fsradm detach [λ¦¬μ†ŒμŠ€λͺ…]

λΆ„λ¦¬ν•œ λ¦¬μ†ŒμŠ€λ₯Ό μ‚­μ œν•©λ‹ˆλ‹€.

fsradm del [λ¦¬μ†ŒμŠ€λͺ…]

down λͺ…λ ΉμœΌλ‘œ disconnect, detach, del 을 순차적으둜 μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 보톡 λ¦¬μ†ŒμŠ€ μ€‘μ§€λŠ” down λͺ…령을 μ‚¬μš©ν•©λ‹ˆλ‹€.

fsradm down [λ¦¬μ†ŒμŠ€λͺ…]


동기화

초기 동기화

μ†ŒμŠ€μ™€ 타깃 μ–‘λ…Έλ“œμ˜ λ¦¬μ†ŒμŠ€λ₯Ό μ‹œμž‘ν•˜μ—¬ 볡제 연결을 μ„±λ¦½ν•˜λ©΄ 동기화λ₯Ό μ‹œμž‘ν•˜κΈ° μ „ μƒνƒœλ‘œ λŒ€κΈ° ν•©λ‹ˆλ‹€. 초기 λ™κΈ°ν™”μ˜ λ°©ν–₯이 κ²°μ •λ˜μ§€ μ•Šμ€ ν‰ν˜•μƒνƒœ μž…λ‹ˆλ‹€. 이 μƒνƒœμ—μ„œ μ†ŒμŠ€κ°€ 될 λ…Έλ“œμ˜ λ¦¬μ†ŒμŠ€ 역할을 Primary둜 μŠΉκ²©ν•˜μ—¬ 초기 동기화λ₯Ό μ‹œμž‘ν•©λ‹ˆλ‹€. 동기화가 μ‹œμž‘λ¨κ³Ό λ™μ‹œμ— μ†ŒμŠ€ μΈ‘ λ°μ΄ν„°μ˜ 변경뢄이 λ°œμƒν•˜λ©΄ ν•΄λ‹Ή 변경뢄에 λŒ€ν•΄μ„œλ„ μ‹€μ‹œκ°„ λ³΅μ œν•©λ‹ˆλ‹€. FSR은 기본적으둜 동기화와 볡제λ₯Ό λ™μ‹œμ— μˆ˜ν–‰ν•©λ‹ˆλ‹€. 

λ¦¬μ†ŒμŠ€λ₯Ό μŠΉκ²©ν•˜κΈ° μœ„ν•œ λͺ…령은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

fsradm primary [λ¦¬μ†ŒμŠ€λͺ…]


λ¦¬μ†ŒμŠ€μ˜ 역할을 primary 둜 μ „ν™˜ν•˜λŠ” 것을 승격, 역할을 secondary 둜 μ „ν™˜ν•˜λŠ” 것을 강등이라고 ν•©λ‹ˆλ‹€.



초기 동기화 μ‹œμ μ˜ 둜컬 νŒŒμΌμ€ μ–‘λ…Έλ“œ 정합성이 λ§žμ§€ μ•Šμ€ Inconsistent μƒνƒœλ₯Ό μ΄ˆκΈ°κ°’μœΌλ‘œ ν•˜κΈ° λ•Œλ¬Έμ— 기본적으둜 승격이 κ±°λΆ€λ©λ‹ˆλ‹€. 초기 승격 μ‹œμ—λŠ” κ°•μ œ(-f μ˜΅μ…˜) μŠΉκ²©μ„ 톡해 μ‚¬μš©μžκ°€ ν•΄λ‹Ή λ¦¬μ†ŒμŠ€λ₯Ό μ†ŒμŠ€λ‘œ ν•˜κ² λ‹€κ³  λͺ…μ‹œμ μœΌλ‘œ μ•Œλ €μ•Ό ν•©λ‹ˆλ‹€.

c:\>fsradm primary r0
declined
  r0: not up to date

c:\>fsradm primary r0 -f
done

κ°•μ œ 승격이 μ„±κ³΅ν•˜λ©΄, μ†ŒμŠ€ λ…Έλ“œλŠ” μžμ‹ μ˜ 파일 μƒνƒœλ₯Ό UpToDate둜 λ³€κ²½ν•˜κ³  μžμ‹ κ³Ό μ—°κ²°λœ 타깃 λ…Έλ“œλ“€μ„ λŒ€μƒμœΌλ‘œ μ΄ˆκΈ°λ™κΈ°ν™”λ₯Ό μ‹œμž‘ν•©λ‹ˆλ‹€.

초기 λ™κΈ°ν™”λŠ” 전체 νŒŒμΌμ…‹μ„ λŒ€μƒμœΌλ‘œ μ§„ν–‰ν•˜μ§€λ§Œ ν•œλ²ˆ 동기화가 μ™„λ£Œλœ ν›„ λ‹€μ‹œ 동기화λ₯Ό ν•  κ²½μš°μ—λŠ” μ†ŒμŠ€ 츑의 변경뢄에 λŒ€ν•΄μ„œλ§Œ λΆ€λΆ„ 동기화 ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ 초기 동기화 ν›„ 볡제 연결이 λ‹¨μ ˆλ˜μ—ˆλ‹€κ°€ μž¬μ—°κ²°λ  경우 λΆ€λΆ„ λ™κΈ°ν™”λ‘œ μ§„ν–‰λ©λ‹ˆλ‹€.

동기화가 μ§„ν–‰λ˜λŠ” 도쀑에 νƒ€κΉƒμ˜ νŒŒμΌμƒνƒœλŠ” Inconsistent이며 동기화가 μ™„λ£Œλ˜λ©΄ μ†ŒμŠ€μ™€ νƒ€κΉƒμ˜ 정합성이 μΌμΉ˜ν•˜λŠ” UptoDate μƒνƒœκ°€ λ©λ‹ˆλ‹€. Inconsistent μƒνƒœλŠ” μ΅œμ‹ μ˜ 데이터가 μ•„λ‹ˆλ―€λ‘œ 볡제 운영 츑면에선 κ°€λŠ₯ν•œ Inconsistent μƒνƒœλ₯Ό 짧게 μœ μ§€ν•˜λŠ”κ²Œ λ°”λžŒμ§ν•©λ‹ˆλ‹€.

μˆ˜λ™ 동기화

운영 도쀑 동기화λ₯Ό μˆ˜λ™μœΌλ‘œ ν•΄μ•Όν•  κ²½μš°μ— invalidate-remote λͺ…령을 톡해 μˆ˜ν–‰ν•©λ‹ˆλ‹€. λ‘œμ»¬μ„ μ†ŒμŠ€λ‘œ ν•˜μ—¬ ν”Όμ–΄λ…Έλ“œλ₯Ό 동기화 ν•˜λŠ” λͺ…λ Ήμž…λ‹ˆλ‹€.

c:\>fsradm invalidate-remote r0

invalidate λͺ…령은 ν”Όμ–΄λ…Έλ“œλ₯Ό μ†ŒμŠ€λ‘œ  ν•˜μ—¬ λ™κΈ°ν™”ν•˜λŠ” λͺ…λ Ήμž…λ‹ˆλ‹€.

c:\>fsradm invalidate r0

μžλ™ 동기화

μˆ˜λ™μœΌλ‘œ μ‘°μž‘ν•˜λŠ” 것을 μ œμ™Έν•˜λ©΄ λ™κΈ°ν™”λŠ” 기본적으둜 미러링 연결이 수립되면 λͺ¨λ‘ μžλ™μ μœΌλ‘œ μˆ˜ν–‰λ©λ‹ˆλ‹€. FSR은 파일 동기화λ₯Ό μœ„ν•΄ 동기화λ₯Ό μˆ˜ν–‰ν•˜λŠ” μ‹œμ μ— 파일 κ°„μ˜ 차이λ₯Ό μ‹€μ‹œκ°„ νŒŒμ•…ν•˜κ³  동기화 ν•©λ‹ˆλ‹€.

파일 비ꡐ 방식

λ™κΈ°ν™”λŠ” μ–‘ μΈ‘ 파일의 차이점을 μΈμ‹ν•˜λŠ” 정도에 따라 λͺ‡ κ°€μ§€ λ™μž‘ 방식을 μ‚¬μš©μžκ°€ μ§€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ™μž‘ 방식에 따라 동기화λ₯Ό μˆ˜ν–‰ν•˜λŠ” 속도에 차이가 μžˆμœΌλ―€λ‘œ μ λ‹Ήν•œ μˆ˜μ€€μ˜ κ°’μœΌλ‘œ ꡬ성해야 ν•©λ‹ˆλ‹€.

{
	...
	"options": {
		"sync": {
			"comparison_level": 2
			"hash_type": "crc32"
    	}
	}
}

comparison_level 에 μ§€μ •ν•œ κ°’μ˜ μ˜λ―ΈλŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

  • 0: full-sync(전체 동기화), 비ꡐ 없이 전체 동기화λ₯Ό ν•©λ‹ˆλ‹€. 무쑰건적으둜 파일 전체λ₯Ό 동기화 ν•˜λ―€λ‘œ μ‹œκ°„μ΄ 였래 κ±Έλ¦¬μ§€λ§Œ κ°€μž₯ ν™•μ‹€ν•˜κ²Œ 동기화 ν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€.
  • 1: sync-by-hash-comp(속성, 해쉬 비ꡐ 동기화), 파일의 속성을 λΉ„κ΅ν•˜κ³  차이점을 해쉬 λΉ„κ΅ν•˜μ—¬ 동기화 ν•©λ‹ˆλ‹€. FSR 1.2 λ²„μ „μ˜ κΈ°λ³Έ λ™μž‘λͺ¨λ“œ μž…λ‹ˆλ‹€.
  • 2: sync-by-prop-comp(속성 비ꡐ 동기화), 파일 속성을 μš°μ„  λΉ„κ΅ν•˜κ³  κ°™μœΌλ©΄ 해쉬 비ꡐλ₯Ό κ±΄λ„ˆλœλ‹ˆλ‹€. 속성이 λ‹€λ₯΄λ©΄ 해쉬 비ꡐλ₯Ό μˆ˜ν–‰ν•©λ‹ˆλ‹€.
  • 3: partial-sync(변경점 동기화), 파일의 변경점을 μΆ”μ ν•˜κ³  λ³€κ²½λœ νŒŒμΌμ— λŒ€ν•΄μ„œ 만 동기화 ν•©λ‹ˆλ‹€. FSR 1.3 의 κΈ°λ³Έ λ™μž‘ λͺ¨λ“œ μž…λ‹ˆλ‹€. 

κ·ΈλŸ¬λ‚˜ λ‹€μŒκ³Ό 같은 상황에선 속성 비ꡐ 동기화(2)둜 μ„€μ •λ˜μ—ˆλ‹€ ν•˜λ”λΌλ„ 해쉬비ꡐ 동기화(1)κ°€ μš°μ„  μ‹œ λ˜μ–΄ λ™μž‘ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  • νƒ€κΉƒμ˜ 파일 잠금이 ν•΄μ œ 될 경우
  • μ†ŒμŠ€ 츑이 운영 쀑 μž₯μ• λ‘œ 인해 fail λ˜κ±°λ‚˜ κ°•μ œλ¦¬λΆ€νŒ…(crashed primary) 될 경우

λ“± μ˜λ„μΉ˜ μ•Šμ€ 운영 및 μž₯애에 μ€€ν•˜λŠ” 상황에선 파일의 속성값을 ν†΅ν•œ 비ꡐ가 항상 μΌκ΄€λ˜μ§€ μ•Šμ„ 수 있기 λ•Œλ¬Έμ— 해쉬비ꡐ λ™κΈ°ν™”λ‘œ μ²˜λ¦¬ν•˜μ—¬ 파일 κ°„μ˜ 정합성을 μœ μ§€ ν•©λ‹ˆλ‹€.

해쉬 비ꡐ λ™κΈ°ν™”λŠ” νŒŒμΌμ„ 일정 λΈ”λŸ­μœΌλ‘œ λΆ„ν• ν•˜μ—¬ λΉ„κ΅ν•˜κ³  차이가 μžˆλŠ” λΆ€λΆ„λ§Œ λ™κΈ°ν™”ν•˜μ—¬ 효율적으둜 λ™μž‘ν•©λ‹ˆλ‹€. 해쉬 μ•Œκ³ λ¦¬μ¦˜μ€ hash_type κ°’μœΌλ‘œ crc32, md5, sha1, sha256, sha512 쀑 μ„ νƒν•˜μ—¬ μ§€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€. DB νŒŒμΌμ„ λ³΅μ œν•  경우 해쉬비ꡐ 동기화λ₯Ό κΈ°λ³Έκ°’μœΌλ‘œ μ§€μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€.

Invalidate λͺ…령은 comparison_level 1(sync-by-hash-comp(속성, 해쉬 비ꡐ 동기화))을 κΈ°λ³Έ λ™μž‘λͺ¨λ“œλ‘œ ν•©λ‹ˆλ‹€. λ™μž‘ λͺ¨λ“œλŠ” Invalidate λͺ…λ Ήμ˜ μ˜΅μ…˜μœΌλ‘œ μ‘°μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.


λŒ€μ—­ μ„€μ •


볡제 λ„€νŠΈμ›Œν¬μ˜ 볡제, 동기화 λŒ€μ—­ν­μ„ 사전에 μ‘°μœ¨ν•˜κ³  μ μ ˆν•œ 수치 λ˜λŠ” λΉ„μœ¨λ‘œ ꡬ성해야 ν•©λ‹ˆλ‹€. λ³΅μ œμ™€ λ™κΈ°ν™”μ˜ λΉ„μœ¨μ€ 보톡 7:3(볡제 7, 동기화 3)의 λΉ„μœ¨μ„ 기본으둜 ν•˜μ—¬ λ„€νŠΈμ›Œν¬ 상황에 맞게 μ‘°μ •ν•˜λ©΄ λ©λ‹ˆλ‹€. λ˜λ„λ‘ λ³΅μ œμ— λ§Žμ€ 비쀑을 λ‘λŠ” 게 둜컬 I/O μ„±λŠ₯에 μ’‹μŠ΅λ‹ˆλ‹€.

sync_min κ³Ό sync_max μ‚¬μ΄μ—μ„œ 동기화 λŒ€μ—­μ„ μ„€μ •ν•  수 있으며 sync_min 은 μ΅œμ†Œν•œ λ„μ˜ 보μž₯ 동기화 λŒ€μ—­μœΌλ‘œ μ§€μ •λ©λ‹ˆλ‹€. λ‹¨μœ„λŠ” byte/s μž…λ‹ˆλ‹€.

{
	...
	"network": {
		"sync_ratio" : "7:3",
		"sync_min" : 100M,
		"sync_max" : 1G
	}
}



볡제 μ‹œμž‘

Secondary λ…Έλ“œκ°€ μŠΉκ²©λ˜μ–΄ 동기화가 μ‹œμž‘λ¨κ³Ό ν•¨κ»˜ μ†ŒμŠ€λ…Έλ“œμ˜ 데이터에 μ‹€μ‹œκ°„ 변경뢄이 λ°œμƒν•  경우 변경뢄에 λŒ€ν•œ λ°˜μ˜μ„ μžλ™μœΌλ‘œ λ³‘ν–‰ν•©λ‹ˆλ‹€. λ³΅μ œλŠ” 둜컬 λ°μ΄ν„°μ˜ μ‹€μ‹œκ°„ λ³€κ²½ 뢄을 νƒ€κΉƒμœΌλ‘œ μ‹€μ‹œκ°„ λ°˜μ˜ν•˜λŠ” λ™μž‘μœΌλ‘œ μ •μ˜ 되며 Primary λ…Έλ“œμ—μ„œ Secondary λ…Έλ“œμ˜ λ°©ν–₯으둜 μ§„ν–‰λ©λ‹ˆλ‹€. 

동기화와 λ³΅μ œκ°€ μ§„ν–‰λ˜λŠ” 도쀑에도 각 λ…Έλ“œμ˜ Role 은 μ‚¬μš©μž λͺ…령에 μ˜ν•΄ μˆ˜λ™μœΌλ‘œ 변경될 수 있으며, Primary λ…Έλ“œκ°€ κ°•λ“±λ˜λ©΄ λ³΅μ œλŠ” μ€‘λ‹¨λ©λ‹ˆλ‹€.

승격된 λ¦¬μ†ŒμŠ€λ₯Ό κ°•λ“± μ‹œν‚€κΈ° μœ„ν•œ λͺ…령은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

fsradm secondary [λ¦¬μ†ŒμŠ€λͺ…]


λ³΅μ œλŠ” Primary μ—­ν• λ‘œ 승격된 λ…Έλ“œλ₯Ό μ†ŒμŠ€λ‘œ ν•˜μ§€λ§Œ λ™κΈ°ν™”λŠ” 역할에 관계없이 동기화가 ν•„μš”ν•  경우 μˆ˜ν–‰λ©λ‹ˆλ‹€. λ³΅μ œν•  변경뢄이 μ—†κ±°λ‚˜ 강등에 μ˜ν•΄ λ³΅μ œκ°€ μ€‘λ‹¨λ˜λ”λΌλ„ 동기화가 μ§„ν–‰μ€‘μ΄μ—ˆλ‹€λ©΄ μ™„λ£Œλ  λ•Œ κΉŒμ§€ λ™κΈ°ν™”λŠ” μ§€μ†λ©λ‹ˆλ‹€.


λˆ„λ½νŒŒμΌ

동기화λ₯Ό 끝내고 볡제λ₯Ό μˆ˜ν–‰ν•˜λ˜ 도쀑에 λ³΅μ œλŒ€μƒμ— μ—†μ—ˆλ˜ 파일이 κ°‘μžκΈ° λ³΅μ œλŒ€μƒ κ²½λ‘œμ— 포함될 수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŸ¬ν•œ νŒŒμΌμ„ λˆ„λ½νŒŒμΌμ΄λΌκ³  ν•˜λ©° λ‹€μŒκ³Ό 같은 μš΄μ˜μƒν™©μ—μ„œ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  • 볡제 λŒ€μƒμ— ν¬ν•¨λ˜μ§€ μ•Šμ•˜λ˜ 동일 λ³Όλ₯¨ μž₯치 κ²½λ‘œμ— μžˆμ—ˆλ˜ 파일이 파일 이동(move) 연산을 톡해 볡제 λŒ€μƒ 경둜둜 μœ μž…λ˜λŠ” 경우
  • μ œμ™ΈνŒ¨ν„΄μœΌλ‘œ μ œμ™Έλ˜μ—ˆλ˜ 파일이 μ œμ™ΈνŒ¨ν„΄ μ •μ±… λ³€κ²½μœΌλ‘œ 인해 볡제 λŒ€μƒμ— λ‹€μ‹œ ν¬ν•¨λ˜λŠ” 경우

첫 번째의 경우 FSR은 ν•΄λ‹Ή νŒŒμΌμ— λŒ€ν•œ Filesystem I/Oλ₯Ό μΊ‘μ²˜ν•  수 μ—†μœΌλ©° 단지 νŒŒμΌκ²½λ‘œμ— λŒ€ν•œ 이름 λ³€κ²½(rename)만 μˆ˜μ‹ ν•˜κ²Œ λ˜μ–΄ 볡제둜 μ²˜λ¦¬ν•  수 μ—†μŠ΅λ‹ˆλ‹€. μ΄λŸ° 경우 FSR 은 일단 λ³΅μ œμƒνƒœλ₯Ό μœ μ§€ν•˜κ³  이와 λ™μ‹œμ— ν•΄λ‹Ή λˆ„λ½νŒŒμΌμ— λŒ€ν•΄μ„œ κ°œλ³„μ μœΌλ‘œ 동기화λ₯Ό μˆ˜ν–‰ν•˜μ—¬ μ²˜λ¦¬ν•©λ‹ˆλ‹€. 두 번째 μ œμ™ΈνŒ¨ν„΄ 변경에 λ”°λ₯Έ λˆ„λ½μ˜ κ²½μš°λŠ” νŒŒμΌμ‹œμŠ€ν…œ I/O 연산이 μ—†λŠ” μƒνƒœμ—μ„œ 볡제 λŒ€μƒλ§Œ λ³€κ²½λœ 경우이기 λ•Œλ¬Έμ— 기본적으둜 μž¬λ™κΈ°ν™”λ‘œ μ²˜λ¦¬ν•©λ‹ˆλ‹€.

κ³ μ•„νŒŒμΌ

κ³ μ•„νŒŒμΌμ€ λˆ„λ½νŒŒμΌκ³Ό 달리 νƒ€κΉƒμ˜ 볡제 κ²½λ‘œμ— 연고없이 남겨진 파일둜 μ •μ˜ν•©λ‹ˆλ‹€. 이것은 일반적인 볡제 상황에선 λ°œμƒν•˜μ§€ μ•Šμ§€λ§Œ νƒ€κΉƒμ˜ 파일이 λ³΄ν˜Έλ˜μ§€ μ•ŠλŠ” μƒν™©μ—μ„œ μ˜λ„μΉ˜ μ•Šμ€ 파일 μ‘°μž‘μ΄ μžˆμ„ κ²½μš°μ— λ°œμƒν•©λ‹ˆλ‹€.

κ³ μ•„νŒŒμΌμ΄ λ°œμƒν•˜λ©΄ FSR 의 κ³ μ•„νŒŒμΌ λŒ€μ‘ 정책에 따라 μ²˜λ¦¬κ°€ 되고 기본적으둜 νƒ€κΉƒμ˜ νŠΉμ • κ²½λ‘œμ— λ°±μ—…ν•˜λŠ” κ²ƒμœΌλ‘œ μ²˜λ¦¬λ©λ‹ˆλ‹€. λ°±μ—… ν•„μš”μ—†μ΄ λ°”λ‘œ μ‚­μ œ μ²˜λ¦¬ν•˜λ„λ‘ μ˜΅μ…˜μ„ μ§€μ •ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.


파일잠금

타깃에 볡제된 νŒŒμΌλ“€μ€ μ†ŒμŠ€λ‘œλΆ€ν„° μˆ˜μ‹ ν•˜λŠ” 미러링 데이터 μ΄μ™Έμ˜ λ‹€λ₯Έ μ“°κΈ° I/O 둜 λΆ€ν„° λ³΄ν˜Έλ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€. κ·Έλ ‡μ§€ μ•ŠμœΌλ©΄ 볡제 사본을 μœ μ§€ν•˜κΈ° μœ„ν•œ 데이터 일관성을 보μž₯ν•  수 μ—†μŠ΅λ‹ˆλ‹€. 특히 HAλ₯Ό μš΄μ˜ν•˜λŠ” 경우 절체의 κ³Όμ • 쀑 λŒ€κΈ°λ…Έλ“œμ˜ 데이터 일관성 보μž₯을 μœ„ν•΄ 파일 잠금 κΈ°λŠ₯을 λ°˜λ“œμ‹œ ν™œμ„±ν™” μ‹œμΌœμ„œ μš΄μ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€.

νŒŒμΌμž κΈˆμ€ λ¦¬μ†ŒμŠ€μ˜ nodes μ„Ήμ…˜λ‚΄μ˜ auto_file_lock μ˜΅μ…˜μ„ 톡해 λ¦¬μ†ŒμŠ€μ˜ 역할에 따라 μžλ™μœΌλ‘œ μ„€μ •λ˜κ²Œ ν•˜κ±°λ‚˜ fsradm lock λ˜λŠ” unlock λͺ…령을 톡해 μˆ˜λ™μœΌλ‘œ ν™œμ„±ν™”,λΉ„ν™œμ„±ν™” ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μžλ™ 잠금

auto_file_lock μ˜΅μ…˜μ€ κΈ°λ³Έ ν™œμ„±ν™”λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. λ¦¬μ†ŒμŠ€μ˜ 역할이 κ°•λ“±λœλ‹€λ©΄ νŒŒμΌλ“€μ€ 기본적으둜 μž κ²¨μ§„ μƒνƒœκ°€ λ©λ‹ˆλ‹€. μž κ²¨μ§„ νŒŒμΌλ“€μ„ ν•΄μ œν•˜λ €λ©΄ λ¦¬μ†ŒμŠ€μ˜ 역할을 μŠΉκ²©ν•˜κ±°λ‚˜ unlock λͺ…령을 톡해 μž κΈˆμ„ ν•΄μ œν•΄μ•Ό ν•©λ‹ˆλ‹€.

κ°•λ“± μ‹œ μž κΈˆμ€ μžλ™μ΄μ§€λ§Œ ν•΄μ œλŠ” μžλ™μ΄ μ•„λ‹™λ‹ˆλ‹€.

μˆ˜λ™ 잠금

auto_file_lock μ˜΅μ…˜μ„ λΉ„ν™œμ„±ν™” ν•˜κ³  νŒŒμΌμž κΈˆμ„ μˆ˜λ™μœΌλ‘œ μš΄μ˜ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. νŒŒμΌμž κΈˆμ„ μˆ˜λ™μœΌλ‘œ μš΄μ˜ν•˜λ €λ©΄ λ‹€μŒκ³Ό 같이 잠금λͺ…λ Ήκ³Ό κ°•λ“±λͺ…령을 κ°œλ³„μ μœΌλ‘œ μˆ˜ν–‰ν•˜κ³  λͺ…λ Ή μˆœμ„œλ₯Ό μ§€μΌœμ•Ό ν•©λ‹ˆλ‹€.

c:\>fsradm lock r0
done
c:\>fsradm secondary r0
done

-l μ˜΅μ…˜μ„ λͺ…μ‹œν•  경우 μœ„μ˜ 두 λͺ…령을 ν•˜λ‚˜μ˜ κ°•λ“±λͺ…λ ΉμœΌλ‘œ μ²˜λ¦¬ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. λͺ…λ Ήμ˜ μˆœμ„œλŠ” μœ„μ™€ λ™μΌν•˜κ²Œ 락을 λ¨Όμ € κ±Έκ³  κ°•λ“±ν•©λ‹ˆλ‹€.

c:\>fsradm secondary -l r0
done


이와 λ°˜λŒ€λ‘œ 승격 과정에선 primary λͺ…λ Ή 이후 μž κΈˆμ„ ν•΄μ œ ν•©λ‹ˆλ‹€.

c:\>fsradm primary r0
done
c:\>fsradm unlock r0
done

-u μ˜΅μ…˜μ„ μ‚¬μš©ν•˜λ©΄ ν•˜λ‚˜μ˜ 승격λͺ…λ Ήμ—μ„œ μ²˜λ¦¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

c:\>fsradm primary -u r0
done


  • 파일 잠금이 ν™œμ„±ν™” 되면 ν•΄λ‹Ή 볡제 파일 셋에 λŒ€ν•œ μ“°κΈ° I/Oκ°€ 차단 λ˜λ―€λ‘œ κ΄€λ ¨λœ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 및 μ„œλΉ„μŠ€λ“€μ„ λͺ¨λ‘ μ’…λ£Œν•˜μ—¬ ν•΄λ‹Ή 파일둜 I/O κ°€ 더이상 λ°œμƒν•˜μ§€ μ•Šκ²Œ ν•œ ν›„ 잠금이 μˆ˜ν–‰λ˜λ„λ‘ ν•΄μ•Ό ν•©λ‹ˆλ‹€. μ΄λ ‡κ²Œ ν•˜μ§€ μ•ŠμœΌλ©΄ I/O κ°€ λ°œμƒν•˜λŠ” 도쀑 μ“°κΈ°κ°€ μ°¨λ‹¨λ˜μ–΄ I/O μ—λŸ¬κ°€ μœ λ°œλ˜κ±°λ‚˜ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ κ°€μ§€κ³  μžˆλŠ” 캐쉬 μ˜μ—­μ— λŒ€ν•œ Flushλ₯Ό ν•  수 μžˆλŠ” 기회λ₯Ό λ†“μ³μ„œ μ€‘μš”ν•œ λ°μ΄ν„°μ˜ 기둝이 λˆ„λ½λ  수 μžˆμŠ΅λ‹ˆλ‹€. 절체 μ‹œμ—λŠ” λ°˜λ“œμ‹œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ™„μ „νžˆ μ’…λ£Œ μž‘μ—…μ„ μˆ˜ν–‰ν•œ ν›„ 파일잠금이 μˆ˜ν–‰λ˜λ„λ‘ 보μž₯ν•΄μ•Ό ν•©λ‹ˆλ‹€.
  • λ§Œμ•½ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ’…λ£Œν•˜μ§€ λͺ»ν–ˆκ±°λ‚˜ 볡제 λŒ€μƒ 파일의 핸듀이 μ—΄λ¦° μƒνƒœλ‘œ κ°•λ“± λ˜μ—ˆλ‹€λ©΄ 강등이 μ„±κ³΅ν–ˆλ‹€κ³  ν•˜λ”λΌλ„ 이처럼 정리 μ•ˆλœ νŒŒμΌλ“€μ„ λŒ€μƒμœΌλ‘œ ν•œ νƒ€κΉƒμ˜ μ“°κΈ°κ°€ μ‹€νŒ¨ 될 수 μžˆμŠ΅λ‹ˆλ‹€. νƒ€κΉƒμ˜ 파일이 이미 읽기 λͺ¨λ“œλ‘œ μ—΄λ €μ Έ μžˆλ‹€λ©΄ FSR 엔진이 μ“°κΈ° κΆŒν•œμ΄ μ—†μœΌλ―€λ‘œ μ œμ–΄ν•  수 μ—†κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€. FSR 1.2 μ—μ„œλŠ” μ΄λŸ¬ν•œ 문제λ₯Ό μ˜ˆλ°©ν•˜κΈ° μœ„ν•΄ 파일 잠금 μ‹œ 이미 μ—΄λ €μ Έ μžˆλŠ” 파일 핸듀을 λͺ¨λ‘ κ°•μ œλ‘œ 닫도둝 ν•©λ‹ˆλ‹€.
  • 기쑴에 FSRμ—μ„œ μ œκ³΅ν•˜λ˜ μ½κΈ°μ „μš© 잠금 κΈ°λŠ₯도 더 이상 μ œκ³΅ν•˜μ§€ μ•ŠκΈ°λ‘œ ν–ˆμŠ΅λ‹ˆλ‹€. 읽기 μ „μš© 잠금이 읽기λ₯Ό ν—ˆμš©ν•¨μœΌλ‘œ 인해 νƒ€κΉƒμ˜ μ—”μ§„ μ“°κΈ° μ‹€νŒ¨κ°€ μ•ΌκΈ°λ˜λŠ” 잠재적 문제λ₯Ό μ°¨λ‹¨ν•˜κΈ° μœ„ν•¨μž…λ‹ˆλ‹€. 이제 νŒŒμΌμž κΈˆμ€ 전체 잠금(μ—΄κΈ°,읽기,μ“°κΈ° λͺ¨λ‘ 잠금)만 μ œκ³΅ν•©λ‹ˆλ‹€.


μ „ν™˜

μ „ν™˜(switchover)은 볡제 ν΄λŸ¬μŠ€ν„° λ‚΄μ˜ ν•˜λ‚˜μ˜ μ‹œμŠ€ν…œμ—μ„œ λ‹€λ₯Έ μ‹œμŠ€ν…œμœΌλ‘œ μžμ›μ— λŒ€ν•œ μ•‘μ„ΈμŠ€λ₯Ό μˆ˜λ™ κ΅ν™˜ν•˜λŠ” λ™μž‘μž…λ‹ˆλ‹€. μ†ŒμŠ€ λ…Έλ“œλ₯Ό κ°•λ“±μ‹œν‚¨ ν›„ νƒ€κΉƒλ…Έλ“œλ₯Ό μ†ŒμŠ€λ…Έλ“œ μ—­ν• λ‘œ μŠΉκ²©ν•˜μ—¬ μ„œλΉ„μŠ€λ₯Ό μœ„ν•œ 데이터λ₯Ό ν™œμ„±ν™”ν•˜λŠ” κ³Όμ •μž…λ‹ˆλ‹€. μˆ˜λ™μ ˆμ²΄ 라고도 ν•˜λ©° 이와 λ°˜λŒ€λ‘œ μž₯애에 μžλ™ λŒ€μ‘ν•˜λŠ” κ°œλ…μœΌλ‘œ μž₯μ• μ‘°μΉ˜(failover)κ°€ μžˆμŠ΅λ‹ˆλ‹€.


μ†ŒμŠ€λ…Έλ“œμ˜ λ¦¬μ†ŒμŠ€λ₯Ό κ°•λ“±ν•©λ‹ˆλ‹€.

c:\>fsradm secondary r0
done

νƒ€κΉƒλ…Έλ“œμ˜ λ¦¬μ†ŒμŠ€λ₯Ό μŠΉκ²©ν•©λ‹ˆλ‹€.

c:\>fsradm primary r0
done


  • μ „ν™˜(switchover)은 κ΄€λ¦¬μžκ°€ μ˜λ„ν•˜κ±°λ‚˜ κ³„νšν•œ μˆ˜λ™μ  λ™μž‘μ΄μ§€λ§Œ, 절체(failover)λŠ” 예기치 μ•Šμ€ μž₯애에 λŒ€μ‘ν•˜κΈ° μœ„ν•œ λ™μž‘μœΌλ‘œ μžλ™ μˆ˜ν–‰μ„ μ „μ œ ν•©λ‹ˆλ‹€.
  • μ „ν™˜/절체 μ‹œ νƒ€κΉƒλ…Έλ“œμ˜ λ¦¬μ†ŒμŠ€ νŒŒμΌμƒνƒœλŠ” UpToDate μ΅œμ‹  μƒνƒœμΌ λ•Œ 볡제 정합성을 보μž₯ν•©λ‹ˆλ‹€. λ§Œμ•½ 볡제 연결이 λ‹¨μ ˆλ˜μ–΄ 타깃이 μ΅œμ‹  데이터λ₯Ό κ°€μ§€μ§€ λͺ»ν•œ 경우 μ΄κ±°λ‚˜ νƒ€κΉƒλ…Έλ“œμ˜ λ¦¬μ†ŒμŠ€κ°€ 동기화 쀑인 Inconsistent μƒνƒœμΌ κ²½μš°μ—λŠ” μ†ŒμŠ€μ™€ μ •ν•©ν•˜μ§€ μ•Šμ€ μƒνƒœμ΄λ―€λ‘œ μ „ν™˜/절체λ₯Ό μ œν•œν•΄μ•Ό ν•©λ‹ˆλ‹€.


μ—­ν•  μœ μ§€

λ¦¬μ†ŒμŠ€ 역할은 운영 상황에 따라 변경될 수 μžˆμ§€λ§Œ, λ•Œλ‘œλŠ” 역할을 μ§€μ†ν•΄μ„œ μš΄μ˜ν•˜λŠ” 방식이 ν•„μš”ν•  수 μžˆμŠ΅λ‹ˆλ‹€. (FSR 1.2.4 이상)

persist_role 이 μ„€μ •λœ λ¦¬μ†ŒμŠ€λŠ” 재 μ‹œμž‘ λ˜λŠ” μ‹œμ μ— λͺ…μ‹œμ μœΌλ‘œ(fsradm λͺ…λ ΉμœΌλ‘œ) μ§€μ •λœ λ¦¬μ†ŒμŠ€ 역할을 계속 μœ μ§€ν•©λ‹ˆλ‹€. 볡제 μ„œλΉ„μŠ€ λ˜λŠ” μ‹œμŠ€ν…œμ΄ λ¦¬λΆ€νŒ…λ˜μ–΄ λ¦¬μ†ŒμŠ€κ°€ 재 μ‹œμž‘λ˜λŠ” λͺ¨λ“  μƒν™©μ—μ„œ λ™μž‘ν•©λ‹ˆλ‹€.

{
	...
	"options": {
		"persist_role": true,
		...
	}

}


단방ν–₯ 볡제

μ „ν™˜κ³Ό μ ˆμ²΄μ—†μ΄ 항상 μ£Ό λ…Έλ“œμ—μ„œ λŒ€κΈ°λ…Έλ“œλ‘œμ˜ 단방ν–₯ 볡제/λ°±μ—…λ§Œ ν•˜κ³  μ‹Άλ‹€λ©΄ λŒ€κΈ° λ…Έλ“œ 츑의 타깃 μ „μš©(target_only) 속성을 κ³ λ €ν•˜μ‹­μ‹œμ˜€. (FSR 1.2.4 이상)

  • μœ„μ—μ„œ μ„€λͺ…ν•œ persist_role 속성을 λ¦¬μ†ŒμŠ€ options μ„Ήμ…˜μ— μ„€μ •ν•˜μ—¬ μ£Ό λ…Έλ“œμ™€ λŒ€κΈ°λ…Έλ“œμ˜ μ—­ν• (role)을 κ³ μ •ν•©λ‹ˆλ‹€.
  • target_only 속성을 λŒ€κΈ° λ…Έλ“œ 츑에 μ„€μ •ν•˜μ—¬ 볡제/동기화 λ°©ν–₯을 μ£Ό λ…Έλ“œμ—μ„œ λŒ€κΈ°λ…Έλ“œ ν•œ μͺ½ λ°©ν–₯으둜만 κ°•μ œν•©λ‹ˆλ‹€. target_only κ°€ 적용된 λ…Έλ“œλ₯Ό 타깃 μ „μš© λ…Έλ“œλΌκ³  ν•©λ‹ˆλ‹€.

타깃 μ „μš© λ…Έλ“œλŠ” λͺ…μ‹œμ μΈ λͺ…령을 ν¬ν•¨ν•œ λͺ¨λ“  볡제/동기화 λ™μž‘μ—μ„œμ˜ μ†ŒμŠ€ 역할이 κΈˆμ§€λ˜κ³  타깃 μ—­ν• λ§Œ κ°€μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€. 그리고 μ†ŒμŠ€ μ—­ν• λ‘œ λ™μž‘ν•˜λŠ” μˆ˜λ™ λ™κΈ°ν™”λ‚˜ 승격 λͺ…λ Ή 등은 λͺ¨λ‘ μ°¨λ‹¨λ©λ‹ˆλ‹€(단, 볡제 μ—°κ²° ν•΄μ œ μ‹œ 승격 ν—ˆμš©λ¨). 

{
	...
	"options": {
		"persist_role": true,
		...
	}

	"nodes": [
	{
		"name": "active",
		...
	},
	{
		"name": "standby",
		"target_only": true
		...
	}
}

타깃 μ „μš© λ…Έλ“œμ˜ 데이터 확인

볡제 연결을 ν•΄μ œν•œ ν›„

  • 파일잠금 ν•΄μ œλ₯Ό 톡해 데이터λ₯Ό 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • μŠΉκ²©μ„ 톡해 데이터λ₯Ό 확인할 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.
    • 데이터 확인을 μœ„ν•΄ μŠΉκ²©μ„ ν•œ μ‹œμ μ—λŠ” SBκ°€ λ°œμƒν•œ μƒνƒœμ΄λ―€λ‘œ 볡제λ₯Ό λ‹€μ‹œ μ •μƒν™”ν•˜λ €λ©΄ λ‹€μ‹œ κ°•λ“± ν›„ SB ν•΄κ²°λ‘œ μ²˜λ¦¬ν•©λ‹ˆλ‹€.



쑰회

μƒνƒœ 쑰회

FSR의 μƒνƒœλ₯Ό fsradm status λͺ…령을 톡해 μ‘°νšŒν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ fsradm status all
r0 role:primary file:up_to_date pending:0 locked:false
  node2 state:repl_source peer-state:repl_target role:secondary file:up_to_date
    last-synced:2019-10-24T15:30:12+09:00
  node3 state:connecting peer-state:unknown role:secondary file:unknown
    last-synced:none

r1 role:secondary file:inconsistent pending:0 locked:false
  node2 state:connecting peer-state:unknown role:secondary file:unknown
    last-synced:none

상세 좜λ ₯ μ˜΅μ…˜μ„ μ‚¬μš©ν•˜λ©΄ 더 λ§Žμ€ μƒνƒœ 정보λ₯Ό μ‘°νšŒν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ fsradm status -v
r0:node1 role:primary file:up_to_date pending:0 locked:false
  last-promoted:2020-06-10T09:40:32+09:00
  node2 state:repl_source peer-state:repl_target role:secondary file:up_to_date
    repl-started:2020-06-10T09:40:32+09:00 last-synced:2020-06-10T09:40:33+09:00
  node3 state:connecting peer-state:unknown role:secondary file:unknown
    repl-started:2020-04-09T09:50:38+09:00 last-synced:2020-04-09T09:50:53+09:00

μƒνƒœ 쑰회λ₯Ό μ§€μ†ν•˜κ³  μ‹Άλ‹€λ©΄ --watch(-w) 와 --interval(-i) μ˜΅μ…˜μ„ μ‚¬μš©ν•˜μ—¬ μƒνƒœλ₯Ό λͺ¨λ‹ˆν„°λ§ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ fsradm status all -w -i 1
r0 role:secondary file:inconsistent locked:false
  node2 state:established peer-state:established role:secondary file:inconsistent
    last-synced:none
  node3 state:connecting peer-state:unknown role:secondary file:unknown
    last-synced:none

r1 role:secondary file:inconsistent locked:false
  node2 state:connecting peer-state:unknown role:secondary file:unknown
    last-synced:none

update every 1.0s. current executions: 84
press 'q' or 'ctrl+c' to quit...

파일 μƒνƒœ

볡제 λŒ€μƒ 파일의 볡제 μƒνƒœλ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€. 


unknown μ•Œ 수 μ—†λŠ” μƒνƒœ. μ—°κ²°λ˜μ§€ μ•Šμ€ μƒλŒ€ λ…Έλ“œμ˜ μ•Œ 수 μ—†λŠ” 파일 μƒνƒœλ₯Ό ν‘œν˜„ν•©λ‹ˆλ‹€.

fileless λ³΅μ œ λŒ€μƒ λ―Έ 적재 μƒνƒœ. attach λͺ…령에 μ˜ν•΄ attaching μƒνƒœλ‘œ μ „ν™˜ν•©λ‹ˆλ‹€.

attaching λ³΅μ œ λŒ€μƒ 적재 쀑 μƒνƒœ. 적재 쀑 μ‹€νŒ¨ν•˜λ©΄ failed, 적재 μ™„λ£Œν•˜λ©΄ consistent λ˜λŠ” inconsistent μƒνƒœκ°€ λ©λ‹ˆλ‹€.

detaching 볡제 λŒ€μƒ 뢄리 쀑. 뢄리 μ™„λ£Œν•˜λ©΄ fileless μƒνƒœκ°€ λ©λ‹ˆλ‹€.

failed 볡제 ꡬ성(적재) μ‹€νŒ¨ μƒνƒœ

inconsistent 데이터 μˆœμ°¨μ„± 보μž₯ λΆˆκ°€ν•œ μƒνƒœ λ˜λŠ” 동기화 νƒ€κ²Ÿμ˜ 파일 μƒνƒœ. 기본적으둜 승격이 λΆˆκ°€ν•©λ‹ˆλ‹€.(κ°•μ œ 승격 κ°€λŠ₯)

consistent 데이터 μˆœμ°¨μ„± 보μž₯ν•˜λŠ” μƒνƒœ. 쀑간 μƒνƒœμ΄λ©° outdated λ˜λŠ” up_to_date둜 μ΅œμ’… μ „ν™˜λ©λ‹ˆλ‹€.

outdated κ³Όκ±° 데이터 μƒνƒœ. 볡제 νƒ€κ²Ÿ μƒν™©μ—μ„œ μ—°κ²° λ‹¨μ ˆμ΄λ‚˜ μΌμ‹œ 쀑지 등에 μ˜ν•΄ μ΅œμ‹  데이터λ₯Ό λ°›μ§€ λͺ»ν•˜κ²Œ 될 경우의 μƒνƒœ. 기본적으둜 μŠΉκ²©μ΄ λΆˆκ°€ν•©λ‹ˆλ‹€. (κ°•μ œ 승격 κ°€λŠ₯)

up_to_date μ΅œμ‹  데이터 μƒνƒœ. Primaryμ΄κ±°λ‚˜ 볡제 νƒ€κ²ŸμΌ 경우의 μƒνƒœμž…λ‹ˆλ‹€.


μ—°κ²°/볡제 μƒνƒœ

μ–‘ λ…Έλ“œκ°€ μ—°κ²° 되기 κΉŒμ§€μ˜ μƒνƒœλŠ” μ—°κ²° μƒνƒœ, μ—°κ²° 수립 μ΄ν›„μ˜ μƒνƒœλŠ” 볡제 μƒνƒœλ‘œ μ •μ˜λ©λ‹ˆλ‹€. λ‹€μŒμ˜ μƒνƒœλ“€μ΄ μ •μ˜λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.


standalone 쀑립 μƒνƒœ. 연결을 μ‹œλ„ν•˜μ§€ μ•ŠλŠ” μƒνƒœλ‘œ λ¦¬μ†ŒμŠ€μ˜ 초기 μ—°κ²° μƒνƒœμ— ν•΄λ‹Ήν•©λ‹ˆλ‹€. connect λͺ…령에 μ˜ν•΄ connecting μƒνƒœλ‘œ μ „ν™˜λ©λ‹ˆλ‹€.

disconnecting 연결이 λ‹¨μ ˆλ˜κ³  정리 쀑인 μƒνƒœ. standalone λ˜λŠ” connecting μƒνƒœλ‘œ μ „ν™˜λ©λ‹ˆλ‹€.

connecting μ—°κ²° μ‹œλ„ 쀑 μƒνƒœ. μ—°κ²° μ‹œλ„ 쀑 였λ₯˜κ°€ λ°œμƒν•˜λ©΄ standalone, 연결이 μ„±κ³΅ν•˜λ©΄ connected μƒνƒœκ°€ λ©λ‹ˆλ‹€. μ‹€μ œλ‘œλŠ” μ†ŒμΌ“ κ³„μΈ΅μ—μ„œ accept와 connect κ°€ λ™μ‹œμ— μ‹œλ„λ˜λŠ” μƒνƒœμž…λ‹ˆλ‹€.

connected μ—°κ²° μ„±κ³΅ν•˜κ³  볡제 λ„€νŠΈμ›Œν¬μ— λŒ€ν•΄ 인증 쀑인 μƒνƒœμž…λ‹ˆλ‹€. 인증이 μ„±κ³΅ν•˜λ©΄ established, 인증이 μ‹€νŒ¨ν•˜λ©΄ standalone μƒνƒœκ°€ λ©λ‹ˆλ‹€.

established 볡제 μΈμ¦ μ™„λ£Œ μƒνƒœ. μ—°κ²° μ§ν›„μ˜ μƒνƒœμ΄λ©° Secondary κ°„ 연결이 μ™„λ£Œλ˜μ—ˆμ„ λ•Œμ˜ κΈ°λ³Έ μƒνƒœμž…λ‹ˆλ‹€. 동기화, 볡제둜 λ°”λ‘œ μ΄ν–‰ν•˜μ§€λŠ” μ•ŠμŠ΅λ‹ˆλ‹€. 이 μƒνƒœμ—μ„œ μŠΉκ²©ν•  경우 sync_source λ˜λŠ” repl_sourceκ°€ 되고 μƒλŒ€κ°€ μŠΉκ²©ν•˜λ©΄ sync_target λ˜λŠ” repl_taret 이 λ©λ‹ˆλ‹€.

sync_source λ™κΈ°ν™” μ†ŒμŠ€ μƒνƒœ. 동기화 μΌμ‹œ 쀑지할 경우 sync_source_paused μƒνƒœ, 동기화 μ™„λ£Œμ‹œ repl_source μƒνƒœκ°€ λ©λ‹ˆλ‹€. μ„Έμ»¨λ”리간에 동기화가 μ™„λ£Œλ  κ²½μš°μ—” established μƒνƒœκ°€ λ©λ‹ˆλ‹€.

sync_source_paused λ™κΈ°ν™” μ†ŒμŠ€ μΌμ‹œ 쀑지 μƒνƒœ. 동기화 μž¬κ°œν•  경우 sync_source μƒνƒœκ°€ λ©λ‹ˆλ‹€.

sync_target λ™κΈ°ν™” νƒ€κ²Ÿ μƒνƒœ. 동기화 μΌμ‹œ 쀑지할 경우 sync_target_paused, 동기화 μ™„λ£Œ μ‹œ repl_target이 λ©λ‹ˆλ‹€. secondary κ°„ 동기화 μ™„λ£ŒλŠ” established μƒνƒœκ°€ λ©λ‹ˆλ‹€.

sync_target_paused λ™κΈ°ν™” νƒ€κ²Ÿ μΌμ‹œ 쀑지 μƒνƒœ. 동기화 μž¬κ°œν•  경우 sync_target μƒνƒœκ°€ λ©λ‹ˆλ‹€.

repl_source λ³΅μ œ μ†ŒμŠ€ μƒνƒœ. 이 μƒνƒœμ—μ„œ κ°•λ“±ν•  경우 established μƒνƒœ, μΌμ‹œ 쀑지할 경우 repl_source_paused, 동기화 μ‹œμž‘ μ‹œ sync_source μƒνƒœλ‘œ μ „ν™˜ν•©λ‹ˆλ‹€.

repl_source_paused λ³΅μ œ μ†ŒμŠ€ μΌμ‹œ 쀑지 μƒνƒœ. 볡제 재개 μ‹œ repl_source μƒνƒœκ°€ λ©λ‹ˆλ‹€.

repl_target λ³΅μ œ νƒ€κ²Ÿ μƒνƒœ. 이 μƒνƒœμ—μ„œ μƒλŒ€κ°€ κ°•λ“±ν•˜λ©΄ established, μΌμ‹œ 쀑지할 경우 repl_target_paused, 동기화가 μ‹œμž‘λ˜λ©΄ sync_target μƒνƒœκ°€ λ©λ‹ˆλ‹€.

repl_target_paused λ³΅μ œ νƒ€κ²Ÿ μΌμ‹œ 쀑지 μƒνƒœ. λ³΅μ œκ°€ 재개되면 repl_target μƒνƒœκ°€ λ©λ‹ˆλ‹€.

μ„±λŠ₯ 쑰회

μ„±λŠ₯ 쑰회 λͺ…령을 톡해 볡제 μ²˜λ¦¬λŸ‰κ³Ό μ—”μ§„ λ‚΄λΆ€μ˜ μ§€μ—°μ‹œκ°„μ„ μ‘°νšŒν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ fsradm perf r0
λ fsradm latency r0

μ„±λŠ₯ λͺ¨λ‹ˆν„°

fsradm perfmon λͺ…령을 톡해 μ„±λŠ₯을 μ‹€μ‹œκ°„ λͺ¨λ‹ˆν„°λ§ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 

c:\>fsradm perfmon r0

μ„±λŠ₯ λͺ¨λ‹ˆν„°λ§μ€ μ½˜μ†”ν™”λ©΄μ— κ²°κ³Όλ₯Ό 좜λ ₯ν•˜μ—¬ 직접 ν™•μΈν•˜κ±°λ‚˜ λͺ¨λ‹ˆν„°λ§ κ²°κ³Όλ₯Ό 파일둜 μ €μž₯ν•˜λŠ” λ“± λ‹€μŒκ³Ό 같이 λͺ‡ κ°€μ§€ μ˜΅μ…˜μ„ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  • --json <filename> JSON 파일 경둜 μ§€μ •
  • --csv <filename> CSV 파일 경둜 μ§€μ •
  • --display μ½˜μ†” 화면에 좜λ ₯
  • --watch λͺ¨λ‹ˆν„°λ§ λͺ¨λ“œ
  • --interval μ‘°νšŒ μ£ΌκΈ°


λ””μŠ€ν¬ λͺ¨λ‹ˆν„°

FSR(v1.2)은 λ””μŠ€ν¬μ˜ μƒνƒœλ₯Ό κ°μ‹œν•˜μ—¬ λ””μŠ€ν¬ μˆ˜μ€€μ˜ μž₯μ• κ°€ λ°œμƒν–ˆλŠ”μ§€ μ—¬λΆ€λ₯Ό 지속 ν™•μΈν•©λ‹ˆλ‹€. λ””μŠ€ν¬ μž₯μ• κ°€ ν™•μΈλ˜λ©΄ μƒνƒœλ₯Ό fileless둜 λ³€κ²½ν•˜κ³  볡제 μƒνƒœμ— λ¬Έμ œκ°€ μƒκ²ΌμŒμ„ μ•Œλ¦½λ‹ˆλ‹€.

λ‹€μŒμ€ λ””μŠ€ν¬ μƒνƒœ λͺ¨λ‹ˆν„°λ§μ˜ μ£ΌκΈ°λ₯Ό μ§€μ •ν•˜λŠ” μ„€μ •μž…λ‹ˆλ‹€.

{
	...
	"disk": {
		"health": {
			"period": 5
		}
	}
}

FSR(v1.3) μ—μ„œ λ””μŠ€ν¬ μƒνƒœλ₯Ό λͺ¨λ‹ˆν„°λ§ν•˜λŠ” 방법이 더 κ°•ν™”λ˜μ—ˆμŠ΅λ‹ˆλ‹€. 가상화λ₯Ό 기반으둜 ν•œ 가상 λ””μŠ€ν¬(non pnp μž₯치)의 κ²½μš°μ—” λ‹€μŒμ˜ λ°©λ²•μœΌλ‘œ λ””μŠ€ν¬ μƒνƒœλ₯Ό κ°μ‹œν•  수 μžˆλŠ” 방법을 μΆ”κ°€λ‘œ μ œκ³΅ν•©λ‹ˆλ‹€.

io_test μ„Ήμ…˜μ— ν™œμ„±ν™” 여뢀와 μ£ΌκΈ°λ₯Ό μ§€μ •ν•˜λ©΄ λ©λ‹ˆλ‹€.

{
	"nodes": [
    {
      "name": "node1-hostname",
      "url": "192.168.159.140:9830",
      "files": [
        {
          "path": "C:/fsr/repl"
        }
      ],
      "io_test": {
        "enable": true,
        "period": "10s"
      },
    },
    {
      "name": "node2-hostname",
      "url": "192.168.159.141:9830",
      "files": [
        {
          "path": "C:/fsr/repl"
        }
      ],
      "io_test": {
        "enable": false,
        "period": "5s"
      },
    }
  	],

}

ν•˜μ΄νΌλ°”μ΄μ € μƒμ˜ 가상 λ””μŠ€ν¬ 듀이 μ’…μ’… ν‘œμ€€ PNP λ₯Ό μ§€μ›ν•˜μ§€ μ•ŠλŠ” κ°€μƒλ””μŠ€ν¬λ‘œ μ œκ³΅λ˜λŠ” κ²½μš°κ°€ μžˆμŠ΅λ‹ˆλ‹€. 이런 λ””μŠ€ν¬λŠ” 게슀트 OS μž…μž₯μ—μ„œ λ””μŠ€ν¬ μž₯치의 제거 λ“± μž₯애상황을 인지할 수 μžˆλŠ” 방법이 μ—†μŠ΅λ‹ˆλ‹€. 주기적인 λ””μŠ€ν¬ I/O λ₯Ό 톡해 λ””μŠ€ν¬ μƒνƒœλ₯Ό κ°μ‹œν•  수 밖에 μ—†μŠ΅λ‹ˆλ‹€.





이벀트

FSR 은 이벀트 ꡬ독 λͺ…령을 톡해 FSR 둜 λΆ€ν„° μ •μ˜λœ 이벀트λ₯Ό 톡지 받을 수 μžˆμŠ΅λ‹ˆλ‹€. 이벀트 ꡬ독을 톡해 νŒŒμΌμ΄λ‚˜ μ—°κ²° λ“±μ˜ μƒνƒœκ°€ λ³€κ²½λ˜λŠ” 과정을 μ‹€μ‹œκ°„ 좔적할 수 μžˆμŠ΅λ‹ˆλ‹€.

λ fsradm events r0
2020-06-12T12:42:39.295379 type=rpc state=connected
2020-06-12T12:42:41.685784 type=state node=node2 peer=node1 resource=r0 value=standalone
2020-06-12T12:42:41.685784 type=added node=node2 resource=r0
2020-06-12T12:42:41.685784 type=role node=node2 resource=r0 role=secondary
2020-06-12T12:42:41.685784 type=file_state node=node2 resource=r0 value=fileless
2020-06-12T12:42:41.728821 type=file_state node=node2 resource=r0 value=attaching
2020-06-12T12:42:41.744835 type=file_state node=node2 resource=r0 value=outdated
2020-06-12T12:42:41.774378 type=state node=node2 peer=node1 resource=r0 value=connecting

이벀트 ν•΄μ„μ˜ μš©μ΄μ„±μ„ μœ„ν•΄ json ν˜•μ‹μ˜ 좜λ ₯을 μ§€μ›ν•˜λ©° 동기화 μƒνƒœ(--sync), μ„±λŠ₯ 톡계에 λŒ€ν•œ λͺ¨λ‹ˆν„°λ§(–perf)에 λŒ€ν•œ μ˜΅μ…˜μ„ λΆ€κ°€μ μœΌλ‘œ μ§€μ›ν•©λ‹ˆλ‹€.

λ fsradm events --json r0
{"type":"rpc","timestamp":"2020-06-12T03:43:56.152358300Z","datas":{"state":"connected"}}
{"type":"state","timestamp":"2020-06-12T03:43:58.396422300Z","datas":{"node":"node2","peer":"node1","resource":"r0","value":"standalone"}}
{"type":"added","timestamp":"2020-06-12T03:43:58.396422300Z","datas":{"node":"node2","resource":"r0"}}
{"type":"role","timestamp":"2020-06-12T03:43:58.396422300Z","datas":{"node":"node2","resource":"r0","role":"secondary"}}
{"type":"file_state","timestamp":"2020-06-12T03:43:58.396422300Z","datas":{"node":"node2","resource":"r0","value":"fileless"}}
{"type":"file_state","timestamp":"2020-06-12T03:43:58.437426600Z","datas":{"node":"node2","resource":"r0","value":"attaching"}}
{"type":"file_state","timestamp":"2020-06-12T03:43:58.452638800Z","datas":{"node":"node2","resource":"r0","value":"outdated"}}
{"type":"state","timestamp":"2020-06-12T03:43:58.479433800Z","datas":{"node":"node2","peer":"node1","resource":"r0","value":"connecting"}}


이벀트의 μœ ν˜•μ— κ΄€ν•œ μƒμ„Έν•œ λ‚΄μš©μ€ λΆ€λ‘μ˜ λͺ…λ Ήμ–΄ 1.2.x λΆ€λΆ„을 μ°Έκ³ ν•˜μ„Έμš”.

μ •ν•©μ„± 검사

λ‹€μŒμ˜ λͺ…령을 톡해 μ†ŒμŠ€μ™€ νƒ€κΉƒκ°„μ˜ 데이터 μ •ν•©μ„± 검사λ₯Ό μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 

λ fsradm verify <resource|all> <peer-node|all>

μ •ν•©μ„± 검사 μˆ˜ν–‰ 쀑 쀑단을 ν•˜λ €λ©΄ verify-stop 을 μ‚¬μš©ν•©λ‹ˆλ‹€.

λ fsradm verify-stop <resource|all> <peer-node|all>

μ •ν•©μ„± κ²€μ‚¬λŠ” μ†ŒμŠ€ λ˜λŠ” νƒ€κΉƒμ—μ„œ verify 검사λ₯Ό μš”μ²­ν•˜μ—¬ μˆ˜ν–‰ν•©λ‹ˆλ‹€. νƒ€κΉƒμ—μ„œ μ •ν•©μ„± 검사λ₯Ό μš”μ²­ν•˜κ±°λ‚˜ 쀑단할 κ²½μš°μ—λŠ” 타깃 μžμ‹ λ§Œ μ§€μ •ν•˜λ©΄ λ˜μ§€λ§Œ μ†ŒμŠ€μ—μ„œ μˆ˜ν–‰ν•˜λ €λ©΄ n node 에 λŒ€ν•΄ 검사λ₯Ό μˆ˜ν–‰ν•˜κ³  μžˆλ‹€λ©΄ 쀑단할 타깃을 μ§€μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€. κ·Έλ ‡μ§€ μ•ŠμœΌλ©΄ n node μ •ν•©μ„± 검사에 λŒ€ν•΄ λͺ¨λ‘ μ€‘λ‹¨ν•©λ‹ˆλ‹€.


μ •ν•©μ„± κ²€μ‚¬λŠ” 볡제 μˆ˜ν–‰ 여뢀에 따라 λ™μž‘ λͺ¨λ“œμ— 차이가 μžˆμŠ΅λ‹ˆλ‹€. μ†ŒμŠ€μ™€ 타깃 양츑이 Secondary 일 경우라면 일반 verify 검사λͺ¨λ“œλ‘œ λ™μž‘ν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ ν•œ μͺ½μ΄ Primary 인 λ³΅μ œκ°€ μžˆλŠ” μƒνƒœμΌ κ²½μš°μ—λŠ” μ†ŒμŠ€μ™€ 타깃 κ°„μ˜ μ‹€μ‹œκ°„ 데이터 변경뢄에 λŒ€μ‘ν•˜κΈ° μœ„ν•œ advanced-verify λͺ¨λ“œλ‘œ λ™μž‘ν•©λ‹ˆλ‹€. 이 λͺ¨λ“œμ—μ„  볡제 λ³€κ²½ 뢄에 λŒ€ν•œ 데이터 μ‹œν€€μŠ€λ₯Ό λŒ€κΈ°ν•˜μ—¬ μ²˜λ¦¬ν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€. 일반 verify λͺ¨λ“œμ™€ advanced-verify λͺ¨λ“œλŠ” μ—”μ§„μ—μ„œ μžλ™μœΌλ‘œ κ²°μ •ν•˜λ―€λ‘œ μ‚¬μš©μžλŠ” μ‹ κ²½μ“°μ§€ μ•Šμ•„λ„ λ˜μ§€λ§Œ 두 방식에 차이가 μžˆλ‹€λŠ” 것은 μ•Œμ•„λ‘μ–΄μ•Ό ν•©λ‹ˆλ‹€.

기본적으둜 μ •ν•©μ„± κ²€μ‚¬λŠ” UpToDate 인 λ°μ΄ν„°κ°„μ˜ 검사λ₯Ό μ „μ œλ‘œ ν•˜κΈ° λ•Œλ¬Έμ— 양츑이 μ΅œμ‹ μ˜ 데이터가 아닐 경우 λ˜λŠ” μ •ν•©μ„± 검사 도쀑 동기화가 μ§„ν–‰λ˜κ±°λ‚˜ 볡제 μƒνƒœκ°€ λ³€κ²½λ˜λŠ” λ“±μ˜ μƒνƒœ λ³€ν™”κ°€ 있게 되면 μ •ν•©μ„± κ²€μ‚¬λŠ” μ·¨μ†Œλ©λ‹ˆλ‹€.

검사λ₯Ό ν•˜λŠ” λŒ€μƒμ€ 해쉬 비ꡐλ₯Ό 톡해 차이점이 μžˆλŠ” νŒŒμΌμ„ λŒ€μƒμœΌλ‘œ ν•˜κ³  μ •ν•©μ„± 검사가 λλ‚œ ν›„ κ²€μ‚¬μ— λŒ€ν•œ κ²°κ³ΌλŠ” result λͺ…령을 톡해 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

λ fsradm result r0
{
  "id": "r0",
  "result": {
    "summary": {
      "start_time": "2019-09-09T06:22:26.6958913Z",
      "end_time": "2019-09-09T06:22:27.4653424Z",
      "peer_node": "node2"
    },
    "totals": {
      "diff_dir": "3",
      "diff_file": "1",
      "diff_bytes": "14",
      "orphaned_dir": "0",
      "orphaned_file": "0",
      "orphaned_bytes": "0",
      "missing_dir": "0",
      "missing_file": "0",
      "missing_bytes": "0",
      "synced_bytes": "0"
    },
    "files": [
      {
        "type": "different",
        "name": "G:\\Temp\\test1\\conf\\drbd.d",
        "is_dir": true,
        "out_of_sync": "0",
        "synced": "0",
        "flags": 4,
        "properties": {
          "mod_time": {
            "local": "2019-09-06T13:26:59.1427926+09:00",
            "remote": "2019-09-02T07:24:39.161996Z"
          }
        }
      },
      {
        "type": "different",
        "name": "G:\\Temp\\test1\\conf\\drbd.d\\1",
        "is_dir": true,
        "out_of_sync": "0",
        "synced": "0",
        "flags": 4,
        "properties": {
          "mod_time": {
            "local": "2019-09-06T13:26:54.0042751+09:00",
            "remote": "2019-09-02T07:24:39.3341577Z"
          }
        }
      },
      {
        "type": "different",
        "name": "G:\\Temp\\test1\\conf",
        "is_dir": true,
        "out_of_sync": "0",
        "synced": "0",
        "flags": 4,
        "properties": {
          "mod_time": {
            "local": "2019-09-06T13:26:59.0677748+09:00",
            "remote": "2019-08-07T02:15:58.4057437Z"
          }
        }
      },
      {
        "type": "different",
        "name": "G:\\Temp\\test1\\contributors.txt",
        "out_of_sync": "14",
        "synced": "0",
        "flags": 5,
        "properties": {
          "mod_time": {
            "local": "2019-09-09T14:00:05.6379239+09:00",
            "remote": "2018-12-12T04:42:50.6605579Z"
          },
          "size": {
            "local": 9,
            "remote": 15
          }
        }
      }
    ],
    "file_count": 4
  }
}


μž¬κ΅¬μ„±

운영 쀑 섀정을 λ³€κ²½ν•˜λŠ” μ ˆμ°¨μ™€ 예기치 μ•Šμ€ μž₯μ• κ°€ λ°œμƒν•œ ν›„ 이λ₯Ό λ³΅κ΅¬ν•˜κΈ° μœ„ν•œ μ ˆμ°¨μ— λŒ€ν•΄ μ„€λͺ…ν•©λ‹ˆλ‹€.

μ„€μ • λ³€κ²½

FSR 의 λ…Έλ“œ κ°„ ꡬ성 섀정은 κ΅¬μ„±νŒŒμΌ μˆ˜μ€€μ—μ„œ λͺ¨λ‘ 동일해야 ν•©λ‹ˆλ‹€. λ§Œμ•½ μ„€μ •μ—μ„œ 차이가 μžˆλ‹€λ©΄ λ™μž‘ 방식이 λͺ¨ν˜Έν•΄ 질 수 있기 λ•Œλ¬Έμ— μ΄λŸ¬ν•œ κ΅¬μ„±μ˜ 차이λ₯Ό λ‘λŠ” 것을 μ œν•œν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. κ·Έλž˜μ„œ FSR 의 섀정을 λ³€κ²½ ν•˜λ €λ©΄ λ¨Όμ € μ†ŒμŠ€μ™€ 타깃 λ…Έλ“œ κ°„μ˜ 연결을 ν•΄μ œν•˜κ³  각각의 λ…Έλ“œμ˜ 섀정을 λ™μΌν•˜κ²Œ λ³€κ²½ν•˜μ—¬ 적용(adjust)ν•œ ν›„ 연결을 재 μ„±λ¦½ν•˜λ©΄ λ©λ‹ˆλ‹€.

λ§Œμ•½ μ—°κ²° μ‹œμ μ— μ–‘ λ…Έλ“œμ˜ 섀정에 차이가 발견되면 였λ₯˜μ™€ ν•¨κ»˜ 연결을 끊고 StandAlone μƒνƒœκ°€ λ©λ‹ˆλ‹€. λ˜ν•œ 연결이 이미 μ„±λ¦½λ˜μ–΄ μžˆλŠ” μƒνƒœμ—μ„œ μ–‘μΈ‘μ˜ 섀정이 차이가 있게 μ‘°μ •(adjust)ν•˜λ €κ³  ν•˜λ©΄ 였λ₯˜κ°€ λ°˜ν™˜λ©λ‹ˆλ‹€.

섀정을 μ‘°μ •(adjust)ν•˜λŠ” 과정은 FSRμ—μ„œ λ‚΄λΆ€μ μœΌλ‘œ κ΅¬ν˜„ν•œ ν”„λ‘œν† μ½œμ„ 톡해 λ…Έλ“œ κ°„ μƒνƒœ λ³€ν™”λ₯Ό μˆ˜λ°˜ν•©λ‹ˆλ‹€.

adjust λ₯Ό μˆ˜ν–‰ν•œ λ…Έλ“œλŠ” adjusting μƒνƒœκ°€ 되며 이 μ‹œμ μ— μƒλŒ€νŽΈ λ…Έλ“œλŠ” need_to_adjust μƒνƒœκ°€ λ˜μ–΄ adjust κ°€ μˆ˜ν–‰λ˜λ„λ‘ μœ λ„ν•©λ‹ˆλ‹€.

μž₯μ•  ν›„ 쑰치

볡제 운영 쀑 λ””μŠ€ν¬μ— 물리적 손상이 λ°œμƒν•˜λŠ” λ“± 예기치 μ•Šμ€ λ¬Έμ œκ°€ λ°œμƒν•  경우 이에 λŒ€μ‘ν•˜κ³  볡제λ₯Ό 정상화 ν•˜κΈ° μœ„ν•œ 절차λ₯Ό ν•„μš”λ‘œ ν•©λ‹ˆλ‹€. κΈ°λ³Έμ μœΌλ‘œλŠ” μ΄λŸ¬ν•œ λ¬Έμ œκ°€ λ°œμƒν•˜κ²Œ 되면 λ””μŠ€ν¬λ₯Ό κ΅μ²΄ν•˜κ³  볡제 ꡬ성을 λ‹€μ‹œ ν•΄μ•Ό ν•©λ‹ˆλ‹€.

λ‹€μŒμ˜ 과정에 따라 볡제λ₯Ό μž¬κ΅¬μ„±ν•˜κ³  재 동기화 ν•˜λŠ” 절차λ₯Ό μˆ˜ν–‰ν•΄μ•Ό ν•©λ‹ˆλ‹€.

  • μš΄μ˜μ€‘μΈ λ¦¬μ†ŒμŠ€λ₯Ό 쀑지 ν•©λ‹ˆλ‹€.
c:\>fsradm down r0
done
  • λ””μŠ€ν¬ ꡐ체 λ“± λ³΅κ΅¬μž‘μ—…μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€.
  • 메타λ₯Ό 재 μƒμ„±ν•©λ‹ˆλ‹€. λ§Œμ•½ ꡬ성상 변경이 μžˆμ„ 경우 κ΅¬μ„±νŒŒμΌμ„ μƒˆλ‘­κ²Œ μž‘μ„±ν•˜κ³  λ©”타λ₯Ό 재 생성해야 ν•©λ‹ˆλ‹€.
c:\>fsradm meta create r0
done
  • λ¦¬μ†ŒμŠ€λ₯Ό κΈ°λ™ν•©λ‹ˆλ‹€.
c:\>fsradm up r0
done
  • μ†ŒμŠ€ λ…Έλ“œμ™€ 연결이 수립되면 동기화λ₯Ό μ‹œμž‘ν•©λ‹ˆλ‹€.


λ°±μ—…

파일 μ‚­μ œ λ°±μ—…

FSR은 νŒŒμΌμ‚­μ œμ— λŒ€ν•œ 백업을 μ œκ³΅ν•©λ‹ˆλ‹€. νŒŒμΌμ‚­μ œμ— λŒ€ν•œ 백업은 μ˜λ„μΉ˜ μ•Šκ²Œ μ‚­μ œ λ˜λŠ” νŒŒμΌλ“€μ„ νƒ€κΉƒμ˜ νŠΉμ •κ²½λ‘œμ— μž„μ‹œλ‘œ μ €μž₯ν•΄ λ‘λŠ” κΈ°λŠ₯으둜 archive 속성에 μ˜ν•΄ 지정될 수 μžˆμŠ΅λ‹ˆλ‹€. archive 속성은 κΈ°λ³Έ λΉ„ν™œμ„±ν™” λ˜μ–΄ 있으며 백업될 κ²½λ‘œμ™€ 보관될 기간을 μ§€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.


μŠ€λƒ…μƒ·

μŠ€λƒ…μƒ·μ€ νŠΉμ • μ‹œμ μ˜ μŠ€ν† λ¦¬μ§€μ˜ 파일 μ‹œμŠ€ν…œμ„ 사진 찍듯이 μΊ‘μ²˜ν•΄μ„œ 데이터λ₯Ό λ°±μ—…ν•˜λŠ” 기술 μž…λ‹ˆλ‹€. λ³΅μ œ 운영 쀑 μ‚¬κ³ λ‘œ μ΅œμ‹  데이터가 ν›Όμ†λ˜κ±°λ‚˜ 말웨어 감염과 같은 λ³΄μ•ˆμ΄μŠˆμ— λ…ΈμΆœλ˜μ–΄ 데이터 무결성이 ν›Όμ†λ˜λ©΄ 볡제의 κΈ°λŠ₯λ§ŒμœΌλ‘œλŠ” λŒ€μ‘ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

이런 경우λ₯Ό λŒ€λΉ„ν•΄ λ³΅μ œμ™€λŠ” λ³„κ°œλ‘œ 백업을 미리 ν•΄ λ‘λŠ”κ²Œ 일반적이며, λ°±μ—… μœ ν˜•μ— 따라 전체 λ°±μ—… λ˜λŠ” 전체 μŠ€λƒ…μƒ·, 증뢄 μŠ€λƒ…μƒ·μ„ 톡해 μ‚¬μš©μžμ˜ 데이터λ₯Ό λ³΄ν˜Έν•  수 μžˆμŠ΅λ‹ˆλ‹€.

FSR은 μŠ€λƒ…μƒ· κΈ°λŠ₯을 볡제 λ¦¬μ†ŒμŠ€λ₯Ό κΈ°μ€€μœΌλ‘œ κ΅¬ν˜„ν•˜κ³  있으며 λ”°λΌμ„œ μŠ€λƒ…μƒ· μ œμ–΄λ„ λ¦¬μ†ŒμŠ€λ₯Ό κΈ°μ€€μœΌλ‘œ ν•©λ‹ˆλ‹€. λ˜ν•œ μŠ€λƒ…μƒ·μ€ 각 λ…Έλ“œμ˜ λ””μŠ€ν¬ λ³Όλ₯¨μ— μ΄λ―Έμ§€λ‘œ μ €μž₯ 되고 λ…Έλ“œ λ‚΄μ—μ„œ μ œμ–΄ν•˜κ³  μ²˜λ¦¬λ©λ‹ˆλ‹€. 이것은 ν΄λŸ¬μŠ€ν„° λ…Έλ“œ λ“€ κ°„μ˜ μŠ€λƒ…μƒ·λ“€μ— λŒ€ν•œ μƒν˜Έ 연동은 μ—†λ‹€λŠ” 뜻 μž…λ‹ˆλ‹€. λ…Έλ“œ λ³„λ‘œ μŠ€λƒ…μƒ·μ„ μš΄μ˜ν•˜λ‹€κ°€ 볡ꡬ가 ν•„μš”ν•˜λ©΄ λ…Έλ“œμ— μ €μž₯된 μ΄λ―Έμ§€λ‘œ κ°œλ³„ λ³΅κ΅¬ν•˜λ©΄ λ©λ‹ˆλ‹€.


μŠ€λƒ…μƒ·μ„ μƒμ„±ν•˜κ³  μ œμ–΄ν•˜λŠ” λͺ…λ Ήκ³Ό κ΄€λ ¨ν•œ μžμ„Έν•œ 사항은 μŠ€λƒ…μƒ· - FSR 1.2 λ˜λŠ” μŠ€λƒ…μƒ· - FSR 1.3 μ˜ λ‚΄μš©μ„ μ°Έκ³ ν•˜μ„Έμš”.

μŠ€λƒ…μƒ· λ³Όλ₯¨

μŠ€λƒ…μƒ·μ„ μš΄μ˜ν•˜κΈ°μ— μ•žμ„œ κ°€μž₯ λ¨Όμ € κ³ λ €ν•΄μ•Ό ν•  것은 μŠ€λƒ…μƒ·μ„ μ €μž₯ν•΄ λ‘˜ λ³Όλ₯¨μ„ μ§€μ •ν•˜λŠ” 것 μž…λ‹ˆλ‹€. 볡제 λ³Όλ₯¨ 내에 μŠ€λƒ…μƒ·μ„ 보관해 λ‘˜ 수 도 있고 μ™ΈλΆ€μ˜ λ‹€λ₯Έ λ””μŠ€ν¬ λ³Όλ₯¨μ— μ €μž₯ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. 이것은 λ³Όλ₯¨μ—μ„œ 이미 μ‚¬μš©λœ 곡간과 남은 μ—¬μœ  곡간을 보고 μ •ν•΄μ•Ό ν•˜λŠ”λ°, μ—¬μœ  곡간이 λ§Žμ§€ μ•Šλ‹€λ©΄ μ™ΈλΆ€μ˜ λ³Όλ₯¨μ— μ§€μ •ν•˜μ—¬ μŠ€λƒ…μƒ·μ„ μ €μž₯ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€. 

μŠ€λƒ…μƒ·μ„ μœ„ν•œ λ³Όλ₯¨ 곡간은 ν˜„μž¬ μ‚¬μš©λœ λ°μ΄ν„°μ˜ 크기 만큼의 μš©λŸ‰μ„ ν•„μš”λ‘œ ν•©λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄ 1TB λ³Όλ₯¨μ— 100GB λ₯Ό μ‚¬μš©ν•˜κ³  μžˆλ‹€λ©΄ 여기에 ν•„μš”ν•œ μŠ€λƒ…μƒ· μš©λŸ‰μ€ 100GB μž…λ‹ˆλ‹€. λ§Œμ•½ μ‚¬μš© μš©λŸ‰μ΄ 100GB λ₯Ό λ„˜μ–΄μ„œ 150GB κ°€ λœλ‹€λ©΄ μƒˆλ‘œμš΄ μŠ€λƒ…μƒ·μ„ κΈ°λ‘ν•˜λŠ”λ° μ΅œλŒ€ 150GB μš©λŸ‰μ΄ μš”κ΅¬λ  것 μž…λ‹ˆλ‹€.

λ‹€μŒμ€ μŠ€λƒ…μƒ·μ„ μš΄μ˜ν•˜κΈ° μœ„ν•œ ꡬ체적인 ꡬ성 μ‚¬λ‘€μž…λ‹ˆλ‹€.

  • 볡제 λ³Όλ₯¨ 1TB, μ‚¬μš©κ³΅κ°„ 300GB
  • 1일 1회 μŠ€λƒ…μƒ· 기둝, 1μ£Ό(7일)의 μŠ€λƒ…μƒ· μŠ€μΌ€μ€„ μœ μ§€

μœ„ 예의 경우 1μ£Ό λ™μ•ˆ 7개 μŠ€λƒ…μƒ· 이미지 곡간이 μš”κ΅¬ λ˜λ―€λ‘œ μŠ€λƒ…μƒ· μ €μž₯을 μœ„ν•œ λ³Όλ₯¨μ˜ 곡간은 μ΅œμ†Œ 300GB * 7 = 2.1TB 이며 μ΅œλŒ€ 1TB * 7 = 7TB κ°€ λ©λ‹ˆλ‹€.

μŠ€λƒ…μƒ·μ€ Copy On Write(COW) κΈ°μˆ μ„ 기반으둜 ν•©λ‹ˆλ‹€. 데이터에 변경이 λ°œμƒν•  λ•Œ 원본을 μ €μž₯ν•΄ λ‘λŠ” 것 μž…λ‹ˆλ‹€. λ”°λΌμ„œ μŠ€λƒ…μƒ·μ„ μƒμ„±ν•œ μ§€ μ–Όλ§ˆ μ§€λ‚˜μ§€ μ•Šμ€ μ΄ˆκΈ°μ—λŠ” 변경점이 λ§Žμ§€ μ•ŠμœΌλ―€λ‘œ μŠ€λƒ…μƒ·μ΄ μ°¨μ§€ν•˜λŠ” μš©λŸ‰μ΄ μž‘μŠ΅λ‹ˆλ‹€. κ·Έλ ‡μ§€λ§Œ μ‹œκ°„μ΄ μ§€λ‚ μˆ˜λ‘ 데이터 λ³€κ²½ 뢄은 점차 λŠ˜μ–΄λ‚˜κ³  κ²°κ΅­ λ°μ΄ν„°μ˜ λͺ¨λ“  μ˜μ—­μ΄ λ³€κ²½ 됬닀고 κ°€μ •ν•˜λ©΄ 전체 원본 데이터λ₯Ό μ €μž₯ν•΄ λ‘˜ μŠ€λƒ…μƒ· 곡간이 ν•„μš”ν•˜κ²Œ λ©λ‹ˆλ‹€. 결둠적으둜 μŠ€λƒ…μƒ·μ— ν•„μš”ν•œ μ΅œλŒ€ μš©λŸ‰μ€ 데이터 전체 크기의 백업뢄에 ν•΄λ‹Ήν•˜λŠ” μš©λŸ‰κ³Ό κ°™λ‹€κ³  ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 

λ‹Ήμž₯ μŠ€λƒ…μƒ·μ— ν•„μš”ν•œ 곡간은 ν˜„μž¬ μ‚¬μš©λ˜λŠ” 곡간 만큼의 μš©λŸ‰μ„ μš”κ΅¬ν•˜κ² μ§€λ§Œ λ³Όλ₯¨μ˜ μ‚¬μš©λŸ‰μ€ μ‹œκ°„μ΄ 갈수둝 증가할 수 μžˆμœΌλ―€λ‘œ 이λ₯Ό 염두에 λ‘μ–΄μ„œ μ΅œλŒ€ μš©λŸ‰μœΌλ‘œ κ³ λ €ν•΄μ•Ό ν•œλ‹€λŠ” 것 μž…λ‹ˆλ‹€.

λ‹€λ₯Έ μ œν’ˆμ˜ μŠ€λƒ…μƒ· κΈ°λŠ₯의 λ§€λ‰΄μ–Όμ—λŠ” 전체 λ³Όλ₯¨μ˜ μˆ˜μ‹­% 의 λ³Όλ₯¨ μ—¬μœ  곡간을 ν™•λ³΄ν•˜λŠ” 것을 ꢌμž₯ν•œλ‹€κ³  λ˜μ–΄ μžˆλŠ” κ²½μš°κ°€ μžˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ 이것은 μŠ€λƒ…μƒ·μ„ μœ„ν•œ μ΅œλŒ€μš©λŸ‰μ„ λ§ν•˜λŠ”κ²Œ μ•„λ‹ˆλΌ 단지 ꢌμž₯μš©λŸ‰μ„ μ˜λ―Έν•˜κΈ° λ•Œλ¬Έμ— μŠ€λƒ…μƒ· μš©λŸ‰ ꡬ성에 λŒ€ν•΄ μ˜€ν•΄λ₯Ό 뢈러 μΌμœΌν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό μ•Œμ§€ λͺ»ν•˜κ³  μΆ©λΆ„ν•œ μ—¬μœ  곡간 없이 μŠ€λƒ…μƒ·μ„ μš΄μ˜ν•˜λ‹€ 보면 μ–΄λŠ μ‹œμ μ— κ°€μ„œ 더 이상 μŠ€λƒ…μƒ·μ„ μƒμ„±ν•˜μ§€ λͺ»ν•˜κ²Œ 될 것 μž…λ‹ˆλ‹€.


μ΅œλŒ€ 사양

FSR μŠ€λƒ…μƒ·μ€ Windows μ—μ„œ Volume Shadow Copy Service 의 λͺ…μ„Έλ₯Ό λ”°λ¦…λ‹ˆλ‹€.

  • Windows 의 VSS μ΅œλŒ€ λ³Όλ₯¨ 지원 ν¬κΈ°λŠ” 64TB μž…λ‹ˆλ‹€. 64TB μ΄μƒμ˜ λ³Όλ₯¨μ€ μŠ€λƒ…μƒ·μ„ μ§€μ›ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  • ν•˜λ‚˜μ˜ λ³Όλ₯¨μ— μ΅œλŒ€ 512개의 μŠ€λƒ…μƒ· 이미지λ₯Ό 기둝할 수 μžˆμŠ΅λ‹ˆλ‹€(곡유 ν΄λ”μ˜ 경우 κΈ°λ³Έ 64개). κ·Έ μ΄μƒμ˜ μŠ€λƒ…μƒ·μ„ 기둝할 경우 κ°€μž₯ 였래된 μŠ€λƒ…μƒ·μ΄ μ‚­μ œλ©λ‹ˆλ‹€.

λ¦¬λˆ…μŠ€ LVM 은 νŠΉλ³„νžˆ μŠ€λƒ…μƒ· μš©λŸ‰μ— λŒ€ν•΄ μ œν•œν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 단지 μŠ€ν† λ¦¬μ§€ μš©λŸ‰μ— ν•œμ •μ  μž…λ‹ˆλ‹€.

μ „/ν›„ 처리

FSR μŠ€λƒ…μƒ·μ€ μ‘μš© 일관성(Application Consistency)을 보μž₯ν•˜λŠ” μŠ€λƒ…μƒ·μ„ μ§€ν–₯ν•©λ‹ˆλ‹€. μ‘μš© ν”„λ‘œκ·Έλž¨ 일관성을 κ°€μ§„ μŠ€λƒ…μƒ·μ„ νšλ“ν•˜κΈ° μœ„ν•΄μ„  λ‹€μŒκ³Ό 같은 μˆœμ„œκ°€ μ§€μΌœμ Έμ•Ό ν•©λ‹ˆλ‹€.

  1. μŠ€λƒ…μƒ·μ„ κΈ°λ‘ν•˜κΈ° μ „
    1. μ‘μš© I/O μž‘μ—…μ„ μΌμ‹œ μ€‘λ‹¨ν•˜κ³  μ‘μš©μ˜ λ©”λͺ¨λ¦¬ 버퍼λ₯Ό Flush ν•˜μ—¬ λ””μŠ€ν¬λ₯Ό μ΅œμ‹  λ°μ΄ν„°λ‘œ κ°±μ‹ ν•©λ‹ˆλ‹€.
    2. ν•΄λ‹Ή λ³Όλ₯¨μ— λŒ€ν•œ νŒŒμΌμ‹œμŠ€ν…œ 캐쉬λ₯Ό Flush ν•©λ‹ˆλ‹€.
  2. μŠ€λƒ…μƒ·μ„ κΈ°λ‘ν•©λ‹ˆλ‹€.
  3. μ‘μš© I/O μž‘μ—…μ„ μž¬κ°œν•©λ‹ˆλ‹€.

μ—¬κΈ°μ„œ λ³Ό 수 μžˆλ“―μ΄ μŠ€λƒ…μƒ·μ„ κΈ°λ‘ν•˜κΈ° 전에 μ΅œμ‹  데이터λ₯Ό λ³Όλ₯¨μ— λ°˜μ˜ν•˜λŠ” 과정을 μ„ ν–‰ν•˜κ³  μŠ€λƒ…μƒ· 기둝 ν›„ μ‘μš© I/O λ₯Ό μž¬κ°œν•  수 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€. 이것은 FSR 의 μŠ€λƒ…μƒ· 사전/사후 ν•Έλ“€λŸ¬λ₯Ό 톡해 μ‘μš©μ„ μ œμ–΄ν•˜λ„λ‘ κΈ°νšŒκ°€ λΆ€μ—¬λ˜λ©° 이 μ ˆμ°¨λ“€μ΄ μ œλŒ€λ‘œ μˆ˜ν–‰ λ˜μ—ˆμ„ λ•Œ μ‘μš© 일관성을 보μž₯ν•œ μŠ€λƒ…μƒ·μ„ μ·¨ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ§Œμ•½ μœ„ μ ˆμ°¨λŒ€λ‘œ μ‘μš©μ„ μ œμ–΄ν•  수 μ—†λ‹€λ©΄ μ΅œμ†Œν•œ νŒŒμΌμ‹œμŠ€ν…œ 캐쉬λ₯Ό Flush ν•΄μ„œ νŒŒμΌμ‹œμŠ€ν…œ 일관성(Filesystem Consistency)을 κ°€μ§„ μŠ€λƒ…μƒ·μœΌλ‘œ 기둝해야 ν•˜λ©° μ΄λ§ˆμ €λ„ μˆ˜ν–‰ν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄ 좩돌 일관성(Crash Consistency) μˆ˜μ€€μ˜ μŠ€λƒ…μƒ·λ§Œμ„ ν™•λ³΄ν•˜κ²Œ 될 것 μž…λ‹ˆλ‹€.



Windows 의 VSS μ„œλΉ„μŠ€λŠ” μ΄λŸ¬ν•œ μ‘μš© 일관성 μŠ€λƒ…μƒ·μ„ 보μž₯ν•˜κΈ° μœ„ν•˜μ—¬ VSS Writer λ₯Ό μ‘μš© ν”„λ‘œκ·Έλž¨μ—μ„œ κ΅¬ν˜„ν•˜λ„λ‘ μ œμ•ˆν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. VSSλŠ” μ‘μš©μ˜ VSS Writer 와 μƒν˜Έ μ—°λ™ν•˜μ—¬ μŠ€λƒ…μƒ· μš”μ²­μ΄ μžˆμ„ 경우 μœ„ 절차λ₯Ό μ°¨λ‘€λ‘œ μˆ˜ν–‰ν•˜μ—¬ μ‘μš© 일관성 μŠ€λƒ…μƒ·μ„ κ΅¬ν˜„ν•©λ‹ˆλ‹€. λ”°λΌμ„œ VSS Writer λ₯Ό κ΅¬ν˜„ν•œ μ‘μš© ν”„λ‘œκ·Έλž¨μ„ λŒ€μƒμœΌλ‘œ ν•œλ‹€λ©΄ 사전/사후 ν•Έλ“€λŸ¬λ₯Ό μž‘μ„±ν•  ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€. λ‹€μŒμ€ VSS Writer λ₯Ό μ§€μ›ν•˜λŠ” λŒ€ν‘œμ μΈ ν”„λ‘œκ·Έλž¨λ“€ μž…λ‹ˆλ‹€.

ν˜„μ‹€μ μœΌλ‘œλŠ” μœ„ ν”„λ‘œκ·Έλž¨λ“€μ„ μ œμ™Έν•˜λ©΄ λŒ€λΆ€λΆ„μ˜ μ‘μš© ν”„λ‘œκ·Έλž¨λ“€μ—μ„  VSS Writer λ₯Ό κ΅¬ν˜„ν•˜κ³  μžˆμ§€ μ•ŠμŠ΅λ‹ˆλ‹€.