Replication এবং High Availability (HA) PostgreSQL ডেটাবেসের দুটি অত্যন্ত গুরুত্বপূর্ণ বৈশিষ্ট্য, যা ডেটাবেসের স্থিতিশীলতা, অ্যাভেইলেবিলিটি এবং স্কেলেবিলিটি নিশ্চিত করে। এগুলি বিশেষভাবে সিস্টেমে ডেটার অনুলিপি তৈরি এবং তা বিভিন্ন সার্ভারে বিতরণ করার জন্য ব্যবহৃত হয়, যাতে সার্ভার ডাউন হলে ডেটাবেসের অ্যাক্সেস এবং পারফরম্যান্স বজায় থাকে। নিচে PostgreSQL-এ Replication এবং High Availability সম্পর্কিত বিস্তারিত আলোচনা করা হলো।
1. Replication (রিপ্লিকেশন)
Replication হল একটি প্রক্রিয়া যেখানে ডেটাবেসের একটি মূল কপি তৈরি করে তার অনুলিপি তৈরি করা হয় অন্য সার্ভারে, যার মাধ্যমে ডেটা স্টোর করা হয় এবং সার্ভারগুলির মধ্যে সিঙ্ক্রোনাইজেশন থাকে। PostgreSQL-এ বিভিন্ন ধরনের রিপ্লিকেশন মডেল রয়েছে, যেমন Streaming Replication, Logical Replication, এবং File-based Log Shipping।
Types of Replication in PostgreSQL
Streaming Replication: Streaming replication হল একটি সিঙ্ক্রোনাস বা অ্যাসিঙ্ক্রোনাস রিপ্লিকেশন প্রক্রিয়া, যেখানে প্রাথমিক ডেটাবেসের ডেটা দ্বিতীয় সার্ভারে ধারাবাহিকভাবে স্ট্রিম করা হয়। এটি সাধারণত master-slave আর্কিটেকচারে ব্যবহৃত হয়, যেখানে প্রাথমিক (primary) সার্ভারে ডেটা লেখার পর সেটি replica (secondary) সার্ভারে স্ট্রিম করা হয়।
ফিচার:
- Synchronous Replication: এই পদ্ধতিতে, যখন প্রাইমারি সার্ভারে কোনও ট্রানজেকশন কমপ্লিট হয়, তখন সেকেন্ডারি সার্ভারে সেই ট্রানজেকশন কমপ্লিট না হওয়া পর্যন্ত সার্ভার ক্লায়েন্টকে রিপ্লাই ফেরত পাঠায় না। এটি ডেটা সিঙ্ক্রোনাইজেশন নিশ্চিত করে।
- Asynchronous Replication: সেকেন্ডারি সার্ভারে ডেটা স্ট্রিম করার জন্য কিছু সময়ের অপেক্ষা থাকে, এতে কিছুটা বিলম্ব হয়, তবে পারফরম্যান্সে প্রভাব কম থাকে।
উদাহরণ:
Primary Server Setup:
# Enable replication on primary server echo "wal_level = replica" >> /etc/postgresql/postgresql.conf echo "max_wal_senders = 3" >> /etc/postgresql/postgresql.conf echo "hot_standby = on" >> /etc/postgresql/postgresql.confSecondary Server Setup:
pg_basebackup -h primary_server_ip -D /var/lib/postgresql/12/main -U replication_user -P --wal-method=stream
Logical Replication: Logical replication PostgreSQL 10 এ আনা একটি নতুন বৈশিষ্ট্য। এটি নির্দিষ্ট টেবিল বা ডেটার অংশ রিপ্লিকেট করার সুযোগ দেয়। এতে, আপনি শুধু প্রয়োজনীয় ডেটা বা টেবিলের জন্য রিপ্লিকেশন কনফিগার করতে পারবেন, যা স্ট্রিমিং রিপ্লিকেশনের তুলনায় আরও ফ্লেক্সিবল।
ফিচার:
- এটি table-level replication সুবিধা দেয়, যার ফলে আপনি নির্দিষ্ট টেবিল বা ডেটার অংশ সিলেক্টিভভাবে রিপ্লিকেট করতে পারবেন।
- আপনি publish-subscribe মডেল ব্যবহার করে ডেটা কপি করতে পারবেন।
উদাহরণ:
Primary Server Setup:
CREATE PUBLICATION my_publication FOR TABLE my_table;Secondary Server Setup:
CREATE SUBSCRIPTION my_subscription CONNECTION 'host=primary_server_ip dbname=postgres user=replication_user password=secret' PUBLICATION my_publication;
2. High Availability (HA)
High Availability (HA) হল একটি কনসেপ্ট যার মাধ্যমে ডেটাবেস সিস্টেমের নিরবচ্ছিন্ন অপারেশন নিশ্চিত করা হয়। HA সিস্টেমের উদ্দেশ্য হল ডেটাবেসের সেবা প্রদান করতে কোনও ধরনের ডাউনটাইম না থাকা বা কম ডাউনটাইম থাকা, বিশেষ করে যখন একটি সার্ভার বা সিস্টেম ব্যর্থ হয়।
High Availability Architecture
Failover Mechanism: HA সিস্টেমে failover একটি অত্যন্ত গুরুত্বপূর্ণ অংশ, যেখানে যদি প্রাথমিক (primary) সার্ভার ফেইল করে, তখন সেকেন্ডারি (replica) সার্ভারকে প্রধান সার্ভার হিসেবে গ্রহণ করা হয়। এতে ডেটাবেস সার্ভারের অ্যাভেইলেবিলিটি বৃদ্ধি পায় এবং সার্ভিস ডাউন হওয়ার সম্ভাবনা কমে যায়।
Automatic Failover: Patroni বা Pacemaker ব্যবহার করে PostgreSQL-এ automatic failover কনফিগার করা যায়। এগুলি ডেটাবেস ক্লাস্টার ম্যানেজমেন্ট টুলস যা failover প্রক্রিয়া অটোমেটিকভাবে পরিচালনা করে।
উদাহরণ:
- Patroni: PostgreSQL এর জন্য HA কনফিগারেশন ব্যবস্থাপনা সিস্টেম। এটি automatic failover, replication এবং cluster management এর জন্য ব্যবহৃত হয়।
- Load Balancing: HA সিস্টেমে load balancing ডেটাবেস ক্লাস্টারের মধ্যে লোড সঠিকভাবে বিতরণ করতে সাহায্য করে। এতে প্রাথমিক সার্ভারের উপর অতিরিক্ত চাপ না পড়ে এবং সিস্টেমের পারফরম্যান্স উন্নত হয়।
- pgBouncer বা Pgpool-II এর মাধ্যমে PostgreSQL লোড ব্যালেন্সিং করা হয়। এটি ক্লায়েন্ট কনেকশন গুলোকে সঠিক সার্ভারে রিডিরেক্ট করে।
HA Setup Example (Using Patroni)
Patroni হল একটি HA সিস্টেম যা etcd বা Consul ব্যবহারের মাধ্যমে ডেটাবেস ক্লাস্টার পরিচালনা করে। এটি ডেটাবেস ক্লাস্টার সঠিকভাবে ম্যানেজ করে, যেমন failover, replication, এবং সার্ভারের স্বয়ংক্রিয় পুনঃস্থাপন।
Patroni Configuration Example:
scope: postgres
name: node1
datastore:
host: etcd_host
port: 2379
protocol: http
- Automatic Failover: যখন primary সার্ভার down হয়ে যায়, তখন Patroni একটি replica সার্ভারকে নতুন primary হিসেবে নির্বাচিত করে।
3. Tools for Replication and High Availability
- PgBouncer: এটি একটি lightweight connection pooler যা PostgreSQL সার্ভারগুলোতে লোড ব্যালেন্সিং এবং সংযোগ ব্যবস্থাপনা সহায়তা করে।
- Pgpool-II: এটি PostgreSQL-এ replication, load balancing, এবং failover পরিচালনার জন্য একটি টুল। এটি ক্লাস্টারভিত্তিক PostgreSQL ব্যবস্থায় সঠিক ডেটা বিতরণ এবং অ্যাভেইলেবিলিটি নিশ্চিত করে।
- Patroni: PostgreSQL ক্লাস্টার ম্যানেজমেন্ট টুল যা failover এবং HA পরিচালনা করতে ব্যবহৃত হয়।
- Pacemaker: এটি HA ক্লাস্টার কনফিগারেশন এবং ম্যানেজমেন্ট টুল যা PostgreSQL এর জন্য failover প্রক্রিয়া অটোমেটিকভাবে সম্পন্ন করতে সাহায্য করে।
সারাংশ
- Replication PostgreSQL এর একটি গুরুত্বপূর্ণ বৈশিষ্ট্য যা ডেটাবেসের সার্ভারের মধ্যে ডেটা কপি তৈরি করে এবং সার্ভিস ডাউন না হয়ে সিস্টেমের অ্যাভেইলেবিলিটি নিশ্চিত করে।
- Streaming Replication এবং Logical Replication দুটি প্রধান রিপ্লিকেশন মডেল।
- High Availability (HA) সিস্টেমের উদ্দেশ্য হলো ডেটাবেস সার্ভিসের সর্বোচ্চ অ্যাভেইলেবিলিটি নিশ্চিত করা। এতে failover এবং load balancing মূল উপাদান হিসেবে কাজ করে।
- Patroni, PgBouncer, এবং Pgpool-II হল গুরুত্বপূর্ণ টুলস যা PostgreSQL-এ HA এবং Replication পরিচালনা করতে ব্যবহৃত হয়।
Replication হল একটি প্রক্রিয়া যার মাধ্যমে ডেটাবেসের একটি কপি অন্য সার্ভারে তৈরি করা হয়, যাতে মূল ডেটাবেসের ডেটা এবং তথ্য অনুলিপি (replica) হয়ে থাকে। এই কপি একটি বা একাধিক সার্ভারে থাকতে পারে এবং মূল ডেটাবেসের সাথে সিঙ্ক্রোনাইজ থাকে, যাতে ডেটার পূর্ণতা এবং অখণ্ডতা বজায় থাকে।
Replication এর প্রয়োজনীয়তা
Replication একটি গুরুত্বপূর্ণ বৈশিষ্ট্য এবং এটি ডেটাবেস সিস্টেমের পারফরম্যান্স, নির্ভরযোগ্যতা, এবং স্কেলেবিলিটি উন্নত করতে সহায়তা করে। নিচে Replication কেন প্রয়োজন তা বিস্তারিতভাবে আলোচনা করা হলো।
1. High Availability (উচ্চ প্রাপ্যতা)
Replication সিস্টেমে প্রধান উদ্দেশ্য হল High Availability নিশ্চিত করা। যদি প্রধান সার্ভারটি কোনো কারণে ডাউন হয়ে যায়, তবে রেপ্লিকা সার্ভার থেকে ডেটা পাওয়া যেতে পারে। এর ফলে সিস্টেমের ডাউনটাইম কমে যায় এবং ব্যবহারকারীরা সর্বদা ডেটা অ্যাক্সেস করতে সক্ষম হন।
- ব্যবহার: সাধারণত, বড় স্কেল ওয়েব অ্যাপ্লিকেশন বা ই-কমার্স সাইটে যেখানে সার্ভারের ডাউনটাইম এড়ানো গুরুত্বপূর্ণ, সেখানে রেপ্লিকেশন ব্যবহৃত হয়।
2. Load Balancing (লোড ব্যালান্সিং)
Replication পদ্ধতিতে একাধিক সার্ভার থাকে, এবং ডেটার কপি একাধিক সার্ভারে রাখা হয়। এর মাধ্যমে load balancing করা যায়, অর্থাৎ ব্যবহারকারীদের থেকে আসা কুয়েরি বিভক্ত করে একাধিক সার্ভারে প্রেরণ করা হয়, যাতে একটি সার্ভারে অতিরিক্ত চাপ না পড়ে। এইভাবে, সার্ভারের পারফরম্যান্স উন্নত হয় এবং ট্রাফিক সহজে হ্যান্ডেল করা যায়।
- ব্যবহার: ওয়েব সার্ভিস, ডেটাবেস হোস্টিং, এবং অন্যান্য বড় অ্যাপ্লিকেশন সিস্টেমে লোড ব্যালান্সিংয়ের জন্য রেপ্লিকেশন ব্যবহৃত হয়।
3. Disaster Recovery (দুর্যোগ পুনরুদ্ধার)
Replication সিস্টেমে মূল সার্ভারের ডেটা অন্য সার্ভারে কপি করা থাকে, যা disaster recovery তে গুরুত্বপূর্ণ ভূমিকা পালন করে। যদি প্রধান সার্ভার কোনো কারণে ক্ষতিগ্রস্ত হয় বা ডাউন হয়ে যায়, তবে রেপ্লিকা সার্ভার ব্যবহার করে ডেটা পুনরুদ্ধার করা যেতে পারে।
- ব্যবহার: ব্যাংকিং সিস্টেম, হেলথকেয়ার ডেটাবেস, বা অন্য কোনো উচ্চ নির্ভরযোগ্য সিস্টেম যেখানে ডেটার অভাব বা ক্ষতি ডেটা লসের কারণ হতে পারে, সেখানে রেপ্লিকেশন অত্যন্ত গুরুত্বপূর্ণ।
4. Backup and Data Redundancy (ব্যাকআপ এবং ডেটা পুনরাবৃত্তি)
Replication সিস্টেমে data redundancy এর সুবিধা পাওয়া যায়। এটি মূল ডেটাবেসের অনুলিপি তৈরি করে, যাতে ডেটা হারানো বা ক্ষতির ক্ষেত্রে পুনরুদ্ধারের সুবিধা থাকে। এটি একটি ধরনের স্বয়ংক্রিয় ব্যাকআপ হিসেবেও কাজ করে।
- ব্যবহার: বড় ডেটাবেস সিস্টেমে যেখানে তথ্য পুনরুদ্ধারের জন্য সময় ব্যয় এবং ডেটা লস এড়ানো অত্যন্ত গুরুত্বপূর্ণ।
5. Scaling (স্কেলিং)
Replication সাহায্যে scaling বা স্কেল আউট করা সম্ভব হয়। যখন ব্যবহারকারীর সংখ্যা বৃদ্ধি পায় বা ডেটাবেসে আরো বেশি লোড তৈরি হয়, তখন আরও বেশি রেপ্লিকা সার্ভার যোগ করা যেতে পারে। এটি ডেটাবেস সিস্টেমকে বেশি ব্যবহারকারীর চাপ সামাল দিতে সক্ষম করে।
- ব্যবহার: ক্লাউড সেবা বা অন্যান্য সিস্টেম যেখানে ট্রাফিকের চাপ নির্দিষ্ট সময় অনুযায়ী বাড়তে থাকে, সেখানে রেপ্লিকেশন স্কেল আউট করতে সাহায্য করে।
6. Read-Write Separation (পাঠ-লিখন আলাদা করা)
Replication পদ্ধতিতে read-write separation করা সম্ভব হয়। সাধারণত, একমাত্র master server (প্রধান সার্ভার) ডেটাতে পরিবর্তন (write) করতে সক্ষম থাকে, এবং replica servers (রেপ্লিকা সার্ভার) শুধুমাত্র ডেটা পড়তে (read) সক্ষম থাকে। এর মাধ্যমে, ডেটার লেখার এবং পড়ার কাজগুলো আলাদা করা হয়, যা পারফরম্যান্স বাড়ায়।
- ব্যবহার: ওয়েব অ্যাপ্লিকেশন বা API-তে, যেখানে লিখন কাজ কম এবং পাঠন কাজ বেশি হয়, সেখানে রেপ্লিকেশন কৌশলটি কার্যকর হয়।
Types of Replication (রেপ্লিকেশন প্রকার)
- Master-Slave Replication (মাস্টার-স্লেভ রেপ্লিকেশন):
- এখানে, একটি সার্ভার (master) লেখার কাজ করে এবং অন্যান্য সার্ভার (slaves) কেবল পড়ার কাজ করে। সমস্ত ডেটা প্রধান সার্ভার (master) থেকে রেপ্লিকা সার্ভারগুলোতে (slaves) কপি করা হয়।
- এটি সাধারণত read-heavy অ্যাপ্লিকেশনগুলির জন্য ব্যবহৃত হয়।
- Master-Master Replication (মাস্টার-মাস্টার রেপ্লিকেশন):
- এখানে, দুইটি সার্ভার (masters) উভয়ই লেখার এবং পড়ার কাজ করে। দুইটি সার্ভারের মধ্যে ডেটা সিঙ্ক্রোনাইজ করা হয়।
- এটি বেশি ট্র্যাফিক সহ অ্যাপ্লিকেশনের জন্য ব্যবহৃত হয়, যেখানে ডেটা দুটো সাইটে ম্যানেজ করা হয়।
- Multi-Master Replication (মাল্টি-মাস্টার রেপ্লিকেশন):
- এখানে, একাধিক সার্ভার লেখার এবং পড়ার কাজ করে এবং প্রতিটি সার্ভার একে অপরের সাথে ডেটা সিঙ্ক্রোনাইজ করে।
সারাংশ
Replication একটি গুরুত্বপূর্ণ প্রযুক্তি যা ডেটাবেসের পারফরম্যান্স, নির্ভরযোগ্যতা এবং স্কেলেবিলিটি উন্নত করতে সহায়ক। এটি বিভিন্ন উদ্দেশ্যে ব্যবহৃত হয়, যেমন:
- High Availability: সার্ভার ডাউন হলে, অন্য সার্ভার থেকে ডেটা পাওয়া যায়।
- Load Balancing: একাধিক সার্ভারের মাধ্যমে লোড ভাগাভাগি করা হয়।
- Disaster Recovery: দুর্ঘটনার পর ডেটা দ্রুত পুনরুদ্ধার করা যায়।
- Scaling: ডেটাবেসের স্কেল আউট করা সম্ভব হয়।
Replication ডেটাবেসের উন্নত ব্যবস্থাপনা এবং বড় সিস্টেমের জন্য গুরুত্বপূর্ণ একটি প্রক্রিয়া।
PostgreSQL ডেটাবেসে replication হল একটি প্রক্রিয়া যার মাধ্যমে একটি সার্ভারের ডেটা অন্য একটি সার্ভারে কপি করা হয়। এটি মূলত ডেটাবেসের উচ্চ উপলব্ধতা এবং লোড ব্যালান্সিং নিশ্চিত করতে ব্যবহৃত হয়। PostgreSQL-এ বিভিন্ন ধরনের replication সমর্থিত, যার মধ্যে Streaming Replication এবং Asynchronous Replication দুটি গুরুত্বপূর্ণ কৌশল।
এখানে আমরা Streaming Replication এবং Asynchronous Replication এর ব্যাখ্যা এবং পার্থক্য আলোচনা করব।
1. Streaming Replication
Streaming Replication হল PostgreSQL এর একটি ফিচার যা মূল সার্ভার (primary server) থেকে ডেটা পরিবর্তন (WAL logs) রিয়েল টাইমে স্ট্রীমিং করে একটি বা একাধিক standby server তে পাঠায়। এটি একটি synchronous অথবা asynchronous পদ্ধতিতে কাজ করতে পারে। তবে, সাধারণভাবে এটি asynchronous replication হিসেবে ব্যবহৃত হয়।
How Streaming Replication Works:
- WAL (Write-Ahead Logs): PostgreSQL একটি ডেটাবেস ট্রানজেকশন চালানোর আগে পরিবর্তনগুলির একটি লগ তৈরি করে। এই লগকে WAL logs বলা হয়।
- Primary Server: প্রাইমারি সার্ভারে পরিবর্তনগুলি WAL logs এ লেখা হয়।
- Standby Server: স্ট্যান্ডবাই সার্ভার WAL logs স্ট্রীমিংয়ের মাধ্যমে প্রাইমারি সার্ভার থেকে সংগ্রহ করে এবং সেগুলিকে নিজের ডেটাবেসে সিঙ্ক্রোনাইজ করে।
Key Features of Streaming Replication:
- Real-Time Data Replication: ডেটা পরিবর্তন স্ট্রীমিংয়ের মাধ্যমে রিয়েল টাইমে স্ট্যান্ডবাই সার্ভারে কপি হয়।
- Continuous Syncing: স্ট্যান্ডবাই সার্ভার প্রাইমারি সার্ভারের সাথে অনবরত সিঙ্ক্রোনাইজড থাকে।
- WAL Shipping: WAL logs স্ট্রীমিং এবং প্রেরণ একটি ইফেক্টিভ এবং রিয়েল টাইম পদ্ধতি।
Benefits of Streaming Replication:
- High Availability: সার্ভার ডাউন হলে, স্ট্যান্ডবাই সার্ভার দ্রুত অ্যাক্টিভ হয়ে কাজ চালিয়ে যেতে পারে।
- Load Balancing: স্ট্যান্ডবাই সার্ভার থেকে রিড-কুয়েরি পরিচালনা করা যায়, যাতে প্রাইমারি সার্ভারের ওপর লোড কমে।
Configuration Steps:
- Enable replication on Primary Server:
In
postgresql.conf:wal_level = replica max_wal_senders = 5In
pg_hba.conf:host replication all 192.168.1.0/24 md5
- Setup Standby Server: Set up streaming replication on the standby server with
restore_commandandstandby_modesettings.
2. Asynchronous Replication
Asynchronous Replication হল PostgreSQL এর একটি replication পদ্ধতি যেখানে প্রাইমারি সার্ভার ডেটা পরিবর্তন করার পর, সেই পরিবর্তনগুলি স্ট্যান্ডবাই সার্ভারে পাঠানো হয় তবে প্রাইমারি সার্ভার রিড-ওয়াইট অপারেশন সম্পন্ন করার সময় স্ট্যান্ডবাই সার্ভারের কাছে সেগুলি সিঙ্ক্রোনাইজ হতে অপেক্ষা করে না। এর মানে, প্রাইমারি সার্ভার স্ট্যান্ডবাই সার্ভারের সাথে সিঙ্ক্রোনাইজেশন না হওয়া সত্ত্বেও অব্যাহতভাবে কাজ চালিয়ে যেতে পারে।
How Asynchronous Replication Works:
- WAL Logs: প্রাইমারি সার্ভার তার WAL logs তৈরি করে এবং সেগুলি স্ট্যান্ডবাই সার্ভারে পাঠাতে শুরু করে।
- No Wait for Acknowledgement: প্রাইমারি সার্ভার ওয়েল লগ পাঠানোর পর কোন acknowledgment ছাড়াই তার অপারেশন চালিয়ে যায়।
- Eventual Consistency: স্ট্যান্ডবাই সার্ভার পরবর্তীতে প্রাইমারি সার্ভারের পরিবর্তনগুলো গ্রহণ করবে, তবে এটি সবসময় রিয়েল-টাইম বা সিঙ্ক্রোনাস হবে না। কিছু সময়ের জন্য ডেটা কিছুটা অসামঞ্জস্য থাকতে পারে।
Benefits of Asynchronous Replication:
- Performance: প্রাইমারি সার্ভার দ্রুত তার কাজ সম্পন্ন করতে পারে, কারণ এটি স্ট্যান্ডবাই সার্ভারের সাথে সিঙ্ক্রোনাইজেশন জন্য অপেক্ষা করে না।
- Minimal Impact on Primary Server: স্ট্যান্ডবাই সার্ভারের কনফিগারেশন এবং ডেটা সিঙ্ক্রোনাইজেশন প্রাইমারি সার্ভারের পারফরম্যান্সে খুব কম প্রভাব ফেলে।
Limitations of Asynchronous Replication:
- Data Loss: যদি প্রাইমারি সার্ভার ক্র্যাশ করে এবং সেই সময় স্ট্যান্ডবাই সার্ভার পরিবর্তনগুলি সিঙ্ক্রোনাইজ না করে, তবে কিছু ডেটা হারানো যেতে পারে।
- Eventual Consistency: ডেটা আস্তে আস্তে সিঙ্ক্রোনাইজ হয়, এবং কিছু সময় পর্যন্ত ডেটার মধ্যে অমিল থাকতে পারে।
Configuration Steps:
- Enable replication on Primary Server:
- Same as in streaming replication.
- Configure Standby Server:
- No waiting for acknowledgment from standby.
3. Key Differences Between Streaming and Asynchronous Replication
| Feature | Streaming Replication | Asynchronous Replication |
|---|---|---|
| Data Consistency | High consistency; near real-time synchronization | Eventual consistency; possible delay in sync |
| Performance | Slight performance overhead due to real-time syncing | Higher performance due to no wait for acknowledgment |
| Risk of Data Loss | Low risk of data loss due to real-time replication | Higher risk of data loss if primary crashes |
| Replication Type | Synchronous or Asynchronous (in PostgreSQL terms) | Always asynchronous |
| Use Case | High availability, real-time applications | Applications with higher tolerance for data delay |
| Primary Server Impact | Moderate impact on performance due to sync delay | Minimal impact, faster operations for primary server |
4. Conclusion
- Streaming Replication provides real-time synchronization between the primary and standby servers, ensuring high availability and minimal data loss risk. It's ideal for scenarios where real-time consistency is crucial, like in high-availability clusters.
- Asynchronous Replication is more suitable when performance is a priority, and data consistency can be tolerated to some extent. It’s ideal for read-heavy applications, load balancing scenarios, and cases where performance is more important than immediate consistency.
In PostgreSQL, you can configure both of these replication types to meet different application requirements.
Logical Replication এবং Data Synchronization দুটি গুরুত্বপূর্ণ কৌশল, যা PostgreSQL-এ ডেটা কপি এবং সিঙ্ক্রোনাইজেশন করতে ব্যবহৃত হয়। এগুলি ডেটাবেসের পারফরম্যান্স বৃদ্ধি, ব্যাকআপ সিস্টেম তৈরি, এবং ডেটার প্রাপ্যতা ও অ্যাভেইলেবিলিটি নিশ্চিত করতে সহায়ক।
1. Logical Replication (লজিক্যাল রিপ্লিকেশন)
Logical Replication PostgreSQL-এর একটি বৈশিষ্ট্য, যা টেবিল বা ডেটাবেসের মধ্যে ডেটা কপি করার জন্য ব্যবহৃত হয়, যেখানে আপনি নির্দিষ্ট ডেটা বা টেবিলগুলো রিপ্লিকেট করতে পারেন। এটি Physical Replication থেকে ভিন্ন, কারণ Physical Replication পুরো ডেটাবেস ক্লোন করে, যেখানে Logical Replication কেবলমাত্র নির্দিষ্ট ডেটা এবং টেবিল কপি করে।
Logical Replication এর বৈশিষ্ট্য:
- Row-level Replication: Logical Replication কেবলমাত্র সিলেক্টেড টেবিলের ডেটা সিঙ্ক্রোনাইজ করে, এবং এটি Row-level Replication প্রদান করে। অর্থাৎ, আপনি শুধু নির্দিষ্ট রেকর্ড বা কলামগুলো রিপ্লিকেট করতে পারবেন।
- Publisher-Subscriber Model: Logical Replication একটি Publisher-Subscriber model অনুসরণ করে, যেখানে একটি ডেটাবেস Publisher হিসেবে কাজ করে এবং অন্য একটি ডেটাবেস Subscriber হিসেবে কাজ করে।
- Selective Replication: Logical Replication আপনাকে নির্দিষ্ট টেবিল বা কলাম কপি করার সুবিধা দেয়, যা physical replication-এ সম্ভব নয়। এর মাধ্যমে আপনি শুধু প্রয়োজনীয় ডেটার কপি তৈরি করতে পারেন।
- Asynchronous Replication: Logical Replication সাধারণত Asynchronous Replication হয়, অর্থাৎ পরিবর্তনগুলি মূল সার্ভার থেকে সাবস্ক্রাইবারে একটু দেরিতে পৌঁছাতে পারে।
Logical Replication এর প্রক্রিয়া:
Step 1: Enable Replication on the Publisher প্রথমে, পাবলিশার সিস্টেমে রিপ্লিকেশন সক্রিয় করতে হবে। এটি করার জন্য
postgresql.confফাইলেwal_levelএবংmax_replication_slotsকনফিগার করতে হবে।wal_level = logical max_replication_slots = 4 max_replication_workers = 4Step 2: Create a Publication on the Publisher রিপ্লিকেশন সেন্ট্রাল সার্ভারে টেবিল বা ডেটাবেসের একটি Publication তৈরি করতে হবে।
CREATE PUBLICATION my_publication FOR TABLE my_table;Step 3: Create a Subscription on the Subscriber এখন, সাবস্ক্রাইবার সিস্টেমে Subscription তৈরি করতে হবে, যা পাবলিশারের ডেটার কপি নেবে।
CREATE SUBSCRIPTION my_subscription CONNECTION 'host=publisher_host dbname=mydb user=myuser password=mypassword' PUBLICATION my_publication;Step 4: Verify Replication আপনি
pg_stat_subscriptionটেবিলটি দেখে রিপ্লিকেশন স্ট্যাটাস চেক করতে পারেন।SELECT * FROM pg_stat_subscription;
Logical Replication এর সুবিধা:
- নির্দিষ্ট টেবিল বা ডেটা অংশ রিপ্লিকেট করা সম্ভব।
- অ্যাপ্লিকেশন লেভেলে লজিক্যাল কন্ট্রোল পাওয়া যায়।
- একাধিক সাবস্ক্রাইবার থাকতে পারে।
- ফাইল সিস্টেমের উপর কোন প্রভাব নেই এবং ডিস্ক স্পেস সাশ্রয়ী।
2. Data Synchronization (ডেটা সিঙ্ক্রোনাইজেশন)
Data Synchronization হল দুটি বা তার অধিক ডেটাবেস বা সিস্টেমের মধ্যে ডেটার সামঞ্জস্যতা বজায় রাখা। যখন একাধিক সিস্টেমে ডেটা পরিবর্তন হয়, তখন সিঙ্ক্রোনাইজেশন নিশ্চিত করতে হবে যাতে সমস্ত সিস্টেমে ডেটা সমান থাকে। ডেটা সিঙ্ক্রোনাইজেশন ডেটা ম্যানেজমেন্টের জন্য গুরুত্বপূর্ণ, বিশেষ করে ডিস্ট্রিবিউটেড ডেটাবেস বা ক্লাউড-ভিত্তিক অ্যাপ্লিকেশনে।
Data Synchronization এর কৌশল:
- Real-time Synchronization: এটি এমন একটি কৌশল যেখানে ডেটা পরিবর্তনের সাথে সাথে তা সিস্টেমে সিঙ্ক্রোনাইজ করা হয়। উদাহরণস্বরূপ, Logical Replication অথবা Triggers ব্যবহারের মাধ্যমে সিস্টেমে সিঙ্ক্রোনাইজেশন করা যেতে পারে। এটি high availability এবং low latency প্রয়োজনে ব্যবহৃত হয়।
- Batch Synchronization: Batch synchronization ডেটার পরিবর্তনগুলি একটি নির্দিষ্ট সময় অন্তর সিঙ্ক্রোনাইজ করে। এটি সাধারণত ডেটাবেসের মধ্যে বড় পরিমাণ ডেটা সিঙ্ক্রোনাইজ করার জন্য ব্যবহৃত হয়। যেমন, ETL (Extract, Transform, Load) প্রক্রিয়া।
- Conflict Resolution: সিঙ্ক্রোনাইজেশন চলাকালীন যদি দুইটি ডেটাবেসে একই ডেটার পরিবর্তন ঘটে, তবে তা conflict সৃষ্টি করতে পারে। ডেটা সিঙ্ক্রোনাইজেশনের সময় এমন কনফ্লিক্ট সমাধান করার জন্য বিভিন্ন পদ্ধতি ব্যবহৃত হয়, যেমন last-write wins বা manual intervention।
- Bi-directional Synchronization: কিছু সিস্টেমে bi-directional synchronization প্রয়োজন হয়, যেখানে দুটি ডেটাবেস একে অপরের সাথে ডেটা শেয়ার করে এবং একে অপরের ডেটা আপডেট করে।
- Incremental Synchronization: ইনক্রিমেন্টাল সিঙ্ক্রোনাইজেশন হল এমন একটি কৌশল যেখানে শুধুমাত্র পরিবর্তিত ডেটা সিঙ্ক্রোনাইজ করা হয়, পূর্ণ ডেটাবেস সিঙ্ক্রোনাইজ করার পরিবর্তে। এতে ব্যান্ডউইথ এবং প্রসেসিং পাওয়ার সাশ্রয় হয়।
Data Synchronization এর গুরুত্বপূর্ণ টুলস:
- pgAdmin: PostgreSQL ডেটাবেসে সিঙ্ক্রোনাইজেশন এবং ব্যাকআপ টুলস হিসেবে ব্যবহৃত হয়।
- SymmetricDS: এটি একটি ওপেন সোর্স ডেটা সিঙ্ক্রোনাইজেশন সিস্টেম, যা ডেটাবেস, ফাইল এবং অন্যান্য সিস্টেমের মধ্যে সিঙ্ক্রোনাইজেশন সমর্থন করে।
- Bucardo: PostgreSQL-এর জন্য একটি রিপ্লিকেশন সিস্টেম, যা সিঙ্ক্রোনাইজেশন এবং ডেটা রেপ্লিকেশন ফিচার প্রদান করে।
সারাংশ
Logical Replication এবং Data Synchronization দুটি ডেটাবেস সিঙ্ক্রোনাইজেশন কৌশল যা বিভিন্ন উদ্দেশ্যে ব্যবহৃত হয়:
- Logical Replication: নির্দিষ্ট টেবিল বা ডেটার লজিক্যাল কপি তৈরি করতে ব্যবহৃত হয়, যেখানে ডেটাবেসের মধ্যে রিয়েল টাইমে ডেটা সিঙ্ক্রোনাইজ করা হয়।
- Data Synchronization: একটি ডেটাবেস বা সিস্টেমের মধ্যে ডেটা সমন্বয় রাখতে ব্যবহৃত হয়, এটি রিয়েল টাইম বা ব্যাচ সিঙ্ক্রোনাইজেশন হতে পারে এবং কনফ্লিক্ট রেজোলিউশন প্রক্রিয়া অন্তর্ভুক্ত করে।
এই দুটি প্রযুক্তি ডিস্ট্রিবিউটেড সিস্টেমে ডেটার অ্যাভেইলেবিলিটি এবং গোপনীয়তা নিশ্চিত করার জন্য অত্যন্ত গুরুত্বপূর্ণ।
Failover এবং High Availability (HA) সিস্টেমের মধ্যে মূল পার্থক্য হলো সিস্টেমের স্থায়িত্ব এবং ডাউনটাইম কমানোর উপায়। এই কনফিগারেশন ডেটাবেসের জন্য অত্যন্ত গুরুত্বপূর্ণ, বিশেষ করে যখন আপনার একটি বড় পরিমাণ ডেটা এবং ক্রিটিক্যাল অ্যাপ্লিকেশন থাকে। PostgreSQL-এ Failover এবং High Availability কনফিগারেশন সেটআপ করা গেলে, সিস্টেমের পরিপূর্ণতা বজায় রাখা যায় এবং ডেটাবেস সার্ভারের প্রাপ্যতা নিশ্চিত করা যায়।
1. Failover Configuration in PostgreSQL
Failover হল একটি প্রক্রিয়া যেখানে মূল সার্ভারটি কাজ না করলে, একটি প্রতিস্থাপন (standby) সার্ভার স্বয়ংক্রিয়ভাবে primary server হিসেবে কার্যকর হয়। এটি সিস্টেমের ডাউনটাইম কমাতে সহায়তা করে।
Failover প্রক্রিয়ার উপাদান
- Primary Server: এটি ডেটা লেখার সার্ভার, যেখানে সমস্ত ট্রানজেকশন এবং ডেটা ম্যানিপুলেশন সম্পাদিত হয়।
- Standby Server: এটি একটি read-only সার্ভার, যা মূল সার্ভারের ডেটা রেপ্লিকেট করে এবং মূল সার্ভারটি ডাউন হলে কার্যকরী হয়ে ওঠে।
- WAL Archiving: Write-Ahead Logging (WAL) PostgreSQL-এ একটি প্রক্রিয়া যা প্রতিটি ডেটা পরিবর্তনকে log ফাইলে রেকর্ড করে এবং এই log ফাইলগুলো স্ট্যান্ডবাই সার্ভারে প্রেরণ করা হয়।
Basic Failover Setup in PostgreSQL
Primary Server Configuration:
- প্রথমে,
postgresql.confএ WAL archiving এবং replication settings সক্রিয় করতে হবে।
wal_level = replica archive_mode = on archive_command = 'cp %p /var/lib/pgsql/archive/%f' max_wal_senders = 3- প্রথমে,
Standby Server Configuration:
- স্ট্যান্ডবাই সার্ভারে,
restore_commandব্যবহার করে WAL ফাইলগুলো গ্রহণ করতে হবে।
restore_command = 'cp /var/lib/pgsql/archive/%f %p'- স্ট্যান্ডবাই সার্ভারে,
Replication Setup:
- মূল সার্ভারে
pg_hba.confফাইলে স্ট্যান্ডবাই সার্ভারের অ্যাক্সেস অনুমতি দিন।
host replication replicator 192.168.1.2/32 md5- মূল সার্ভারে
Start Replication:
- স্ট্যান্ডবাই সার্ভারে replication চালু করুন।
pg_basebackup -h primary-server-ip -D /var/lib/pgsql/data -U replicator -P --wal-method=streamFailover Process:
- যদি প্রাইমারি সার্ভার ডাউন হয়ে যায়, তাহলে স্ট্যান্ডবাই সার্ভারকে প্রাইমারি সার্ভার হিসেবে promote করুন:
pg_ctl promote -D /var/lib/pgsql/data
2. High Availability Configuration in PostgreSQL
High Availability (HA) কনফিগারেশন ব্যবহৃত হয় সিস্টেমের অক্ষুণ্নতা এবং সর্বোচ্চ প্রাপ্যতা নিশ্চিত করার জন্য, যাতে সার্ভারের কোনো সমস্যা হলেও সিস্টেম সচল থাকে।
High Availability Setup in PostgreSQL
HA কনফিগারেশন তৈরি করতে কিছু সাধারণ কৌশল রয়েছে:
- Streaming Replication: PostgreSQL-এ স্ট্রিমিং রেপ্লিকেশন সিস্টেমের মাধ্যমে primary এবং standby সার্ভার একে অপরের সাথে সিঙ্ক্রোনাইজড থাকে। এটি ডেটাবেসের সিস্টেমে HA নিশ্চিত করার জন্য ব্যবহৃত হয়। স্ট্রিমিং রেপ্লিকেশনের মাধ্যমে প্রাইমারি সার্ভারের ডেটা স্ট্যান্ডবাই সার্ভারে অবিচ্ছিন্নভাবে প্রেরিত হয়।
- Hot Standby:
- PostgreSQL-এ hot standby মোডে স্ট্যান্ডবাই সার্ভার থাকে, যেখানে এটি রিড-অনলি মোডে কাজ করে। প্রাইমারি সার্ভারের ডেটা যদি বিপর্যস্ত হয়, তবে স্ট্যান্ডবাই সার্ভারকে প্রাইমারি সার্ভার হিসেবে প্রমোট করা যায়।
- Automatic Failover:
- Patroni এবং pg_auto_failover মতো PostgreSQL কনফিগারেশন টুলস ব্যবহার করে আপনি একটি স্বয়ংক্রিয় ফেইলওভার সিস্টেম সেটআপ করতে পারেন। এগুলি স্বয়ংক্রিয়ভাবে সার্ভারের সিংক্রোনাইজেশন, মনিটরিং এবং ফেইলওভার পরিচালনা করে থাকে।
- Load Balancing: HA কনফিগারেশনের মধ্যে load balancing একটি গুরুত্বপূর্ণ অংশ, যেখানে একাধিক রিড সার্ভারকে যুক্ত করা হয় এবং প্রতিটি ক্লায়েন্ট রিকোয়েস্টকে ব্যালেন্স করে বিভক্ত করা হয়। এটি PostgreSQL-এর জন্য pgpool-II অথবা PgBouncer এর মাধ্যমে করা যেতে পারে।
3. PostgreSQL HA Tools
PostgreSQL-এর HA কনফিগারেশন তৈরি করতে কিছু জনপ্রিয় টুল রয়েছে:
Patroni:
- Patroni PostgreSQL-এর জন্য একটি HA সল্যুশন যা etcd বা Consul দ্বারা সিস্টেমের স্ট্যাটাস ট্র্যাক করে এবং প্রাইমারি সার্ভারের ব্যর্থতার ক্ষেত্রে স্বয়ংক্রিয়ভাবে ফেইলওভার পরিচালনা করে।
- এটি Postgresql-এর সাথে সহজে ইন্টিগ্রেট করা যায় এবং সার্ভার ক্লাস্টার পরিচালনা করতে ব্যবহৃত হয়।
pg_auto_failover:
- pg_auto_failover PostgreSQL-এর জন্য একটি স্বয়ংক্রিয় ফেইলওভার সিস্টেম, যা সিস্টেমের primary এবং standby সার্ভারদের মনিটর করে এবং প্রাইমারি সার্ভারের ব্যর্থতার ঘটনার পর স্ট্যান্ডবাই সার্ভারকে প্রাইমারি হিসেবে নির্বাচন করে।
PgBouncer:
- PgBouncer হল একটি কানেকশন পুলার যা PostgreSQL-এর জন্য ব্যবহৃত হয়। এটি একটি লোড ব্যালান্সার হিসেবে কাজ করতে পারে এবং একাধিক সার্ভারের মধ্যে ট্রাফিক ভাগ করে দেয়।
Corosync/Pacemaker:
- Corosync এবং Pacemaker ক্লাস্টার ম্যানেজমেন্ট টুলস PostgreSQL HA সিস্টেমে ফেইলওভার এবং রেপ্লিকেশন পরিচালনার জন্য ব্যবহৃত হতে পারে।
4. Steps for Implementing High Availability with Patroni
Patroni দিয়ে HA কনফিগারেশন করা হলে, এটি PostgreSQL-এর জন্য একটি সিস্টেম তৈরি করে যা স্বয়ংক্রিয়ভাবে ফেইলওভার এবং লিড নির্বাচন পরিচালনা করে।
Step-by-Step Process:
Install Patroni on All Nodes:
- Patroni ইনস্টল করতে হবে সমস্ত সিস্টেমে:
sudo apt-get install patroniConfigure Patroni:
- প্রতিটি সিস্টেমের জন্য একটি কনফিগারেশন ফাইল তৈরি করুন যাতে Patroni, PostgreSQL এবং etcd বা Consul ব্যবহার করা হয়।
scope: postgres namespace: /db/ name: node1 data_dir: /data/postgres ...Start Patroni on All Nodes:
- Patroni ক্লাস্টারের সকল নোডে শুরু করুন:
patroni /etc/patroni.yml- Verify HA Setup:
- এখন আপনার HA কনফিগারেশন প্রস্তুত এবং ফেইলওভার প্রক্রিয়া কাজ করছে। প্রাইমারি সার্ভার ডাউন হলে, এটি স্বয়ংক্রিয়ভাবে স্ট্যান্ডবাই সার্ভারকে প্রাইমারি হিসেবে প্রমোট করবে।
সারাংশ
- Failover এবং High Availability সিস্টেমের সুরক্ষা এবং স্থায়িত্ব নিশ্চিত করতে গুরুত্বপূর্ণ কনফিগারেশন এবং টুলস। Failover একটি প্রক্রিয়া যা সার্ভারের ব্যর্থতার পর একটি স্ট্যান্ডবাই সার্ভারকে প্রধান সার্ভার হিসেবে কার্যকরী করে তোলে।
- High Availability কনফিগারেশন ডেটাবেস ক্লাস্টারকে সার্ভারের ব্যর্থতা থেকে সুরক্ষিত রাখে এবং সিস্টেমের ডাউনটাইম কমিয়ে আনে।
- PostgreSQL-এ Patroni, pg_auto_failover, pgpool-II, এবং PgBouncer সহ বিভিন্ন টুলস HA এবং failover কনফিগারেশন বাস্তবায়নে সহায়ক।
Read more