iSCSI เจฆเฉเจ†เจฐเจพ Ceph - เจœเจพเจ‚ เจ‡เฉฑเจ• เจเฉ‚เจฒเฉ‡ เจตเจฟเฉฑเจš เจ–เฉœเฉเจนเฉ‡ เจนเฉ‹เจฃ เจตเฉ‡เจฒเฉ‡ เจธเจ•เฉ€เจ‡เฉฐเจ—

เจ•เฉ€ เจธเจพเจกเฉ‡ เจตเจฟเฉฑเจšเฉ‹เจ‚ เจ‰เจน เจนเจจ (เจŸเจธเฉ‡เจซเจตเฉ‹เจกเฉ‹เจต) เจœเฉ‹ "เจชเฉ‡เจธเจผเฉ‡เจตเจฐ เจ…เจคเจฟ" เจจเฉ‚เฉฐ เจชเจธเฉฐเจฆ เจจเจนเฉ€เจ‚ เจ•เจฐเจฆเฉ‡?

เจ‡เจน เจ…เจธเฉฐเจญเจต เจนเฉˆ - เจจเจนเฉ€เจ‚ เจคเจพเจ‚ เจ…เจธเฉ€เจ‚ เจ‡เจธ เจฌเจนเฉเจค เจนเฉ€ เจฆเจฟเจฒเจšเจธเจช เจ…เจคเฉ‡ เจฎเจœเจผเจพเจ•เฉ€เจ† เจ‰เจคเจชเจพเจฆ เจฆเฉ‡ เจ†เจฒเฉ‡ เจฆเฉเจ†เจฒเฉ‡ เจจเจนเฉ€เจ‚ เจ˜เฉเฉฐเจฎเจพเจ‚เจ—เฉ‡.

เจ‰เจจเฉเจนเจพเจ‚ เจตเจฟเฉฑเจšเฉ‹เจ‚ เจฌเจนเฉเจค เจธเจพเจฐเฉ‡ เจœเฉ‹ Ceph เจฆเฉ‡ เจธเฉฐเจšเจพเจฒเจจ เจตเจฟเฉฑเจš เจธเจผเจพเจฎเจฒ เจธเจจ, เจ‡เฉฑเจ• เจฌเจนเฉเจค เจตเจพเจฐ เจจเจนเฉ€เจ‚ (เจœเจพเจ‚ เจฌเจนเฉเจค เจ˜เฉฑเจŸ เจนเฉ€) เจชเจฐ เจ•เจˆ เจตเจพเจฐ เจฎเฉฐเจ— เจฆเฉ‡ เจฎเจพเจฎเจฒเฉ‡ เจตเจฟเฉฑเจš - Ceph เจจเฉ‚เฉฐ iSCSI เจœเจพเจ‚ FC เจฆเฉเจ†เจฐเจพ เจœเฉ‹เฉœเจฆเฉ‡ เจนเฉ‹เจ เจฎเจฟเจฒเฉ‡ เจนเจจเฅค เจ•เจพเจนเจฆเฉ‡ เจฒเจˆ? เจ–เฉˆเจฐ, เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, Ceph เจคเฉ‹เจ‚ เจ‡เฉฑเจ• เจตเจฟเฉฐเจกเฉ‹เจœเจผ เจœเจพเจ‚ เจธเฉ‹เจฒเจพเจฐเจฟเจธ เจธเจฐเจตเจฐ เจคเฉ‡ เจ‡เฉฑเจ• เจšเจฟเฉฑเจคเจฐ เจœเจฎเฉเจนเจพเจ‚ เจ•เจฐเฉ‹ เจœเฉ‹ เจ…เจœเฉ‡ เจคเฉฑเจ• เจ•เจฟเจธเฉ‡ เจ•เจพเจฐเจจ เจ•เจฐเจ•เฉ‡ เจตเจฐเจšเฉเจ…เจฒเจพเจˆเจœเจผ เจจเจนเฉ€เจ‚ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆ. เจœเจพเจ‚ เจ‡เฉฑเจ• เจตเจฐเจšเฉเจ…เจฒเจพเจˆเจœเจผเจก, เจชเจฐ เจ‡เฉฑเจ• เจนเจพเจˆเจชเจฐเจตเจพเจˆเจœเจผเจฐ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจเจพ เจœเฉ‹ Ceph เจจเจนเฉ€เจ‚ เจ•เจฐ เจธเจ•เจฆเจพ - เจ…เจคเฉ‡, เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจ…เจธเฉ€เจ‚ เจœเจพเจฃเจฆเฉ‡ เจนเจพเจ‚, เจ‰เจนเจจเจพเจ‚ เจตเจฟเฉฑเจšเฉ‹เจ‚ เจฌเจนเฉเจค เจธเจพเจฐเฉ‡ เจนเจจ. เจ‰เจฆเจพเจนเจฐเจฃ เจฒเจˆ? เจ–เฉˆเจฐ, เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, HyperV เจœเจพเจ‚ ESXi, เจœเฉ‹ เจ•เจฟ เจธเจฐเจ—เจฐเจฎเฉ€ เจจเจพเจฒ เจตเจฐเจคเฉ‡ เจœเจพเจ‚เจฆเฉ‡ เจนเจจ. เจ…เจคเฉ‡ เจœเฉ‡เจ•เจฐ เจ•เฉฐเจฎ Ceph เจคเฉ‹เจ‚ เจ‡เฉฑเจ• เจฎเจนเจฟเจฎเจพเจจ เจฎเจธเจผเฉ€เจจ เจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจšเจฟเฉฑเจคเจฐ เจฆเฉ€ เจธเฉ‡เจตเจพ เจ•เจฐเจจ เจฆเจพ เจนเฉเฉฐเจฆเจพ เจนเฉˆ, เจคเจพเจ‚ เจ‡เจน เจ‡เฉฑเจ• เจฌเจนเฉเจค เจนเฉ€ เจฆเจฟเจฒเจšเจธเจช เจ•เฉฐเจฎ เจตเจฟเฉฑเจš เจฌเจฆเจฒ เจœเจพเจ‚เจฆเจพ เจนเฉˆ.

เจ‡เจธ เจฒเจˆ, เจฆเจฟเฉฑเจคเจพ เจ—เจฟเจ†:

  1. เจ‡เฉฑเจ• เจชเจนเจฟเจฒเจพเจ‚ เจคเฉ‹เจ‚ เจšเฉฑเจฒ เจฐเจฟเจนเจพ Ceph เจ•เจฒเฉฑเจธเจŸเจฐ
  2. เจ‡เฉฑเจ• เจชเจนเจฟเจฒเจพเจ‚ เจคเฉ‹เจ‚ เจฎเฉŒเจœเฉ‚เจฆ เจšเจฟเฉฑเจคเจฐ เจœเฉ‹ iSCSI เจฐเจพเจนเฉ€เจ‚ เจฆเจฟเฉฑเจคเจพ เจœเจพเจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ
  3. เจชเฉ‚เจฒ เจฆเจพ เจจเจพเจฎ mypool, เจšเจฟเฉฑเจคเจฐ เจฆเจพ เจจเจพเจฎ myimage

เจธเจผเฉเจฐเฉ‚ เจ•เจฐเฉ‹?

เจธเจญ เจคเฉ‹เจ‚ เจชเจนเจฟเจฒเจพเจ‚, เจœเจฆเฉ‹เจ‚ เจ…เจธเฉ€เจ‚ FC เจœเจพเจ‚ iSCSI เจฌเจพเจฐเฉ‡ เจ—เฉฑเจฒ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚, เจคเจพเจ‚ เจธเจพเจกเฉ‡ เจ•เฉ‹เจฒ เจ‡เจจเฉ€เจธเจผเฉ€เจเจŸเจฐ เจ…เจคเฉ‡ เจŸเจพเจฐเจ—เฉ‡เจŸ เจตเจฐเจ—เฉ€เจ†เจ‚ เจธเฉฐเจธเจฅเจพเจตเจพเจ‚ เจนเจจเฅค เจŸเฉ€เจšเจพ เจ…เจธเจฒ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจธเจฐเจตเจฐ เจนเฉˆ, เจธเจผเฉเจฐเฉ‚เจ†เจคเฉ€ เจ‡เฉฑเจ• เจ•เจฒเจพเจ‡เฉฐเจŸ เจนเฉˆ. เจธเจพเจกเจพ เจ•เฉฐเจฎ เจ˜เฉฑเจŸเฉ‹-เจ˜เฉฑเจŸ เจ•เฉ‹เจธเจผเจฟเจธเจผ เจฆเฉ‡ เจจเจพเจฒ เจธเจผเฉเจฐเฉ‚เจ†เจค เจ•เจฐเจจ เจตเจพเจฒเฉ‡ เจจเฉ‚เฉฐ Ceph เจšเจฟเฉฑเจคเจฐ เจœเจฎเฉเจนเจพเจ‚ เจ•เจฐเจจเจพ เจนเฉˆ. เจ‡เจธเจฆเจพ เจฎเจคเจฒเจฌ เจนเฉˆ เจ•เจฟ เจธเจพเจจเฉ‚เฉฐ เจŸเฉ€เจšเฉ‡ เจฆเจพ เจตเจฟเจธเจคเจพเจฐ เจ•เจฐเจจเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆเฅค เจชเจฐ เจ•เจฟเฉฑเจฅเฉ‡, เจ•เจฟเจธ เจ•เฉฐเจชเจฟเจŠเจŸเจฐ 'เจคเฉ‡?

เจ–เฉเจธเจผเจ•เจฟเจธเจฎเจคเฉ€ เจจเจพเจฒ, เจ‡เฉฑเจ• Ceph เจ•เจฒเฉฑเจธเจŸเจฐ เจตเจฟเฉฑเจš เจธเจพเจกเฉ‡ เจ•เฉ‹เจฒ เจ˜เฉฑเจŸเฉ‹-เจ˜เฉฑเจŸ เจ‡เฉฑเจ• เจ•เฉฐเจชเฉ‹เจจเฉˆเจ‚เจŸ เจนเฉˆ เจœเจฟเจธเจฆเจพ IP เจเจกเจฐเฉˆเฉฑเจธ เจซเจฟเจ•เจธ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆ เจ…เจคเฉ‡ เจœเจฟเจธ เจ‰เฉฑเจคเฉ‡ Ceph เจฆเฉ‡ เจธเจญ เจคเฉ‹เจ‚ เจฎเจนเฉฑเจคเจตเจชเฉ‚เจฐเจจ เจนเจฟเฉฑเจธเจฟเจ†เจ‚ เจตเจฟเฉฑเจšเฉ‹เจ‚ เจ‡เฉฑเจ• เจจเฉ‚เฉฐ เจ•เฉŒเจ‚เจซเจฟเจ—เจฐ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆ, เจ…เจคเฉ‡ เจ‰เจน เจ•เฉฐเจชเฉ‹เจจเฉˆเจ‚เจŸ เจฎเจพเจจเฉ€เจŸเจฐ เจนเฉˆเฅค เจ‡เจธ เจ…เจจเฉเจธเจพเจฐ, เจ…เจธเฉ€เจ‚ เจฎเจพเจจเฉ€เจŸเจฐ เจ‰เฉฑเจคเฉ‡ เจ‡เฉฑเจ• iSCSI เจŸเจพเจฐเจ—เจฟเจŸ เจ‡เฉฐเจธเจŸเจพเจฒ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚ (เจ…เจคเฉ‡ เจ‰เจธเฉ‡ เจธเจฎเฉ‡เจ‚, เจ˜เฉฑเจŸเฉ‹-เจ˜เฉฑเจŸ เจŸเฉˆเจธเจŸเจพเจ‚ เจฒเจˆ)เฅค เจฎเฉˆเจ‚ เจ‡เจน CentOS 'เจคเฉ‡ เจ•เฉ€เจคเจพ เจธเฉ€, เจชเจฐ เจนเฉฑเจฒ เจ•เจฟเจธเฉ‡ เจนเฉ‹เจฐ เจตเฉฐเจก เจฒเจˆ เจตเฉ€ เจขเฉเจ•เจตเจพเจ‚ เจนเฉˆ - เจคเฉเจนเจพเจจเฉ‚เฉฐ เจฌเจธ เจชเฉˆเจ•เฉ‡เจœเจพเจ‚ เจจเฉ‚เฉฐ เจ‰เจธ เจคเจฐเฉ€เจ•เฉ‡ เจจเจพเจฒ เจธเจฅเจพเจชเจฟเจค เจ•เจฐเจจ เจฆเฉ€ เจœเจผเจฐเฉ‚เจฐเจค เจนเฉˆ เจœเฉ‹ เจคเฉเจนเจพเจกเฉ€ เจตเฉฐเจก เจตเจฟเฉฑเจš เจธเจตเฉ€เจ•เจพเจฐเจฏเฉ‹เจ— เจนเฉˆ.

# yum -y install iscsi-initiator-utils targetcli

เจ‡เฉฐเจธเจŸเจพเจฒ เจ•เฉ€เจคเฉ‡ เจชเฉˆเจ•เฉ‡เจœเจพเจ‚ เจฆเจพ เจฎเจ•เจธเจฆ เจ•เฉ€ เจนเฉˆ?

  • targetcli โ€” เจฒเฉ€เจจเจ•เจธ เจ•เจฐเจจเจฒ เจตเจฟเฉฑเจš เจฌเจฃเฉ‡ SCSI เจŸเจพเจฐเจ—เจฟเจŸ เจฆเฉ‡ เจชเฉเจฐเจฌเฉฐเจงเจจ เจฒเจˆ เจ‡เฉฑเจ• เจธเจนเฉ‚เจฒเจค
  • iscsi-initiator-utils - เจฒเฉ€เจจเจ•เจธ เจ•เจฐเจจเจฒ เจตเจฟเฉฑเจš เจฌเจฃเฉ‡ iSCSI เจ‡เจจเฉ€เจธเจผเฉ€เจเจŸเจฐ เจฆเฉ‡ เจชเฉเจฐเจฌเฉฐเจงเจจ เจฒเจˆ เจตเจฐเจคเฉ€เจ†เจ‚ เจœเจพเจ‚เจฆเฉ€เจ†เจ‚ เจธเจนเฉ‚เจฒเจคเจพเจ‚ เจตเจพเจฒเจพ เจชเฉˆเจ•เฉ‡เจœ

เจธเจผเฉเจฐเฉ‚เจ†เจค เจ•เจฐเจจ เจตเจพเจฒเฉ‡ เจจเฉ‚เฉฐ iSCSI เจฐเจพเจนเฉ€เจ‚ เจ‡เฉฑเจ• เจšเจฟเฉฑเจคเจฐ เจœเจฎเฉเจนเจพเจ‚ เจ•เจฐเจพเจ‰เจฃ เจฒเจˆ, เจ‡เจตเฉˆเจ‚เจŸเจพเจ‚ เจฆเฉ‡ เจตเจฟเจ•เจพเจธ เจฒเจˆ เจฆเฉ‹ เจตเจฟเจ•เจฒเจช เจนเจจ - เจŸเฉ€เจšเฉ‡ เจฆเฉ‡ เจฏเฉ‚เจœเจผเจฐเจธเจชเฉ‡เจธ เจฌเฉˆเจ•เจเจ‚เจก เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเฉ‹ เจœเจพเจ‚ เจ“เจชเจฐเฉ‡เจŸเจฟเฉฐเจ— เจธเจฟเจธเจŸเจฎ เจจเฉ‚เฉฐ เจฆเจฟเจ–เจพเจˆ เจฆเฉ‡เจฃ เจตเจพเจฒเฉ‡ เจ‡เฉฑเจ• เจฌเจฒเจพเจ• เจฏเฉฐเจคเจฐ เจตเจœเฉ‹เจ‚ เจšเจฟเฉฑเจคเจฐ เจจเฉ‚เฉฐ เจ•เจจเฉˆเจ•เจŸ เจ•เจฐเฉ‹ เจ…เจคเฉ‡ เจ‡เจธเจจเฉ‚เฉฐ iSCSI เจฐเจพเจนเฉ€เจ‚ เจจเจฟเจฐเจฏเจพเจค เจ•เจฐเฉ‹เฅค เจ…เจธเฉ€เจ‚ เจฆเฉ‚เจœเฉ‡ เจคเจฐเฉ€เจ•เฉ‡ เจจเจพเจฒ เจœเจพเจตเจพเจ‚เจ—เฉ‡ - เจฏเฉ‚เจœเจผเจฐเจธเจชเฉ‡เจธ เจฌเฉˆเจ•เจเจ‚เจก เจ…เจœเฉ‡ เจตเฉ€ "เจชเฉเจฐเจฏเฉ‹เจ—เจพเจคเจฎเจ•" เจธเจฅเจฟเจคเฉ€ เจตเจฟเฉฑเจš เจนเฉˆ เจ…เจคเฉ‡ เจ‰เจคเจชเจพเจฆเจ• เจตเจฐเจคเฉ‹เจ‚ เจฒเจˆ เจฅเฉ‹เฉœเฉเจนเจพ เจคเจฟเจ†เจฐ เจจเจนเฉ€เจ‚ เจนเฉˆเฅค เจ‡เจธ เจคเฉ‹เจ‚ เจ‡เจฒเจพเจตเจพ, เจ‡เจธเจฆเฉ‡ เจจเจพเจฒ เจจเฉเจ•เจธเจพเจจ เจตเฉ€ เจนเจจ, เจœเจฟเจธ เจฌเจพเจฐเฉ‡ เจคเฉเจธเฉ€เจ‚ เจฌเจนเฉเจค เจ—เฉฑเจฒ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹ เจ…เจคเฉ‡ (เจ“เจน เจฆเจนเจฟเจธเจผเจค!) เจฌเจนเจฟเจธ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹.

เจœเฉ‡เจ•เจฐ เจ…เจธเฉ€เจ‚ เจ‡เฉฑเจ• เจฒเฉฐเจฌเฉ‡ เจธเจชเฉ‹เจฐเจŸ เจšเฉฑเจ•เจฐ เจฆเฉ‡ เจจเจพเจฒ เจ‡เฉฑเจ• เจฅเฉ‹เฉœเฉ€ เจธเจฅเจฟเจฐ เจตเฉฐเจก เจฆเฉ€ เจตเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚, เจคเจพเจ‚ เจธเจพเจกเฉ‡ เจ•เฉ‹เจฒ เจœเฉ‹ เจ•เจฐเจจเจฒ เจนเฉˆ เจ‰เจน เจ•เฉเจ เจชเฉเจฐเจพเจšเฉ€เจจ, เจชเฉเจฐเจพเจšเฉ€เจจ เจธเฉฐเจธเจ•เจฐเจฃ เจนเฉˆเฅค เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, CentOS7 เจตเจฟเฉฑเจš เจ‡เจน 3.10.* เจนเฉˆ, CentOS8 เจตเจฟเฉฑเจš เจ‡เจน 4.19 เจนเฉˆเฅค เจ…เจคเฉ‡ เจ…เจธเฉ€เจ‚ เจ˜เฉฑเจŸเฉ‹-เจ˜เฉฑเจŸ 5.3 (เจœเจพเจ‚ 5.4) เจ…เจคเฉ‡ เจจเจตเฉ‡เจ‚ เจฆเฉ‡ เจ•เจฐเจจเจฒ เจตเจฟเฉฑเจš เจฆเจฟเจฒเจšเจธเจชเฉ€ เจฐเฉฑเจ–เจฆเฉ‡ เจนเจพเจ‚เฅค เจ•เจฟเจ‰เจ‚? เจ•เจฟเจ‰เจ‚เจ•เจฟ เจฎเฉ‚เจฒ เจฐเฉ‚เจช เจตเจฟเฉฑเจš Ceph เจšเจฟเฉฑเจคเจฐเจพเจ‚ เจตเจฟเฉฑเจš เจตเจฟเจ•เจฒเจชเจพเจ‚ เจฆเจพ เจ‡เฉฑเจ• เจธเจฎเฉ‚เจน เจธเจฎเจฐเฉฑเจฅ เจนเฉเฉฐเจฆเจพ เจนเฉˆ เจœเฉ‹ เจชเฉเจฐเจพเจฃเฉ‡ เจ•เจฐเจจเจฒ เจฆเฉ‡ เจ…เจจเฉเจ•เฉ‚เจฒ เจจเจนเฉ€เจ‚ เจนเฉเฉฐเจฆเฉ‡ เจนเจจเฅค เจ‡เจธเจฆเจพ เจฎเจคเจฒเจฌ เจนเฉˆ เจ•เจฟ เจ…เจธเฉ€เจ‚ เจ†เจชเจฃเฉ€ เจตเฉฐเจก เจฒเจˆ เจ‡เฉฑเจ• เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€ เจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจจเจตเฉ‡เจ‚ เจ•เจฐเจจเจฒ เจจเจพเจฒ เจœเฉ‹เฉœเจฆเฉ‡ เจนเจพเจ‚ (เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, CentOS เจฒเจˆ เจ‡เจน elrepo เจนเฉˆ), เจจเจตเจพเจ‚ เจ•เจฐเจจเจฒ เจธเจฅเจพเจชเจฟเจค เจ•เจฐเฉ‹ เจ…เจคเฉ‡ เจจเจตเฉ‡เจ‚ เจ•เจฐเจจเจฒ เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเจจ เจฒเจˆ เจธเจฟเจธเจŸเจฎ เจจเฉ‚เฉฐ เจฐเฉ€เจฌเฉ‚เจŸ เจ•เจฐเฉ‹:

  • เจชเฉเจฐเจฏเฉ‹เจ— เจฒเจˆ เจšเฉเจฃเฉ‡ เจ—เจ เจฎเจพเจจเฉ€เจŸเจฐ เจจเจพเจฒ เจœเฉเฉœเฉ‹
  • เจ…เจธเฉ€เจ‚ เจจเจฟเจฐเจฆเฉ‡เจธเจผเจพเจ‚ เจ…เจจเฉเจธเจพเจฐ เจเจฒเจฐเฉ‡เจชเฉ‹ เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€เจ†เจ‚ เจจเฉ‚เฉฐ เจœเฉ‹เฉœเจฆเฉ‡ เจนเจพเจ‚ - elrepo.org/tiki/tiki-index.php
  • เจ•เจฐเจจเจฒ เจ‡เฉฐเจธเจŸเจพเจฒ เจ•เจฐเฉ‹: yum -y โ€”enablerepo=elrepo-kernel install kernel-ml
  • เจธเจฐเจตเจฐ เจจเฉ‚เฉฐ เจฎเจพเจจเฉ€เจŸเจฐ เจจเจพเจฒ เจฐเฉ€เจฌเฉ‚เจŸ เจ•เจฐเฉ‹ (เจธเจพเจกเฉ‡ เจ•เฉ‹เจฒ เจคเจฟเฉฐเจจ เจฎเจพเจจเฉ€เจŸเจฐ เจนเจจ, เจ เฉ€เจ•?)

เจšเจฟเฉฑเจคเจฐ เจจเฉ‚เฉฐ เจฌเจฒเจพเจ• เจกเจฟเจตเจพเจˆเจธ เจฆเฉ‡ เจคเฉŒเจฐ 'เจคเฉ‡ เจ•เจจเฉˆเจ•เจŸ เจ•เจฐเจจเจพ

# rbd map mypool/myimage
/dev/rbd0

เจŸเฉ€เจšเฉ‡ เจจเฉ‚เฉฐ เจธเฉฐเจฐเจšเจฟเจค เจ•เจฐเจจเจพ เจฌเจพเจ•เฉ€ เจนเฉˆเฅค เจ‡เจธ เจ‰เจฆเจพเจนเจฐเจจ เจตเจฟเฉฑเจš, เจฎเฉˆเจ‚ เจ‡เจธ เจฒเจˆ-เจ•เจนเจฟเฉฐเจฆเฉ‡ เจตเจฟเฉฑเจš เจŸเฉ€เจšเฉ‡ เจจเฉ‚เฉฐ เจธเฉฐเจฐเจšเจฟเจค เจ•เจฐเจพเจ‚เจ—เจพ. เจกเฉˆเจฎเฉ‹ เจฎเฉ‹เจก - เจชเฉเจฐเจฎเจพเจฃเจฟเจ•เจคเจพ เจคเฉ‹เจ‚ เจฌเจฟเจจเจพเจ‚, เจฆเจฟเจ–เจฃเจฏเฉ‹เจ— เจ…เจคเฉ‡ เจนเจฐ เจ•เจฟเจธเฉ‡ เจฒเจˆ เจชเจนเฉเฉฐเจšเจฏเฉ‹เจ—เฅค เจ‡เฉฑเจ• เจ‰เจคเจชเจพเจฆเจจ เจตเจพเจคเจพเจตเจฐเจฃ เจตเจฟเฉฑเจš, เจคเฉเจธเฉ€เจ‚ เจธเฉฐเจญเจพเจตเจค เจคเฉŒเจฐ 'เจคเฉ‡ เจชเฉเจฐเจฎเจพเจฃเจฟเจ•เจคเจพ เจจเฉ‚เฉฐ เจ•เฉŒเจ‚เจซเจฟเจ—เจฐ เจ•เจฐเจจเจพ เจšเจพเจนเฉ‹เจ—เฉ‡ - เจชเจฐ เจ‡เจน เจ…เฉฑเจœ เจฆเฉ‡ เจธเจฟเจฐเจซ-เจฎเจœเจผเฉ‡เจฆเจพเจฐ เจ…เจญเจฟเจ†เจธ เจฒเจˆ เจ•เฉเจ เจนเฉฑเจฆ เจคเฉ‹เจ‚ เจฌเจพเจนเจฐ เจนเฉˆเฅค

เจซเจพเจ‡เจฒ /dev/rbd/mypool/myimage เจจเจพเจฒ เจธเจฌเฉฐเจงเจฟเจค disk1 เจจเจพเจ‚ เจฆเจพ เจฌเฉˆเจ•เจเจ‚เจก เจฌเจฃเจพเจ“เฅค เจจเจฟเจฐเจงเจพเจฐเจค เจซเจพเจ‡เจฒ เจ‡เฉฑเจ• เจธเจฟเฉฐเจฌเจฒเจฟเจ• เจฒเจฟเฉฐเจ• เจนเฉˆ เจœเฉ‹ udev เจกเฉˆเจฎเจจ เจฆเฉเจ†เจฐเจพ /dev/rbd0 เจฒเจˆ เจธเจตเฉˆเจšเจฒเจฟเจค เจคเฉŒเจฐ 'เจคเฉ‡ เจฌเจฃเจพเจ‡เจ† เจ—เจฟเจ† เจนเฉˆเฅค เจ…เจธเฉ€เจ‚ เจ‡เฉฑเจ• เจชเฉเจฐเจคเฉ€เจ• เจฒเจฟเฉฐเจ• เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚ เจ•เจฟเจ‰เจ‚เจ•เจฟ rbd เจกเจฟเจตเจพเจˆเจธ เจฆเจพ เจจเจพเจฎ เจ‰เจธ เจ•เฉเจฐเจฎ เจฆเฉ‡ เจ…เจงเจพเจฐ เจคเฉ‡ เจฌเจฆเจฒ เจธเจ•เจฆเจพ เจนเฉˆ เจœเจฟเจธ เจตเจฟเฉฑเจš Ceph เจšเจฟเฉฑเจคเจฐ เจนเฉ‹เจธเจŸ เจจเจพเจฒ เจœเฉเฉœเฉ‡ เจนเฉ‹เจ เจนเจจเฅค

เจ‡เฉฑเจ• เจฌเฉˆเจ•เจเจ‚เจก เจฌเจฃเจพเจ“:

# targetcli /backstores/block create disk1 /dev/rbd/mypool/myimage

เจ‡เฉฑเจ• iSCSI เจŸเฉ€เจšเจพ เจฌเจฃเจพเจ“:

# targetcli /iscsi create iqn.2020-01.demo.ceph:mypool

เจ…เจธเฉ€เจ‚ เจฌเฉˆเจ•เจเจ‚เจก เจจเฉ‚เฉฐ LUN เจฆเฉ‡ เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจŸเฉ€เจšเฉ‡ เจจเจพเจฒ เจœเฉ‹เฉœเจฆเฉ‡ เจนเจพเจ‚:

# targetcli /iscsi/iqn.2020-01.demo.ceph:mypool/tpg1/luns create /backstores/block/disk1

เจ†เจ‰ เจกเฉˆเจฎเฉ‹ เจฎเฉ‹เจก เจฒเจˆ เจŸเฉ€เจšเจพ เจธเฉฐเจฐเจšเจฟเจค เจ•เจฐเฉ€เจ:

# targetcli /iscsi/iqn.2020-01.demo.ceph:mypool/tpg1/ set
> attribute demo_mode_write_protect=0
# targetcli /iscsi/iqn.2020-01.demo.ceph:mypool/tpg1/ set
> attribute generate_node_acls=1
# targetcli /iscsi/iqn.2020-01.demo.ceph:mypool/tpg1/ set
> attribute cache_dynamic_acls=1

เจธเฉฐเจฐเจšเจจเจพ เจจเฉ‚เฉฐ เจธเฉฐเจญเจพเจฒเฉ‹:

# targetcli saveconfig

เจŸเฉ€เจšเฉ‡ เจฆเฉ€ เจ‰เจชเจฒเจฌเจงเจคเจพ เจฆเฉ€ เจœเจพเจ‚เจš เจ•เจฐเจจเจพ:

# iscsiadm -m discovery -t st -p 127.0.0.1:3260
127.0.0.1:3260,1 iqn.2020-01.demo.ceph:mypool

เจ…เจธเฉ€เจ‚ เจŸเฉ€เจšเฉ‡ เจจเฉ‚เฉฐ เจœเฉ‹เฉœเจฆเฉ‡ เจนเจพเจ‚:

# iscsiadm -m node --login
Logging in to [iface: default, target: iqn.2020-01.demo.ceph:mypool, portal: 127.0.0.1,3260] (multiple)
Login to [iface: default, target: iqn.2020-01.demo.ceph:mypool, portal: 127.0.0.1,3260] successful.

เจœเฉ‡เจ•เจฐ เจคเฉเจธเฉ€เจ‚ เจธเจญ เจ•เฉเจ เจธเจนเฉ€ เจขเฉฐเจ— เจจเจพเจฒ เจ•เฉ€เจคเจพ เจนเฉˆ, เจคเจพเจ‚ เจธเจฐเจตเจฐ 'เจคเฉ‡ เจ‡เฉฑเจ• เจจเจตเฉ€เจ‚ เจกเจฟเจธเจ• เจฆเจฟเจ–เจพเจˆ เจฆเฉ‡เจตเฉ‡เจ—เฉ€, เจœเฉ‹ เจ•เจฟ เจ‡เฉฑเจ• SCSI เจœเฉฐเจคเจฐ เจตเจฐเจ—เฉ€ เจฆเจฟเจ–เจพเจˆ เจฆเจฟเฉฐเจฆเฉ€ เจนเฉˆ, เจชเจฐ เจ…เจธเจฒ เจตเจฟเฉฑเจš Ceph เจคเฉ‹เจ‚ เจ‡เฉฑเจ• เจšเจฟเฉฑเจคเจฐ เจนเฉˆ, เจ‡เฉฑเจ• iSCSI เจŸเจพเจฐเจ—เจฟเจŸ เจฆเฉเจ†เจฐเจพ เจเจ•เจธเฉˆเจธ เจ•เฉ€เจคเฉ€ เจ—เจˆ เจนเฉˆเฅค เจฌเฉ‚เจŸ เจธเจฎเฉฑเจธเจฟเจ†เจตเจพเจ‚ เจคเฉ‹เจ‚ เจฌเจšเจฃ เจฒเจˆ, เจธเจฅเจพเจจเจ• เจธเจผเฉเจฐเฉ‚เจ†เจคเฉ€ เจคเฉ‹เจ‚ เจœเฉเฉœเฉ€ เจกเจฟเจธเจ• เจ…เจคเฉ‡ เจ–เฉ‹เจœเฉ‡ เจ—เจ เจŸเฉ€เจšเฉ‡ เจจเฉ‚เฉฐ เจนเจŸเจพเจ‰เจฃเจพ เจฌเจฟเจนเจคเจฐ เจนเฉˆ:

# iscsiadm -m node --logout
# iscsiadm -m discoverydb -o delete -t st -p 127.0.0.1:3260

เจœเฉ‹ เจ•เฉเจ เจฐเจนเจฟเฉฐเจฆเจพ เจนเฉˆ เจ‰เจน เจธเฉฐเจฐเจšเจจเจพ เจจเฉ‚เฉฐ เจœเจพเจฐเฉ€ เจฐเฉฑเจ–เจฃเจพ เจนเฉˆ เจคเจพเจ‚ เจœเฉ‹ เจšเจฟเฉฑเจคเจฐ เจ†เจชเจฃเฉ‡ เจ†เจช เจœเฉเฉœเจฟเจ† เจฐเจนเฉ‡ เจ…เจคเฉ‡, เจ•เฉเจจเฉˆเจ•เจธเจผเจจ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ, เจŸเฉ€เจšเจพ เจชเฉฑเจงเจฐเฉ€ เจนเฉ‹ เจœเจพเจตเฉ‡เฅค เจ‡เฉฑเจ• เจŸเฉ€เจšเจพ เจฒเจพเจ‚เจš เจ•เจฐเจจ เจตเจฟเฉฑเจš เจฆเฉ‹ เจ•เจฆเจฎ เจนเฉเฉฐเจฆเฉ‡ เจนเจจ - RBD เจจเฉ‚เฉฐ เจœเฉ‹เฉœเจจเจพ เจ…เจคเฉ‡ เจ…เจธเจฒ เจตเจฟเฉฑเจš เจŸเฉ€เจšเจพ เจฒเจพเจ‚เจš เจ•เจฐเจจเจพเฅค

เจชเจนเจฟเจฒเจพเจ‚, เจ†เจ‰ เจนเฉ‹เจธเจŸ เจจเจพเจฒ RBD เจšเจฟเฉฑเจคเจฐเจพเจ‚ เจฆเฉ‡ เจ†เจŸเฉ‹เจฎเฉˆเจŸเจฟเจ• เจ•เจจเฉˆเจ•เจธเจผเจจ เจฆเฉ€ เจธเฉฐเจฐเจšเจจเจพ เจ•เจฐเฉ€เจเฅค เจ‡เจน เจนเฉ‡เจ  เจฒเจฟเจ–เฉ€เจ†เจ‚ เจฒเจพเจˆเจจเจพเจ‚ เจจเฉ‚เฉฐ /etc/ceph/rbdmap เจซเจพเจˆเจฒ เจตเจฟเฉฑเจš เจœเฉ‹เฉœ เจ•เฉ‡ เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆ:

# cat /etc/ceph/rbdmap
# RbdDevice Parameters
mypool/myimage id=admin
# systemctl enable rbdmap

เจŸเจพเจฐเจ—เฉ‡เจŸ เจ•เฉŒเจ‚เจซเจฟเจ—เจฐเฉ‡เจธเจผเจจ เจจเฉ‚เฉฐ เจฐเฉ€เจธเจŸเฉ‹เจฐ เจ•เจฐเจจเจพ เจฅเฉ‹เฉœเจพ เจนเฉ‹เจฐ เจ—เฉเฉฐเจเจฒเจฆเจพเจฐ เจนเฉˆ - เจธเจพเจจเฉ‚เฉฐ เจธเจฟเจธเจŸเจฎเจก เจฒเจˆ เจ‡เฉฑเจ• เจฏเฉ‚เจจเจฟเจŸ เจฒเจฟเจ–เจฃ เจฆเฉ€ เจœเจผเจฐเฉ‚เจฐเจค เจนเฉˆ เจœเฉ‹ เจธเฉฐเจฐเจšเจจเจพ เจจเฉ‚เฉฐ เจฌเจนเจพเจฒ เจ•เจฐเฉ‡เจ—เฉ€:

# cat /usr/lib/systemd/system/scsi-target.service
[Unit] Description=Start iSCSI target

After=network-online.target rbdmap.service
Before=remote-fs-pre.target
Wants=network-online.target remote-fs-pre.target

[Service] Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/targetcli restoreconfig

[Install] WantedBy=multi-user.target

# systemctl daemon-reload
# systemctl enable scsi-target

เจ…เฉฐเจคเจฎ เจŸเฉˆเจธเจŸ เจธเจพเจกเฉ‡ เจฎเจพเจจเฉ€เจŸเจฐ เจจเฉ‚เฉฐ เจฆเฉเจฌเจพเจฐเจพ เจšเจพเจฒเฉ‚ เจ•เจฐเจจเจพ เจนเฉˆ (เจ‡เจน เจนเฉเจฃ เจ‡เฉฑเจ• iSCSI เจŸเฉ€เจšเจพ เจนเฉˆ)เฅค เจ‡เจน เจจเฉ‹เจŸ เจ•เฉ€เจคเจพ เจœเจพเจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ เจ•เจฟ เจœเฉ‡เจ•เจฐ เจ…เจธเฉ€เจ‚ เจ•เจฎเจพเจ‚เจก เจจเจพเจฒ เจธเจผเฉเจฐเฉ‚เจ†เจคเฉ€ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจจเฉ‚เฉฐ เจธเจพเจซเจผ เจจเจนเฉ€เจ‚ เจ•เฉ€เจคเจพ เจธเฉ€ iscsiadm -n discoverydb -o เจฎเจฟเจŸเจพเจ“ ... เจคเฉเจธเฉ€เจ‚ เจ‡เฉฑเจ• เจธเจฐเจตเจฐ เจจเจพเจฒ เจ–เจคเจฎ เจนเฉ‹ เจธเจ•เจฆเฉ‡ เจนเฉ‹ เจœเฉ‹ เจฒเฉ‹เจก เจจเจนเฉ€เจ‚ เจนเฉเฉฐเจฆเจพ เจœเจพเจ‚ เจฒเฉ‹เจก เจนเฉ‹เจฃ เจตเจฟเฉฑเจš เจฒเฉฐเจฌเจพ เจธเจฎเจพเจ‚ เจฒเฉˆเจ‚เจฆเจพ เจนเฉˆเฅค

เจ•เฉ€ เจฌเจšเจฟเจ† เจนเฉˆ?

เจธเจฐเจตเจฐ 'เจคเฉ‡ เจธเจผเฉเจฐเฉ‚เจ†เจคเฉ€ เจจเฉ‚เฉฐ เจ•เฉŒเจ‚เจซเจฟเจ—เจฐ เจ•เจฐเฉ‹ เจœเจฟเฉฑเจฅเฉ‡ เจ…เจธเฉ€เจ‚ เจŸเฉ€เจšเจพ เจญเฉ‡เจœเจฃเจพ เจšเจพเจนเฉเฉฐเจฆเฉ‡ เจนเจพเจ‚เฅค

เจธเจพเจกเฉ‡ เจŸเฉ€เจšเฉ‡ เจฆเฉ€ เจ—เจฒเจคเฉ€ เจธเจนเจฟเจฃเจธเจผเฉ€เจฒเจคเจพ เจจเฉ‚เฉฐ เจ•เจฟเจตเฉ‡เจ‚ เจฏเจ•เฉ€เจจเฉ€ เจฌเจฃเจพเจ‡เจ† เจœเจพเจตเฉ‡?

เจคเฉเจธเฉ€เจ‚ เจ‡เจธเฉ‡ เจคเจฐเฉเจนเจพเจ‚ เจฆเฉ‚เจœเฉ‡ เจฎเจพเจจเฉ€เจŸเจฐเจพเจ‚ 'เจคเฉ‡ เจŸเฉ€เจšเจฟเจ†เจ‚ เจจเฉ‚เฉฐ เจธเฉฐเจฐเจšเจฟเจค เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹ เจ…เจคเฉ‡ เจฎเจฒเจŸเฉ€เจชเจพเจฅ เจธเฉˆเฉฑเจŸเจ…เฉฑเจช เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹ (vmware เจ‡เจธ เจจเฉ‚เฉฐ เจธเจฎเจเฉ‡เจ—เจพ เจ…เจคเฉ‡ เจ•เฉฐเจฎ เจตเฉ€ เจ•เจฐเฉ‡เจ—เจพ, Hyper-V เจจเจนเฉ€เจ‚ เจธเจฎเจเฉ‡เจ—เจพ - เจ‡เจธ เจฒเจˆ SCSI เจฒเจพเจ• เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ)เฅค เจ•เจฟเจ‰เจ‚เจ•เจฟ เจ•เจฐเจจเจฒ เจคเฉ‹เจ‚ Ceph เจ•เจฒเจพเจ‡เฉฐเจŸ เจ•เฉˆเจšเจฟเฉฐเจ— เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจจเจนเฉ€เจ‚ เจ•เจฐเจฆเจพ, เจ‡เจน เจ•เจพเจซเจผเฉ€ เจ•เฉฐเจฎ เจ•เจฐเจจ เจฏเฉ‹เจ— เจนเฉˆเฅค เจœเจพเจ‚ เจ‡เฉฑเจ• เจนเฉ‹เจฐ เจตเจฟเจ•เจฒเจช เจคเจฟเฉฐเจจ เจญเจพเจ—เจพเจ‚ เจฆเจพ เจ‡เฉฑเจ• เจ•เจฒเฉฑเจธเจŸเจฐ เจธเจฐเฉ‹เจค เจฌเจฃเจพเจ‰เจฃเจพ เจนเฉˆ - เจ‡เฉฑเจ• เจธเจฎเจฐเจชเจฟเจค เจŸเจพเจฐเจ—เฉ‡เจŸ IP เจเจกเจฐเฉˆเฉฑเจธ เจ…เจคเฉ‡ rbdmap เจ…เจคเฉ‡ scsi-target เจธเฉ‡เจตเจพเจตเจพเจ‚, เจ…เจคเฉ‡ เจ‡เจธ เจธเจฐเฉ‹เจค เจจเฉ‚เฉฐ เจ•เจฒเฉฑเจธเจŸเจฐเจฟเฉฐเจ— เจŸเฉ‚เจฒเจธ เจฆเฉเจ†เจฐเจพ เจชเฉเจฐเจฌเฉฐเจงเจฟเจค เจ•เจฐเจจเจพ (เจชเฉ‡เจธเจฎเฉ‡เจ•เจฐ เจ•เจฟเจธ เจจเฉ‡ เจ•เจฟเจนเจพ?)

เจ‡เฉฑเจ• เจฌเจฆเจฒเจพเจ‰ เจฆเฉ€ เจฌเจœเจพเจ

เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจธเจชเฉฑเจธเจผเจŸ เจนเฉˆ, เจ‡เจน เจฒเฉ‡เจ– เจ‡เฉฑเจ• เจฎเจœเจผเจพเจ• เจฆเจพ เจ‡เฉฑเจ• เจฌเจฟเฉฑเจŸ เจนเฉˆ - เจชเจฐ เจ‡เจธ เจตเจฟเฉฑเจš เจฎเฉˆเจ‚ "เจœเจฒเจฆเฉ€ เจ…เจคเฉ‡ เจ‰เจฆเจพเจนเจฐเจฃเจพเจ‚ เจฆเฉ‡ เจจเจพเจฒ" เจ‡เฉฑเจ•เฉ‹ เจธเจฎเฉ‡เจ‚ เจ•เจˆ เจ•เจพเจซเจผเฉ€ เจชเฉเจฐเจธเจฟเฉฑเจง เจตเจฟเจธเจผเจฟเจ†เจ‚ 'เจคเฉ‡ เจตเจฟเจšเจพเจฐ เจ•เจฐเจจ เจฆเฉ€ เจ•เฉ‹เจธเจผเจฟเจธเจผ เจ•เฉ€เจคเฉ€ - iSCSI เจŸเฉ€เจšเจพ, เจœเฉ‹ เจœเจผเจฐเฉ‚เจฐเฉ€ เจคเฉŒเจฐ 'เจคเฉ‡ Ceph เจšเจฟเฉฑเจคเจฐเจพเจ‚ เจจเฉ‚เฉฐ เจจเจฟเจฐเจฏเจพเจค เจจเจนเฉ€เจ‚ เจ•เจฐ เจธเจ•เจฆเจพ เจนเฉˆ - เจชเจฐ เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, เจเจ•เจธเจชเฉ‹เจฐเจŸ LVM เจตเจพเจฒเฉ€เจ…เจฎ, เจ‡เฉฑเจ• iSCSI เจธเจผเฉเจฐเฉ‚เจ†เจคเฉ€ เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเจจ เจฆเฉ€เจ†เจ‚ เจฎเฉ‚เจฒ เจ—เฉฑเจฒเจพเจ‚ (เจ‡เฉฑเจ• เจŸเจพเจฐเจ—เฉ‡เจŸ เจจเฉ‚เฉฐ เจ•เจฟเจตเฉ‡เจ‚ เจธเจ•เฉˆเจจ เจ•เจฐเจจเจพ เจนเฉˆ, เจŸเจพเจฐเจ—เฉ‡เจŸ เจจเจพเจฒ เจ•เจฟเจตเฉ‡เจ‚ เจœเฉเฉœเจจเจพ เจนเฉˆ, เจกเจฟเจธเจ•เจจเฉˆเจ•เจŸ เจ•เจฐเจจเจพ เจนเฉˆ, เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจคเฉ‹เจ‚ เจŸเจพเจฐเจ—เฉ‡เจŸ เจเจ‚เจŸเจฐเฉ€ เจจเฉ‚เฉฐ เจ•เจฟเจตเฉ‡เจ‚ เจฎเจฟเจŸเจพเจ‰เจฃเจพ เจนเฉˆ), systemd เจฒเจˆ เจ†เจชเจฃเฉ€ เจ–เฉเจฆ เจฆเฉ€ เจฏเฉ‚เจจเจฟเจŸ เจฒเจฟเจ–เจฃเจพ เจ…เจคเฉ‡ เจ•เฉเจ เจนเฉ‹เจฐ

เจฎเฉˆเจ‚ เจ‰เจฎเฉ€เจฆ เจ•เจฐเจฆเจพ เจนเจพเจ‚ เจ•เจฟ เจญเจพเจตเฉ‡เจ‚ เจคเฉเจธเฉ€เจ‚ เจ‡เจธ เจชเฉ‚เจฐเฉ‡ เจชเฉเจฐเจฏเฉ‹เจ— เจจเฉ‚เฉฐ เจชเฉ‚เจฐเฉ€ เจคเจฐเฉเจนเจพเจ‚ เจจเจนเฉ€เจ‚ เจฆเฉเจนเจฐเจพเจ‰เจ‚เจฆเฉ‡ เจนเฉ‹, เจ˜เฉฑเจŸเฉ‹ เจ˜เฉฑเจŸ เจ‡เจธ เจฒเฉ‡เจ– เจตเจฟเฉฑเจšเฉ‹เจ‚ เจ•เฉเจ เจคเฉเจนเจพเจกเฉ‡ เจฒเจˆ เจฒเจพเจญเจฆเจพเจ‡เจ• เจนเฉ‹เจตเฉ‡เจ—เจพ.

เจธเจฐเฉ‹เจค: www.habr.com

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹