এটা কোন গোপন বিষয় নয় যে সাম্প্রতিক বছরগুলিতে পরিষেবা হিসাবে পরিকাঠামো এবং পরিষেবা হিসাবে প্ল্যাটফর্ম বিভিন্ন প্রকল্পে তাদের ক্ষমতা, বিশেষ করে সম্পদের দক্ষতা এবং নমনীয়তার কারণে ক্রমবর্ধমানভাবে ব্যাপক হয়ে উঠেছে। ফলস্বরূপ, মাইক্রোসফ্ট একটি ব্যবহারকারী-বান্ধব পরিবেশ তৈরি করতে অনেক সময় এবং প্রচেষ্টা ব্যয় করেছে যেখানে SQL ব্যবহার করা যেতে পারে।
সোশ্যাল ডিসকভারি গ্রুপ টিম আমাদের পণ্যগুলিকে শক্তিশালী করতে SQL সহ বিভিন্ন ডেটাবেস ব্যবহার করে। 40+ গ্লোবাল পরিষেবাগুলির একটি পোর্টফোলিও সহ যা বিশ্বব্যাপী মিলিত হতে এবং সংযোগ করতে সহায়তা করে, আমাদের ব্যবহারকারী বেস বিশ্বজুড়ে 250 মিলিয়নেরও বেশি লোককে অন্তর্ভুক্ত করে। ব্যবহারকারীদের জন্য আমাদের পণ্যের নির্ভরযোগ্যতা নিশ্চিত করতে, আমরা ক্লাউডে মূল পরিকাঠামোর অংশ রাখি। এটি এর স্থিতিস্থাপকতা, নিরাপত্তা এবং নমনীয়তা বাড়াতে সাহায্য করে।
আমরা Kubernetes ক্লাস্টার সহ বিভিন্ন প্ল্যাটফর্মে সার্ভার এবং পরিষেবা ডেটাবেস স্থাপনে যথেষ্ট অভিজ্ঞ। যাইহোক, আমরা Azure ক্লাউডে সম্পর্কিত SQL ডাটাবেস পরিকাঠামোর একটি অংশ যতটা সম্ভব নমনীয়, দক্ষ এবং নির্ভরযোগ্য করার প্রয়োজনীয়তার সম্মুখীন হয়েছি। Microsoft Azure ক্লাউডে SQL ব্যবহার করার 3টি উপায় রয়েছে:
গবেষণার পর, আমরা Azure SQL ডাটাবেস ব্যবহার করার সিদ্ধান্ত নিয়েছি। যারা তথাকথিত Azure SQL ডাটাবেসের কথা শোনেননি তাদের জন্য শুধুমাত্র স্পষ্ট করার জন্য, তারা Microsoft Azure-এর অংশ হিসাবে সরবরাহ করা ক্লাউড ডাটাবেসগুলি পরিচালনা করে।
আমি নিম্নলিখিত সুবিধাগুলি হাইলাইট করেছি:
এখন আসুন ধাপে ধাপে জিনিসগুলি সম্পর্কে কথা বলি এবং একটি ডাটাবেস স্থাপন এবং তৈরি করার প্রক্রিয়াটি একবার দেখে নেওয়া যাক। এটি একটি পাওয়ার শেল স্ক্রিপ্ট বা Azure CLI ব্যবহার করে করা যেতে পারে, তবে স্পষ্টতার জন্য, আমি পোর্টালের গ্রাফিকাল ইন্টারফেস ব্যবহার করে প্রক্রিয়াটি দেখি। এটি করতে, Azure SQL এ যান, 'তৈরি করুন' এ ক্লিক করুন এবং 'SQL ডেটাবেস' নির্বাচন করুন।
আমরা রিসোর্স গ্রুপ নির্দিষ্ট করি, একটি বিদ্যমান সার্ভার আছে কিনা তা নির্বাচন করুন বা একটি নতুন তৈরি করুন (প্রশাসকের নাম এবং ডেটা নির্দেশ করে), এবং ডাটাবেসের জন্য একটি নাম নিয়ে আসুন। আমি আমাদের সাধারণ কাজের চাপের জন্য কম্পিউট এবং স্টোরেজ রিসোর্সের সুষম মিশ্রণের সাথে DTU (ডাটাবেস লেনদেন ইউনিট) ভিত্তিক বান্ডিল প্যাকেজগুলি বেছে নেওয়ার সুপারিশ করব।
সেটিংসের জন্য কিছু ট্যাব রয়েছে: নেটওয়ার্ক, নিরাপত্তা, অতিরিক্ত সেটিংস এবং ট্যাগ; ন্যূনতম স্ট্যান্ডার্ড কনফিগারেশনের জন্য, এগুলি ডিফল্টরূপে অপরিবর্তিত রাখা যেতে পারে। তারপর আমরা ডাটাবেস তৈরি হওয়ার জন্য অপেক্ষা করি। এটি সর্বনিম্ন সেটআপ সম্পূর্ণ করে, এবং বেস সম্পন্ন হয়।
ডাটাবেস সংস্থানগুলির আকার খুব সহজেই পরিবর্তন করা যেতে পারে, আক্ষরিক অর্থে একটি ক্লিকের মাধ্যমে, এবং অপর্যাপ্ত সংস্থানগুলির ক্ষেত্রে, আমরা আকার এবং কার্যকারিতার ক্ষেত্রে আমাদের প্রয়োজনীয় প্যারামিটারগুলি সেট করতে পারি।
তারপর আপনি আপনার আইপি ঠিকানা বা সাবনেট যোগ করতে ভুলবেন না বা এই ডাটাবেস হোস্ট করা সার্ভারের ফায়ারওয়ালে সমস্ত সংযোগের অনুমতি না দিয়ে আপনি বাইরে থেকে আপনার পছন্দ মতো যে কোনও উপায়ে আপনার ডাটাবেসের সাথে সংযোগ করতে পারেন।
SQL সার্ভার ম্যানেজমেন্ট স্টুডিও (SSMS) এর মাধ্যমে সংযোগ করা এবং আরও পরিচালনা করা সুবিধাজনক, তবে অন্যান্য সরঞ্জাম এবং Azure পোর্টালের মাধ্যমেও এটি করা সম্ভব।
একটি পাবলিক সংযোগ পয়েন্ট ছাড়াও, আপনি প্রয়োজনীয় সাবনেটে একটি সার্ভার যোগ করে এবং ব্যক্তিগত DNS জোন কনফিগার করে একটি ব্যক্তিগত তৈরি করতে পারেন।
ফল্ট টলারেন্স সম্পর্কে বলতে গিয়ে, এখানে আমরা ফেইলওভারের একটি খুব সুবিধাজনক এবং স্বজ্ঞাত বাস্তবায়ন দেখতে পাচ্ছি, বিভিন্ন অঞ্চলে ভিত্তিক সার্ভার সুরক্ষার একটি গ্রুপ।
Azure-এ, একটি ফেইলওভার গ্রুপ, ফোর্সড ফেইলওভার এবং স্বয়ংক্রিয় ফেইলওভার মোডে সার্ভারে ডাটাবেস যোগ করা এবং অপসারণ করা সম্ভব।
আপনি নীচের স্ক্রিনশট এটি দেখতে পারেন. ফেইলওভার গ্রুপের জন্য একটি নাম নিয়ে আসা যাক এবং সার্ভারটিকে ফেইলওভারে রাখি। নির্দিষ্ট ডেটাবেসগুলির সিঙ্ক্রোনাইজেশন স্বয়ংক্রিয়ভাবে শুরু হবে। দ্বিতীয় সার্ভারটি শুধুমাত্র-পঠন মোডে থাকবে। ব্যর্থতার ক্ষেত্রে, ট্র্যাফিক স্বয়ংক্রিয়ভাবে দ্বিতীয় অঞ্চলে স্যুইচ করা হয় এবং প্রাথমিক এবং মাধ্যমিক সার্ভারগুলি স্বয়ংক্রিয়ভাবে স্থান পরিবর্তন করে।
কিন্তু ডাটাবেসের মধ্যে ডাটা-লেভেল সমস্যা থাকলে ফেইলওভার সাহায্য করবে না। নিশ্চিতভাবে এই ক্ষেত্রে, আপনাকে ব্যাকআপ তৈরি করতে হবে। পোর্টালের মধ্যে এবং তৃতীয় পক্ষের সরঞ্জামগুলির মাধ্যমে বা, উদাহরণস্বরূপ, Azure DevOps (পাইপলাইনে আপনি SqlAzureDacpacDeployment + AzureFileCopy টাস্ক ব্যবহার করতে পারেন) উভয়ের মাধ্যমেই ব্যাকআপ কনফিগার করা সম্ভব। পোর্টালের মধ্যে, ব্যাকআপগুলি ব্যাকআপ ট্যাবে কনফিগার করা হয় এবং প্রয়োজনীয় স্টোরেজ নীতিগুলি সেট করা হয়৷
আপনি যদি তৃতীয় পক্ষের ব্যাকআপ সরঞ্জামগুলি ব্যবহার করতে পছন্দ করেন তবে আমি Azure DevOps বা SQL প্যাকেজ সরঞ্জামগুলি বিবেচনা করার পরামর্শ দেব।
পোর্টালে পুনরুদ্ধারের প্রক্রিয়াটি আমার মতে খুব সুবিধাজনক নয়। আপনি প্রথম যে জিনিসটি লক্ষ্য করেন তা হল সাধারণ পরীক্ষার ডাটাবেসের জন্য দীর্ঘ পুনরুদ্ধারের সময়। উদাহরণস্বরূপ, গতকালের ব্যাকআপ থেকে 30MB বেসিক-আকারের ডাটাবেস পুনরুদ্ধার করতে আমার আধা ঘণ্টার বেশি সময় লেগেছে! Microsoft Azure সমর্থনের সাথে যোগাযোগ করার পরে, আমাকে পুনরুদ্ধারের জন্য PowerShell স্ক্রিপ্টগুলি ব্যবহার করার পরামর্শ দেওয়া হয়েছিল এবং জানানো হয়েছিল যে পুনরুদ্ধার প্রক্রিয়ার জন্য ডাটাবেসের আকার কমপক্ষে S3 হওয়া উচিত এবং পরে আকারটি হ্রাস করা যেতে পারে। নীচে আমি এই বিষয়ে আমার কিছু স্ক্রিপ্ট এবং উন্নয়ন উপস্থাপন করতে যাচ্ছি, সেগুলিকে উন্নত এবং উন্নত করা যেতে পারে তবে আমি নিশ্চিত যে আপনার মধ্যে অনেকেই সেগুলিকে দরকারী বলে মনে করতে পারেন৷
আমি আপনাকে ধাপে ধাপে নিয়ে যাব:
“ #Variables in use $Database = Get-AzSqlDatabase -ResourceGroupName "Test" -ServerName "test-serv1" -DatabaseName "dbforscript" $TargetDB = "dbforscript_new" $PITRtimedate = "2022-12-02 10:00:00Z" ##вам нужно увидеть действительную дату и время на портале $PITRSLO = "S3" $PITRNEWSLO = "S0" $PITRedition = "Standard" $failoverGroupRG = "Test" $failoverGroupS = "test-serv1" $failoverGroupDB = "dbforscript" $removedbfromfgRG = "Test" $removedbfromfgS = "test-serv1" $removedbfromfgDB = "XXXXX" $dropreplicaRG = "Test" $dropreplicaS = "test-serv2" $dropreplicaDB = "dbforscript" $sourcedbRG = "Test" $sourcedbS = "test-serv1" $sourcedbDBname = "dbforscript" $sourcedbDBNEWname = "dbforscript_old" $TargetDBNEWname = "dbforscript" “
1 - এই কোডটি একটি ভিন্ন নামে একটি ডাটাবেস পুনরুদ্ধার শুরু করে৷ যদি পুনরুদ্ধার করা ডাটাবেসের আসল নাম "dbforscript" হয়, তাহলে পুনরুদ্ধার করা ডাটাবেসের নাম হবে dbforscript_new। পুনরুদ্ধার করা ডাটাবেস SLO সংস্করণ S3 বা উচ্চতর হবে, যা এই ক্রিয়াটি সম্পাদন করার প্রস্তাবিত উপায়, এর জন্য পরিবর্তনশীল হল $PITRSLO = "S3", আপনি S3 বা উচ্চতর ব্যবহার করতে পারেন৷ এর পরে আমরা এসএলও স্তরটিকে আসলটিতে পুনরায় সেট করব, এটি কেবল পুনরুদ্ধারের জন্য।
“Restore-AzSqlDatabase -FromPointInTimeBackup -PointInTime $PITRtimedate -ResourceGroupName $Database.ResourceGroupName -ServerName $Database.ServerName -TargetDatabaseName $TargetDB -ResourceId $Database.ResourceID -Edition $PITRedition -ServiceObjectiveName $PITRSLO”
2 - এই কোডটি ফেইলওভার গ্রুপ থেকে সোর্স ডাটাবেস সরিয়ে দেবে: সোর্স ডাটাবেস: dbforscript।
“$failoverGroup = Get-AzSqlDatabase -ResourceGroupName $failoverGroupRG -ServerName $failoverGroupS -DatabaseName $failoverGroupdb | Remove-AzSqlDatabaseFromFailoverGroup -ResourceGroupName $removedbfromfgRG -ServerName $removedbfromfgS -FailoverGroupName $removedbfromfgDB”
3 - এই কোডটি সার্ভার থেকে রেপ্লিকা ডাটাবেসটি সরিয়ে ফেলবে যেখানে এটি অবস্থিত: dbforscript test-serv2 সার্ভারে।
“Remove-AzSqlDatabase -ResourceGroupName $dropreplicaRG -ServerName $dropreplicaS -DatabaseName $dropreplicaDB”
4 - এই কোডটি মূল ডাটাবেসের নাম পরিবর্তন করবে অন্য নামে: পুনঃনামকরণের পরে, dbforscript হবে dbforscript_old।
“Set-AzSqlDatabase -ResourceGroupName $sourcedbRG -DatabaseName $sourcedbDBname -ServerName $sourcedbS -NewName $sourcedbDBNEWname”
5 - এই কোডটি পুনঃস্থাপিত ডাটাবেসের নাম পরিবর্তন করে মূল ডাটাবেসের নামে নামকরণ করবে, dbforscript_new এর নাম dbforscript-এ পুনঃনামকরণ করবে।
“Set-AzSqlDatabase -ResourceGroupName $Database.ResourceGroupName -DatabaseName $TargetDB -ServerName $Database.ServerName -NewName $TargetDBNEWname”
6 - এই কোডটি আপনার ডাটাবেস SLO স্তরকে পূর্ববর্তী (আসল) S0 মানতে ফিরিয়ে দেবে। যদি আপনার ডাটাবেস মৌলিক হয়, তাহলে অনুগ্রহ করে আপনি পোর্টালের পরে S0 থেকে মৌলিক-এ আপগ্রেড করতে পারেন।
“Set-AzSqlDatabase -ResourceGroupName $Database.ResourceGroupName -DatabaseName $TargetDBNEWname -ServerName $Database.ServerName -Edition $PITRedition -RequestedServiceObjectiveName $PITRNEWSLO -MaxSizeBytes 10737418240”
7 - শেষ কোডটি ফেইলওভার গ্রুপে পুনরুদ্ধার করা ডাটাবেস যোগ করে, যার আসল নাম ইতিমধ্যেই রয়েছে (যেহেতু আমরা এটি আগের কোডে পরিবর্তন করেছি)।
“$failoverGroup = Get-AzSqlDatabase -ResourceGroupName $failoverGroupRG -ServerName $failoverGroupS -DatabaseName $TargetDBNEWname | Add-AzSqlDatabaseToFailoverGroup -ResourceGroupName $failoverGroupRG -ServerName $failoverGroupS -FailoverGroupName $removedbfromfgDB”
আপনি কমান্ডের পরে - ErrorAction Stop প্যারামিটার যোগ করার কথা বিবেচনা করতে পারেন। এটি একটি ত্রুটির ক্ষেত্রে নিম্নলিখিত কমান্ডগুলিকে কার্যকর করা থেকে বাধা দেবে এবং কোনও স্নোবলিং হবে না।
এছাড়াও, আপনি সম্পাদনের সময় গণনা করতে স্ক্রিপ্টের শুরুতে এবং শেষে Get-Date যোগ করতে পারেন। আমার ক্ষেত্রে, প্রায় 3.3 গিগাবাইটের একটি ডাটাবেস 6 মিনিটেরও কম সময়ে এই জাতীয় স্ক্রিপ্ট দ্বারা পুনরুদ্ধার করা হয়েছিল।
আপনি যদি চান, আপনি অবশ্যই স্ক্রিপ্টটি অপ্টিমাইজ করতে পারেন, Azure DevOps এর মাধ্যমে এটি যোগ করতে পারেন, ভেরিয়েবলের সংখ্যা কমাতে পারেন, বা কিছু হার্ডকোড করতে পারেন, তবে আমি এটিকে যতটা সম্ভব বিস্তারিতভাবে বর্ণনা করার চেষ্টা করেছি যাতে সবাই বুঝতে পারে।
Azure-এ ডেটাবেস পর্যবেক্ষণ এবং বিভিন্ন সিস্টেমের সাথে একীভূত করার ক্ষমতা, যেমন Datadog, বিশেষ মনোযোগের দাবি রাখে। মনিটরিং বেশ সুবিধাজনক, কিন্তু সূক্ষ্মতা ছাড়া নয় (উদাহরণস্বরূপ, শুধুমাত্র পঠনযোগ্য ব্যবহারকারীরা শুধুমাত্র একটি ডাটাবেসের জন্য মনিটরিং দেখতে পারে, একবারে নয়... এখানে শেডগুলি রয়েছে)।
উপসংহারে, আমাদের টিম সফলভাবে খরচ অপ্টিমাইজ করেছে এবং আপডেট এবং সমর্থন বন্ধ করার সাথে সম্পর্কিত উদ্বেগের সমাধান করেছে। আমরা কর্মক্ষমতা, স্থিতিস্থাপকতা, বিকাশের গতি এবং নমনীয়তার উন্নতি অর্জন করেছি। উপরন্তু, স্ক্রিপ্ট বাস্তবায়ন উল্লেখযোগ্যভাবে প্রয়োজন যখন দ্রুত পুনরুদ্ধার করার ক্ষমতা উন্নত করেছে।
সোশ্যাল ডিসকভারি গ্রুপের লিড ডিওঅপস ইঞ্জিনিয়ার পাভেল শাপুরউ লিখেছেন।