এই নিবন্ধে, আমরা SQL Server-এ Always On Availability Groups ইনস্টল এবং কনফিগার করার ধাপে ধাপে গাইড দেব, যা উইন্ডোজ সার্ভার ২০১৯-এ চলছে, ফেইলওভার পরিস্থিতি এবং অন্যান্য সম্পর্কিত বিষয়ে আলোচনা করব।
Always On Availability Groups মাইক্রোসফট SQL Server-এ হাই অভেইলেবিলিটি প্রদান করে। Always On MSSQL ২০১২ রিলিজে উপস্থিত হয়েছিল।
SQL Server-এ Always On Availability Groups-এর বৈশিষ্ট্য
SQL Server availability groups কিসের জন্য ব্যবহার করা যায়?
- MS SQL হাই অভেইলেবিলিটি এবং স্বয়ংক্রিয় ফেইলওভার;
- SELECT কুয়েরি লোড ব্যালেন্সিং নোডগুলোর মধ্যে (সেকেন্ডারি রেপ্লিকা পঠনযোগ্য হতে পারে);
- সেকেন্ডারি রেপ্লিকা থেকে ব্যাকআপ;
- ডেটা রিডান্ডেন্সি। প্রতিটি রেপ্লিকা availability group ডেটাবেসের কপি রাখে।
Always On Windows Server Failover Cluster (WSFC) ভিত্তিক। WSFC availability group নোডগুলোর উপলব্ধতা মনিটর করে এবং স্বয়ংক্রিয় ফেইলওভার প্রদান করে। MS SQL Server ২০১৭ থেকে, Always On WSFC ছাড়া এবং লিনাক্স হোস্টে ব্যবহার করা যায়। লিনাক্স-ভিত্তিক ক্লাস্টার বানালে WSFC-এর পরিবর্তে Pacemaker ব্যবহার করা যায়।
Always On Standard এডিশনে উপলব্ধ, কিন্তু কিছু সীমাবদ্ধতা আছে:
- ২টি রেপ্লিকায় সীমাবদ্ধ (প্রাইমারি এবং সেকেন্ডারি);
- সেকেন্ডারি রেপ্লিকা ডেটা পড়তে ব্যবহার করা যায় না;
- সেকেন্ডারি রেপ্লিকা MS SQL ব্যাকআপের জন্য ব্যবহার করা যায় না;
- প্রতি availability group-এ শুধু ১টি ডেটাবেস সাপোর্ট করা হয়।
Enterprise এডিশনে কোনো সীমাবদ্ধতা নেই।
MS SQL Server লাইসেন্সিং দিক সম্পর্কে এখানে পড়ুন।
শব্দার্থ বিবেচনা করা যাক।
- Always On Availability Group হলো রেপ্লিকা এবং ডেটাবেসের একটি সেট;
- Replica হলো availability group-এ একটি SQL Server ইনস্ট্যান্স। একটি রেপ্লিকা প্রাইমারি বা সেকেন্ডারি হতে পারে। প্রতিটি রেপ্লিকাতে এক বা একাধিক ডেটাবেস থাকতে পারে।
Always On WSFC-র উপর ভিত্তি করে। প্রতিটি availability group নোড অবশ্যই একটি উইন্ডোজ ফেইলওভার ক্লাস্টারের সদস্য হতে হবে। প্রতিটি SQL Server ইনস্ট্যান্সের একাধিক availability group থাকতে পারে। প্রতিটি availability group-এ সর্বোচ্চ ৮টি সেকেন্ডারি রেপ্লিকা থাকতে পারে।
যদি প্রাইমারি রেপ্লيكا ব্যর্থ হয়, তবে ক্লাস্টার নতুন প্রাইমারি রেপ্লিকার জন্য ভোট দেবে, এবং Always On সেকেন্ডারি রেপ্লিকাগুলোর একটিকে প্রাইমারি বানাবে। যেহেতু ব্যবহারকারীরা Always On-এ কাজ করার সময় Listener (একটি বিশেষ ক্লাস্টার IP ঠিকানা এবং সংশ্লিষ্ট DNS নাম) এর সাথে কানেক্ট করে, তাই রাইট কুয়েরি আবার চালানো সম্ভব হবে। Listener SELECT কুয়েরি সেকেন্ডারি রেপ্লিকাগুলোর মধ্যে ব্যালেন্স করার জন্যও দায়বদ্ধ।
Always On Availability Group-এর জন্য উইন্ডোজ ফেইলওভার ক্লাস্টার কনফিগার করা
সবচেয়ে প্রথমে, Always On দ্বারা ব্যবহৃত সব নোডে ফেইলওভার ক্লাস্টার কনফিগার করতে হবে।
আমার কনফিগারেশন:
- উইন্ডোজ সার্ভার ২০১৯ চালিত ২টি ভার্চুয়াল মেশিন
- SQL Server 2019 Enterprise-এর ২টি ইনস্ট্যান্স
- নোড হোস্টনেম: testnode1 এবং testnode2। SQL Server ইনস্ট্যান্স নাম: node1 এবং node2।
সার্ভার ম্যানেজার বা পাওয়ারশেল দিয়ে Failover Clustering রোল যোগ করুন:
Install-WindowsFeature –Name Failover-Clustering –IncludeManagementTools
ইনস্টলেশন স্বয়ংক্রিয়, এখন কিছু কনফিগার করার প্রয়োজন নেই। Failover Cluster Manager স্ন্যাপ-ইন (FailoverClusters.SnapInHelper.msc) চালু করে একটি নতুন ক্লাস্টার তৈরি করুন।
আপনার ক্লাস্টারের সাথে যোগ দেওয়ার জন্য হোস্টের নামগুলো যোগ করুন।
তब উইজার্ড কিছু টেস্ট চালানোর প্রস্তাব দেবে। এটি করতে প্রথম আইটেম সিলেক্ট করুন।
ক্লাস্টার নাম নির্দিষ্ট করুন, একটি নেটওয়ার্ক সিলেক্ট করুন, এবং ক্লাস্টার IP ঠিকানা দিন। ক্লাস্টার নাম স্বয়ংক্রিয়ভাবে DNS-এ প্রদর্শিত হবে; আপনাকে ম্যানুয়ালি DNS রেকর্ড তৈরি করার প্রয়োজন নেই। আমার কেসে ক্লাস্টার নাম ClusterAG।
Add all eligible storage to the cluster অপশন আনচেক করুন যেন পরে ডিস্ক যোগ করা যায়।
ক্লাস্টারে শুধু দুটি নোড আছে, তাই Cluster Quorum কনফিগার করতে হবে। Cluster Quorum হলো কাস্টিং ভোট। উদাহরণস্বরূপ, যদি ক্লাস্টার নোডের একটি অনুপলব্ধ হয়, তবে ক্লাস্টারের কি কোনো নোড আসলে অনলাইন আছে এবং একে অপরের সাথে যোগাযোগ করতে পারে তা বের করতে হবে। Cluster Quorum ক্লাস্টার কনসিস্টেন্সি প্রদান করে (Cluster -> More Actions -> Configure Cluster Quorum Settings)।
Quorum witness অপশন সিলেক্ট করুন।
তারপর witness টাইপ সিলেক্ট করুন: একটি ফাইল শেয়ার উইটনেস।
শেয়ার্ড ফোল্ডারের UNC পথ নির্দিষ্ট করুন। ডিরেক্টরি নিজে তৈরি করুন। এটি আপনার ফেইলওভার ক্লাস্টারের বাইরে একটি সার্ভারে থাকতে হবে।
ক্লাস্টার কনফিগার করার সময় নিচের এরর দেখা দিতে পারে:
There was an error configuring the file share witness. Unable to save property changes for File Share Witness. The system cannot find the file specified.
সম্ভবত যে ইউজার অ্যাকাউন্টের অধীনে ক্লাস্টার চলছে, সেটির শেয়ার্ড ফোল্ডার অ্যাক্সেস করার NTFS পারমিশন নেই। ডিফল্টভাবে ক্লাস্টার একটি লোকাল ইউজার অ্যাকাউন্টের অধীনে চলে। আপনি ফোল্ডারে সকল ক্লাস্টার কম্পিউটারের সুবিধা দিতে পারেন অথবা ক্লাস্টার সার্ভিসের অ্যাকাউন্ট পরিবর্তন করে প্রাসঙ্গিক সুবিধা দিতে পারেন।
বেসিক উইন্ডোজ ফেইলওভার ক্লাস্টার কনফিগারেশন সম্পন্ন।
MS SQL Server-এ Always On Availability Group কনফিগার করা
সাধারণ SQL Server ইনস্ট্যান্স ইনস্টলেশনের পর, আপনি Always On Availability Groups সক্ষম এবং কনফিগার করতে পারেন। SQL Server Configuration Manager-এ ইনস্ট্যান্স প্রপার্টিজে এনেবল করুন। স্ক্রিনশটে দেখা যাচ্ছে SQL Server ইতিমধ্যে ডিটেক্ট করেছে যে এটি একটি WSFC ক্লাস্টারের সদস্য। Enable Always On Availability Groups চেক করুন এবং MSSQL ইনস্ট্যান্স সার্ভিস রিস্টার্ট করুন। দ্বিতীয় ইনস্ট্যান্সের জন্যও একই করুন।
টিপ। Always On কনফিগারেশনের আগে, নিশ্চিত করুন যে SQL Server সার্ভিসগুলো লোকাল সিস্টেম অ্যাকাউন্টের অধীনে চলছে না। Group Managed Service Accounts বা সাধারণ ডোমেন অ্যাকাউন্ট ব্যবহার করার পরামর্শ দেওয়া হয়। অন্যথায়, আপনি Always-On কনফিগারেশন সম্পূর্ণ করতে পারবেন না।
SQL Server Management Studio চালু করুন, আপনার হোস্টের সাথে কানেক্ট করুন, Always On High Availability-এ ক্লিক করুন, এবং New Availability Group Wizard চালান।
SQL Server Management Studio 18.x SQL Server 2017 এবং SQL Server 2019-এ কিছু Always On সেটিংস যোগ করা হয়েছে যা আগে শুধু T-SQL-এ উপলব্ধ ছিল, তাই সর্বশেষ SSMS ভার্সন ব্যবহার করার পরামর্শ দেওয়া হয়।
আপনার Always On availability group-এর জন্য একটি নাম দিন এবং Database Level Health Detection সিলেক্ট করুন। এই অপশন ব্যবহার করে Always On ডেটাবেস অস্বস্থ হলে সেটা ডিটেক্ট করতে পারবে।
আপনার Always On availability group-এ যোগ করার জন্য SQL Server ডেটাবেস সিলেক্ট করুন।
Add Replica ক্লিক করুন এবং দ্বিতীয় SQL সার্ভারের সাথে কানেক্ট করুন। এইভাবে আপনি ৮টি সার্ভার পর্যন্ত যোগ করতে পারেন।
- Initial Role হলো গ্রুপ তৈরি হওয়ার সময় রেপ্লিকার রোল। এটি প্রাইমারি বা সেকেন্ডারি হতে পারে;
- Automatic Failover – যদি ডেটাবেস অনুপলব্ধ হয়, Always On প্রাইমারি রোল অন্য রেপ্লিকাতে সরিয়ে দেবে। এই আইটেম চেক করুন;
- Availability Mode সিনক্রোনাস কমিট বা অ্যাসিনক্রোনাস কমিট সিলেক্ট করার অনুমতি দেয়। সিনক্রোনাস মোড সিলেক্ট করলে, প্রাইমারি রেপ্লিকাতে আসা ট্রানজ্যাকশন সকল সেকেন্ডারি রেপ্লিকাতে (যাদের সিনক্রোনাস মোড আছে) সিনক্রোনাসলি পাঠানো হবে। প্রাইমারি রেপ্লিকা ট্রানজ্যাকশন শেষ করবে অন্য রেপ্লিকাগুলো ডিস্কে লিখে ফেলার পর। তাই প্রাইমারি রেপ্লিকা ব্যর্থ হলে ডেটা লস হবে না। অ্যাসিনক্রোনাস মোডে, প্রাইমারি রেপ্লিকা অন্য রেপ্লিকাগুলোর রেসপন্সের জন্য অপেক্ষা না করেই পরিবর্তন লিখে ফেলে।
- Readable Secondary হলো একটি প্যারামিটার যা সেকেন্ডারি রেপ্লিকাগুলোর বিরুদ্ধে SELECT কুয়েরি চালানোর অনুমতি দেয়। যদি মান yes হয়, তবে ক্লায়েন্টরা
ApplicationIntent=readonlyছাড়া কানেক্ট করলেও রিড-অনলি অ্যাক্সেস পাবে। - Required synchronized secondaries to commit হলো ট্রানজ্যাকশন শেষ করার জন্য সিনক্রোনাইজড সেকেন্ডারি রেপ্লিকার সংখ্যা। রেপ্লিকার সংখ্যা অনুযায়ী সেট করুন, আমি ১ সেট করব।
Endpoint ট্যাবে কিছু এডিট করবেন না।
Backup Preferences ট্যাবে, ব্যাকআপ কোথা থেকে হবে সেটা সিলেক্ট করতে পারেন। ডিফল্ট সেটিং Prefer Secondary রেখে দিন।
Availability group listener-এর নাম, পোর্ট, এবং IP ঠিকানা নির্দিষ্ট করুন।
Read-Only Routing সেটিংস অপরিবর্তিত রাখুন।
রেপ্লিকা সিনক্রোনাইজেশন টাইপ সিলেক্ট করুন। আমি প্রথম আইটেম (Automatic seeding) চেক করা রেখেছি।
তারপর আপনার সেটিংস ভ্যালিডেট হবে। যদি কোনো এরর না থাকে, পরিবর্তন প্রয়োগ করতে Finish ক্লিক করুন।
আমার কেসে সব টেস্ট সফল হয়েছে, কিন্তু ইনস্টলেশনের পর Results স্টেপে উইজার্ড availability group listener তৈরি করতে ত্রুটি দেখাল। ক্লাস্টার ইভেন্ট লগে EVENTID 1194 এলোর্স করলো:
Cluster network name resource failed to create its associated computer object in the domain.
এর মানে হলো ক্লাস্টারটির লিসেনার তৈরির জন্য পর্যাপ্ত পারমিশন নেই। ডকুমেন্টেশন অনুযায়ী, আপনার ক্লাস্টারের অবজেক্টে কম্পিউটার-টাইপ অবজেক্ট তৈরির পারমিশন দিলে পর্যাপ্ত। AD-এ প্রিভিলেজ ডেলিগেশন দিয়ে এটি করা সহজ (অথবা দ্রুত কিন্তু অসুরক্ষিত উপায় হলো CLUSTERAG$ অবজেক্টকে অস্থায়ীভাবে Domain Admins গ্রুপে যোগ করা)।
Always-On এবং availability group-এ কম SQL পারফরম্যান্স সমস্যা ডায়াগনোজ করার সময়, স্ট্যান্ডার্ড SQL Server ডায়াগনস্টিক টুল ব্যবহারের পাশাপাশি উইন্ডোজ ক্লাস্টার লগ সূক্ষ্মভাবে অধ্যয়ন করা উচিত।
যেহেতু আমি availability group তৈরি করেছি কিন্তু listener না, ম্যানুয়ালি যোগ করলাম। আপনার availability group-এর কনটেক্সট মেনু খুলুন এবং Add Listener ক্লিক করুন।
Listener-এর IP ঠিকানা, পোর্ট, এবং DNS নাম নির্দিষ্ট করুন।
নিশ্চিত করুন যে Listener আপনার Always On গ্রুপের Availability Group Listeners সেকশনে প্রদর্শিত হচ্ছে।
এভাবে, আপনি একটি Always On availability group-এর বেসিক কনফিগারেশন সম্পন্ন করেছেন।
SQL Server Always On: কার্যকারিতা যাচাই এবং ফেইলওভার
Availability Group Dashboard (Show Dashboard) দেখুন।
সব ঠিক আছে, গ্রুপ তৈরি হয়েছে এবং কাজ করছে।
নোড ২ কে ম্যানুয়ালি প্রাইমারি ইনস্ট্যান্স बनाने চেষ্টা করুন। Availability group-এ রাইট-ক্লিক করে Failover সিলেক্ট করুন।
Failover Readiness মানটি লক্ষ্য করুন। No data loss মানে কোনো ডেটা লস হবে না।
নোড ২-এ কানেক্ট করুন। Finish ক্লিক করুন।
নিশ্চিত করুন যে নোড ২ availability group-এ প্রাইমারি রেপ্লিকা (Primary Instance) হয়ে গেছে।
Listener সঠিকভাবে কাজ করছে কিনা যাচাই করুন। SSMS-এ listener DNS নাম এবং পোর্ট কমা দিয়ে আলাদা করে নির্দিষ্ট করুন: ag1-listener-1,1445
সিম্পল insert, select এবং update SQL কুয়েরি আপনার ডেটাবেসে চালান।
তারপর প্রাইমারি রেপ্লিকার অটোমেটিক ফেইলওভার চেক করুন। শুধু TESTNODE2-এ sqlservr.exe প্রসেস কিল করুন।
বचे থাকা নোডে: TESTNODE1\NODE1-এ availability group স্টেট চেক করুন।
ক্লাস্টার স্বয়ংক্রিয়ভাবে testnode1\node1-এর স্টেটস প্রাইমারিに変更 করেছে যেহেতু testnode2\node2 অনুপলব্ধ হয়েছে।
Listener স্টেট চেক করুন যেহেতু ক্লায়েন্টরা এটি ব্যবহার করে কানেক্ট করবে।
আমার কেসে, আমি listener-এ সফলভাবে কানেক্ট করলাম, কিন্তু ডেটাবেস অ্যাক্সেস করার চেষ্টা করলে এই এরর এলো:
Unable to access database 'TestDatabase' because it lacks a quorum of nodes for high availability. Try the operation again later.
এই এরর Required synchronized secondaries to commit অপশনের কারণে এলো। যেহেতু কনফিগার করার সময় এর মান ১ সেট করা হয়েছিল, Always On ডেটাবেসে কানেক্ট করার অনুমতি দেয় না, কারণ আমাদের কাছে শুধু একটি প্রাইমারি রেপ্লিকা বাকি আছে।
মানটি 0 সেট করুন এবং আবার কুয়েরি চালান।
Testnode1 প্রাইমারি ইনস্ট্যান্স স্টেটস রাখল, testnode2 সেকেন্ডারি হয়ে গেল। Testnode2 পাওয়ার অফ থাকার সময় testnode1-এ যে ডেটা পরিবর্তন করা হয়েছিল, কম্পিউটার অন করার পর সফলভাবে সিনক্রোনাইজ হয়েছে।
সুতরাং, আমরা নিশ্চিত করলাম যে সবকিছু সঠিকভাবে কাজ করছে এবং 크িটিক্যাল ব্যর্থতার পরিস্থিতিতেও ডেটা রিড/রাইটের জন্য উপলব্ধ থাকবে।
Always On availability groups সহজে কনফিগার করা যায়। আপনি যদি SQL Server-ভিত্তিক ফেইলওভার সমাধান তৈরি করতে চান, তবে availability group সেটা ভালোভাবে পরিচালনা করবে।