7.3
Amazon Aurora-র ভেতর-বাহির
তিন AZ-এ ছয়টা কপি, quorum write, endpoint, replica auto scaling, Serverless, Global Database, cloning, Backtrack, ML আর Babelfish।
32 মিনিট পড়া + Animation
টিপস: ডটেড-আন্ডারলাইন করা যেকোনো শব্দে ট্যাপ বা Hover করলে তার অর্থ দেখবে।
এই লেসন শেষে তুমি পারবে
- RDS for MySQL বা PostgreSQL থেকে Aurora কোথায় আলাদা, বুঝিয়ে বলতে: compute আর storage আলাদা, একটাই শেয়ার করা cluster volume, ৩টা AZ-এ ৬টা কপি, quorum write (৬-এ ৪) আর read (৬-এ ৩), আর self-healing।
- একটা Aurora DB cluster-এর গঠন বলতে: একটা writer, ১৫টা পর্যন্ত Aurora Replica, failover priority tier, মোটামুটি ৩০ সেকেন্ডে failover আর 100 ms-এর কম replica lag।
- ঠিক endpoint (cluster, reader, instance, custom) বাছতে, আর ব্যাখ্যা করতে কেন Aurora failover-এ connection string কখনো বদলাতে হয় না, অথচ promote করা RDS read replica-র জন্য নতুন string লাগে।
- Replica auto scaling আর Aurora Serverless v2 (ACU, minimum আর maximum, auto-pause দিয়ে 0-তে নামা) সাজাতে, আর কোনটা কখন মানায় বলতে।
- Aurora Global Database দিয়ে কয়েক Region জুড়ে read আর disaster recovery-র design করতে, আর switchover আর failover-এর তফাত বলতে।
- কোনো recovery বা testing-এর দরকারে backup, point-in-time restore, Backtrack আর cloning-এর মধ্যে ঠিকটা বাছতে, আর Aurora machine learning, Babelfish, I/O-Optimized আর zero-ETL চিনতে।
- Aurora-র দিকে ইশারা করা পরীক্ষার প্রতিটা প্রশ্নের ধরন চিনে ফেলতে।
#Aurora কেন এল
লেসন ৭.১-এ RDS দেখেছ: AWS একটা সাধারণ database engine (MySQL, PostgreSQL, MariaDB, Oracle, SQL Server, Db2) চালায় EBS volume লাগানো একটা EC2 instance-এ, আর patch, backup, failover-এর ঝামেলা নিজে সামলায়। কিন্তু ওই engine-গুলো বানানো হয়েছিল কয়েক দশক আগে, এক server আর তার নিজের disk-এর কথা ভেবে, আর RDS তাদের সীমাবদ্ধতাগুলোও পেয়েছে: standby বা replica-র লাগে নিজের পুরো একটা কপি, replica-কে primary-র log আবার চালাতে হয় বলে সে পিছিয়ে পড়ে, আর storage মানে একটা EBS volume, যার size তোমাকেই ঠিক করতে হয়।
Amazon Aurora হলো AWS-এর নিজের বানানো relational database engine, শুরু থেকেই cloud-এর জন্য ভেবে বানানো। মূল কথাগুলো:
- Proprietary (open source না), কিন্তু MySQL আর PostgreSQL-এর সাথে compatible: তোমার driver, tool আর বেশিরভাগ SQL যেমন ছিল তেমনই চলে, যেন Aurora আসলে MySQL বা PostgreSQL। Cluster বানানোর সময় বেছে নাও Aurora MySQL না Aurora PostgreSQL।
- এটা চালানো হয় RDS দিয়েই (একই console, একই
aws rdscommand), কিন্তু এর storage পুরোপুরি আলাদা। - Performance: AWS প্রচার করে একই hardware-এ এটা MySQL-এর চেয়ে ৫ গুণ আর PostgreSQL-এর চেয়ে ৩ গুণ পর্যন্ত throughput দেয়। এগুলোকে AWS-এর marketing-এর সংখ্যা হিসেবেই নাও, AWS-এর নিজের benchmark-এ মাপা; তোমার workload-এ আসল লাভ কত হবে, সেটা workload-এর ওপর নির্ভর করে। পরীক্ষায় “high performance, MySQL/PostgreSQL-compatible” মানেই Aurora।
- খরচ: একই RDS instance-এর চেয়ে ঘণ্টাপ্রতি মোটামুটি ২০% বেশি, কিন্তু storage replication, দ্রুত failover আর বেশি replica পাও বাড়তি কপির টাকা না দিয়েই।
| RDS for MySQL / PostgreSQL | Aurora MySQL / PostgreSQL | |
|---|---|---|
| Storage | প্রতিটা instance-এর নিজের EBS volume, size তুমি ঠিক করো (storage auto scaling বাড়াতে পারে) | একটাই শেয়ার করা cluster volume, নিজে থেকে বাড়ে-কমে, যতটুকু লাগে ততটুকুর দাম |
| Data-র কপি | প্রতি instance-এ ১টা (Multi-AZ-এ standby-র আলাদা কপি) | ৩টা AZ জুড়ে ৬টা কপি, instance যতগুলোই থাকুক |
| Read replica | ১৫টা পর্যন্ত (asynchronous, প্রত্যেকের নিজের storage) | ১৫টা পর্যন্ত Aurora Replica, একই storage-এ |
| Replica lag | চাপের সময় কয়েক সেকেন্ড বা তার বেশি | সাধারণত 100 ms-এর কম |
| Failover | Multi-AZ standby: ৬০–১২০ সেকেন্ড; read replica: হাতে promote | নিজে থেকেই একটা replica-তে, সাধারণত ৩০ সেকেন্ডের কম |
| Backup | দিনে একবার snapshot আর প্রতি ৫ মিনিটে log, বন্ধও করা যায় (retention 0) | অবিরাম, সবসময় চালু, ১–৩৫ দিন |
#Storage-এর স্তর: তিন AZ-এ ছয়টা কপি
#Compute আর storage আলাদা
একটা Aurora cluster-এর দুটো স্তর:
- Compute: DB instance-গুলো (একটা writer আর কয়েকটা reader)। এরা database engine চালায়, memory-তে cache রাখে আর SQL প্রসেস করে। স্থায়ী কোনো data এদের কাছে থাকে না।
- Storage: cluster volume, SSD দিয়ে বানানো একটা distributed volume, যেটা ৩টা Availability Zone-এর শত শত storage node-এ ছড়ানো। Cluster-এর সব instance এই একটাই volume-এ পড়ে আর লেখে।
Data যেহেতু instance-এ থাকে না, তাই নতুন reader যোগ করতে কিছু কপি করতে হয় না, instance মুছলে data মোছে না, আর failover মানে শুধু অন্য একটা instance একই volume-এর ওপর writer-এর ভূমিকা নেয়।
#Segment, ছয় কপি আর quorum
Cluster volume কাটা থাকে 10 GiB-এর segment-এ। প্রতিটা segment রাখা হয় ৬ বার: ৩টা AZ-এর প্রতিটায় ২টা করে কপি (৬টা কপির এই দলকে বলে protection group)। Writer পুরো data page storage-এ পাঠায় না; পাঠায় শুধু redo log record (প্রতিটা পরিবর্তনের বিবরণ), আর storage node-গুলো নিজেরাই page বানিয়ে নেয়। ফলে network দিয়ে অনেক কম data যায়।
কোনো কাজ কখন গণ্য হবে, সেটা ঠিক করতে Aurora একটা quorum ব্যবহার করে:
- Write টেকসই হয় যখন ৬টার মধ্যে ৪টা কপি সম্মতি দেয়। Writer ৬টাতেই পাঠায়, আর সবচেয়ে দ্রুত ৪টা উত্তর দিলেই এগিয়ে যায়, তাই একটা ধীর disk কখনো database-কে ধীর করতে পারে না।
- Read-এর লাগে ৬টার মধ্যে ৩টা (বাস্তবে writer জানে কোন কপি হালনাগাদ, তাই একটা থেকেই পড়ে; quorum-এর দরকার পড়ে recovery-র সময়)।
- ৪ + ৩ = ৭, যা ৬-এর চেয়ে বেশি, তাই যেকোনো read quorum শেষ write quorum-এর সাথে অন্তত একটা কপিতে মিলবেই: ৩টার অন্তত একটার কাছে সবচেয়ে নতুন data আছে।
কী কী সহ্য করতে পারে:
| কয়টা কপি গেল | ভালো আছে | Write (৪ লাগে) | Read (৩ লাগে) | উদাহরণ |
|---|---|---|---|---|
| ০ | ৬ | হ্যাঁ | হ্যাঁ | স্বাভাবিক |
| ১ | ৫ | হ্যাঁ | হ্যাঁ | একটা disk নষ্ট |
| ২ | ৪ | হ্যাঁ | হ্যাঁ | পুরো একটা AZ বসে গেল |
| ৩ | ৩ | না | হ্যাঁ | একটা AZ, সাথে আরও একটা কপি |
| ৪ | ২ | না | না | প্রায় অসম্ভব: ৪টা আলাদা নষ্ট একসাথে |
মানে পুরো একটা AZ হারালেও Aurora write নিতে থাকে, আর একটা AZ আর তার ওপর আরও একটা কপি হারালেও data পড়া যায় (আর মেরামত করা যায়)।
#Self-healing
Storage node-গুলো সারাক্ষণ নিজেদের কপি পরীক্ষা করে, আর যা নেই তা পাশের কপিগুলোর সাথে আদান-প্রদান করে পূরণ করে (peer-to-peer gossip)। কোনো কপি হারালে Aurora বেঁচে থাকা কপিগুলো থেকে অন্য একটা storage node-এ সেটা আবার বানায়। একটা segment মাত্র 10 GiB, তাই মেরামতে কয়েক সেকেন্ড লাগে; ফলে দ্বিতীয় কোনো বিপদ ক্ষতি করার সময়টা খুব ছোট থাকে। তুমি এর কিছুই দেখো না: কোনো RAID সামলাতে হয় না, কোনো volume বদলাতে হয় না।
ছয়টা কপি, তিনটা AZ, একটা quorum
Writer আর দুটো reader বসে আছে একটাই শেয়ার করা cluster volume-এর ওপর। সেই volume-এর প্রতিটা segment ৬ বার রাখা, প্রতি AZ-এ ২টা কপি। Write হতে ৪টা কপির সম্মতি লাগে, read হতে ৩টা।
পরিস্থিতি
App writer-কে একটা update পাঠাল। Write নেয় শুধু writer; reader-রা select query সামলায়। তিনটা instance-ই একই storage ব্যবহার করে, তাই নতুন reader যোগ করতে কোনো data কপি করতে হয় না।
এবার নিজে হাতে চেষ্টা করো: কপি আর AZ নষ্ট করে দেখো কখন write আর read থেমে যায়।
Storage quorum lab
Aurora cluster volume-এর প্রতিটা 10 GiB segment থাকে ৬টা কপিতে, ৩টা AZ-এ ২টা করে। কোনো কপি বা পুরো একটা AZ-এ click করে নষ্ট করো, তারপর একটা write বা read পাঠাও। Write হতে ৬টার মধ্যে ৪টা কপির সম্মতি লাগে; read হতে লাগে ৩টা।
AZ a
AZ b
AZ c
৬টা কপিই ভালো আছে। একটা write পাঠাও: writer সেটা ৬টাতেই পাঠায় আর প্রথম ৪টা সম্মতি এলেই কাজ শেষ ধরে।
#Storage নিজে থেকেই বাড়ে (আর কমে)
- Data যত যোগ হয়, cluster volume নিজে থেকেই বাড়ে; storage বা IOPS কখনো আগে থেকে ঠিক করে দিতে হয় না। সর্বোচ্চ 128 TiB, আর নতুন engine version-এ (Aurora MySQL 3.10 আর তার ওপরে, Aurora PostgreSQL 15.13, 16.9, 17.5 আর তার ওপরে) 256 TiB।
- Table drop করলে বা data মুছলে নতুন version-গুলো bill-এর size আবার কমিয়ে দেয় (dynamic resizing)।
- যতটুকু storage আসলে ব্যবহার করছ, তার দাম একবারই দাও, কপি ধরে ধরে না: ৬টা কপি দামের মধ্যেই ধরা।
Slide-এর “10 GB করে বাড়ে, 256 TB পর্যন্ত” কথাটা আসলে 10 GiB-এর segment-এর কথা বলছে; note-এর “10 GB থেকে 128 TB” ছিল অনেকদিনের পুরনো সীমা। পরীক্ষার জন্য মনে রাখো “নিজে থেকে বাড়ে, 128 TiB পর্যন্ত” (নতুন version-এ 256 TiB)।
নিজেকে যাচাই করোপ্রশ্ন
একটা Aurora cluster-এর storage-এ AZ a-র দুটো কপিই নষ্ট, আর AZ b-র একটা কপিও নষ্ট। Database এখন কী কী করতে পারবে?
#Aurora DB cluster
একটা Aurora DB cluster মানে cluster volume, আর সেটা ব্যবহার করা DB instance-গুলো:
- একটা writer (primary) instance: write (
INSERT,UPDATE,DELETE, schema বদল) নেয় শুধু এটাই। Read-ও সামলায়। - ১৫টা পর্যন্ত Aurora Replica (reader): একই volume-এর ওপর read-only instance, বিভিন্ন AZ-এ ছড়ানো। এরা
SELECTquery সামলায়, আর এরাই failover-এর লক্ষ্য। - চাইলে reader-রা serverless (পরের অংশে) বা provisioned হতে পারে, যেকোনো মিশেলে।
#Replica lag
RDS read replica primary-র log নিজের data কপিতে আবার চালায়, তাই সেকেন্ড বা মিনিট পিছিয়ে পড়তে পারে। Aurora Replica পড়ে একই storage থেকে; writer তাকে শুধু জানায় cache-এর কোন page বদলেছে। তাই replica lag সাধারণত 100 ms-এর কম (slide বলে “10 ms-এর কম”; AWS-এর documentation বলে “সাধারণত 100 ms-এর অনেক কম”)। CloudWatch-এর AuroraReplicaLag metric-এ এটা দেখো।
#Failover আর priority tier
Writer নষ্ট হলে (instance crash, AZ বিপর্যয়, বা তুমি নিজেই failover চালালে) Aurora নিজে থেকে একটা reader-কে writer বানায়:
- সবচেয়ে বেশি priority-র reader বাছে: প্রতিটা reader-এর একটা promotion tier থাকে, 0 (সবচেয়ে বেশি) থেকে 15 (সবচেয়ে কম)।
- একই tier-এ কয়েকটা থাকলে বাছে সবচেয়ে বড় instance; size-ও সমান হলে যেকোনো একটা।
- Cluster endpoint ঘুরিয়ে দেওয়া হয় নতুন writer-এর দিকে (পরের অংশ)।
কপি করার বা পিছিয়ে থাকা ধরার কিছু নেই, তাই failover সাধারণত ৩০ সেকেন্ডের কম সময়ে শেষ হয়, RDS Multi-AZ standby-র (৬০–১২০ সেকেন্ড) চেয়ে অনেক দ্রুত। Slide বলে “instantaneous” আর note বলে “millisecond”: দুটোই বাড়িয়ে বলা। Application তবুও connection কাটা দেখে আর আবার connect করতে হয়; AWS-এর Advanced JDBC/Python/Go wrapper আর RDS Proxy (লেসন ৭.৪) বিরতিটা কয়েক সেকেন্ডে নামিয়ে আনে।
একটাও reader না থাকলে Aurora একই বা অন্য AZ-এ নতুন একটা writer instance বানায়। Data নিরাপদ (সেটা ৩-AZ storage-এ আছে), কিন্তু এতে প্রায় ১০ মিনিট লাগে। High availability চাইলে সবসময় অন্য AZ-এ অন্তত একটা reader রাখো।
Tier নিয়ে একটা পরামর্শ: যে reader-এর দায়িত্ব নেওয়ার কথা, তাকে কম tier (0 বা 1) দাও আর writer-এর সমান size রাখো। Analytics বা report-এর reader-দের বেশি tier (2–15) দাও, যাতে তারা promote না হয়।
#Endpoint: যে নামে তোমার app connect করে
Instance-এর ঠিকানার বদলে Aurora তোমাকে কয়েকটা DNS নাম (endpoint) দেয়। প্রতিটা endpoint একটা CNAME, যেটা Aurora সবসময় ঠিক instance-এর দিকে ঘুরিয়ে রাখে।
| Endpoint | নামের উদাহরণ | কাকে দেখায় | কী কাজে |
|---|---|---|---|
| Cluster endpoint (writer endpoint) | mycluster.cluster-c1a2b3.us-east-1.rds.amazonaws.com | বর্তমান writer-কে, সবসময়, failover-এর পরেও | সব write, আর যে read-কে সবচেয়ে নতুন data দেখতেই হবে |
| Reader endpoint | mycluster.cluster-ro-c1a2b3.us-east-1.rds.amazonaws.com | সব reader-কে, connection ধরে ভাগ করে | শুধু-read traffic। কোনো reader না থাকলে writer-কে দেখায় |
| Instance endpoint | mycluster-instance-2.c1a2b3.us-east-1.rds.amazonaws.com | একটা নির্দিষ্ট instance | সমস্যা খোঁজা, বা খুব বিশেষ tuning। App-এ এড়িয়ে চলো: failover-এ এটা সরে না |
| Custom endpoint | reports.cluster-custom-c1a2b3.us-east-1.rds.amazonaws.com | তোমার বেছে নেওয়া কয়েকটা instance | একটা workload আলাদা রাখা, যেমন বড় instance-এ analytics। Default-এ cluster-প্রতি ৫টা পর্যন্ত |
দুটো জিনিস নিয়ে অনেকে হোঁচট খায়:
- Reader endpoint ভাগ করে connection, query না। DNS প্রতিটা নতুন connection-কে একটা আলাদা reader দেয়; একটা connection-এর সব query একই reader-এ যায়। যে app একটাই connection অনেকক্ষণ খুলে রাখে, সে কোনো ভাগাভাগি পায় না। Connection pool ব্যবহার করো।
- Reader endpoint-এ সব reader থাকে। বিশেষ instance-এর জন্য custom endpoint বানালে সাধারণ traffic-ও সাধারণ reader-দের একটা custom endpoint-এ পাঠাও, নইলে customer-এর query analytics instance-এ গিয়ে পড়তে পারে। (AWS-এর ভাষায়: custom endpoint বানানোর পর reader endpoint সাধারণত আর ব্যবহার হয় না।)
Aurora endpoint আর failover
App দুটো DNS নাম জানে: write-এর জন্য cluster (writer) endpoint, read-এর জন্য reader endpoint। Analytics টিম ব্যবহার করে একটা custom endpoint। দেখো, পেছনের instance বদলায়, কিন্তু নামগুলো একই থাকে।
পরিস্থিতি
Write যায় cluster endpoint-এ (mycluster.cluster-c1a2b3.us-east-1.rds.amazonaws.com)। এটা একটা DNS CNAME, যেটা সবসময় বর্তমান writer-কে দেখায়।
#“Failover-এর সময় connection string বদলানো যাবে না”: আসল মানে কী
পরীক্ষার একটা পুরনো প্রশ্ন: “Failover-এর সময় বারবার connection string না বদলে application কীভাবে read আর write traffic আলাদা করবে?” উত্তর: write-এর জন্য cluster endpoint, read-এর জন্য reader endpoint। এখানে owner-এর মনে খুব স্বাভাবিক একটা প্রশ্ন জাগে: “একদিকে বলছে connection string বদলানো যাবে না, আবার বলছে দুটো আলাদা endpoint ব্যবহার করতে! এটা কীভাবে সম্ভব?”
আসল চাবি হলো “failover-এর সময়” কথাটা। দুটো নাম তুমি বসাও একবারই, app বানানোর সময়। প্রশ্নটা জানতে চায় তারপর কী হয়, যখন একটা database নষ্ট হয়।
শুরুর setup, একবারই
App-এর config file-এ দুটো connection string বসানো হয়: write →
mycluster.cluster-12345.us-east-1.rds.amazonaws.com, read →mycluster.cluster-ro-12345.us-east-1.rds.amazonaws.com। এটা app বানানোর স্বাভাবিক একটা ধাপ।সাধারণ RDS আর একটা read replica: সমস্যাটা
Primary মারা গেল। Read replica নিজে থেকে promote হয় না, তাই তুমি হাতে promote করলে। Promote হওয়া replica হয়ে যায় একটা আলাদা স্বাধীন database, নিজের endpoint নিয়েই (
mydb-replica…), যা পুরনো primary-র (mydb…) থেকে আলাদা। App তখনো মরা নামটাই দেখছে: কাউকে config খুলে নতুন URL বসাতে হবে, তারপর app restart বা redeploy করতে হবে। এটাই “failover-এর সময় connection string বদলানো”: হাতে করা, ধীর, আর যতক্ষণ চলে ততক্ষণ downtime।Aurora: একই বিপদ
Cluster-এ একটা writer আর দুটো replica। Writer crash করল। Aurora নিজে থেকেই tier দেখে একটা replica-কে promote করল। তারপর cluster endpoint-এর পেছনের DNS record বদলে দিল, যাতে একই নাম এখন নতুন writer-এর ঠিকানা দেয়।
ফলাফল
App হুবহু একই নামে আবার connect করে নতুন writer-এ পৌঁছায়, সাধারণত ৩০ সেকেন্ডের মধ্যে। কাউকে কোনো file খুলতে বা কিছু restart করতে হয় না। Reader endpoint-ও একইভাবে যে reader-রা আছে, তাদেরই দেখাতে থাকে।
পরীক্ষার জন্য এক লাইনে: cluster endpoint (write) আর reader endpoint (read) একবার বসাও; failover হলে এগুলো পেছনে নিজে থেকেই সরে যায়, তাই connection string কখনো বদলাতে হয় না। (RDS Multi-AZ-ও failover-এ একটাই endpoint রাখে, কারণ standby একই নামের দায়িত্ব নেয়; কিন্তু Multi-AZ-এর standby instance কোনো read সামলায় না। লেসন ৭.১-এ এটা আছে।)
Connection string কেন কখনো বদলাতে হয় না
একই বিপদ, দুইবার: একবার RDS আর হাতে promote করা read replica দিয়ে, একবার Aurora-র cluster endpoint দিয়ে।
পরিস্থিতি
App-এর config-এ লেখা primary-র নিজের endpoint, mydb.abc123…। Read replica-র নাম আলাদা, mydb-replica.abc123…।
#Replica auto scaling
Aurora Auto Scaling, Application Auto Scaling ব্যবহার করে, নিজে থেকেই Aurora Replica যোগ করে আর সরায়:
- একটা metric-এর ওপর target tracking policy: reader-দের গড় CPU (
RDSReaderAverageCPUUtilization) বা reader-দের গড় connection (RDSReaderAverageDatabaseConnections)। যেমন: reader-দের গড় CPU 60%-এ রাখো। - Replica-র একটা minimum আর maximum সংখ্যা (maximum ১৫ পর্যন্ত)।
- নতুন replica শেয়ার করা volume-এ যুক্ত হয় (কোনো data কপি না), নিজে থেকেই reader endpoint-এ ঢুকে যায়, আর load কমলে (একটা cooldown-এর পর) সরে যায়। চালু হতে কয়েক মিনিট লাগে, তাই ৩০ সেকেন্ডের হঠাৎ লাফের চেয়ে টানা বাড়তে থাকা load-এ বেশি কাজে দেয়।
- তুমি হাতে যে replica যোগ করেছ, policy সেটা কখনো সরায় না; আর Global Database-এর secondary cluster-এ auto scaling চলে না।
মুহূর্তের মধ্যে, খুব সূক্ষ্মভাবে scale দরকার হলে এর সাথে Serverless v2 reader মিশিয়ে নাও।
#Aurora Serverless v2
Provisioned instance-এ তুমি একটা instance class (db.r6g.large, …) বাছো আর ব্যস্ত থাকুক বা অলস, প্রতি ঘণ্টার টাকা দাও। Aurora Serverless v2-এ তুমি বাছো একটা capacity range, আর Aurora সেকেন্ডে সেকেন্ডে instance-এর size ঠিক করে দেয়।
- Capacity মাপা হয় ACU (Aurora capacity unit)-তে: 1 ACU ≈ 2 GiB memory, সাথে মানানসই CPU আর network।
- Cluster-এর জন্য একটা minimum আর maximum দাও: 0 (বা 0.5) থেকে 256 ACU পর্যন্ত (নতুন Aurora PostgreSQL version-এ 384)। প্রতিটা serverless instance এই range-এর ভেতরে আলাদাভাবে ওঠানামা করে।
- Scale হয় জায়গায় দাঁড়িয়েই, কয়েক সেকেন্ডে, 0.5 ACU-র মতো ছোট ধাপে, failover ছাড়া, connection না কেটে। তোমার দেওয়া maximum কখনো পার হয় না।
- টাকা দাও ব্যবহার করা ACU-র জন্য প্রতি সেকেন্ডে (ACU-hour হিসেবে), সাথে যথারীতি storage আর I/O।
- 0-তে নামা (auto-pause), ২০২৪-এর শেষ থেকে: minimum 0 ACU দাও, তাহলে কোনো instance-এ একটা নির্দিষ্ট সময় কোনো user connection না এলে (
SecondsUntilAutoPause, default ৩০০ সেকেন্ড, সর্বোচ্চ ১ দিন) সে pause হয়ে যায়। Pause থাকা অবস্থায় compute-এর খরচ শূন্য; storage-এর bill অবশ্য চলে। পরের connection তাকে জাগায় প্রায় ১৫ সেকেন্ডে (২৪ ঘণ্টার বেশি pause থাকলে ৩০ সেকেন্ড বা তার বেশি), তাই client-এর connection timeout আর retry লাগবে। খোলা connection, RDS Proxy, binlog বা logical replication, zero-ETL integration আর Global Database-এর cluster হওয়া, এগুলোর যেকোনোটা pause আটকে দেয়। - মিশ্র cluster: একটা cluster-এ serverless (
db.serverless) আর provisioned দুই ধরনের instance-ই থাকতে পারে, যেমন বড় একটা provisioned writer আর serverless reader, বা serverless writer আর স্থির provisioned reader। - Tier 0 বা 1-এর serverless reader writer-এর capacity মেনে চলে (যাতে দায়িত্ব নিতে তৈরি থাকে); tier 2–15-এর reader-রা আলাদাভাবে ওঠানামা করে।
- Aurora-র সব feature এতে আছে: Multi-AZ reader, Global Database, RDS Proxy, Backtrack, cloning।
Aurora Serverless v1 (প্রথম সংস্করণ, যেটা 0-তে pause করতে পারত কিন্তু ধীরে scale করত আর reader রাখতে পারত না) ৩১ মার্চ ২০২৫-এ বন্ধ (end of life) হয়েছে; বাকি v1 cluster-গুলো v2-তে সরিয়ে নেওয়া হয়েছে। Slide-এর “proxy fleet” ওয়ালা ছবিটা v1-এর গঠন। পরীক্ষায় “Aurora Serverless” দেখলে v2 ভাবো।
কখন ব্যবহার করবে:
- কালেভদ্রে, থেমে থেমে বা আন্দাজ করা যায় না এমন workload: অজানা traffic-এর নতুন app, মাঝেমধ্যে promotion চলা site, মাসের শেষে চালানো report-এর database।
- রাতে আর ছুটির দিনে অলস dev আর test database (auto-pause সহ)।
- অনেকগুলো ছোট database (প্রতি tenant-এ একটা), যেগুলো বেশিরভাগ সময় অলস।
- স্থির, আন্দাজ করা যায় এমন ২৪×৭ load-এর জন্য আদর্শ না: সেখানে Reserved Instance সহ provisioned instance সাধারণত সস্তা।
Aurora Serverless v2: capacity চলে load-এর পিছু পিছু
Bar দেখায় সময়ের সাথে একটা serverless instance-এর capacity (ACU); বিন্দু দেখায় load। একটা পরিস্থিতি বেছে play চাপো।
পরিস্থিতি
Capacity range 0.5–16 ACU। একটা flash sale এল, চূড়ায় maximum-এর চেয়েও বেশি চাইল, তারপর কমে গেল।
শান্ত সকাল: instance চলছে 1 ACU-তে (প্রায় 2 GiB memory, সাথে মানানসই CPU আর network)। যতটুকু ACU আসলে খরচ হচ্ছে, প্রতি সেকেন্ডের হিসাবে শুধু তার টাকা দাও, কোনো বাঁধা instance size-এর না।
#Aurora Global Database
Multi-AZ তোমাকে বাঁচায় একটা Region-এর ভেতরে। পুরো Region বসে গেলে, বা অন্য মহাদেশের user-দের জন্য, Aurora-র দুটো cross-Region উপায় আছে।
Aurora Global Database (AWS এটাই সুপারিশ করে):
- ১টা primary Region (read/write) আর ১০টা পর্যন্ত secondary Region (শুধু read)। Note-এ লেখা ৫টা; AWS সেটা বাড়িয়ে ১০ করেছে, slide-এও তাই আছে।
- Replication হয় storage-এর স্তরে, AWS-এর নিজস্ব আলাদা পথে, lag সাধারণত ১ সেকেন্ডের কম, আর primary-র database engine-এর ওপর প্রায় কোনো চাপ নেই।
- প্রতিটা secondary cluster-এ ১৬টা পর্যন্ত read-only instance থাকতে পারে (সাধারণ ১৫-র চেয়ে একটা বেশি, কারণ সেখানে writer নেই)। কাছের user-রা কাছের latency-তে পড়ে।
- Write forwarding: secondary cluster app-এর write নিয়ে নিজেই primary-তে পৌঁছে দিতে পারে, তাই secondary Region-এর app একটা কাছের endpoint দিয়েই চলতে পারে। তবে write-কে Region পার হয়ে যাওয়া-আসার সময়টা দিতেই হয়।
- একটা global writer endpoint সবসময় বর্তমান primary cluster-কে দেখায়, primary অন্য Region-এ সরে গেলেও।
Primary সরানোর দুই উপায়:
| Switchover (আগের নাম “managed planned failover”) | Failover (অপরিকল্পিত) | |
|---|---|---|
| কখন | পরিকল্পিত: Region বদলানো, DR মহড়া, দুই Region-ই সুস্থ | Primary Region-এ বিপর্যয় |
| Data হারানো | কিছুই না: secondary পুরো মিলে যাওয়া পর্যন্ত অপেক্ষা করে | যা তখনো replicate হয়নি (RPO কয়েক সেকেন্ড, সাধারণত ১ সেকেন্ডের কম) |
| Downtime | অল্প | RTO সাধারণত ১ মিনিটের কম |
| পরে | ভূমিকা অদলবদল, গঠন একই | পুরনো primary ঠিক হলে secondary হিসেবে ফেরে |
Aurora PostgreSQL-এ একটা managed RPO সেট করা যায়: কোনো secondary ওই কয়েক সেকেন্ডের মধ্যে না থাকলে primary commit নেওয়াই বন্ধ করে দেয়, ফলে failover-এ কতটা data হারাতে পারে তার একটা সীমা থাকে।
Aurora cross-Region read replica (পুরনো উপায়, binlog replication দিয়ে Aurora MySQL-এ) দিয়েও অন্য Region-এ একটা কপি পাওয়া যায়, বানানো সহজ আর DR-এ কাজে লাগে, কিন্তু replication যায় database engine দিয়ে (ধীর, বেশি lag, writer-এর ওপর চাপ), আর promote হাতে করতে হয়, সময়ও বেশি লাগে। Global Database-ই বেছে নাও।
Aurora Global Database
us-east-1-এর primary cluster সব write নেয়। eu-west-1-এর secondary cluster storage-এর স্তরে replication দিয়ে কপি পায়, আর কাছের user-দের read সামলায়।
পরিস্থিতি
আমেরিকার একজন user write করল। Primary Region-এর writer যথারীতি নিজের ৬-কপির volume-এ commit করল।
#Aurora machine learning
সাধারণত app-এ একটা prediction যোগ করতে হলে data export করো, ML service-এ পাঠাও, ফলাফল আবার লিখে ফেরত আনো। Aurora machine learning দিয়ে AWS-এর ML service-গুলোকে সরাসরি SQL থেকেই ডাকা যায়:
- Amazon SageMaker AI: তোমার train করে deploy করা যেকোনো model (জালিয়াতি ধরা, product সুপারিশ, বিজ্ঞাপন কাকে দেখাবে)।
- Amazon Comprehend: তৈরি করা natural language processing, যেমন একটা review-এর sentiment (ভালো, খারাপ, নিরপেক্ষ), কোনো model train করতে হয় না।
- Amazon Bedrock (নতুন): foundation model, যেমন SQL থেকেই লেখা সংক্ষেপ করা বা embedding বানানো।
ML-এর অভিজ্ঞতা লাগে না: একটা IAM role cluster-কে service ডাকার অনুমতি দেয়, আর তুমি SQL function ব্যবহার করো, যেমন Aurora PostgreSQL-এ:
SELECT review_id,
(aws_comprehend.detect_sentiment(review_text, 'en')).sentiment
FROM product_reviews
WHERE created_at > now() - interval '1 day';
Slide আর note-এর ব্যবহারগুলো: জালিয়াতি ধরা, বিজ্ঞাপনের লক্ষ্য ঠিক করা, sentiment analysis, product সুপারিশ (“এই customer-কে কোন product দেখাব?”)।
#Babelfish for Aurora PostgreSQL
অনেক কোম্পানির app চলে Microsoft SQL Server-এ; তার SQL-এর নিজস্ব ভাষা T-SQL, আর app-গুলো SQL Server-এর driver দিয়ে SQL Server-এর নিজস্ব wire protocol-এ কথা বলে। PostgreSQL-এ সরতে গেলে সাধারণত query, stored procedure আর driver সব নতুন করে লিখতে হয়।
Babelfish হলো Aurora PostgreSQL-এর একটা feature, যেটা T-SQL আর SQL Server-এর protocol বোঝে। চালু করলে:
- App তার SQL Server client driver রেখেই Babelfish-এর SQL Server port-এ (1433) connect করে; Babelfish পেছনে T-SQL-কে PostgreSQL-এ অনুবাদ করে। App ভাবে সে SQL Server-এর সাথেই কথা বলছে।
- Code বদলাতে হয় খুব কম বা একদমই না। কিছু T-SQL feature চলে না; Babelfish Compass tool আগেই জানিয়ে দেয় কী কী বদলাতে হবে।
- একই database সাধারণ PostgreSQL connection-ও নেয়, তাই ধীরে ধীরে, অংশ ধরে আধুনিক করা যায়।
- Schema আর data সরাও AWS SCT আর AWS DMS দিয়ে (বা Babelfish-এর নিজের tool দিয়ে), তারপর app-কে Aurora-র দিকে ঘুরিয়ে দাও।
#Backup আর restore
#Automated backup
- Aurora cluster volume-এর backup নেয় অবিরাম, ধাপে ধাপে (incremental), S3-তে, performance-এ কোনো প্রভাব ছাড়া, backup window-তে কিছু থমকে যায় না (RDS for MySQL দিনে একবার snapshot নেয়, Single-AZ-এ তাতে অল্পক্ষণের I/O থমকে যেতে পারে)।
- Automated backup সবসময় চালু: retention ১ থেকে ৩৫ দিন, বন্ধ করা যায় না (RDS-এ 0 দিলে বন্ধ হয়)।
- Retention-এর ভেতরে যেকোনো সেকেন্ডে point-in-time recovery (PITR), সাধারণত প্রায় ৫ মিনিট আগে পর্যন্ত।
- Retention সময়ে তোমার cluster volume-এর size পর্যন্ত backup storage ফ্রি।
#Manual snapshot
- তুমি (বা AWS Backup) চালাও, রাখো যতদিন খুশি, cluster মুছে ফেলার পরেও।
- অন্য Region-এ কপি করা যায়, অন্য account-এর সাথে শেয়ার করা যায়।
- ৩৫ দিনের বেশি রাখতে হলে (compliance-এর জন্য ১, ৩, ৭ বছর) AWS Backup-এর plan ব্যবহার করো; লেসন ৭.২-এ RDS-এর জন্য এটা দেখানো আছে, Aurora-তেও একইভাবে চলে।
#Restore-এর উপায়
- Backup বা snapshot থেকে restore সবসময় নতুন endpoint সহ একটা নতুন cluster বানায়। আগের cluster যেমন ছিল তেমনই থাকে। তারপর নতুন cluster-এ instance যোগ করো।
- S3 থেকে restore (Aurora MySQL): অফিসের নিজস্ব server-এর (on-premises) MySQL database সরাতে Percona XtraBackup দিয়ে physical backup নাও, file-গুলো S3-তে তোলো, আর সেখান থেকে নতুন একটা Aurora MySQL cluster বানাও। বড় database-এ logical dump-এর চেয়ে দ্রুত। (সাধারণ RDS for MySQL-ও S3-এর XtraBackup থেকে restore করা যায়।)
- সরানোর আরও উপায়: logical dump (
mysqldump,pg_dump), AWS DMS, বা RDS for MySQL/PostgreSQL instance-এর একটা Aurora read replica বানিয়ে সেটাকে promote করা।
#Backtrack: জায়গায় দাঁড়িয়েই পেছনে ফেরা (Aurora MySQL)
Restore নতুন একটা cluster বানায়, তাতে সময় লাগে আর নতুন একটা endpoint-এ যেতে হয়। Backtrack উল্টো কাজ করে: চলতি cluster-টাকেই আগের কোনো মুহূর্তে পিছিয়ে দেয়, ঘড়ির কাঁটা পেছনে ঘোরানোর মতো:
- নতুন cluster নেই, endpoint একই, কাজ শেষ কয়েক মিনিটে, সেকেন্ড ধরে (Aurora সবচেয়ে কাছের consistent মুহূর্তটা বাছে)।
- ভুলের ঠিক আগের মুহূর্তটা খুঁজতে আগে-পিছে যাওয়া যায় (৩ ঘণ্টা পেছনে, তারপর ১ ঘণ্টা সামনে…)।
- Backtrack window সর্বোচ্চ ৭২ ঘণ্টা। তোমার target window পর্যন্ত Aurora change record রেখে দেয়, আর তার জন্য ঘণ্টাপ্রতি টাকা দাও; খুব বেশি write হলে আসল window এর চেয়ে ছোট হতে পারে।
- শুধু Aurora MySQL-এ, Aurora PostgreSQL-এ না।
- Cluster বানানোর সময়ই চালু করতে হয় (বা snapshot থেকে নতুন cluster-এ restore করার সময়); চলতি cluster-এ পরে চালু করা যায় না।
- পেছায় পুরো cluster, একটা table না: ওই মুহূর্তের পরে যা লেখা হয়েছে, সবই মুছে যায়।
- একটু বিরতি হয়: app থামাও, Aurora connection বন্ধ করে, পেছায়, তারপর আবার খোলে।
- Global Database-এ চলে না, cross-Region read replica-র সাথেও না (জোর করে চালালে binlog replica ভেঙে যায়)।
এটা backup না। শেষ কয়েক ঘণ্টার মানুষের ভুল থেকে বাঁচায়, cluster হারানো থেকে না।
#Cloning: মুহূর্তে test-এর কপি
Aurora cloning copy-on-write protocol দিয়ে একটা চলতি cluster থেকে নতুন একটা cluster বানায়:
- শুরুতে clone উৎসের একই storage page শেয়ার করে; কিছুই কপি হয় না। কয়েক terabyte-এর database-এর clone-ও কয়েক মিনিটে তৈরি, আর শুরুতে storage-এর বাড়তি খরচ প্রায় শূন্য।
- যেকোনো দিক কোনো page বদলালে শুধু সেই page কপি হয়ে আলাদা থাকে; প্রত্যেকে নিজের বদলানো page-এর টাকা দেয়।
- উৎস ধীর হয় না, আর clone-এ আলাদা instance size, serverless, বা একটাই instance রাখা যায়।
- একটা উৎস থেকে ১৫টা পর্যন্ত copy-on-write clone; তারপরেরগুলো পুরো কপি। শুধু একই Region-এ (অন্য VPC-তে, বা AWS RAM দিয়ে অন্য account-এ হতে পারে)।
Snapshot থেকে restore-এর সাথে তুলনা: restore S3 থেকে সব data কপি করে ফেরত আনে (বড় database-এ ধীর, পুরো storage-এর খরচ), আর clone প্রায় মুহূর্তে তৈরি, storage শেয়ার করে। Read replica-র সাথে তুলনা: replica read-only আর production-এরই অংশ; clone একটা আলাদা, লেখা যায় এমন cluster।
#১৪:০৫-এ একটা table drop হলো: কোন tool?
| Tool | Data কোথায় ফেরে | কত সময় | Endpoint | আর সবকিছুও কি পেছায়? | Engine |
|---|---|---|---|---|---|
| Backtrack | একই cluster, জায়গায় দাঁড়িয়েই | কয়েক মিনিট | একই | হ্যাঁ, পুরো cluster | Aurora MySQL, বানানোর সময় চালু থাকলে |
| Point-in-time restore | নতুন cluster | কয়েক দশ মিনিট থেকে ঘণ্টা, size বাড়লে বাড়ে | নতুন | না: table কপি করে ফেরত দাও | সব |
| Snapshot restore | নতুন cluster, snapshot-এর সময়ের | PITR-এর মতো | নতুন | না | সব |
| Clone | নতুন cluster, এখনকার | কয়েক মিনিট | নতুন | না; এটা বর্তমানটা কপি করে, তাই ভুল শোধরায় না, এটা test-এর জন্য | সব |
১৪:০৫-এ একটা table drop হয়ে গেল
১৪:০৫-এ কেউ production-এ drop table orders চালিয়ে দিল। Aurora-র তিনটা tool data ফেরত আনতে পারে, আর চতুর্থটা test-এর জন্য কপি বানায়। দেখো data কোথায় যায়, কত সময় লাগে, আর endpoint বদলায় কি না।
পরিস্থিতি
১৪:০৫, drop table orders। Cluster বানানোর সময়ই Backtrack চালু ছিল, target window ২৪ ঘণ্টা, তাই Aurora পরিবর্তনের হিসাব (change record) রেখে দিয়েছে।
#দাম আর নতুন feature
#Aurora Standard বনাম Aurora I/O-Optimized
Storage-এর দুই ধরন, cluster ধরে বাছতে হয়:
- Aurora Standard: instance-এর ঘণ্টা + storage + প্রতি ১০ লাখ I/O request-এর জন্য আলাদা দাম। মাঝারি I/O-তে সবচেয়ে সস্তা।
- Aurora I/O-Optimized (২০২৩): instance আর storage-এর দাম বেশি, কিন্তু I/O-র কোনো দাম নেই। AWS-এর নিয়ম: তোমার Aurora bill-এর ২৫% বা তার বেশি I/O হলে এটা লাভজনক। I/O-ভারী app-এ খরচ আগে থেকে আন্দাজ করা যায়।
- Standard থেকে I/O-Optimized-এ ৩০ দিনে একবার যাওয়া যায়, ফেরত আসা যায় যেকোনো সময়।
#Redshift-এর সাথে zero-ETL integration
Zero-ETL integration Aurora-র data প্রায় সাথে সাথে Amazon Redshift-এ কপি করে, ফলে analyst-রা কোনো ETL pipeline না বানিয়েই warehouse-এ টাটকা data-য় query চালাতে পারে। পরীক্ষার সূত্র: “ETL pipeline ছাড়া Redshift-এ Aurora-র data নিয়ে analytics”।
#পাশের কথা: Aurora DSQL (২০২৫)
Aurora DSQL একটা আলাদা serverless, distributed, PostgreSQL-compatible database (মে ২০২৫ থেকে সবার জন্য চালু), যেখানে কোনো instance নেই আর কয়েকটা Region-এ একসাথে write (active-active) নেওয়া যায়। এটা সাধারণ Aurora cluster-এর feature না, আর SAA পরীক্ষায় এখনো আসে না; সেখানে “multi-Region relational DR” মানে এখনো Global Database।
#আরও কিছু জানার মতো
- Aurora-তে IAM database authentication, KMS দিয়ে রাখা অবস্থায় encryption (বানানোর সময় বাছতে হয়) আর চলার পথে TLS, সবই RDS-এর মতো (লেসন ৭.৪)।
- একটা cluster ৭ দিন পর্যন্ত stop রাখা যায় (তারপর নিজে থেকে চালু হয়), তখন শুধু storage-এর টাকা লাগে।
- বেশিরভাগ ছোট update-এ zero-downtime patching সহ automated patching, আর Performance Insights ও Enhanced Monitoring ভেতরেই আছে।
#কোথায় গোলমাল হয়
- কোনো reader নেই, তারপর writer গেল: Aurora-কে নতুন instance চালু করতে হয় (প্রায় ১০ মিনিট)। সবসময় অন্য AZ-এ writer-এর সমান size-এর একটা reader রাখো, tier 0 বা 1-এ।
- App instance endpoint ব্যবহার করে: failover-এ writer সরে যায়, আর app এমন একটা instance-এ লিখতে থাকে যেটা এখন reader (“read-only” error)। Cluster endpoint ব্যবহার করো।
- Client অনেকক্ষণ DNS cache করে রাখে (Java-র default চিরকাল cache করতে পারে): failover-এর পরেও পুরনো writer-এ যেতে থাকে। Client-এ ছোট DNS TTL দাও (যেমন ৫ সেকেন্ড), বা AWS-এর driver / RDS Proxy ব্যবহার করো।
- যে read-কে নিজের লেখা data দেখতেই হবে, সেটা reader endpoint-এ গিয়ে শেষ 50 ms-এর পরিবর্তন দেখে না। লিখেই পড়তে হয় এমন query cluster endpoint-এ পাঠাও।
- Reader endpoint ভাগ করছে না: app একটাই connection খুলে রেখেছে। Pool ব্যবহার করো, বা মাঝে মাঝে আবার connect করো।
- Failover-এর লক্ষ্য খুব ছোট: tier 0-এর ছোট্ট একটা reader writer হয়ে চাপে ভেঙে পড়ে। Size মিলিয়ে রাখো।
- Serverless-এর maximum খুব কম: capacity আটকে যাওয়ায় চূড়ার সময় query ধীর।
ACUUtilization100%-এর কাছে গেলে খেয়াল করো। - Auto-pause-এর চমক: pause-এর পর প্রথম request time out হয় (জাগতে প্রায় ১৫ সেকেন্ড), বা pause থাকা অবস্থায় নির্ধারিত job (
pg_cron, MySQL event) চলে না। - PostgreSQL-এ Backtrack আশা করা, বা এমন cluster-এ যেটা Backtrack ছাড়া বানানো: পাওয়া যাবে না। PITR-এর পরিকল্পনা রাখো।
- পরিকল্পনা ছাড়া Global Database failover: DNS, app-এর config আর RPO কখনো পরীক্ষা করা হয়নি। Switchover-এর মহড়া দাও।
- Aurora Standard-এ write-ভারী app-এ I/O-র bill দেখে চমকে যাওয়া: I/O-Optimized সস্তা কি না দেখো।
#System design-এ Aurora
- AWS-এ high availability আর read scaling দরকার এমন relational OLTP database-এর default পছন্দ: একটা writer, আলাদা AZ-এ দুই বা তার বেশি reader, write-এ cluster endpoint, read-এ reader (বা custom) endpoint, আর অনেক ছোট-আয়ুর connection (Lambda) থাকলে সামনে RDS Proxy।
- Read-ভারী app: auto scaling সহ ১৫টা পর্যন্ত reader, আর গরম data-র জন্য একটা cache (ElastiCache, লেসন ৭.৫)।
- লাফানো বা অজানা traffic, dev/test, অনেক tenant-এর SaaS: Serverless v2, অলস database-এ auto-pause সহ।
- কয়েক Region: DR (RTO এক মিনিটের কম, RPO প্রায় এক সেকেন্ড) আর কাছের read-এর জন্য Global Database; মাঝেমধ্যের দূরের write-এর জন্য write forwarding।
- রোজকার কাজ: test আর analytics-এর পরীক্ষার জন্য clone, মানুষের ভুলের জন্য Backtrack (MySQL), লম্বা সময় রাখার জন্য AWS Backup, analytics-এর জন্য Redshift-এ zero-ETL।
- কখন Aurora না: Babelfish ছাড়া Oracle, SQL Server বা Db2 (RDS নাও), স্থির কম load-এর ছোট সস্তা database (RDS Single-AZ সস্তা হতে পারে), বা বিশাল মাপের key-value access (DynamoDB)।
#নিজে করে দেখো
# 1. Create an Aurora PostgreSQL cluster (the volume) with a serverless range, then a writer and a reader
aws rds create-db-cluster --db-cluster-identifier shop \
--engine aurora-postgresql --engine-version 16.9 \
--master-username dbadmin --manage-master-user-password \
--serverless-v2-scaling-configuration MinCapacity=0,MaxCapacity=16,SecondsUntilAutoPause=600 \
--storage-type aurora-iopt1 \
--db-subnet-group-name db-private --vpc-security-group-ids sg-0abc1234def567890
aws rds create-db-instance --db-instance-identifier shop-writer \
--db-cluster-identifier shop --engine aurora-postgresql --db-instance-class db.r7g.large
aws rds create-db-instance --db-instance-identifier shop-reader-1 \
--db-cluster-identifier shop --engine aurora-postgresql --db-instance-class db.serverless \
--promotion-tier 1 --availability-zone us-east-1b
# 2. See the cluster endpoint, the reader endpoint and who is the writer
aws rds describe-db-clusters --db-cluster-identifier shop \
--query "DBClusters[0].[Endpoint,ReaderEndpoint,DBClusterMembers[].[DBInstanceIdentifier,IsClusterWriter,PromotionTier]]"
# 3. Watch the endpoint move: resolve it, fail over, resolve again (same name, new address)
dig +short shop.cluster-c1a2b3.us-east-1.rds.amazonaws.com
aws rds failover-db-cluster --db-cluster-identifier shop --target-db-instance-identifier shop-reader-1
dig +short shop.cluster-c1a2b3.us-east-1.rds.amazonaws.com
# 4. A custom endpoint for analytics instances
aws rds create-db-cluster-endpoint --db-cluster-identifier shop \
--db-cluster-endpoint-identifier reports --endpoint-type READER \
--static-members shop-analytics-1
# 5. Replica auto scaling: 1 to 8 readers, keep average reader CPU at 60%
aws application-autoscaling register-scalable-target --service-namespace rds \
--resource-id cluster:shop --scalable-dimension rds:cluster:ReadReplicaCount \
--min-capacity 1 --max-capacity 8
aws application-autoscaling put-scaling-policy --service-namespace rds \
--resource-id cluster:shop --scalable-dimension rds:cluster:ReadReplicaCount \
--policy-name reader-cpu-60 --policy-type TargetTrackingScaling \
--target-tracking-scaling-policy-configuration \
'{"TargetValue":60,"PredefinedMetricSpecification":{"PredefinedMetricType":"RDSReaderAverageCPUUtilization"}}'
# 6. Clone production for testing (copy-on-write), then give it an instance
aws rds restore-db-cluster-to-point-in-time --source-db-cluster-identifier shop \
--db-cluster-identifier shop-test --restore-type copy-on-write --use-latest-restorable-time
# 7. Point-in-time restore to 14:04:59 (always a NEW cluster)
aws rds restore-db-cluster-to-point-in-time --source-db-cluster-identifier shop \
--db-cluster-identifier shop-1404 --restore-to-time 2026-10-25T14:04:59Z
# 8. Backtrack an Aurora MySQL cluster (created with --backtrack-window 86400) in place
aws rds backtrack-db-cluster --db-cluster-identifier shop-mysql \
--backtrack-to 2026-10-25T14:04:59Z
aws rds describe-db-cluster-backtracks --db-cluster-identifier shop-mysql
# 9. Global Database: wrap the cluster, add a secondary Region, later switch over
aws rds create-global-cluster --global-cluster-identifier shop-global \
--source-db-cluster-identifier arn:aws:rds:us-east-1:111122223333:cluster:shop
aws rds create-db-cluster --region eu-west-1 --db-cluster-identifier shop-eu \
--engine aurora-postgresql --engine-version 16.9 --global-cluster-identifier shop-global
aws rds switchover-global-cluster --global-cluster-identifier shop-global \
--target-db-cluster-identifier arn:aws:rds:eu-west-1:111122223333:cluster:shop-eu
# 10. Watch replica lag and serverless capacity
aws cloudwatch get-metric-statistics --namespace AWS/RDS --metric-name AuroraReplicaLag \
--dimensions Name=DBInstanceIdentifier,Value=shop-reader-1 \
--start-time 2026-10-25T13:00:00Z --end-time 2026-10-25T14:00:00Z --period 300 --statistics Maximum
#সারসংক্ষেপ
মূল কথাগুলো
- Aurora AWS-এর নিজের MySQL- আর PostgreSQL-compatible engine: compute আর storage আলাদা, প্রচার অনুযায়ী MySQL-এর ৫ গুণ আর PostgreSQL-এর ৩ গুণ পর্যন্ত throughput, instance-প্রতি RDS-এর চেয়ে প্রায় ২০% বেশি দাম।
- Cluster volume কাটা থাকে 10 GiB-এর segment-এ, প্রতিটা ৩টা AZ জুড়ে ৬ বার রাখা। Write-এ লাগে ৬-এ ৪, read-এ ৩: একটা AZ হারালেও write চলে, আর একটা AZ আর আরও একটা কপি হারালেও data পড়া যায়। এটা self-healing, আর নিজে থেকে 128 TiB পর্যন্ত বাড়ে (নতুন version-এ 256 TiB)।
- একটা cluster-এ একটা writer আর ১৫টা পর্যন্ত Aurora Replica, একই storage-এ: replica lag প্রায় 100 ms-এর কম, promotion tier (0–15) দেখে নিজে থেকে failover, সাধারণত ৩০ সেকেন্ডের কম। Reader না থাকলে লাগে প্রায় ১০ মিনিট।
- Endpoint: cluster (সবসময় writer), reader (connection ধরে ভাগ), instance (একটা instance, app-এ এড়িয়ে চলো), custom (বেছে নেওয়া কয়েকটা, যেমন analytics)। একবার বসাও; failover-এ একই নামের পেছনে DNS সরে যায়, তাই connection string কখনো বদলায় না। Promote করা RDS read replica পায় নতুন endpoint।
- Replica auto scaling: reader CPU বা connection-এর ওপর target tracking, একটা min আর max-এর মধ্যে।
- Serverless v2: capacity ACU-তে (প্রতিটা প্রায় 2 GiB), min থেকে max (0–256), কয়েক সেকেন্ডে জায়গায় দাঁড়িয়ে scale, প্রতি সেকেন্ডের দাম; min 0 = auto-pause, জাগতে প্রায় ১৫ সেকেন্ড। কালেভদ্রে, থেমে থেমে, আন্দাজের বাইরের load-এর জন্য। Provisioned-এর সাথে মেশানো যায়। v1 ২০২৫-এ বন্ধ।
- Global Database: ১টা primary + ১০টা পর্যন্ত secondary Region, storage replication ১ সেকেন্ডের কম, secondary-প্রতি ১৬টা reader, write forwarding; switchover (পরিকল্পিত, data হারায় না) বনাম failover (বিপর্যয়, RTO ১ মিনিটের কম, RPO কয়েক সেকেন্ড)।
- Aurora ML SQL থেকে SageMaker, Comprehend বা Bedrock ডাকে। Babelfish Aurora PostgreSQL-কে T-SQL বোঝায়, তাই SQL Server-এর app অল্প বদলেই চলে।
- Backup অবিরাম, সবসময় চালু, ১–৩৫ দিন, performance-এ প্রভাব নেই; PITR আর snapshot restore বানায় নতুন cluster; on-premises MySQL সরে S3-এ Percona XtraBackup দিয়ে।
- Backtrack (Aurora MySQL, সর্বোচ্চ ৭২ ঘণ্টা, বানানোর সময় চালু) পুরো cluster-কে জায়গায় দাঁড়িয়েই পেছায়, endpoint একই। Cloning (copy-on-write) দ্রুত আর সস্তায় test-এর কপি বানায়; staging-এর জন্য snapshot restore-এর চেয়ে এটাই ভালো।
- I/O bill-এর ২৫% বা তার বেশি হলে I/O-Optimized; zero-ETL Redshift-এ data পাঠায়; Aurora DSQL (২০২৫) কয়েক Region-এ active-active একটা আলাদা product।
আগে নিজে উত্তর দাও, তারপর ব্যাখ্যাটা পড়ো। ঠিক হলেও পড়ো, কারণ ভুল Option-গুলো কেন ভুল, সেটাও ওখানে আছে।
নিজেকে যাচাই করোপ্রশ্ন
Aurora একটা cluster-এর data কীভাবে রাখে?
নিজেকে যাচাই করোপ্রশ্ন
৬টা storage কপির মধ্যে write-এর জন্য কয়টার সম্মতি লাগে, আর read-এর জন্য কয়টা লাগে?
নিজেকে যাচাই করোপ্রশ্ন
কোন দুটো বিপদে Aurora cluster volume তবুও write নিতে পারে?
বেছে নাও ২
নিজেকে যাচাই করোপ্রশ্ন
একটা Aurora cluster volume সর্বোচ্চ কত বড় হতে পারে?
নিজেকে যাচাই করোপ্রশ্ন
একটা কোম্পানির MySQL-compatible OLTP database-কে storage-এর স্তরে write বন্ধ না করেই একটা Availability Zone হারানো সহ্য করতে হবে, আর টিম storage capacity বা replication সামলাতে চায় না। কোন service সবচেয়ে মানানসই?
নিজেকে যাচাই করোপ্রশ্ন
একটা Aurora DB cluster-এ (Global Database-এর secondary না) সর্বোচ্চ কয়টা Aurora Replica রাখা যায়?
নিজেকে যাচাই করোপ্রশ্ন
Aurora Replica-র replica lag কেন সাধারণত 100 ms-এর কম, অথচ RDS read replica কয়েক সেকেন্ড পিছিয়ে পড়তে পারে?
নিজেকে যাচাই করোপ্রশ্ন
একটা Aurora cluster-এ আছে একটা writer (db.r6g.2xlarge), reader A (db.r6g.2xlarge, tier 1), reader B (db.r6g.large, tier 0) আর reader C (db.r6g.4xlarge, tier 2)। Writer নষ্ট হলো। কোন instance writer হবে?
নিজেকে যাচাই করোপ্রশ্ন
একটা Aurora cluster-এ শুধু একটা writer instance, কোনো replica নেই। Writer নষ্ট হলো। কী হবে?
নিজেকে যাচাই করোপ্রশ্ন
একটা application order লেখে আর অনেক product search চালায়। টিম চায় write সবসময় বর্তমান primary-তে যাক আর read replica-দের মধ্যে ছড়াক, failover-এর পর application-এর configuration না বদলেই। Application কী ব্যবহার করবে?
নিজেকে যাচাই করোপ্রশ্ন
একজন developer জিজ্ঞেস করল: ‘পরীক্ষা বলছে failover-এর সময় connection string বদলানো যাবে না, আবার বলছে দুটো endpoint বসাতে। এটা কি স্ববিরোধী না?’ সবচেয়ে ভালো ব্যাখ্যা কোনটা?
নিজেকে যাচাই করোপ্রশ্ন
একটা টিম একটা primary RDS for PostgreSQL instance আর একটা read replica চালায়। Primary নষ্ট হলো, তারা replica promote করল। এরপর তাদের কী করতে হবে?
নিজেকে যাচাই করোপ্রশ্ন
একটা কোম্পানির data science টিম একটা Aurora cluster-এ ভারী query চালায়, যেটা customer-দেরও সেবা দেয়। Analyst-দের জন্য তারা দুটো db.r6g.8xlarge reader যোগ করেছে। Analytics query শুধু ওই দুটোতে চলবে আর customer-এর read কখনো সেখানে যাবে না, এটা কীভাবে নিশ্চিত করবে?
নিজেকে যাচাই করোপ্রশ্ন
একটা application শুরুতে Aurora reader endpoint-এ একটাই database connection খোলে আর কয়েকদিন খুলে রাখে। টিম দেখছে একটা reader 90% CPU-তে, বাকি দুটো প্রায় অলস। কেন?
নিজেকে যাচাই করোপ্রশ্ন
Aurora Replica auto scaling নিয়ে কোন কথাটা ঠিক?
নিজেকে যাচাই করোপ্রশ্ন
একটা startup একদম আন্দাজের বাইরের traffic নিয়ে নতুন app চালু করছে। Database কয়েক ঘণ্টা অলস থাকতে পারে, তারপর কয়েক সেকেন্ডের মধ্যে অনেক capacity লাগতে পারে। তারা MySQL compatibility চায়, capacity planning চায় না, আর যতটুকু ব্যবহার ততটুকুর দাম দিতে চায়। কী বাছবে?
নিজেকে যাচাই করোপ্রশ্ন
একটা Aurora Serverless v2 cluster-এর capacity range 0.5 থেকে 8 ACU। Sale-এর সময় load-এর লাগত প্রায় 20 ACU। কী হবে?
নিজেকে যাচাই করোপ্রশ্ন
Aurora Serverless v2-এর একটা development database শুধু অফিসের সময় ব্যবহার হয়। টিম চায় রাতে compute-এর খরচ শূন্য হোক, আর সকালে প্রথম connection-এ কয়েক সেকেন্ড লাগলে সমস্যা নেই। কোন দুটো setting বা তথ্য প্রযোজ্য?
বেছে নাও ২
নিজেকে যাচাই করোপ্রশ্ন
Aurora Serverless v2-এ এক ACU মানে কী?
নিজেকে যাচাই করোপ্রশ্ন
ধরো Aurora Serverless v2-এর দাম ACU-hour-প্রতি $0.12। একটা dev cluster-এ 0 থেকে 8 ACU range-এর একটা serverless instance। দিনে ১০ ঘণ্টা গড়ে 4 ACU-তে চলে, বাকি ১৪ ঘণ্টা কোনো connection থাকে না, তাই auto-pause হয়। ৩০ দিনের মাসে compute-এর খরচ কত (প্রতিবার pause-এর আগের কয়েক মিনিট বাদ দাও)?
নিজেকে যাচাই করোপ্রশ্ন
একটা global কোম্পানির এমন একটা relational database লাগবে, যেটা ইউরোপ আর এশিয়ায় low-latency read দেবে, আর primary Region বসে গেলে RTO ১ মিনিটের কম আর RPO প্রায় ১ সেকেন্ডের disaster recovery দেবে। Solutions architect কী সুপারিশ করবে?
নিজেকে যাচাই করোপ্রশ্ন
একটা Aurora Global Database-এ কয়টা secondary Region, আর প্রতিটা secondary cluster-এ কয়টা read-only instance রাখা যায়?
নিজেকে যাচাই করোপ্রশ্ন
একটা কোম্পানি তার Aurora Global Database-এর primary ছয় মাসের জন্য us-east-1 থেকে eu-west-1-এ সরাতে চায়, কোনো data না হারিয়ে। দুই Region-ই সুস্থ। কোন কাজটা করবে?
নিজেকে যাচাই করোপ্রশ্ন
Aurora Global Database নিয়ে কোন দুটো কথা ঠিক?
বেছে নাও ২
নিজেকে যাচাই করোপ্রশ্ন
একটা দোকান প্রতিটা নতুন product review-কে ভালো, খারাপ বা নিরপেক্ষ চিহ্নিত করতে চায়, নিজের Aurora PostgreSQL database-এ একটা সাধারণ SQL query দিয়ে, data export না করে বা model না বানিয়ে। কী ব্যবহার করবে?
নিজেকে যাচাই করোপ্রশ্ন
একটা কোম্পানির Microsoft SQL Server-এ একটা বড় .NET application আছে। তারা AWS-এ open-source-compatible একটা engine-এ সরতে চায়, license-এর খরচ এড়াতে চায়, আর application code যতটা সম্ভব কম বদলাতে চায়। কী ব্যবহার করবে?
নিজেকে যাচাই করোপ্রশ্ন
Aurora-র automated backup নিয়ে কোন কথাটা ঠিক?
নিজেকে যাচাই করোপ্রশ্ন
১৪:০৫-এ একজন developer production-এর একটা Aurora MySQL cluster-এ orders table drop করে ফেলল; cluster-টা বানানো হয়েছিল ২৪ ঘণ্টার backtrack window দিয়ে। Business চায় application-এর endpoint না বদলে সবচেয়ে দ্রুত recovery। টিম কী করবে?
নিজেকে যাচাই করোপ্রশ্ন
Aurora Backtrack নিয়ে কোন কথাটা ঠিক না (NOT)?
নিজেকে যাচাই করোপ্রশ্ন
Load testing-এর জন্য একটা টিমের প্রতি সপ্তাহে 10 TiB-এর production Aurora database-এর একটা পুরো কপি লাগে। দ্রুত তৈরি হতে হবে, production ধীর করা যাবে না, আর storage-এর খরচ যতটা সম্ভব কম হতে হবে। কী ব্যবহার করবে?
নিজেকে যাচাই করোপ্রশ্ন
একটা কোম্পানি অফিসের 3 TB-র একটা MySQL database backup থেকে যত দ্রুত সম্ভব নতুন একটা Aurora MySQL cluster-এ সরাতে চায়। AWS কোন উপায়টা সমর্থন করে?
নিজেকে যাচাই করোপ্রশ্ন
Aurora cluster restore আর কপি করা নিয়ে কোন দুটো কথা ঠিক?
বেছে নাও ২
নিজেকে যাচাই করোপ্রশ্ন
একটা I/O-ভারী Aurora cluster-এর মাসিক bill-এ দেখা যাচ্ছে, মোট Aurora খরচের 40% হলো I/O request। কোন বদলে bill কমার সম্ভাবনা সবচেয়ে বেশি?