د MySQL لپاره آرکیسټرټر: ولې تاسو نشئ کولی د دې پرته د غلطۍ زغمونکې پروژه جوړه کړئ

هره لویه پروژه د یو څو سرورونو سره پیل کیږي. په لومړي سر کې یو DB سرور و، بیا یې د لوستلو اندازه کولو لپاره غلامان اضافه کړل. او بیا - ودریږئ! يو بادار شته خو غلامان ډېر دي. که یو غلام پریږدي، نو هرڅه به سم وي، مګر که ماسټر پریږدي، دا به خراب وي: د وخت وخت، مدیران هڅه کوي سرور پورته کړي. چې څه کول پکار دي؟ یو ماسټر خوندي کړئ. زما همکار پاول لا دمخه پدې اړه لیکلي مقاله، زه به یې تکرار نه کړم. پرځای یې، زه به تاسو ته ووایم چې ولې تاسو یقینا د MySQL لپاره آرکیسټرټر ته اړتیا لرئ!

راځئ چې د اصلي پوښتنې سره پیل وکړو: "څنګه به موږ کوډ نوي ماشین ته واړوو کله چې ماسټر پریږدي؟"

  • زه د VIP (مجازی IP) سره سکیم خورا خوښوم ، موږ به یې لاندې په اړه وغږیږو. دا خورا ساده او خورا څرګند دی ، که څه هم دا یو څرګند محدودیت لري: هغه ماسټر چې موږ به یې خوندي کړو باید د نوي ماشین سره د L2 برخې کې وي ، دا دی ، موږ کولی شو د دوهم DC په اړه هیر کړو. او، په دوستانه توګه، که تاسو دا قواعد تعقیب کړئ چې لوی L2 بد دی، ځکه چې L2 یوازې په هر ریک کې دی، او L3 د ریکونو ترمنځ دی، او دا ډول سکیم حتی ډیر محدودیتونه لري.
  • تاسو کولی شئ په کوډ کې د DNS نوم ولیکئ او د /etc/hosts له لارې یې حل کړئ. په حقیقت کې، هیڅ پریکړه به نه وي. د سکیم ګټه: د لومړي میتود هیڅ محدودیت شتون نلري ، دا دا دی چې د کراس - DC تنظیم کول ممکن دي. مګر بیا روښانه پوښتنه راپورته کیږي: موږ څومره ژر کولی شو بدلون د Puppet-Ansible له لارې /etc/hosts ته وړاندې کړو؟
  • تاسو کولی شئ دوهم میتود یو څه بدل کړئ: په ټولو ویب سرورونو کې د کیشینګ DNS نصب کړئ ، د کوم له لارې چې کوډ به ماسټر ډیټابیس ته لاړ شي. تاسو کولی شئ په DNS کې د دې ننوتلو لپاره TTL 60 ترتیب کړئ. داسې ښکاري چې که په سمه توګه پلي شي، طریقه ښه ده.
  • د خدماتو کشف سره یو سکیم، د قونسل او داسې نورو کارولو معنی لري.
  • سره یو په زړه پورې انتخاب پراکسي ایس کیو ایل. تاسو اړتیا لرئ چې ټول ټرافیک د پراکسی ایس کیو ایل له لارې MySQL ته واستوئ؛ ProxySQL پخپله کولی شي معلومه کړي چې څوک ماسټر دی. په هرصورت، تاسو کولی شئ د دې محصول کارولو لپاره د یو انتخاب په اړه ولولئ زما مقالې.

د آرکیسټرټر لیکوال ، په ګیتوب کې کار کوي ، لومړی یې د VIP سره لومړی سکیم پلي کړ ، او بیا یې د قونسل سره سکیم ته بدل کړ.

عادي زیربنا ترتیب:

د MySQL لپاره آرکیسټرټر: ولې تاسو نشئ کولی د دې پرته د غلطۍ زغمونکې پروژه جوړه کړئ
زه به سمدلاسه هغه څرګند حالتونه بیان کړم چې باید په پام کې ونیول شي:

  • د VIP پته باید په هر سرور کې په ترتیب کې ثبت نشي. راځئ چې یو حالت تصور کړو: ماسټر ریبوټ شو، او د بارولو په وخت کې، آرکیسټرټر د ناکامۍ حالت ته لاړ او یو له غلامانو څخه یې ماسټر جوړ کړ؛ بیا زوړ ماسټر راپورته شو ، او اوس VIP په دوه موټرو کې دی. دا بد دی.
  • د آرکیسټراټر لپاره، تاسو اړتیا لرئ چې زاړه ماسټر او نوي ماسټر ته زنګ وهلو لپاره سکریپټ ولیکئ. په زاړه ماسټر کې تاسو اړتیا لرئ ifdown چل کړئ ، او په نوي ماسټر کې - ifup vip. دا به ښه وي چې پدې سکریپټ کې دا هم شامل کړئ چې د ناکامۍ په حالت کې ، د زاړه ماسټر سویچ بندر په ساده ډول د هرډول تقسیم څخه مخنیوي لپاره بند شوی.
  • وروسته له دې چې آرکیسټرټر ستاسو سکریپټ ته زنګ وواهه ترڅو لومړی VIP لرې کړئ او/یا په سویچ کې بندر ړنګ کړئ ، او بیا په نوي ماسټر کې د VIP راپورته کولو سکریپټ ته زنګ ووهئ ، د آرپینګ کمانډ کارول مه هیروئ ترڅو هرڅوک ووایی چې نوی VIP اوس دی. دلته.
  • ټول غلامان باید یوازې لوستل = 1 ولري، او هرڅومره ژر چې تاسو مالک ته غلام ته وده ورکړئ، دا باید یوازې لوستل = 0 ولري.
  • دا مه هېروئ چې کوم غلام چې موږ د دې لپاره غوره کړی دی هغه مالک کیدی شي (آرکیسټرټر یو بشپړ لومړیتوب میکانیزم لري چې کوم غلام په لومړي ځای کې د نوي بادار لپاره د نوماند په توګه په پام کې نیسي ، کوم په دوهم ځای کې او کوم غلام باید په هیڅ حالت کې د ماسټر نه ټاکل کیږي). که غلام بادار شي، نو د غلام بار به پر هغه پاتې شي او د بادار بار به اضافه شي، دا باید په پام کې ونیول شي.

تاسو ولې آرکیسټرټر ته اړتیا لرئ که تاسو نه لرئ؟

  • آرکیسټرټر یو ډیر د کارونکي دوستانه ګرافیکي انٹرفیس لري چې ټوله ټوپولوژي ښیې (لاندې سکرین شاټ وګورئ).
  • آرکسټرټر کولی شي تعقیب کړي چې کوم غلامان وروسته پاتې دي، او چیرې چې نقل په عمومي ډول مات شوی (موږ د ایس ایم ایس لیږلو لپاره د آرکسټرټر سره سکریپټونه لرو).
  • آرکیسټراټر تاسو ته وايي چې کوم غلامان د GTID خطا لري.

د آرکیسټرټر انٹرفیس:

د MySQL لپاره آرکیسټرټر: ولې تاسو نشئ کولی د دې پرته د غلطۍ زغمونکې پروژه جوړه کړئ
د GTID تېروتنه څه ده؟

د آرکیسټرټر کار کولو لپاره دوه اساسي اړتیاوې شتون لري:

  • دا اړینه ده چې د مای ایس کیو ایل کلستر کې په ټولو ماشینونو کې pseudo GTID فعال شوی وي؛ موږ GTID فعال کړی دی.
  • دا اړینه ده چې په هر ځای کې یو ډول بنلاګ شتون ولري، تاسو کولی شئ بیان وکاروئ. موږ یو ترتیب درلود په کوم کې چې ماسټر او ډیری غلامان قطار لري، او دوه په تاریخي ډول په مخلوط حالت کې پاتې دي. د پایلې په توګه، آرکیسټرټر په ساده ډول نه غوښتل چې دا غلامان د نوي مالک سره وصل کړي.

په یاد ولرئ چې د تولید غلام کې ترټولو مهم شی د مالک سره د هغې دوام دی! که تاسو په خپل مالک او غلام دواړو کې د نړیوال لیږد ID (GTID) فعال کړی وي ، نو تاسو کولی شئ د gtid_subset فنکشن وکاروئ ترڅو ومومئ چې ایا د ډیټا بدلونونو ورته غوښتنې واقعیا پدې ماشینونو کې اجرا شوي. تاسو کولی شئ پدې اړه نور ولولئ دلته.

پدې توګه ، آرکیسټرټر تاسو ته د GTID خطا له لارې ښیې چې په غلام باندې معامله شتون لري چې په ماسټر کې ندي. ولې دا پیښیږي؟

  • Read_only=1 په غلام کې فعال نه دی، یو څوک وصل شوی او د معلوماتو بدلولو غوښتنه یې بشپړه کړې.
  • Super_read_only=1 په غلام کې فعال نه دی، بیا مدیر، سرور ګډوډ کړی، دننه لاړ او هلته یې غوښتنه اجرا کړه.
  • که تاسو دواړه مخکیني ټکي په پام کې ونیسئ، نو بیا یو بل چل شتون لري: په MySQL کې، د بنلاګ فلش کولو غوښتنه هم بنلاګ ته ځي، نو په لومړي فلش کې، د GTID غلطی به په ماسټر او ټولو غلامانو کې ښکاره شي. له دې څخه څنګه مخنیوی وشي؟ Perona-5.7.25-28 د binlog_skip_flush_commands=1 ترتیب معرفي کړ، کوم چې په بنلاګونو کې د فلش لیکل منع کوي. په mysql.com ویب پاڼه کې یو تاسیس شوی دی بګ.

اجازه راکړئ چې پورته ټول لنډیز وکړم. که تاسو نه غواړئ چې آرکیسټرټر په ناکام حالت کې وکاروئ ، نو بیا یې د مشاهدې حالت کې وساتئ. بیا به تاسو تل ستاسو د سترګو په وړاندې د مای ایس کیو ایل ماشینونو د متقابل عمل نقشه او بصري معلومات ولرئ چې په هر ماشین کې څه ډول نقل دی ، ایا غلامان وروسته پاتې دي ، او خورا مهم ، دوی د ماسټر سره څومره مطابقت لري!

ښکاره پوښتنه دا ده: "څنګه باید آرکیسټرټر کار وکړي؟" هغه باید د اوسني غلامانو څخه یو نوی بادار وټاکي، او بیا یې ټول غلامان بیا وصل کړي (دا هغه څه دي چې GTID ورته اړتیا لري؛ که تاسو د binlog_name او binlog_pos سره زوړ میکانیزم وکاروئ، نو بیا د اوسني مالک څخه نوي ته غلام بدل کړئ په ساده ډول ناممکن دی!). مخکې لدې چې موږ آرکیسټرټر درلود ، ما یوځل باید دا ټول په لاسي ډول ترسره کړي. زوړ بادار د بګی اډاپټیک کنټرولر له امله ځړول شوی و؛ شاوخوا 10 غلامان یې درلودل. ما اړتیا درلوده چې VIP له مالک څخه یو غلام ته انتقال کړم او نور ټول غلامان یې بیا سره وصل کړم. څومره کنسولونه مې خلاصول، څو یوځل کمانډونه مې داخل کړل... ما باید د سهار تر 3 بجو پورې انتظار وکړ، له دوو څخه پرته له ټولو غلامانو بار لرې کړئ، لومړی ماشین له دوه ماسټر څخه جوړ کړئ، سمدلاسه دویم ماشین ضمیمه کړئ د دې لپاره، نو نور ټول غلامان نوي بادار سره وصل کړئ او بار بیرته راوباسئ. په ټوله کې، وحشتناکه ...

آرکیسټرټر څنګه کار کوي کله چې دا د ناکامۍ حالت ته ځي؟ دا خورا په اسانۍ سره د داسې وضعیت مثال لخوا توضیح کیږي چیرې چې موږ غواړو یو ماسټر جوړ کړو یو ډیر پیاوړی ، ډیر عصري ماشین د اوس په پرتله.

د MySQL لپاره آرکیسټرټر: ولې تاسو نشئ کولی د دې پرته د غلطۍ زغمونکې پروژه جوړه کړئ
انځور د پروسې منځنی برخه ښیي. تر دې مهاله څه شوي دي؟ موږ وویل چې موږ غواړو یو څه غلام نوی بادار جوړ کړو، آرکیسټرټر په ساده ډول د نورو ټولو غلامانو سره یوځای کول پیل کړل، نوي ماسټر د لیږد ماشین په توګه کار کاوه. د دې سکیم سره، هیڅ غلطی نه پیښیږي، ټول غلامان کار کوي، آرکیسټرټر د زاړه ماسټر څخه VIP لیرې کوي، نوي ته یې لیږدوي، یوازې لوستل = 0 جوړوي او د زاړه ماسټر په اړه هیر کوي. ټول! زموږ د خدماتو کم وخت د VIP لیږد وخت دی، کوم چې 2-3 ثانیې دی.

دا ټول د نن ورځې لپاره دي، له تاسو ټولو مننه. ډیر ژر به د اورکسټریټ په اړه دویمه مقاله وي. د شوروي په مشهور فلم "ګیرج" کې، یو کرکټر وویل، "زه به د هغه سره تحقیق ته لاړ نه شم!" نو، آرکیسټرټر، زه به تاسو سره د څارنې لپاره لاړ شم!

سرچینه: www.habr.com

Add a comment