ব্যান্ডউইদথ উদ্বেগ মোকাবেলায় আমরা মাইএসকিউএল 5.0 প্রতিরূপে কী করতে পারি?


18

আমি ক্লায়েন্ট পিসি (উইন) এ চালানোর জন্য একটি অ্যাপ্লিকেশন বিকাশ করছি যা মাইএসকিউএল সার্ভার 5.1 উদাহরণের সাহায্যে কনফিগার করা হয়েছে যা দূরবর্তী মাস্টারের কেবল পঠন দাস হিসাবে কাজ করবে। রিমোট মাস্টারটির কয়েক ডজন স্কিমা রয়েছে তবে ক্লায়েন্টের জন্য আমার কেবলমাত্র একটির প্রয়োজন তাই আমি ক্লায়েন্টের প্রয়োজনীয় স্কিমার প্রতিলিপি করতে আমার.inii এ প্রতিলিপি- ডু -ডিবি সেটিং সরবরাহ করি । প্রতিলিপিটি কাজ করে, তবে যখন আমাদের ক্লায়েন্টরা বিশ্বের এমন অঞ্চলগুলিতে প্রবেশ করে যেখানে কেবলমাত্র 3 জি ওয়্যারলেসের মাধ্যমে ইন্টারনেট অ্যাক্সেস পাওয়া যায়, যা ডেটা ব্যবহারের মাধ্যমে চার্জ করে, তারা দ্রুত তাদের ডেটা পরিকল্পনার সীমা ছাড়িয়ে যায় এবং ব্যয়বহুল সমস্যার মধ্যে চলে যায়।

আমি এটা বুঝতে হিসাবে, মাইএসকিউএল একটি একক binlog ফাইল যা মানে প্রতিটি ক্লায়েন্টের লেনদেনের যে মাস্টার প্রতি স্কিমা উপর সঞ্চালিত হয় সব ডাউনলোড করতে আছে, তারপর একবার ডাউনলোড করা সব স্কিমের জন্য সমস্ত লেনদেন লিখেছেন, প্রতি ডাটাবেসের ফিল্টার প্রয়োগ replication- ক্লায়েন্টের my.ini ফাইলে do-db সেটিংস।

এই অদক্ষতা হ্রাস করার জন্য আমি স্লেভ_কম্প্রেসড_প্রোটোকল = 1 সেটিং নিযুক্ত করেছি , যা সংক্রমণিত ডেটা 50% হ্রাস করে বলে মনে হচ্ছে, তবে তবুও আমাদের ক্লায়েন্টরা তাদের 3G সীমাটি দ্রুত তাদের ডেটা সীমা ছাড়িয়ে যায়।

আমি ভাবতে পারি না যে আমিই এর মুখোমুখি হয়েছি, সুতরাং আমি নিশ্চিত যে আমি x = y নির্ধারণ করে কীভাবে এটি অর্জন করতে হবে তার একটি টন উত্তর পেয়ে যাব। তবে, আমি এই ধরনের সেটিংয়ের কোনও ডকুমেন্টেশন এবং গ্রহণের জন্য কোনও প্রস্তাবিত পদ্ধতির সন্ধান করতে পারি না।

এখন পর্যন্ত, এখানে একটি সম্ভাব্য সমাধানের বিষয়ে আমার চিন্তাভাবনা, দয়া করে প্রতিক্রিয়া বা বিকল্প রুটগুলি সরবরাহ করুন:


  1. প্রতিটি স্কিমা জন্য একটি "প্রক্সি" স্লেভ সেট আপ করুন (বিভিন্ন মাইএসকিউএল উদাহরণ / পোর্ট সহ বিভিন্ন বাক্সে বা একই বাক্সে)
  2. প্রক্সি স্লেভকে কেবলমাত্র একই ডাটাবেসের প্রতিলিপি করতে ডু-ডিবি কনফিগার করুন যা ক্লায়েন্টরা অনুলিপি করতে চায়।
  3. উপযুক্ত প্রক্সি ক্রীতদাসের দাস হিসাবে ক্লায়েন্টের মাইএসকিউএল উদাহরণটি কনফিগার করুন।

এই উচিত ক্লায়েন্ট শুধুমাত্র তাদের স্কিমা জন্য binlog তথ্য কাছে স্থাপিত। নেতিবাচক দিক (যতদূর আমি বলতে পারি) এটি হ'ল নাটকীয়ভাবে আমাদের সেটআপের জটিলতা বৃদ্ধি করে, সম্ভবত এটি আরও ভঙ্গুর করে তুলবে।

থটস? এই পদ্ধতির এমনকি কাজ করবে?

দ্রষ্টব্য, আমরা রেডহ্যাটে মাইএসকিউএল 5.0 সার্ভারটি চালাচ্ছি, তবে এটির সমাধান পেলে আমরা 5.5-এ উন্নীত করতে পারি।


মন্তব্যগুলি বর্ধিত আলোচনার জন্য নয়; এই কথোপকথন চ্যাটে সরানো হয়েছে ।
পল হোয়াইট পুনর্নির্মাণ মনিকা

উত্তর:


10

পরামর্শ # 1: বিতরণ মাস্টার ব্যবহার করুন ters

ডিস্ট্রিবিউশন মাস্টার লগ-বিন সক্ষম, লগ-স্লেভ-আপডেটগুলি সক্ষম এবং একটি মাত্র ব্ল্যাকহোল স্টোরেজ ইঞ্জিন সহ কেবল টেবিলগুলি সহ একটি মাইএসকিএল ক্রীতদাস । আপনি ডিস্ট্রিবিউশন মাস্টারের প্রতিলিপি-ডু-ডিবি প্রয়োগ করতে পারেন এবং বিতরণ মাস্টারে বাইনারি লগ তৈরি করতে পারেন যার মধ্যে কেবলমাত্র ডিবি স্কিম (গুলি) রয়েছে যা আপনি বাইনলগ করতে চান। এইভাবে আপনি বিতরণ মাস্টার থেকে বহির্গামী বিনলগগুলির আকার হ্রাস করেন।

আপনি নীচে একটি বিতরণ মাস্টার সেটআপ করতে পারেন:

  1. স্কিমা-কেবল ডাম্প তৈরি করতে --no-ডেটা বিকল্প ব্যবহার করে আপনার ডাটাবেসগুলিকে mysqldump করুন।
  2. বিতরণ মাস্টারে স্কিমা-কেবল ডাম্প লোড করুন।
  3. ডিস্ট্রিবিউশন মাস্টারের প্রতিটি টেবিলকে ব্ল্যাকহোল স্টোরেজ ইঞ্জিনে রূপান্তর করুন।
  4. বাস্তব তথ্য সহ কোনও মাস্টার থেকে বিতরণ মাস্টারের প্রতিরূপ সেটআপ করুন।
  5. বিতরণ মাস্টারের /etc/my.cnf এ প্রতিলিপি-কর-ডিবি বিকল্প (গুলি) যুক্ত করুন।

2 এবং 3 পদক্ষেপের জন্য আপনি কেবলমাত্র স্কিমা-ডাম্প সম্পাদনা করতে পারেন এবং ENGINE = MyISAM এবং ENGINE = InnoDB কে ENGINE = BLACKHOLE এর সাথে প্রতিস্থাপন করতে পারেন এবং তারপরে সম্পাদিত স্কিমা-কেবল ডাম্পটি বিতরণ মাস্টারে লোড করতে পারেন।

কেবলমাত্র পদক্ষেপ 3 এ, আপনি যদি ডিস্ট্রিবিউশন মাস্টারের সমস্ত মাইআইএসএএম এবং ইনোডিবি টেবিলকে BLACKHOLE তে রূপান্তর করতে চান তবে নিম্নলিখিত কোয়েরিটি চালান এবং এটি একটি পাঠ্য ফাইলে আউটপুট করুন:

mysql -h... -u... -p... -A --skip-column-names -e"SELECT CONCAT('ALTER TABLE ',table_schema,'.',table_name', ENGINE=BLACKHOLE;') BlackholeConversion FROM information_schema.tables WHERE table_schema NOT IN ('information_schema','mysql') AND engine <> 'BLACKHOLE'" > BlackholeMaker.sql

ব্ল্যাকহোল স্টোরেজ ইঞ্জিনে টেবিলের রূপান্তর স্ক্রিপ্ট করার জন্য একটি যুক্ত বোনাস হ'ল স্মৃতি স্টোরেজ ইঞ্জিনের টেবিলগুলিও রূপান্তরিত হয়। যখন স্মৃতি স্টোরেজ ইঞ্জিনের টেবিলটি ডেটা সঞ্চয় করার জন্য ডিস্কের স্থান গ্রহণ করে না, এটি মেমোরি গ্রহণ করে। মেমোরি টেবিলগুলি ব্ল্যাকহলে রূপান্তর করা ডিস্ট্রিবিউশন মাস্টারে নিরবচ্ছিন্নভাবে স্মৃতি রাখবে।

যতক্ষণ না আপনি ডিস্ট্রিবিউশন মাস্টারে কোনও ডিডিএল প্রেরণ করবেন না, আপনি ক্লায়েন্টদের কেবলমাত্র ডিবি তথ্য নকল করতে দেওয়ার আগে আপনার যে কোনও ডিএমএল (INSERT, আপডেট, মুছে ফেলা) প্রেরণ করতে পারেন।

আমি ইতিমধ্যে অন্য স্ট্যাকএক্সচেঞ্জ সাইটে একটি পোস্ট লিখেছি যা ডিস্ট্রিবিউশন মাস্টার ব্যবহার করে আলোচনা করে

পরামর্শ # 2: ছোট বাইনারি লগ এবং রিলে লগগুলি ব্যবহার করুন

আপনি যদি মজার হাস্যকর কিছুতে ম্যাক্স_বিনল_সাইজ সেট করেন তবে বিনলোগগুলি সংগ্রহ করে ছোট ছোট অংশে প্রেরণ করা যায়। রিলে লগগুলির আকার, সর্বোচ্চ_আরলে_লগ_সাইজ সেট করার জন্য পৃথক বিকল্পও রয়েছে । যদি ম্যাক্স_রেলে_লগ_সাইজ = 0 হয় তবে ম্যাক্স_ব্লিন_সাইজ সেট করা যাই হোক না কেন এটি ডিফল্ট হবে।

পরামর্শ # 3: সেমিসিনক্রোনাস প্রতিলিপি ব্যবহার করুন (কেবলমাত্র MySQL 5.5)

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

পরামর্শ # 4: বিবৃতি-ভিত্তিক বাইনারি লগিং সারি ভিত্তিক ব্যবহার করবেন না

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

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


আকর্ষণীয় ধারণাগুলি @ রোল্যান্ডোমাইএসকিউএলডিবিএ, পরামর্শ ১ টি মনে হচ্ছে যা আমি আমার "প্রক্সি" স্লেভ সেটআপ দিয়ে যা বর্ণনা করতে চাইছিলাম। যাইহোক, ডিডিএল এমন একটি জিনিস যা আমার দাসদের সাথে সম্পর্কিত হতে হবে। আমি মনে করি আমি এটি অ্যাপ্লিকেশন স্তরে হ্যান্ডেল করতে পারি, তবে এটি এড়ানো যায় কিনা তা না করেই চাই। ট্র্যাফিক / গতির সমস্যা হলে 2 পরামর্শ কীভাবে সাহায্য করবে তা আমি দেখতে পাচ্ছি, তবে এটি কীভাবে নেট ব্যান্ডউইথের ব্যবহারে সহায়তা করবে তা নিশ্চিত নয়। 3 পরামর্শের জন্য, আপনি কি আমার জন্য কিছুটা বিস্তারিত বর্ণনা করতে পারেন? আমি ভেবেছিলাম যে যখন আপনি কমপক্ষে 1 দাস আপডেটটি পেয়েছেন তখন আপনাকে "নিরাপদ" প্রতিরূপের জন্য সেমিসিনক্রোনাস আরও বেশি হবে। বিটিডব্লিউয়ের দুর্দান্ত পরামর্শ!
আব্রাম

@ আব্রাম দয়া করে নিশ্চিত করুন যে ডিস্ট্রিবিউশন মাস্টাররা ডিস্ক আই / ও-কে বিনলোগ ব্যবস্থাপনায় সীমাবদ্ধ করতে InnoDB বা মাইআইএসএএম টেবিলগুলি কখনই পান না !!!
রোল্যান্ডোমাইএসকিউএলডিবিএ

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

2
@ আব্রামের আপনার /etc/my.cnf এ স্কিপ-ইনডোডব যুক্ত করা উচিত। আপনি মাইআইএসএএম অক্ষম করতে পারবেন না কারণ এটি স্টক স্টোরেজ ইঞ্জিন। ডিস্ট্রিবিউশন মাস্টারের কোনও সারণী মাইআইএসএএম হয়ে গেলে ম্যানুয়ালি ALTER TABLE tblname ENGINE = BLACKHOLE করতে হবে। সম্ভবত এই ক্যোয়ারী থেকে একটি স্ক্রিপ্ট তৈরি করুন: নির্বাচন করুন কনট্যাট ('ALTER TABLE', table_schema, '।', Table_name, 'ENGINE = BLACKHOLE;') AlterCommand from info_schema.tables WHEE ইঞ্জিন = 'মাইআইএসএএম' এবং টেবিল_সেমিটা ইন ইন ('তথ্য_সীমা' ') , 'মাইএসকিউএল'); যদি আপনার কোনও সন্ধান হয় তবে কেবলমাত্র এই কোয়েরির আউটপুট থেকে তাদের রূপান্তর করুন।
রোল্যান্ডোমাইএসকিউএলডিবিএ

1
পরামর্শ # 3 হিসাবে, আধা সিঙ্ক প্রতিলিপিটির মাস্টার দাসের কাছ থেকে স্বীকৃতি পেয়েছে যে লগ এন্ট্রি এটি দাসের কাছে তৈরি করে। মাইএসকিএল 5.0 এর অধীনে, পরবর্তী দাসের কাছে একই বিবৃতি প্রেরণের আগে এসএকিউএল প্রসেস করা না হওয়া পর্যন্ত মাস্টার অপেক্ষা করে। সুতরাং, আধা সিঙ্ক দ্রুত হয়।
রোল্যান্ডোমাইএসকিউএলডিবিএ

2

সর্বোচ্চ_বিনলগ_ আকারটি অপ্রাসঙ্গিক হওয়া উচিত - বিনলগ ডেটা ধারাবাহিকভাবে প্রবাহিত হয়।

"ডিস্ট্রিবিউশন মাস্টার" সম্পর্কে সতর্কতা - এটি "ব্যর্থতার একক পয়েন্ট"। এটি হ'ল, যদি এটি মারা যায় তবে এর বাইরে থাকা সমস্ত দাস (গুলি) ডেটা গ্রহণ করবে না এবং রিলে পুনর্নির্মাণ কাজ করবে।

এসবিআর বনাম আরবিআর - এটি ক্যোয়ারির উপর নির্ভর করে। হয় অন্যের চেয়ে ভাল বা খারাপ হতে পারে।

প্রকৃত মাস্টার হিসাবে একই মেশিনে বিতরণ মাস্টার্স রাখুন বা মাস্টারকে "কাছাকাছি" রেখে দিন। দৃষ্টান্তগুলি পৃথক রাখতে পৃথক বন্দর ব্যবহার করুন।

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