CTDB, GlusterFS рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕реНрдХреЗрд▓реЗрдмрд▓ рдлреЙрд▓реНрдЯ-рдЯреЙрд▓рд░реЗрдВрдЯ рдлрд╝рд╛рдЗрд▓ рд╕реЗрд╡рд╛

рдпрд╣ рдЖрд▓реЗрдЦ рдПрдХ рд╕реНрдХреЗрд▓реЗрдмрд▓ рдлреЙрд▓реНрдЯ-рдЯреЙрд▓рд░реЗрдВрдЯ рдлрд╝рд╛рдЗрд▓ рд╕реНрдЯреЛрд░реЗрдЬ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдЪрд░рдг-рджрд░-рдЪрд░рдг рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рд╕рд╛рдВрдмрд╛, рдПрдирдПрдлрдПрд╕ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдПрдХ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдЬреЛ рдлрд╝рд╛рдЗрд▓ рдЧреЗрдВрджреЛрдВ рдХреЛ рд╕рд╣реЗрдЬрдиреЗ рдФрд░ рд╕реНрдХреЗрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реАрдзреЗ рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реЛрдЧрд╛, рд╣рдо GlusterFS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд╛рдлреА рд╣рдж рддрдХ рд╣рдмреНрд░реЛрд╕реИрдХреНрд╡рд┐рдЯреА рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдЪреВрдВрдХрд┐ GlusterFS Red Hat рд╕реНрдЯреЛрд░реЗрдЬ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ RH - рд╕рд┐рд╕реНрдЯрдо рдХреА рддрд░рд╣ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред



рдпреЗ рд╕реЗрд╡рд╛рдПрдВ рдХреИрд╕реЗ рд╕рд╣рднрд╛рдЧрд┐рддрд╛ рдХрд░рддреА рд╣реИрдВ?

GlusterFS

рдореИрдВ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕рд╛рдЗрдЯ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП рдЧрдП рд╕рдВрд╕реНрдХрд░рдг 3.3.1, рдЖрд░рдкреАрдПрдо-рдХреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рд╡реЙрд▓реНрдпреВрдо рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдХреНрд▓рд╛рдЗрдВрдЯ рдЗрд╕реЗ рдХрдИ рддрд░реАрдХреЛрдВ рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИ:

рд╣рдо рдкрд╣рд▓реЗ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЧреНрд░рд╛рд╣рдХ рд╕рднреА рд╕рд░реНрд╡рд░реЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдмрдВрдз рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕рд░реНрд╡рд░ рдХреА рд╡рд┐рдлрд▓рддрд╛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЬрд┐рд╕ рдкрд░ рд╣рдо рдЖрд░реЛрд╣рд┐рдд рдереЗ, рд╣рдореЗрдВ рдЙрддреНрдкрд╛рджрди рд╕рд░реНрд╡рд░ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ:


CTDB

рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ рдЙрддреНрдХреГрд╖реНрдЯ рдпрд╛рдВрддреНрд░рд┐рдХреА рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдореИрдВ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ LVS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдХреНрд▓рд╕реНрдЯрд░ рдкрд░ рд▓реЛрдб рд╕рдВрддреБрд▓рди рдХреЗрд╡рд▓ NAT рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рд░рд╛рдЙрдВрдб рд░реЙрдмрд┐рди рдбреАрдПрдирдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдорд╛рдирдХ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рд╣реИрдВ, рд╕рд╛рде рд╣реА рдПрд╕рдПрдордмреА, рдПрдирдПрдлрдПрд╕:
# yum install ctdb samba nfs-utils cifs-utils

рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ

рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 2 рдиреЛрдб рд╣реИрдВ:
gluster1, 192.168.122.100
gluster2, 192.168.122.101

рдЕрднреА рднреА рдХреБрдЫ рдРрд╕реЗ IP рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдлреЙрд▓реНрдЯ рдЯреЙрд▓рд░реЗрдВрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВрдЧреЗ - рд╕рд░реНрд╡рд░ рдХреЗ рдмреАрдЪ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд░реЗрдВрдЧреЗред
192.168.122.200
192.168.122.201

рдбреЗрдЯрд╛ рдбреЛрдореЗрди рдХреЗ рд▓рд┐рдП RR DNS рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

; zone file fragment
data. 86400 IN A 192.168.122.200
data. 86400 IN A 192.168.122.201

рдореИрдВ GlusterFS рдХреЗ рд▓рд┐рдП рд╡реЙрд▓реНрдпреВрдо рдмрдирд╛рдиреЗ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдКрдВрдЧрд╛ред рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рд╣рдореЗрдВ рдПрдХ рд╡рд┐рддрд░рд┐рдд рдкреНрд░рддрд┐рдХреГрддрд┐ рд╡рд┐рднрд╛рдЬрди (рд╡рд┐рддрд░рд┐рдд + рдкреНрд░рддрд┐рдХреГрддрд┐ рд╡реЙрд▓реНрдпреВрдо) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЪрд▓реЛ рдЗрд╕реЗ smb рдХрд╣рддреЗ рд╣реИрдВред рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдиреЛрдб рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдорд╛рдЙрдВрдЯ рдХрд░реЗрдВ:

# mount.glusterfs gluster1:smb /mnt/glustersmb

рдкреНрд░рддреНрдпреЗрдХ рд╕рд░реНрд╡рд░ рдПрдХ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╣реЛрд╕реНрдЯрдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред / Etc / fstab рдореЗрдВ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рд▓рд┐рдЦрдирд╛ рди рднреВрд▓реЗрдВред
рдЕрдм рд╕рд╛рдВрдмрд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди (рдкреНрд░рддреНрдпреЗрдХ рд╕рд░реНрд╡рд░ рдкрд░) рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВред

# vim /etc/samba/smb.conf
...
[global]
# рдореБрдЦреНрдп рдкреИрд░рд╛рдореАрдЯрд░, рдХреНрд▓рд╕реНрдЯрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред
clustering = yes
# рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░, рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ (рдХрд╛рдо рдХреЗ рдпрд╛рдВрддреНрд░рд┐рдХреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рд┐рдВрдХ рджреЗрдЦреЗрдВ)
idmap backend = tdb2
рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде # рдлрд╝реЛрд▓реНрдбрд░
private dir = /mnt/glustersmb/lock

рдФрд░ рд╡рд╣рд╛рдВ рд╣рдо рдЦреБрдж рдЧреЗрдВрджреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:
[pub]
path = /mnt/glustersmb/lock
browseable = YES
force user = smbcli
force group = smbcli
writable = yes
guest ok = yes
guest account = smbcli
guest only = yes

рдлрд╝реЛрд▓реНрдбрд░ рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╣реЛрдЧрд╛, рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рдмрд┐рдирд╛ smbcli рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рдкрд╣реБрдВрдЪред рд╣рдо рдЗрд╕реЗ рдмрд╛рдж рдореЗрдВ рдмрдирд╛рдПрдВрдЧреЗ рдФрд░ рдЕрдзрд┐рдХрд╛рд░ рд╕реМрдВрдкреЗрдВрдЧреЗред
рдЕрдм рд╕рд░реНрд╡рд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдкрд░ рд╣рдо рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдХреБрдЫ CTDB рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд░рдЦреЗрдВрдЧреЗ

# mkdir /mnt/glustersmb/lock
рдФрд░ рдлрд╝рд╛рдЗрд▓ рдЬреЛрдбрд╝реЗрдВ:
# touch /mnt/glustersmb/lock/lockfile

рдкреНрд░рддреНрдпреЗрдХ рд╕рд░реНрд╡рд░ рдкрд░ CTDB рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдирд┐рдореНрди рдХреЗ рд▓рд┐рдП рдХрдо рд╣реИ:
# vim /etc/sysconfig/ctdb
CTDB_RECOVERY_LOCK=/mnt/glustersmb/lock/lockfile
CTDB_PUBLIC_ADDRESSES=/etc/ctdb/public_addresses
CTDB_MANAGES_SAMBA=yes
CTDB_NODES=/etc/ctdb/nodes
CTDB_MANAGES_NFS=yes
# рдПрдХ рдлрд╝рд╛рдЗрд▓ рдЬреЛ рд╣рд░ рдмрд╛рд░ CTDB рдХреНрд▓рд╕реНрдЯрд░ рдиреЛрдб рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ, рдЕрдкрдиреА рд╕реНрдерд┐рддрд┐ рдмрджрд▓рддреА рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдкрддреНрд░ рднреЗрдЬреЗрдВ)
CTDB_NOTIFY_SCRIPT=/etc/ctdb/notify.sh

рд╣рдо рдЕрдкрдиреЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡рд┐рдЬреНрдЮрд╛рдкрдиреЛрдВ (рдкреНрд░рддреНрдпреЗрдХ рд╕рд░реНрд╡рд░ рдкрд░) рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддреЗ рд╣реИрдВ:
# vim /etc/ctdb/public_addesses
192.168.122.200/24 eth0
192.168.122.201/24 eth0

CTDB рдХреНрд▓рд╕реНрдЯрд░ рдХреЗ рдиреЛрдбреНрд╕ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ (рдкреНрд░рддреНрдпреЗрдХ рд╕рд░реНрд╡рд░ рдкрд░) :
# vim /etc/ctdb/nodes
192.168.122.100
192.168.122.101

рдореИрдВ SElinux рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рддрд╛ рд╣реВрдВ, IPtables рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреЗ рд╣реИрдВ (рдмреЗрд╢рдХ, рдкреНрд░рддреНрдпреЗрдХ рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП):
# vim /etc/sysconfig/iptables
-A INPUT -p tcp --dport 4379 -j ctdb
-A INPUT -p udp --dport 4379 -j ctdb
-A INPUT -p tcp -m multiport --ports 137:139,445 -m comment --comment "SAMBA" -j SMB
-A INPUT -p udp -m multiport --ports 137:139,445 -m comment --comment "SAMBA" -j SMB
-A INPUT -p tcp -m multiport --ports 111,2049,595:599 -j NFS
-A INPUT -p udp -m multiport --ports 111,2049,595:599 -j NFS
-A INPUT -p tcp -m tcp --dport 24007:24220 -m comment --comment "Gluster daemon" -j ACCEPT
-A INPUT -p tcp -m tcp --dport 38465:38667 -m comment --comment "Gluster daemon(nfs ports)" -j ACCEPT
# рдЬрдВрдЬреАрд░реЛрдВ рдХреЗ рдирд╛рдо рдХреЗ рдмрдЬрд╛рдп, рдЖрдк рдмрд╕ ACCEPT рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╡рд╛рдкрд╕ рд╕рд╛рдВрдмрд╛ рдФрд░ smbcli рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ (рдкреНрд░рддреНрдпреЗрдХ рд╕рд░реНрд╡рд░ рдкрд░) :
# useradd smbcli
# chown -R smbcli.smbcli /mnt/glustersmb/pub

рдкрд╛рд░рдорд╛рд░реНрдерд┐рдХ рд╕реНрдкрд░реНрд╢:
# chkconfig smbd off
# chkconfig ctdb on
# service ctdb start

рдЕрдм рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ
# ctdb status
Number of nodes:2
pnn:0 192.168.122.100 OK (THIS NODE)
pnn:1 192.168.122.101 OK
Generation:1112747960
Size:2
hash:0 lmaster:0
hash:1 lmaster:1
Recovery mode:NORMAL (0)
Recovery master:0

рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдорд╛рдЗрдЧреНрд░реЗрдЯрд┐рдВрдЧ рдЖрдИрдкреА рдФрд░ рд╕рд░реНрд╡рд░ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕реВрдЪреА рдХрдорд╛рдВрдб рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛рддреА рд╣реИ
# ctdb ip
Public IPs on node 0
192.168.122.200 node[1] active[] available[eth0] configured[eth0]
192.168.122.201 node[0] active[eth0] available[eth0] configured[eth0]

рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдПрд╕рдПрдордмреА рдпрд╛ рдПрдирдПрдлрдПрд╕ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдорд╛рдЙрдВрдЯ рдХрд░рддреЗ рд╣реИрдВ:
# mount.cifs data:smb /mnt
# mount -o mountproto=tcp,async -t nfs data:smb /mnt

рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЕрдиреБрднрд╡ рд╕реЗ рдореИрдВ рдпрд╣ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдореИрдВ рдЕрднреА рднреА рдиреЗрдЯрд╡рд░реНрдХ рдбреНрд░реЙрдк рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдкрд░рд┐рдгрд╛рдо рдмрд╣реБрдд рд╣реА рд╕рд╣рди рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИред рдПрдХ рдЯреВрдЯрд╛ рдХрдиреЗрдХреНрд╢рди рдореБрд╢реНрдХрд┐рд▓ рд╕реЗ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИред рд╕рднреА рдмрддрд╛рддреЗ рд╣реИрдВ рдПрдВрдбреНрд░реАрдХрд┐рд░реЛрд╡
рд╢реИрдХреНрд╖рд┐рдХ рдХрд╛рд░реНрдпрдХреНрд░рдо
рдПрдХ рдиреЛрдб рдЬрд┐рд╕рдиреЗ рджреВрд╕рд░реЗ рдХреЗ рдЖрдИрдкреА рдкрддреЗ рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ, рдХреЗрд╡рд▓ рд╡рд╣реА рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рдкреБрд░рд╛рдиреЗ рдЯреАрд╕реАрдкреА рдХрдиреЗрдХреНрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рдереЗ рдФрд░ рдХрдиреЗрдХреНрд╢рди рдХреЗ "рдЯреАрд╕реАрдкреА рд╕реНрдХреНрд╡реЗрдВрд╕ рдирдВрдмрд░" рдХреЛ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВред рддрджрдиреБрд╕рд╛рд░, рдпрд╣ рдЙрдиреНрд╣реЗрдВ рдЬрд╛рд░реА рдирд╣реАрдВ рд░рдЦ рд╕рдХрддрд╛ рд╣реИред рдХреНрд▓рд╛рдЗрдВрдЯ рдХреА рддрд░рд╣, рдпрд╣ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ рдХрдиреЗрдХреНрд╢рди рдЕрдм рджреВрд╕рд░реЗ рдиреЛрдб рд╕реЗ рдмрдиреЗ рд╣реИрдВред

рдХрдиреЗрдХреНрд╢рди рдХреЛ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рд╕реЗ рдЬреБрдбрд╝реА рджреЗрд░реА рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рддрдХрдиреАрдХ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЯреАрд╕реАрдкреА рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдХрд╛рдордХрд╛рдЬ рдХреЗ рдмреБрдирд┐рдпрд╛рджреА рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЛ рд╕рдордЭрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред

рдПрдХ рдЖрдИрдкреА рдкрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдирдпрд╛ рдиреЛрдб рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдПрд╕реАрдХреЗ рдзреНрд╡рдЬ рдХреЗ рд╕рд╛рде рдПрдХ рдкреИрдХреЗрдЯ рднреЗрдЬрддрд╛ рд╣реИ рдФрд░ рд╢реВрдиреНрдп рдХреЗ рдмрд░рд╛рдмрд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЧрд▓рдд "рд╕реНрдХреНрд╡реЗрдВрд╕ рд╕рдВрдЦреНрдпрд╛" рд╣реИред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдХреНрд▓рд╛рдЗрдВрдЯ, рдЯреАрд╕реАрдкреА рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдирд┐рдпрдореЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рд╕рд╣реА "рд╕реНрдХреНрд╡реЗрд░ рд╕рдВрдЦреНрдпрд╛" рдХреЗ рд╕рд╛рде рдПрд╕реАрдХреЗ рдЙрддреНрддрд░ рдкреИрдХреЗрдЯ рдХреЛ рд╡рд╛рдкрд╕ рднреЗрдЬрддрд╛ рд╣реИред рд╕рд╣реА "рд╕реНрдХреНрд╡реЗрдиреНрд╕ рдирдВрдмрд░" рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдиреЛрдб RST рдзреНрд╡рдЬ рдФрд░ рдЗрд╕ "рд╕реНрдХреНрд╡реЗрдВрд╕ рдирдВрдмрд░" рдХреЗ рд╕рд╛рде рдПрдХ рдкреИрдХреЗрдЯ рдмрдирд╛рддрд╛ рд╣реИред рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдкрд░, рдХреНрд▓рд╛рдЗрдВрдЯ рддреБрд░рдВрдд рдХрдиреЗрдХреНрд╢рди рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рддрд╛ рд╣реИред


рдПрдХ рдЕрдЪреНрдЫрд╛ рдХреЛрдбрд┐рдВрдЧ рд╣реИ!

Source: https://habr.com/ru/post/In194970/


All Articles