উচ্চ ভলিউম সাইটের ডেটাবেস আর্কিটেকচারকে কীভাবে অনুকূল করা যায়?


28

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

লোকেরা কীসের সাথে সর্বোত্তম অভিজ্ঞতা অর্জন করেছিল এবং কীভাবে এটি অর্জন করা যায় তার কোনও উদাহরণ রয়েছে?

উত্তর:


18

আমরা মাইএসকিউএল ক্লাস্টারগুলির মোটামুটি এক বিশাল অভিজ্ঞতা পেয়েছি - এবং জটিল কনফিগারেশনের সীমানা ঠেকানোর সময় পারকোনা বেশ কয়েকটি অনুষ্ঠানে আমাদের সাথে কাজ করেছেন।

Magento স্থানীয়ভাবে কেবল পঠন দাসদের পরিচালনা করতে পারে

Magento হয় বিভাজন বন্ধ সার্চ এর নেটিভ সক্ষম / লিখেছেন বিভিন্ন ডাটাবেসের সার্ভার থেকে (কয়েক ভাঙ্গা রিলিজের ব্যতিক্রম, যেমন ই ই 1.11 যান।) - আপনি অফসেট করতে সক্ষম হবেন selectএকটি অতিরিক্ত (বা আরো) সার্ভারে (গুলি) লোড; এবং সমস্ত update/writeপ্রশ্নের একক মাস্টারের কাছে ফরোয়ার্ড করা ।

আমি কখন এটি করা উচিত

এটি আরও উপযুক্ত প্রশ্ন। ম্যাজস্ট্যাকের মতো ডেডিকেটেড ম্যাজেন্টো অপারেটিং সিস্টেমের সাথে - এটি অন্তর্নির্মিত সার্ভার সাইডের উন্নত ক্যাচিং কৌশলগুলি সহজলভ্য এবং সহজেই ব্যবহারযোগ্য হয়ে উঠছে (যেমন ওয়ার্নিশ ফ্রন্ট এন্ড ক্যাচিং এবং রেডিস ব্যাক এন্ড ক্যাচিং)।

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

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

শেষ পর্যন্ত ছোট স্টোরের জন্য (<25k দৈনিক অনন্য দর্শনার্থী)

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

চূড়ান্তভাবে হার্ডওয়্যার সাইজিং এবং নির্বাচনের মাইএসকিউএল অপ্টিমাইজেশানের চেয়ে বড় অংশ থাকবে।

তবে বড় স্টোরের জন্য

আপনার স্টোর বৃদ্ধি পেতে শুরু করার সাথে সাথে রূপান্তরকরণ বা লেনদেনের বোঝা জটিল insertsএবং updates। প্রতিটি নতুন অর্ডার সংযোজন ক্যাটালগ স্টক, পেমেন্ট গেটওয়ে থেকে কলব্যাক এবং ইপোস / ইআরপি সিস্টেমগুলির আপডেটগুলি হ্রাস করবে। এটি সম্পর্কিত পণ্য / বিভাগগুলির সম্পর্কিত ক্যাশে শুদ্ধের সাথে একত্রিত করুন এবং শীঘ্রই আপনি মাইএসকিউএল লোডকে অপ্রয়োজনীয়ভাবে বাড়তে দেখবেন।

মাল্টি-মাস্টার কখনই কোনও সমাধান নয় যা আমরা একটি কার্যকর বিকল্প হিসাবে বিবেচনা করি বা বিবেচনা করি, তবে মাস্টার / স্লেভ মাধ্যমিক / তৃতীয় নোডগুলিতে পঠন লোড অফসেট করে সুবিধাগুলি অর্জন করতে পারে (আমরা এন্টারপ্রাইজ-আকারের স্টোরগুলিতে চাপ দিই) yield

তবে আমি এখনও এটি করতে চাই

প্রথমে আপনার দাসদের কনফিগার করুন। আমরা পারকোনা ইউটিলিটিস এবং মাইএসকিউএল শাখার বড় সমর্থক - তাদের কাছে আপনার বিদ্যমান ডিবি - ইনানোব্যাকাপেক্সের হট ব্যাকআপ নেওয়ার জন্য একটি আদর্শ সরঞ্জাম রয়েছে। এখানে একটি ভাল লেখার আছে

মাস্টার উপর

প্রতিস্থাপন করুন IME TIMESTAMP বা ট্যাব সম্পূর্ণ।

mysql
> GRANT REPLICATION SLAVE ON *.*  TO 'repl'@'$slaveip' IDENTIFIED BY '$slavepass';
> quit;
innobackupex --user=username --password=password /path/to/backupdir
innobackupex --user=username --password=password /
       --apply-log /path/to/backupdir/$TIMESTAMP/

rsync -avprP -e ssh /path/to/backupdir/$TIMESTAMP TheSlave:/path/to/mysql/
scp /etc/mysql/my.cnf TheSlave:/etc/mysql/my.cnf

দাসের উপর

/etc/init.d/mysql stop
mv /path/to/mysql/datadir /path/to/mysql/datadir_bak
mv /path/to/mysql/$TIMESTAMP /path/to/mysql/datadir
chown -R mysql:mysql /path/to/mysql/datadir
sed -i 's#server-id=1#server-id=2#g' /etc/mysql/my.cnf
/etc/init.d/mysql start
cat /var/lib/mysql/xtrabackup_binlog_info
> TheMaster-bin.000001     481

mysql
> CHANGE MASTER TO MASTER_HOST='$masterip', MASTER_USER='repl', MASTER_PASSWORD='$slavepass', MASTER_LOG_FILE='TheMaster-bin.000001', MASTER_LOG_POS=481;
> START SLAVE;

তারপরে একবার আপনার ক্রীতদাস চালু হয়ে গেলে, বাস্তবে, এটি অর্জনে কেবল কয়েকটি অতিরিক্ত লাইন কোড লাগে।

মধ্যে ./app/etc/local.xml

<default_read>
  <connection>
    <use/>
    <host><![CDATA[host]]></host>
    <username><![CDATA[username]]></username>
    <password><![CDATA[password]]></password>
    <dbname><![CDATA[dbname]]></dbname>
    <type>pdo_mysql</type>
    <model>mysql4</model>
    <initStatements>SET NAMES utf8</initStatements>
    <active>1</active>
  </connection>
</default_read>

সোর্স


"Icallyতিহাসিকভাবে, ম্যাজেন্টো কখনও মাইএসকিউএল দ্বারা আবদ্ধ হয়নি - বরং পিএইচপি।" আমি নিশ্চিত না যে আপনি ম্যাগেন্টো কী বলবেন তবে EAV সর্বদা পারফরম্যান্সের সমস্যা হয়ে দাঁড়িয়েছে। :)
B00MER

1
ওয়েল, আমি যে 400+ ম্যাজেন্টো সার্ভারগুলি পরিচালনা করি তার উল্লেখ করছি ... সংখ্যাগরিষ্ঠ নিয়ম হিসাবে, মাইএসকিউএল বিবেচনার আগে অনেকগুলি বাধা আছে। আসলে, একটি প্রধান উদাহরণ ডিসেম্বরের সময় আমাদের গ্রাহকদের মধ্যে একটি। প্রতি ঘন্টা 15k অনন্য দর্শনার্থীর সাথে একক সার্ভার সেট আপ (32 কোর, 64 জিবি র‌্যাম) প্রতি ঘন্টা 200 টি অর্ডার প্রক্রিয়াকরণ। এই প্রশ্নের সাধারণ পাঠকের জন্য তারা এমনকি এই ভলিউমটি করার সম্ভাবনা খুব কম। সুতরাং ট্র্যাফিক এবং লেনদেনের স্তরে তারা মুখোমুখি হবে, মাইএসকিউএল কোনও বাধা নয়।
বেন লেসানী - সোনাসি

1
@Brandon। আমি শুধু যুক্ত করা মানে। আমি অস্বীকার করি না যে মাইএসকিউএল টিউন করা কোনও প্রয়োজনীয়তা নয় - এটি স্পষ্টতই। কর্মক্ষমতা উন্নত করার জন্য কোনও মাস্টার / মাস্টার বা মাস্টার / স্লেভ সেটআপ কনফিগার করার দরকার নেই যতক্ষণ না আপনি বাস্তবে একটি নির্দিষ্ট টিপিং পয়েন্ট না চাপেন - এবং এটি বেশ উচ্চ। এছাড়াও, এটির পক্ষে আরও অনেক বেশি কার্যকারিতা বাধা বা ঝুঁকিপূর্ণ ডেটা অখণ্ডতা সৃষ্টি করা, এ জাতীয় জিনিস করার চেষ্টা করা।
বেন লেসানী - সোনাসি ২৩ শে

5

সাধারণভাবে ম্যাজেন্টো হ'ল সিপিইউ আবদ্ধ, ডাটাবেস সীমাবদ্ধ নয়, এবং বেশিরভাগ সিপিইউ ক্রিয়াকলাপ ক্যাশে করা যায় যার কারণে আপনি বার্নিশ / এনগিনেক্স সেটআপগুলিতে এতগুলি টিউটোরিয়াল খুঁজে পাবেন। আপনি এখানে বিস্তারিত হিসাবে আপনার প্রশাসককে একটি পৃথক ওয়েবনোডে স্থানান্তর করতে পারেন ।

সাধারণ দৃust়তার জন্য, বাক্সের জন্য পরম সর্বোত্তম ব্যাং একটি পরিচালিত মাইএসকিউএল পরিষেবা হবে।

আমার কেবল অ্যামাজন আরডিএসের সাথে অভিজ্ঞতা আছে তবে তারা ফেইলওভার, ব্যাকআপ, আপগ্রেডগুলি, স্কেলিং আপ / ডাউন স্বয়ংক্রিয়ভাবে প্রতিলিপি তৈরির পাঠ করে। সুতরাং আপনার কাছে একটি উচ্চ প্রাপ্যতা মাস্টার নোড থাকতে পারে যা স্বয়ংক্রিয়ভাবে ফেলওভার রয়েছে - গোলামকে সিঙ্কে রাখার জন্য অ্যামাজন একটি কাস্টমাইজড বাইনারি লগ প্রতিলিপি ব্যবহার করে, ফেলওভারটি সাধারণত 2 মিনিটেরও কম সময় নেয় এবং তারপরে আপনি যতগুলি পঠিত প্রতিলিপি তৈরি করতে পারেন আপনার রিপোর্টিং / ইন্টিগ্রেশন প্রয়োজনীয়তার জন্য স্কেল আউট প্রয়োজন।

আমি বিভাজন পঠন / লেখার দিকে তাকিয়েছিলাম যা ম্যাজেন্টোর আর্কিটেকচারের সাথে খুব কার্যকর, তবে ডাটাবেসটি আমার ব্যবহারের ক্ষেত্রে কোনও বাধা নয়। কীটি অপ্টিমাইজ করা দরকার তা অনুমান করার চেয়ে xhprof / xhgui এর মত প্রোফাইল ব্যবহারের জন্য আমি উচ্চ প্রস্তাব দিই । প্রোফাইলিংয়ের প্রথম নিয়মটি পরিমাপ করা।


দয়া করে, আমরা এখানে কোনও বুকমার্ক ওয়েবসাইট তৈরি করতে নেই যেখানে লিঙ্কগুলি দিয়ে প্রশ্নের উত্তর দেওয়া হয়। উত্তরের প্রয়োজনীয় অংশগুলি এখানে অন্তর্ভুক্ত করুন এবং রেফারেন্সের জন্য লিঙ্কটি সরবরাহ করুন।
j0k

@ j0k লিঙ্কগুলি রেফারেন্সের জন্য সরবরাহ করা হয়েছে এবং উত্তরটি নিজেরাই দাঁড়িয়ে আছে - আপনি যদি একমত না হন তবে দয়া করে আরও সুনির্দিষ্ট হন।
রাল্ফ টাইস

হ্যাঁ, কমপক্ষে, আপনার উত্তরটি অন্যটির চেয়ে ভাল। আমার অর্থ হ'ল, ওপিকে কী কনফিগার করতে আরও প্রযুক্তিগত জিনিস প্রয়োজন হতে পারে, কেন কোনও আর্কিটেকচার স্কিমা ইত্যাদি নয় ... এমনকি যদি আপনি অভিজ্ঞতা দুর্দান্ত হন!
j0k

5

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

সবচেয়ে গুরুত্বপূর্ণ বিট:

/app/etc/local.xml

<default_setup>
    <connection>
        <host><![CDATA[Master-host]]></host>
        <username><![CDATA[user]]></username>
        <password><![CDATA[pass]]></password>
        <dbname><![CDATA[magentodb]]></dbname>
        <active>1</active>
    </connection>
</default_setup>
<default_read>
    <connection>
        <use/>
        <host><![CDATA[Slave-host]]></host>
        <username><![CDATA[user]]></username>
        <password><![CDATA[pass]]></password>
        <dbname><![CDATA[magento]]></dbname>
        <type>pdo_mysql</type>
        <model>mysql4</model>
        <initStatements>SET NAMES utf8</initStatements>
        <active>1</active>
    </connection>
</default_read> 

মাস্টার মাইএসকিউএল সার্ভারের জন্য কনফিগারেশন (/etc/mysql/my.cnf) ফাইলটিতে নীচের লিখিত সামগ্রী যুক্ত করুন:

[mysqld]
server-id       = 1
log_bin         = /var/log/mysql/mysql-bin.log
expire_logs_days    = 10
max_binlog_size     = 100M
binlog_do_db        = magento_demo
binlog_ignore_db    = mysql 

স্লেভ মাইএসকিউএল সার্ভারের জন্য কনফিগারেশন (/etc/mysql/my.cnf) ফাইলটিতে নীচের লিখিত সামগ্রী যুক্ত করুন:

[mysqld]
server-id=2
log-bin=mysql-bin
master-host=192.168.1.2
master-user=username
master-password=111111
master-port=3306
replicate-do-db=magento_demo
replicate-ignore-db=mysql
master-connect-retry=60 

পরে উভয় মাইএসকিউএল সার্ভার পুনরায় চালু করুন


1
লোন লিঙ্কটি একটি দুর্বল উত্তর হিসাবে বিবেচিত হয় কারণ এটি নিজেই অর্থহীন এবং লক্ষ্য সংস্থান ভবিষ্যতে জীবিত থাকার গ্যারান্টিযুক্ত নয় । উত্তরের প্রয়োজনীয় অংশগুলি এখানে অন্তর্ভুক্ত করা ভাল , এবং রেফারেন্সের জন্য লিঙ্কটি সরবরাহ করা ভাল।
j0k

@ j0k, অনুরোধ অনুসারে সম্পন্ন;)
কেনি

3

একটি ধারণা হ'ল আপনি আপনার ক্যাটালগটিকে ডিএনএস রাউন্ড-রবিন ব্যবহার করে স্লেভ সার্ভার (গুলি) এ ভাগ করতে পারেন ।

সুতরাং মাইএসকিউএলে নরমাল মাস্টার -> ক্রীতদাসের প্রতিলিপি সেটআপ করুন।

তারপরে আপনার ম্যাজেন্টো সেটআপে আপনি আপনার রাউন্ড-রবিন কনফিগার করা ডিএনএস হোস্ট থেকে পাঠাতে আপনার ক্যাটালগটি কনফিগার করতে পারেন। লেখাগুলি আপনার মাস্টার ডাটাবেসে থাকবে।

আপনি এটি করতে পারেন app/etc/local.xml

<catalog_read_setup>
   <connection>
      <host><![CDATA[round.robbin.dns.host]]></host>
      <username><![CDATA[USERNAME]]></username>
      <password><![CDATA[password]]></password>
      <dbname><![CDATA[DATABASE]]></dbname>
      <initStatements><![CDATA[SET NAMES utf8]]></initStatements>
      <model><![CDATA[mysql4]]></model>
      <type><![CDATA[pdo_mysql]]></type>
      <pdoType><![CDATA[]]></pdoType>
      <active>1</active>
   </connection>
</catalog_read_setup>
<catalog_read>
   <connection>
     <use>catalog_read_setup</use>
   </connection>
 </catalog_read>

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


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