মাইএসকিউএল প্রতিলিপিটি কি কোনও হাই-লেটেন্সি ইন্টারকানেক্ট দ্বারা আক্রান্ত?


11

আমরা একটি ভ্যানিলা মাস্টার এবং স্লেভ মাইএসকিউএল সেটআপ পেয়েছি যা বিভিন্ন ডেটা সেন্টারে থাকে এবং মাস্টার হিসাবে একই ডাটাবেসটারে আরও একটি ক্রীতদাস।

ডেটাসেন্টারের মধ্যে ব্যান্ডউইদথটি বেশ উঁচুতে (নেটওয়ার্ক বেনমার্কগুলিতে আমরা সম্পন্ন করেছি 15 এমবি / সেকেন্ডে) আমরা পৌঁছাতে পারি তবে বিলম্বতা বিদ্যমান, এটি প্রায় 28 মাইল। এটি কোনও উপায়ে উচ্চ নয়, তবে এটি একই ডেটাসেন্টারের উপ-দ্বিতীয় ল্যাটেন্সির চেয়ে অনেক বেশি।

মাঝেমধ্যে, স্থানীয় স্লেভ আপ টু ডেট থাকা অবস্থায়, আমরা মুছে ফেলা দাসের সাথে গুরুতর লেগ (2000 সেকেন্ড এবং আরও বেশি) উপভোগ করি। পিছিয়ে থাকা দূরবর্তী দাসটির দিকে তাকানোর সময়, এসকিউএল থ্রেড সাধারণত আইও থ্রেডের রিলে লগ আপডেট করার জন্য অপেক্ষা করতে সময় ব্যয় করে। মাস্টার একই সময়ে "নেট অপেক্ষা করছেন" বা সাজানোর কিছু দেখায়।

সুতরাং এর অর্থ এটি নেটওয়ার্ক, তবে আমাদের যখন এখনও এটি ঘটে তখন ফ্রি ব্যান্ডউইদথ রয়েছে।

আমার প্রশ্ন হ'ল : ডেটাসেন্টারগুলির মধ্যে বিলম্বিতকরণ প্রতিরূপের কার্য সম্পাদনকে প্রভাবিত করতে পারে? মাস্টার তাদের পাঠানো বন্ধ না হওয়া পর্যন্ত দাস আইও থ্রেড কি কেবল ইভেন্টগুলি প্রবাহিত করে না, বা এটি কোনওভাবে ইভেন্টের মধ্যে মাস্টারকে পুল করছে?


2000 সেকেন্ড? সুতরাং, একটি 33 মিনিটের পিছনে?
রিচার্ড

হ্যাঁ ... এটি সারা দিন ধরে উপরে উঠে যায়।
shlomoid

2
+1 কারণ আমি এই সাইটে এই ধরণের প্রশ্ন পছন্দ করি। অন্যদের এই প্রকৃতির প্রশ্নগুলি নিয়ে এই সাইটে আসতে দয়া করে শব্দটিটি সন্ধান করুন !!!
RolandoMySQLDBA

উত্তর:


7

আপনার প্রশ্নের সরাসরি উত্তর হ্যাঁ, তবে এটি আপনি যে মাইএসকিউএল চালাচ্ছেন তার সংস্করণের উপর নির্ভর করে। মাইএসকিউএল 5.5 এর পূর্বে, প্রতিলিপিটি নিম্নরূপে কাজ করবে:

  • মাস্টার এসকিউএল চালায়
  • মাস্টার এর বাইনারি লগগুলিতে এসকিউএল ইভেন্ট রেকর্ড করে
  • স্লেভ মাস্টার বাইনারি লগগুলি থেকে এসকিউএল ইভেন্ট পড়ে
  • স্লেভ এসকিউএল ইভেন্টের আই / ও থ্রেডের মাধ্যমে এর রিলে লগগুলিতে সঞ্চয় করে
  • স্লেভ এসকিউএল থ্রেডের মাধ্যমে রিলে লগ থেকে পরবর্তী এসকিউএল ইভেন্ট পড়ে
  • স্লেভ এসকিউএল চালায়
  • স্লেভ এসকিউএল ইভেন্টের সম্পূর্ণ সম্পাদনের মাস্টারকে স্বীকার করে

মাইএসকিউএল ৫.৫ অনুসারে, সেমিসিনক্রোনাস রেপ্লিকেশন ব্যবহার করে , এখন প্রতিলিপিটি নিম্নরূপে কাজ করবে:

  • মাস্টার এসকিউএল চালায়
  • মাস্টার এর বাইনারি লগগুলিতে এসকিউএল ইভেন্ট রেকর্ড করে
  • স্লেভ মাস্টার বাইনারি লগগুলি থেকে এসকিউএল ইভেন্ট পড়ে
  • স্লেভ এসকিউএল ইভেন্টের প্রাপ্তির মাস্টারকে স্বীকার করে
  • স্লেভ এসকিউএল ইভেন্টের আই / ও থ্রেডের মাধ্যমে এর রিলে লগগুলিতে সঞ্চয় করে
  • স্লেভ এসকিউএল থ্রেডের মাধ্যমে রিলে লগ থেকে পরবর্তী এসকিউএল ইভেন্ট পড়ে
  • স্লেভ এসকিউএল চালায়
  • স্লেভ এসকিউএল ইভেন্টের সম্পূর্ণ সম্পাদনের মাস্টারকে স্বীকার করে

এই নতুন দৃষ্টান্তটি কোনও স্লেভকে তার মাস্টারের সাথে আরও সুসংহত হওয়ার অনুমতি দেবে।

তবুও, নেটওয়ার্কের মধ্যে বিলম্বিতা মাইএসকিউএল সেমিসিঙ্ক প্রতিরূপকে এমন জায়গায় বাধা দিতে পারে যেখানে এটি পুরানো-শৈলীর অ্যাসিঙ্ক্রোনাস প্রতিরূপে ফিরে আসে। কেন? যদি কোনও গোলাম লেনদেনকে স্বীকার না করে সময়সীমা শেষ হয়, তবে মাস্টার অ্যাসিনক্রোনাস প্রতিলিপিতে ফিরে আসে। কমপক্ষে একটি অর্ধসঞ্চলীয় ক্রীতদাস ধরা পড়লে, মাস্টারটি সেমিসিনক্রোনাস প্রতিরূপে ফিরে আসে।

আপডেট 2011-08-08 14:22 ইডিটি

মাইএসকিউএল 5.5 সেমিসিনক্রোনাস রেপ্লিকেশনটির কনফিগারেশনটি সোজা is

পদক্ষেপ 1) এই চারটি (4) লাইন /etc/my.cnf এ যুক্ত করুন

[mysqld]
plugin-dir=/usr/lib64/mysql/plugin
#rpl_semi_sync_master_enabled
#rpl_semi_sync_master_timeout=5000
#rpl_semi_sync_slave_enabled

পদক্ষেপ 2) মাইএসকিউএল পুনরায় চালু করুন

service mysql restart

পদক্ষেপ 3) এই কমান্ডগুলি মাইএসকিউএল ক্লায়েন্টে চালান

INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
INSTALL PLUGIN rpl_semi_sync_slave  SONAME 'semisync_slave.so';

পদক্ষেপ 4) প্লাগইন-ডায়ারের অপশনের পরে rpm_semi_sync তিনটি বিকল্পকে মন্তব্য করুন

[mysqld]
plugin-dir=/usr/lib64/mysql/plugin
rpl_semi_sync_master_enabled
rpl_semi_sync_master_timeout=5000
rpl_semi_sync_slave_enabled

পদক্ষেপ 5) মাইএসকিউএল পুনরায় চালু করুন

service mysql restart

সব শেষ !!! এখন যথারীতি মাইএসকিউএল প্রতিলিপি সেটআপ করুন।


আমি অ্যাসিক্রোনাস প্রতিরূপের শেষ পর্যায়ে সম্পর্কে নিশ্চিত নই - আমি মনে করি না যে মাস্টার জানেন যে প্রতিটি দাস কতদূর এসে গেছে। তারা যে বাইনারি লগ চায় তার যে কোনও অংশের জন্য জিজ্ঞাসা করতে পারে, যতদূর আমি জানি - আপনার কি এর জন্য কিছু রেফারেন্স রয়েছে?
shlomoid

এছাড়াও, আমরা মাইএসকিউএলে ডিফল্ট অ্যাসিনক্রোনাস প্রতিলিপি ব্যবহার করছি, অ্যাসিনক্রোনাস টাইপ নয় - যা প্লাগইন এবং পছন্দগুলি ইনস্টল করে উদ্দেশ্য হিসাবে সক্ষম করা প্রয়োজন। আমি যা বোঝার চেষ্টা করছি তা হ'ল ঘটনাগুলি লগের প্রারম্ভিক অবস্থান থেকে ক্রীতদাসে নেট-বিড়াল স্টাইলটি পাইপ করা হয়, বা প্রতিটি ইভেন্টের জন্য মাস্টার এবং ক্রীতদাসের মধ্যে পিছনে পিছনে আদান-প্রদান হয়, যা এই জাতীয় বিলম্বিত হতে পারে।
shlomoid

যাইহোক, আমি মাইএসকিউএল প্রতিরূপের এই নতুন ফর্মের পাশাপাশি ইনোডিবি-র বর্ধনের সুবিধা গ্রহণের জন্য মাইএসকিউএল 5.5 ব্যবহার করার পরামর্শ দিচ্ছি।
রোল্যান্ডোমাইএসকিউএলডিবিএ

1
হ্যাঁ, অবশ্যই আমরা মাইএসকিউএল 5.5 ব্যবহার করছি তবে এটি ডিফল্ট প্রতিরূপ টাইপ নয়। এটিকে আধা-সিনক্রোনাস উপায়ে কাজ করার জন্য আপনাকে একটি সম্পূর্ণ কনফিগারেশন পদ্ধতিতে যেতে হবে, প্লাগইনগুলি ইনস্টল করতে হবে এবং এ জাতীয়,
shlomoid

2

আমি সত্যিই পছন্দ করি যে রোল্যান্ডো কীভাবে অপারেশনগুলির ক্রমটিকে একটি প্রতিলিপি সম্পাদন করে বর্ণনা করেছিল। তবে আমি মনে করি আমরা আরও একটি উপাদান - ক্লায়েন্ট যুক্ত করলে এটি আরও স্পষ্ট হবে।

ক্লায়েন্টের সাথে অ্যাসিনক্রোনাস প্রতিরূপের জন্য ক্রিয়াকলাপগুলি নিম্নলিখিত হতে পারে:

  1. ক্লায়েন্ট লেনদেন ব্যবহার করে মাস্টারকে এসকিউএল কোয়েরি (উদাহরণস্বরূপ, সন্নিবেশ) প্রেরণ করে

  2. মাস্টার লেনদেন চালায়। সাফল্যের ক্ষেত্রে রেকর্ডটি ডিস্কে সংরক্ষণ করা হয় তবে লেনদেনটি এখনও প্রতিশ্রুতিবদ্ধ হয় না।

  3. মাস্টার বাইনারি লগতে সন্নিবেশ ইভেন্টটি রেকর্ড করে যদি মাস্টার বাইনারি লগে এটি সঞ্চয় না করতে পারে তবে লেনদেনটি পিছনে ফিরে আসে।

  4. ক্লায়েন্ট মাস্টার (সাফল্য বা রোলব্যাক) এর কাছ থেকে প্রতিক্রিয়া পান।

  5. লেনদেনের সাফল্যের ক্ষেত্রে, মাস্টারের ডাম্প থ্রেডটি বাইনারি লগ থেকে ইভেন্টটি পড়ে এবং দাস I / O থ্রেডে প্রেরণ করে।

  6. স্লেভ আই / ও থ্রেড ইভেন্টটি গ্রহণ করে এবং এটি রিলে লগ ফাইলের শেষে লিখে দেয়।

  7. ইভেন্টটি রিলে লগ এ উঠলে, স্লেভ এসকিউএল থ্রেডটি দাসের
    ডেটাবেজে পরিবর্তনগুলি প্রয়োগ করতে ইভেন্টটি চালায় ।

এই দৃশ্যে মাস্টার দাসের বিষয়ে চিন্তা করেন না এবং ক্লায়েন্ট কেবল জানেন যে "শ্লেভ স্ট্যাটাস দেখান" কমান্ড ম্যানুয়ালি প্রয়োগ করে দাসের মধ্যে কিছু ভুল আছে।

n একটি আধা-সিঙ্ক্রোনাস প্রতিরূপের ক্রিয়াকলাপের ক্রমটি নিম্নলিখিত হতে পারে:

  1. ক্লায়েন্ট লেনদেন ব্যবহার করে মাস্টারকে এসকিউএল কোয়েরি (উদাহরণস্বরূপ, সন্নিবেশ) প্রেরণ করে।

  2. মাস্টার লেনদেন চালায়। সাফল্যের ক্ষেত্রে রেকর্ডটি ডিস্কে সংরক্ষণ করা হয় তবে লেনদেনটি প্রতিশ্রুতিবদ্ধ হয় না।

  3. মাস্টার বাইনারি লগতে সন্নিবেশ ইভেন্টটি রেকর্ড করে যদি মাস্টার বাইনারি লগে এটি সঞ্চয় না করতে পারে তবে লেনদেনটি পিছনে ফিরে আসে এবং ক্লায়েন্ট কেবল রোলব্যাকের ক্ষেত্রে প্রতিক্রিয়া গ্রহণ করে।

  4. মাস্টারের উপর লেনদেনের সাফল্যের কারণে, মাস্টারের ডাম্প থ্রেড বাইনারি লগ থেকে ইভেন্টটি পড়ে গোলাম আই / ও থ্রেডে প্রেরণ করে।

  5. স্লেভ আই / ও থ্রেড ইভেন্টটি গ্রহণ করে এবং এটি রিলে লগ ফাইলের শেষে লিখে দেয়।

  6. রিলে লগ ফাইলে ইভেন্টটি রেকর্ডিংয়ের মাস্টার স্বীকৃতি জানায়।

  7. মাস্টার সন্নিবেশ লেনদেন করে।

  8. ক্লায়েন্ট মাস্টার (সাফল্য) এর কাছ থেকে প্রতিক্রিয়া পান।

  9. ইভেন্টটি রিলে লগ এ উঠলে, স্লেভ এসকিউএল থ্রেড
    ইভেন্টটি কার্যকর করে। মাস্টার এবং ক্লায়েন্ট জানেন না কার্যকর কার্যকর হয়েছিল কি না।

আধা-সিনক্রোনাস প্রতিলিপি একটি গুরুত্বপূর্ণ কেস সমাধান করেছে যখন দাস বা নেটওয়ার্ক মারা গিয়েছিল এবং মাস্টার এগিয়ে চলেছে। তারপরে মাস্টার মারা যায় এবং আপনি সেই নোডটি ঠিক করে দেওয়ার কারণে আপনি পুরানো দাসটিকে নতুন মাস্টার হিসাবে পুনরায় চালু করতে চান।

সুতরাং আপনি সেই নোডটিকে নতুন মাস্টার হিসাবে শুরু করেছেন, আপনি পুরানো মাস্টারটি ঠিক করেছেন এবং এখন আপনি এটি ক্রীতদাস হিসাবে ব্যবহার করতে চান। এই নোডটিতে এখনও ডেটা রয়েছে, তবে নতুন স্লেভটি যেখানে নতুন মাস্টারটি শুরু করেছেন সেই অবস্থান থেকে শুরু হলে সেখানে সদৃশ রেকর্ড থাকবে।

অপেক্ষার সময়কাল যদি অসীম হয় তবে দাসের সমস্ত প্রশ্ন সফল হয়েছে বলে ধরে নিয়ে মাস্টার বাইনারি লগ অবস্থানটি স্লেভ রিলে লগ অবস্থানের সাথে সর্বদা সমন্বয় করে। এই অনুমান কতটা বাস্তব?

আমি মনে করি এটি খুব বাস্তববাদী। স্লেভ ক্যোয়ারী ব্যর্থতার অন্যতম সাধারণ কেস হ'ল "সদৃশ রেকর্ড"। সদৃশ না থাকলে নকল রেকর্ডটি কোথায় এসেছিল? এটি দাসকে প্রতিলিপি করা শুরু করার জন্য দেওয়া ভুল অবস্থান থেকে এসেছে। প্রারম্ভিক প্রতিরূপ অবস্থান ইতিমধ্যে প্রতিলিপি ছিল যে রেকর্ড অন্তর্ভুক্ত। আধা-সিনক্রোনাস প্রতিরূপের ক্ষেত্রে এই পরিস্থিতিটি ঘটবে না।

জ্যাকব নিকম


1

যোগ্যতা প্রদানকারী : আমি কোনও মাইএসকিউএল ব্যবহারকারী নই, বেশিরভাগ ক্ষেত্রে এটি ইন্টারনেটে আমার গবেষণা মাত্র।

যেহেতু আমি নিশ্চিত যে আপনি জানেন, মাইএসকিউএল প্রতিলিপির বৃহত্তম সীমাবদ্ধতা হ'ল এটি একক থ্রেডযুক্ত। সুতরাং, থ্রেডটি ইন-হাউস ক্রীতদাসে ডেটা প্রেরণে ব্যস্ত থাকাকালীন, এটি দূরবর্তী দাসে ডেটা প্রেরণ করতে সক্ষম হবে না। এই প্রতি এখানে


এখানে প্রতি :

আপনার অবশ্যই একটি জিনিস যা নিশ্চিত করতে হবে তা হ'ল আপনার লেনদেনের সময় হ্রাস করা। এটি আপনার প্রতিলিপি থ্রেডে ডাটাবেসে কী চলছে তা ধরার সুযোগ পেতে দেয়। আপনি চান যে আপনার লেনদেনগুলি যতটা সম্ভব সংক্ষিপ্ত হোক।

এটি করার একটি উপায় হল কোয়েরি কাটা; আপডেটের পরিবর্তিত সারিগুলি সীমাবদ্ধ করুন বা WHERE ধারাগুলির ব্যবহারের মাধ্যমে মুছে ফেলুন। যদি আপনি এটি একটি লুপের ভিতরে আটকে থাকেন তবে আপনি প্রতিটি বার লেনদেন শুরু করে এবং প্রতিশ্রুতিবদ্ধ করে তালিকাটির মাধ্যমে পুনরাবৃত্তি করতে পারেন। (আপডেট / প্রথম তৃতীয়, দ্বিতীয় তৃতীয়, তারপরে প্রতিটি নিজস্ব লেনদেনে চূড়ান্ত তৃতীয় মুছে ফেলুন)) আমি ব্যক্তিগতভাবে এটি করার বিরুদ্ধে দৃ strongly ়ভাবে পরামর্শ দেব কারণ আপনি লেনদেনের মধ্যে পরিবর্তিত সারণীতে থাকা ডেটার সম্ভাবনা সম্পর্কে নিজেকে উন্মুক্ত করেন। তবে, যদি আপনি নিশ্চিত হন যে অন্য কেউ টেবিলের সাথে ঝামেলা করছে না (এবং কখনই হবে না) তবে এই পারফরম্যান্সটির উন্নতি হওয়ার সম্ভাবনা ।

আরেকটি সম্ভাবনা হ'ল দীর্ঘকাল ধরে চলমান লেনদেনের প্রতিরূপ তৈরি না করা, বরং উভয়কেই মাস্টার (যা স্থানীয় দাসের প্রতিলিপি তৈরি করে) এ চালান এবং তারপরে সেগুলি আলাদাভাবে দূরবর্তী দাসে চালানো। এটি প্রতিলিপি থ্রেডটি মুক্ত করবে যাতে এটি 30+ মিনিটের চিহ্ন পর্যন্ত নেমে যায়।


এখানে প্রতি :

একটি চূড়ান্ত সম্ভাবনা হ'ল আপনার টিসিপি বাফারগুলির আকার টিউন করা। লক্ষ্যটি হ'ল মাস্টার এবং দাসের মধ্যে আপনি যে যোগাযোগ করছেন তা হ্রাস করা। এটি বিলম্বিতা কমাতে সহায়তা করতে পারে।

ব্যক্তিগতভাবে, অন্য সব ব্যর্থ হলে আমি এটি চেষ্টা করব। আমি সন্দেহ করি যে সমস্যাটি নেটওয়ার্ক ল্যাটেন্সির পরিবর্তে একক থ্রেডযুক্ত প্রতিলিপি সিস্টেমের কারণে বেশি হয়েছে। নেটওয়ার্কগুলি সাধারণত 30 মিনিটের চিহ্নের অনেক আগেই শেষ হয়ে যায়। (30 মিনিট?!)


জেএ্যামবারবের সুস্বাদু বুকমার্কগুলিতে মাইএসকিএল প্রতিলিপি দেওয়ার জন্য বেশ কয়েকটি লিঙ্ক রয়েছে যা আপনি দেখতেও চাইতে পারেন want

আমি আশা করি এটি সাহায্য করবে.


1
মাইএসকিউএল প্রতিলিপিটি কীভাবে একক থ্রেডযুক্ত তা উল্লেখ করার জন্য আপনি একটি +1 পান, তবে আপনার বিবৃতিটি নিম্নোক্তভাবে অর্জন করা দরকার: মাইএসকিউএল প্রতিলিপিটি মাস্টার থেকে স্লেভে এসকিউএল ইভেন্টগুলি ডাউনলোড করার জন্য একটি আই / ও থ্রেড ব্যবহার করে দ্বৈত থ্রেডযুক্ত এবং প্রক্রিয়াকরণের জন্য একটি এসকিউএল থ্রেড স্লেভের স্থানীয়ভাবে এসকিউএল ইভেন্টগুলি। তবুও, এসকিউএল ইভেন্টগুলির সংক্রমণ একক থ্রেডযুক্ত, যা এই প্রশ্নের জন্য প্রাসঙ্গিকভাবে সঠিক।
রোল্যান্ডোমাইএসকিউএলডিবিএ

2
বিটিডব্লিউ দয়া করে আপডেটের সাথে সীমাবদ্ধতা এবং মুছে ফেলার বিবরণ ব্যবহার করবেন না কারণ সারিগুলির ক্রম আপডেট করা বা মুছে ফেলা হচ্ছে মাস্টারের মতো স্লেভের মতো নাও হতে পারে। যদি সত্য হয়, এ সংক্রান্ত সতর্কতা বার্তাগুলি ত্রুটি লগের "বিবৃতি বিনলগ-নিরাপদ" এর মতো কিছু উপস্থিত হয়।
রোল্যান্ডোমাইএসকিউএলডিবিএ

ওহ, আপডেট এবং ডিলিটের সাথে সীমাবদ্ধতা ব্যবহার না করার বিষয়ে ভাল বিষয়। এটি সরাতে আমি আমার উত্তরটি পরিবর্তন করব।
রিচার্ড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.