Bir keçidin hekayəsi

Bir keçidin hekayəsi
Yerli şəbəkə birləşməmizdə altı cüt Arista DCS-7050CX3-32S açarı və bir cüt Brocade VDX 6940-36Q açarı var idi. Bu şəbəkədəki Brocade açarları bizi həddən artıq sıxışdırmır, onlar işləyir və öz funksiyalarını yerinə yetirirlər, lakin biz bəzi hərəkətlərin tam avtomatlaşdırılmasını hazırlayırdıq və bu keçidlərdə bu imkanlarımız yox idi. Mən də növbəti 40-100 il üçün ehtiyat yaratmaq üçün 2GE interfeyslərindən 3GE istifadə imkanlarına keçmək istədim. Beləliklə, biz Brocade-i Arista ilə dəyişməyə qərar verdik.

Bu açarlar hər bir məlumat mərkəzi üçün LAN toplama açarlarıdır. Dağıtım açarları (aqreqasiyanın ikinci səviyyəsi) onlara birbaşa bağlıdır, onlar artıq Top-of-Rack yerli şəbəkə açarlarını serverləri olan raflarda yığırlar.

Bir keçidin hekayəsi
Hər bir server bir və ya iki giriş açarına qoşulur. Giriş açarları bir cüt paylayıcı açara qoşulur (iki paylayıcı açar və giriş keçidindən müxtəlif paylayıcı açarlara iki fiziki keçid ehtiyat üçün istifadə olunur).

Hər bir server öz müştərisi tərəfindən istifadə edilə bilər, ona görə də müştəriyə ayrıca VLAN ayrılır. Eyni VLAN daha sonra bu müştərinin başqa serverində istənilən rafda qeydə alınır. Məlumat mərkəzi bir neçə belə cərgədən (POD) ibarətdir, hər bir rəf sırasının öz paylayıcı açarları var. Sonra bu paylayıcı açarlar aqreqasiya açarlarına birləşdirilir.

Bir keçidin hekayəsi
Müştərilər istənilən cərgədə server sifariş edə bilərlər; serverin müəyyən bir rafda müəyyən bir sıraya ayrılacağını və ya quraşdırılacağını əvvəlcədən proqnozlaşdırmaq mümkün deyil, buna görə də hər bir məlumat mərkəzində toplama keçidlərində təxminən 2500 VLAN var.

DCI (Data-Center Interconnect) üçün avadanlıq aqreqasiya açarlarına qoşulmuşdur. O, L2 bağlantısı (başqa məlumat mərkəzinə VXLAN tunelini təşkil edən bir cüt açar) və ya L3 bağlantısı (iki MPLS marşrutlaşdırıcısı) üçün nəzərdə tutula bilər.

Bir keçidin hekayəsi
Artıq yazdığım kimi, avadanlıqda xidmətlərin konfiqurasiyasının avtomatlaşdırılması proseslərini bir məlumat mərkəzində birləşdirmək üçün mərkəzi toplama açarlarını dəyişdirmək lazım idi. Mövcud olanların yanında yeni açarlar quraşdırdıq, onları MLAG cütlüyünə birləşdirdik və işə hazırlaşmağa başladıq. Onlar dərhal mövcud aqreqasiya açarlarına qoşuldular ki, bütün müştəri VLAN-larında ümumi L2 domeninə sahib oldular.

Dövrə təfərrüatları

Xüsusiyyətlər üçün köhnə birləşmə açarlarını adlandıraq A1 и A2, yeni - N1 и N2. Təsəvvür edək ki, içəridə POD 1 и POD 4 bir müştərinin serverləri yerləşdirilir C1,Müştəri VLAN mavi rənglə göstərilmişdir. Bu müştəri L2 əlaqə xidmətindən başqa məlumat mərkəzi ilə istifadə edir, ona görə də onun VLAN-ı bir cüt VXLAN açarı ilə qidalanır.

Müştəri C2 serverləri yerləşdirir POD 2 и POD 3,Müştəri VLAN tünd yaşıl rənglə işarələnmişdir. Bu müştəri başqa məlumat mərkəzi ilə də əlaqə xidmətindən istifadə edir, lakin L3, ona görə də onun VLAN-ı bir cüt L3VPN marşrutlaşdırıcısına qidalanır.

Bir keçidin hekayəsi
Əvəzetmə işinin hansı mərhələlərində nə baş verdiyini, rabitə kəsilməsinin harada baş verdiyini və onun müddəti nə ola biləcəyini anlamaq üçün bizə müştəri VLAN-larına ehtiyacımız var. STP protokolu bu sxemdə istifadə edilmir, çünki bu halda onun üçün ağacın eni böyükdür və protokolun yaxınlaşması cihazların və onların arasındakı əlaqələrin sayı ilə eksponent olaraq artır.

İkiqat keçidlə birləşdirilən bütün qurğular yığın, MLAG cütü və ya VCS Ethernet parçasını təşkil edir. Bir cüt L3VPN marşrutlaşdırıcısı üçün bu cür texnologiyalar istifadə edilmir, çünki L2 ehtiyatına ehtiyac yoxdur; onların bir-biri ilə birləşmə açarları vasitəsilə L2 bağlantısı olması kifayətdir.

İcra variantları

Gələcək hadisələrin variantlarını təhlil edərkən biz başa düşdük ki, bu işi həyata keçirməyin bir neçə yolu var. Bütün yerli şəbəkədə qlobal fasilədən şəbəkənin hissələrində sözün həqiqi mənasında 1-2 saniyəlik kiçik fasilələrə qədər.

Şəbəkə, dayan! Anahtarlar, onları dəyişdirin!

Ən asan yol, əlbəttə ki, bütün POD-larda və bütün DCI xidmətlərində qlobal rabitə fasiləsi elan etmək və keçidlərdən bütün keçidləri dəyişməkdir. А açarlara N.

Bir keçidin hekayəsi
Kesintidən başqa, vaxtı etibarlı şəkildə təxmin edə bilmədiyimiz (bəli, biz bağlantıların sayını bilirik, lakin bir şeyin neçə dəfə səhv olacağını bilmirik - qırıq yamaq kabelindən və ya zədələnmiş konnektordan nasaz port və ya ötürücüyə qədər. ), köhnə A açarlarına qoşulmuş yamaq kordlarının, DAC, AOC uzunluğunun onları yeni N açarlarına çatdırmaq üçün kifayət edib-etməyəcəyini əvvəlcədən proqnozlaşdıra bilmərik, baxmayaraq ki, onların yanında dayanır, lakin hələ də bir az yan tərəfi və eyni ötürücülərin Brocade keçidlərindən Arista keçidlərinə /DAC/AOC-nun işləyəcəyini yoxlayın.

Və bütün bunlar müştərilərin şiddətli təzyiqi və texniki dəstək şəraitində (“Nataşa, qalx! Nataşa, orada hər şey işləmir! Nataşa, biz artıq texniki dəstəyə yazmışıq, düzünü desəm! Nataşa, artıq hər şeyi atıblar. ! Nataşa, daha neçəmiz var ki, işləməyəcək? Nataşa, nə vaxt işləyəcək?!"). Əvvəlcədən elan edilmiş fasiləyə və müştərilərə bildirişlərə baxmayaraq, belə bir zamanda sorğu axınına zəmanət verilir.

Dayan, 1-2-3-4!

Qlobal fasilə elan etməsək, POD və DCI xidmətləri üçün bir sıra kiçik rabitə fasilələri olsa nə olar. İlk fasilə zamanı açarlara keçin N yalnız POD 1, ikincidə - bir neçə gündə - POD 2, sonra bir neçə gün daha POD 3Əlavə POD 4...[N], sonra VXLAN açarları və sonra L3VPN marşrutlaşdırıcıları.

Bir keçidin hekayəsi
Kommutasiya işinin bu şəkildə təşkili ilə biz birdəfəlik işin mürəkkəbliyini azaldırıq və birdən bir şey səhv olarsa problemləri həll etmək üçün vaxtımızı artırırıq. POD 1 keçiddən sonra digər POD və DCI-lərə bağlı qalır. Lakin işin özü uzun müddət davam edir, məlumat mərkəzində bu iş zamanı bir mühəndisdən kommutasiyanı fiziki olaraq yerinə yetirmək tələb olunur və iş zamanı (və bu cür işlər, bir qayda olaraq, gecə saat 2-dən həyata keçirilir) səhər 5-ə qədər), kifayət qədər yüksək səviyyəli ixtisaslarda onlayn şəbəkə mühəndisinin olması tələb olunur. Ancaq sonra qısa ünsiyyət kəsilmələri alırıq; bir qayda olaraq, iş 2 dəqiqəyə qədər fasilə ilə yarım saatlıq bir fasilə ilə həyata keçirilə bilər (praktikada, avadanlıqların gözlənilən davranışı ilə tez-tez 20-30 saniyə).

Müştəri nümunəsində C1 və ya müştəri C2 ən azı üç dəfə rabitə kəsilməsi ilə iş barədə xəbərdarlıq etməli olacaqsınız - ilk dəfə serverlərindən birinin yerləşdiyi bir POD-da iş aparmaq, ikinci dəfə - ikinci və üçüncü dəfə - nə vaxt DCI xidmətləri üçün kommutasiya avadanlığı.

Birləşdirilmiş rabitə kanallarının dəyişdirilməsi

Niyə avadanlıqların gözlənilən davranışından və rabitə kəsilməsini minimuma endirməklə birləşdirilmiş kanalların necə dəyişdirilə biləcəyindən danışırıq? Aşağıdakı şəkli təsəvvür edək:

Bir keçidin hekayəsi
Bağlantının bir tərəfində POD paylama açarları var - D1 и D2, onlar bir-biri ilə bir MLAG cütü meydana gətirirlər (stack, VCS zavodu, vPC cütü), digər tərəfdən iki əlaqə var - Link 1 и Link 2 - köhnə aqreqasiya açarlarının MLAG cütlüyünə daxildir А. Keçid tərəfində D adı ilə ümumiləşdirilmiş interfeys Port-kanal A, aqreqasiya açarlarının tərəfində А - adı ilə ümumiləşdirilmiş interfeys Port-kanal D.

Birləşdirilmiş interfeyslər öz işlərində LACP-dən istifadə edirlər, yəni hər iki tərəfdəki açarlar bağlantıların olduğundan əmin olmaq üçün hər iki linkdə LACPDU paketlərini mütəmadi olaraq dəyişdirirlər:

  • işçilər;
  • uzaq tərəfdə bir cüt cihaza daxildir.

Paketləri dəyişdirərkən, paket dəyəri daşıyır sistem identifikatoru, bu bağlantıların daxil olduğu cihazı göstərir. MLAG cütü üçün (yığın, zavod və s.) yığılmış interfeysi təşkil edən cihazlar üçün sistem id dəyəri eynidir. Keçid D1 ünvanına göndərir Link 1 dəyər sistem identifikatoru D, və keçin D2 ünvanına göndərir Link 2 dəyər sistem identifikatoru D.

Keçidlər A1 и A2 bir Po D interfeysi üzərindən alınan LACPDU paketlərini təhlil edin və onlarda sistem identifikatorunun uyğun olub olmadığını yoxlayın. Əgər hansısa keçid vasitəsilə alınan sistem id-si birdən fərqlənirsə cari əməliyyat dəyərindən, sonra vəziyyət düzələnə qədər bu əlaqə yığılmış interfeysdən silinir. İndi keçid tərəfimizdə D LACP tərəfdaşından cari sistem id dəyəri - A, və keçid tərəfində А — LACP tərəfdaşından cari sistem id dəyəri — D.

Birləşdirilmiş interfeysi dəyişmək lazımdırsa, bunu iki fərqli şəkildə edə bilərik:

Metod 1 - Sadə
A açarlarından hər iki keçidi deaktiv edin. Bu halda, yığılmış kanal işləmir.

Bir keçidin hekayəsi
Hər iki keçidi bir-bir açarlara birləşdirin N, sonra LACP əməliyyat parametrləri yenidən müzakirə olunacaq və interfeys formalaşacaq PoD açarları üzərində N və bağlantılar üzrə dəyərlərin ötürülməsi sistem identifikatoru N.

Bir keçidin hekayəsi

Metod 2 - Fasiləni minimuma endir
Bağlantı 2-ni A2 açarından ayırın. Eyni zamanda, arasında trafik А и D sadəcə olaraq birləşdirilmiş interfeysin bir hissəsi olaraq qalacaq keçidlərdən biri üzərindən ötürülməyə davam edəcək.

Bir keçidin hekayəsi
N2 keçidi üçün Link 2-ni birləşdirin. Açarda N yığılmış interfeys artıq konfiqurasiya edilmişdir Po DN, və keçin N2 LACPDU-ya ötürməyə başlayacaq sistem identifikatoru N. Bu mərhələdə biz artıq keçidin olduğunu yoxlaya bilərik N2 üçün istifadə edilən ötürücü ilə düzgün işləyir Link 2, əlaqə portunun vəziyyətə daxil olması Up, və LACPDU-ları ötürərkən əlaqə portunda heç bir səhvin baş verməməsi.

Bir keçidin hekayəsi
Amma keçid faktı D2 ümumi interfeys üçün Po A yan tərəfdən Link 2 cari əməliyyat sistemi id A dəyərindən fərqli sistem id N dəyərini alır, açarlara icazə vermir D təqdim et Link 2 ümumi interfeysin bir hissəsidir Po A. Keçid N girə bilməz Link 2 işə salınır, çünki o, keçidin LACP partnyorundan işləmə qabiliyyətinin təsdiqini almır D2. Nəticədə trafik olur Link 2 keçmir.

İndi biz A1 açarından Link 1-i söndürürük, bununla da açarları məhrum edir А и D işləyən ümumi interfeys. Beləliklə, keçid tərəfində D interfeys üçün cari işləyən sistem id dəyəri yox olur Po A.

Bir keçidin hekayəsi
Bu, keçidlərə imkan verir D и N sistem identifikatorunu mübadilə etməyə razılaşın AN interfeyslərdə Po A и Po DN, beləliklə trafik keçid boyunca ötürülməyə başlayır Link 2. Bu vəziyyətdə fasilə, praktikada 2 saniyəyə qədərdir.

Bir keçidin hekayəsi
İndi biz asanlıqla Link 1-i N1-ə keçid edə bilərik, interfeys ehtiyatının tutumunun və səviyyəsinin bərpası Po A и Po DN. Bu keçid qoşulduqda, cari sistem id dəyəri hər iki tərəfdən dəyişmir, heç bir fasilə yoxdur.

Bir keçidin hekayəsi

Əlavə bağlantılar

Lakin keçid, keçid zamanı mühəndisin iştirakı olmadan həyata keçirilə bilər. Bunu etmək üçün əvvəlcədən paylayıcı açarlar arasında əlavə bağlantılar çəkməliyik D və yeni aqreqasiya açarları N.

Bir keçidin hekayəsi
Aqreqasiya açarları arasında yeni bağlantılar yaradırıq N və bütün POD-lar üçün paylayıcı açarlar. Bunun üçün əlavə yamaq kordlarının sifariş edilməsi və çəkilməsi və əvvəlki kimi əlavə ötürücülərin quraşdırılması tələb olunur N, və D. Biz bunu edə bilərik, çünki açarlarımızda D Hər bir POD pulsuz portlara malikdir (ya da biz onları əvvəlcədən azad edirik). Nəticədə, hər bir POD köhnə açar A və yeni N açarlarına iki keçidlə fiziki olaraq bağlanır.

Bir keçidin hekayəsi
Açarda D iki məcmu interfeys yaradıldı - Po A bağlantılarla Link 1 и Link 2Po N - bağlantılarla Link N1 и Link N2. Bu mərhələdə biz interfeyslərin və keçidlərin düzgün birləşməsini, keçidlərin hər iki ucundakı optik siqnalların səviyyələrini yoxlayırıq (açarlardan DDM məlumatı vasitəsilə), hətta yük altında olan linkin işini yoxlaya və ya vəziyyətinə nəzarət edə bilərik. bir neçə gün ərzində optik siqnallar və ötürücü temperatur.

Trafik hələ də interfeys vasitəsilə göndərilir Po A, və interfeys Po N heç bir trafik xərci yoxdur. İnterfeyslərdəki parametrlər belədir:

Interface Port-channel A
Switchport mode trunk
Switchport allowed vlan C1, C2

Interface Port-channel N
Switchport mode trunk
Switchport allowed vlan none

D açarları, bir qayda olaraq, sessiyanın yenidən konfiqurasiyasını dəstəkləyir; bu funksiyaya malik keçid modelləri istifadə olunur. Beləliklə, Po A və Po N interfeyslərinin parametrlərini bir addımda dəyişə bilərik:

Configure session
Interface Port-channel A
Switchport allowed vlan none
Interface Port-channel N
Switchport allowed vlan C1, C2
Commit

Sonra konfiqurasiya dəyişikliyi kifayət qədər tez baş verəcək və fasilə praktiki olaraq 5 saniyədən çox olmayacaq.

Bu üsul bizə bütün hazırlıq işlərini əvvəlcədən başa çatdırmağa, bütün lazımi yoxlamaları aparmağa, prosesin iştirakçıları ilə işi əlaqələndirməyə, "hər şey səhv getdiyi" zaman yaradıcılıq uçuşları olmadan işin istehsalı üçün hərəkətləri ətraflı proqnozlaşdırmağa imkan verir. ,” və əvvəlki konfiqurasiyaya qayıtmaq üçün bir planınız var. Bu plana uyğun olaraq iş kommutasiyanı fiziki olaraq həyata keçirən saytda məlumat mərkəzi mühəndisinin iştirakı olmadan şəbəkə mühəndisi tərəfindən həyata keçirilir.

Bu keçid metodu ilə vacib olan odur ki, bütün yeni bağlantılar əvvəlcədən izlənilir. Səhvlər, bağlantıların bölməyə daxil edilməsi, keçidlərin yüklənməsi - bütün lazımi məlumatlar artıq monitorinq sistemindədir və bu, artıq xəritələrdə çəkilir.

D-Day

POD

Müştərilər üçün ən az ağrılı keçid yolunu və əlavə bağlantılarla "nəsə səhv getdi" ssenarilərinə ən az meylli olanı seçdik. Beləliklə, bir neçə gecə ərzində bütün POD-ları yeni birləşmə açarlarına keçirdik.

Bir keçidin hekayəsi
Ancaq qalan yalnız DCI xidmətlərini təmin edən avadanlıqları dəyişdirməkdir.

L2

L2 bağlantısını təmin edən avadanlıq halında, biz əlavə bağlantılarla oxşar işi həyata keçirə bilmədik. Bunun ən azı iki səbəbi var:

  • VXLAN açarlarında tələb olunan sürətin pulsuz portlarının olmaması.
  • VXLAN açarlarında sessiya konfiqurasiyasını dəyişdirmə funksiyasının olmaması.

Biz yalnız yeni sistem identifikatoru cütü ilə razılaşarkən keçidləri fasilə ilə “bir-bir” dəyişdirmədik, çünki prosedurun düzgün gedəcəyinə 100% əmin deyildik və laboratoriyada bir sınaq göstərdi ki, "nəsə səhv olarsa" biz hələ də əlaqə kəsilməsi alırıq və ən pisi təkcə digər məlumat mərkəzləri ilə L2 bağlantısı olan müştərilər üçün deyil, ümumiyyətlə bu məlumat mərkəzinin bütün müştəriləri üçündür.

Biz L2 kanallarından keçidlə bağlı təbliğat işlərini vaxtından əvvəl həyata keçirdik, ona görə də VXLAN açarlarında işdən təsirlənən müştərilərin sayı bir il əvvəlkindən bir neçə dəfə az idi. Nəticədə, bir məlumat mərkəzində lokal şəbəkə xidmətlərinin normal işləməsini təmin etmək şərti ilə L2 əlaqə xidməti vasitəsilə əlaqəni kəsmək qərarına gəldik. Bundan əlavə, bu xidmət üçün SLA fasilələrlə planlaşdırılmış işlərin aparılması imkanını nəzərdə tutur.

L3

DCI xidmətlərini təşkil edərkən niyə hamıya L3VPN-ə keçməyi tövsiyə etdik? Səbəblərdən biri rabitəni kəsmədən sadəcə olaraq artıqlıq səviyyəsini N+0 səviyyəsinə endirməklə bu xidməti təmin edən marşrutlaşdırıcılardan birində iş aparmaq imkanıdır.

Gəlin xidmətin göstərilməsi sxeminə daha yaxından nəzər salaq. Bu xidmətdə L2 seqmenti müştəri serverlərindən yalnız L3VPN Selectel marşrutlaşdırıcılarına keçir. Müştəri şəbəkəsi marşrutlaşdırıcılarda dayandırılır.

Hər bir müştəri serveri, məs. S2 и S3 yuxarıdakı diaqramda öz şəxsi IP ünvanlarına sahib olun - S10.0.0.2 serverində 24/2 и S10.0.0.3 serverində 24/3. Ünvanlar 10.0.0.252/24 и 10.0.0.253/24 Selectel tərəfindən marşrutlaşdırıcılara təyin edilir L3VPN-1 и L3VPN-2, müvafiq olaraq. IP ünvanı 10.0.0.254/24 VRRP VIP ünvanıdır Selectel marşrutlaşdırıcılarında.

L3VPN xidməti haqqında ətraflı öyrənə bilərsiniz oxumaq blogumuzda.

Keçiddən əvvəl hər şey təxminən diaqramdakı kimi görünürdü:

Bir keçidin hekayəsi
İki marşrutlaşdırıcı L3VPN-1 и L3VPN-2 köhnə aqreqasiya açarına qoşulmuşdular А. VRRP VIP ünvanı 10.0.0.254 üçün master marşrutlaşdırıcıdır L3VPN-1. Bu ünvan üçün marşrutlaşdırıcıdan daha yüksək prioritetə ​​malikdir L3VPN-2.

unit 1006 {
    description C2;
    vlan-id 1006;
    family inet {       
        address 10.0.0.252/24 {
            vrrp-group 1 {
                priority 200;
                virtual-address 10.100.0.254;
                preempt {
                    hold-time 120;
                }
                accept-data;
            }
        }
    }
}

S2 serveri digər yerlərdəki serverlərlə əlaqə saxlamaq üçün şlüz 10.0.0.254-dən istifadə edir. Beləliklə, L3VPN-2 marşrutlaşdırıcısını şəbəkədən ayırmaq (əlbəttə ki, əvvəlcə MPLS domenindən ayrılıbsa) müştərinin serverlərinin əlaqəsinə təsir göstərmir. Bu nöqtədə dövrənin artıqlıq səviyyəsi sadəcə olaraq azalır.

Bir keçidin hekayəsi
Bundan sonra biz marşrutlaşdırıcını təhlükəsiz şəkildə yenidən bağlaya bilərik L3VPN-2 bir cüt açara N. Bağlantılar qoyun, ötürücüləri dəyişdirin. Müştəri xidmətlərinin işləməsindən asılı olan marşrutlaşdırıcının məntiqi interfeysləri hər şeyin lazım olduğu kimi işlədiyi təsdiqlənənə qədər söndürülür.

Bağlantıları, ötürücüləri, siqnal səviyyələrini və interfeyslərdə səhv səviyyələrini yoxladıqdan sonra marşrutlaşdırıcı işə salınır, lakin artıq yeni bir cüt keçidə qoşulur.

Bir keçidin hekayəsi
Sonra, L3VPN-1 marşrutlaşdırıcısının VRRP prioritetini aşağı salırıq və VIP ünvanı 10.0.0.254 L3VPN-2 marşrutlaşdırıcısına köçürülür. Bu işlər də rabitə kəsilmədən həyata keçirilir.

Bir keçidin hekayəsi
10.0.0.254 VIP ünvanının marşrutlaşdırıcıya ötürülməsi L3VPN-2 marşrutlaşdırıcını söndürməyə imkan verir L3VPN-1 müştəri üçün rabitə kəsilmədən və onu yeni bir cüt birləşmə açarına qoşun N.

Bir keçidin hekayəsi
VRRP VIP-nin L3VPN-1 marşrutlaşdırıcısına qaytarılıb-qaytarılmaması başqa bir sualdır və geri qaytarılsa belə, əlaqəni kəsmədən həyata keçirilir.

Ümumi

Bütün bu addımlardan sonra biz faktiki olaraq məlumat mərkəzlərimizdən birində aqreqasiya açarlarını dəyişdirdik, eyni zamanda müştərilərimiz üçün maneələri minimuma endirdik.

Bir keçidin hekayəsi
Yalnız sökülməsi qalır. Köhnə açarların sökülməsi, A və D açarları arasında köhnə keçidlərin sökülməsi, bu keçidlərdən ötürücülərin sökülməsi, monitorinqin korreksiyası, sənədləşmədə və monitorinqdə şəbəkə diaqramlarının düzəldilməsi.

Biz digər layihələrdə keçiddən sonra qalan açarlar, ötürücülər, yamaq kordları, AOC, DAC-dan və ya digər oxşar keçid üçün istifadə edə bilərik.

"Nataşa, hər şeyi dəyişdirdik!"

Mənbə: www.habr.com

Добавить комментарий