রেপ্লিকেশনের মাধ্যমে, আপনি একটি ডাটাবেস সার্ভার, সোর্স- থেকে অন্য সার্ভার, রেপ্লিকা-এ ডেটা কপি করেন। রেপ্লিকেশন একটি শক্তিশালী ডাটাবেস বৈশিষ্ট্য, যা হাই অভেলেবিলিটি প্রদান করে এবং ডিজাস্টার রিকভারি সাপোর্ট করে।
ভূমিকা
আপনি টেস্টিং এবং রিপোর্টিং উদ্দেশ্যে রেপ্লিকা সার্ভারও তৈরি করতে পারেন, প্রোডাকশন অনলাইন ট্রানজ্যাকশনাল প্রসেসিং (OLTP) ডাটাবেসের লোড কমাতে। এই পোস্টটি আপনাকে PostgreSQL®-এ রেপ্লিকেশন-এর বিভিন্ন টাইপ এবং একটি PostgreSQL ডাটাবেসের স্ট্রিমিং রেপ্লিকেশন বাস্তবায়নের প্রয়োজনীয় ধাপগুলো বুঝতে সাহায্য করবে।
রেপ্লিকেশন বিবরণ
এখন, PostgreSQL-এ রেপ্লিকেশন মোড, মডেল এবং টাইপ এবং রাইট-অহেড লগিং সম্পর্কে জানার সময়।
অ্যাসিনক্রোনাস এবং সিনক্রোনাস মোড
নিচের ডায়াগ্রামটি PostgreSQL রেপ্লিকেশনের মোডগুলো দেখায়:
অ্যাসিনক্রোনাস রেপ্লিকেশনে, সোর্স সার্ভার রেপ্লিকা সার্ভার থেকে ট্রানজ্যাকশন-কমপ্লিশন অ্যাকনলেজমেন্টের জন্য অপেক্ষা করতে হয় না। রেপ্লিকেশন ট্রানজ্যাকশনগুলো রেপ্লিকা সার্ভারে কিউ আপ হয়, এবং প্রসেসিং পুরা হওয়া পর্যন্ত দুটি সার্ভার নির্দিষ্ট সময়ের জন্য আউট-অফ-সিঙ্ক থাকতে পারে।
সিনক্রোনাস মোড রেপ্লিকেশনে, সোর্স সার্ভার রেপ্লিকা সার্ভার বা সার্ভারগুলোর থেকে প্রতিটি রেপ্লিকেশন ট্রানজ্যাকশন কমপ্লিট হওয়ার অ্যাকনলেজমেন্টের জন্য অপেক্ষা করে তারপর आगे বাড়ে। সোর্স এবং রেপ্লিকা সার্ভার উভয়ই সবসময় উপলব্ধ থাকতে হবে। যদি এটি রেপ্লিকার থেকে একটি ট্রানজ্যাকশন-ফেইলড মেসেজ পায়, তাহলে সোর্স সার্ভার সেই ট্রানজ্যাকশনটি রোলব্যাক করে। এই রেপ্লিকেশন মোডে, সোর্স এবং রেপ্লিকা সার্ভার সবসময় সিঙ্কে থাকে। ড্রব্যাক হলো যদি একটি রেপ্লিকা সার্ভার ডাউন হয় বা একটি ট্রানজ্যাকশন কমপ্লিট করতে পারে না, সোর্স সার্ভার একটি হাং স্টেটে চলে যায়।
সিঙ্গল- এবং মাল্টি-সোর্স রেপ্লিকেশন মডেল
সিঙ্গল-সোর্স রেপ্লিকেশনে, আপনার শুধু একটি সোর্স সার্ভার এবং এক বা একাধিক রেপ্লিকা সার্ভার থাকে। সোর্স রেপ্লিকেশন ট্রানজ্যাকশনগুলো সব রেপ্লিকায় পাঠায়।
রেপ্লিকা সার্ভারগুলো শুধু সোর্স সার্ভার থেকে পরিবর্তন গ্রহণ করতে পারে। যদি সেগুলো নন-সোর্স সার্ভার থেকে পরিবর্তন পায়, রেপ্লিকাগুলো সেগুলো সোর্সে রেপ্লিকেট করে না।
মাল্টি-সোর্স রেপ্লিকেশনে, আপনার একাধিক সোর্স সার্ভার থাকে। যদি একটি টেবিল রো একটি সোর্স ডাটাবেসে পরিবর্তিত হয়, সোর্স সার্ভার সেই পরিবর্তনগুলো অন্যান্য সোর্স সার্ভারের কাউন্টারপার্ট টেবিল রোতে রেপ্লিকেট করে। এই মডেল সফল হলে, ডুপ্লিকেট প্রাইমারি কি এবং অন্যান্য সমস্যা প্রতিরোধ করার জন্য কনফ্লিক্ট রেজোলিউশন স্কিম ব্যবহার করতে হবে।
রেপ্লিকেশন টাইপ
রেপ্লিকেশনের তিনটি টাইপ আছে:
- স্ট্রিমিং রেপ্লিকেশন: PostgreSQL এই টাইপের রেপ্লিকেশন ভার্সন ৯ এবং তার পর থেকে উপলব্ধ করে। রেপ্লিকাগুলো শুধু সিলেক্ট কোয়েরি চালানোর জন্য উপলব্ধ। এই টাইপের জন্য প্রাইমারি প্রয়োজনীয়তা হলো সোর্স এবং রেপ্লিকা ডাটাবেস একই মেজর ভার্সনের হতে হবে।
- ক্যাসকেডিং রেপ্লিকেশন: PostgreSQL ৯.২-এ চালু করা হয়েছে, এই টাইপের রেপ্লিকেশন আপনাকে সোর্স সার্ভারের পরিবর্তে একটি স্ট্যান্ডবাই সার্ভার থেকে রেপ্লিকেট করতে দেয়। এটি সোর্স সার্ভারের লোড কমাতে পারে।
- লজিক্যাল রেপ্লিকেশন: আপনি এই টাইপটি একটি নির্বাচিত ডেটা সেট বা ডাটাবেস অবজেক্ট রেপ্লিকেট করতে বা PostgreSQL-এর ভিন্ন মেজর ভার্সনের মধ্যে রেপ্লিকেট করতে ব্যবহার করতে পারেন। লজিক্যাল রেপ্লিকেশনে, আপনি স্ট্যান্ডবাই সার্ভারকে রাইটের জন্য ব্যবহার করতে পারেন, কিন্তু এর কিছু সীমাবদ্ধতা আছে। এটি Truncate, বড় অবজেক্ট যেন (lob, blob, clob), সিকোয়েন্স, স্কিমা, এবং DDL রেপ্লিকেট করতে পারে না।
রাইট-অহেড লগিং
স্ট্রিমিং রেপ্লিকেশন ব্যবহার করার আগে, আপনাকে রাইট-অহেড লগিং (WAL) এবং এটি কীভাবে কাজ করে সেটা বুঝতে হবে।
PostgreSQL-এ, সিস্টেম প্রথমে একটি ডাটাবেসে করা যেকোনো পরিবর্তন একটি লগ ফাইলে সংরক্ষণ করে তারপর সেগুলো একটি ডেটা ফাইলে সংরক্ষণ করে, এবং এই পরিবর্তনগুলোকে WAL রেকর্ড বলা হয়। প্রতিটি WAL রেকর্ডের একটি унікаল নম্বর থাকে যাকে লগ সিকোয়েন্স নম্বর (LSN) বলা হয়।
PostgreSQL-এ স্ট্রিমিং রেপ্লিকেশনের সাথে, রেপ্লিকা ডাটাবেস সার্ভার সোর্স ডাটাবেস সার্ভারে পরিবর্তন রেপ্লিকেট করতে WAL ফাইল ব্যবহার করে।
PostgreSQL ডাটাবেসে স্ট্রিমিং রেপ্লিকেশনে গুরুত্বপূর্ণ ভূমিকা পালন করে তিনটি বাধ্যতামূলক প্রসেস:
- WAL সেন্ডার
- WAL রিসিভার
- স্টার্টআপ
একটি WAL সেন্ডার প্রসেস সোর্স সার্ভারে চলে, একদিকে WAL রিসিভার এবং স্টার্টআপ প্রসেস রেপ্লিকা সার্ভারে চলে। আপনি রেপ্লিকেশন শুরু করলে, নিচের ইভেন্টগুলো ঘটে:
- একটি WAL রিসিভার প্রসেস LSN পাঠায় যতক্ষণ না রেপ্লিকা WAL ডেটা মাস্টারে রিপ্লে করে।
- সোর্সে WAL সেন্ডার প্রসেস তারপর WAL ডেটা রেপ্লিকায় পাঠায় যতক্ষণ না WAL রিসিভার দ্বারা পাঠানো সর্বশেষ LSN-এ পৌঁছায়।
- পরবর্তীতে, WAL রিসিভার WAL সেন্ডার দ্বারা পাঠানো WAL ডেটা WAL সেগমেন্টে লিখে।
- রেপ্লিকায় স্টার্টআপ প্রসেস WAL সেগমেন্টে লেখা ডেটা রিপ্লে করে।
- অবশেষে, স্ট্রিমিং রেপ্লিকেশন শুরু হয়।
টেস্ট কেস
এখানে PostgreSQL-এ একটি সোর্স এবং একটি রেপ্লিকার মধ্যে স্ট্রিমিং রেপ্লিকেশন সেট আপ করার ধাপগুলো দেওয়া হলো:
স্টেপ वन
প্রথমে, আমাদের নিশ্চিত করতে হবে যে সোর্স এবং রেপ্লিকা সার্ভার দুটোই পাসওয়ার্ডলেস SSH অথেন্টিকেশন কনফিগার করা আছে। যদি না থাকে, আমাদের ssh-keygen ব্যবহার করে কনফিগার করতে হবে।
পাসওয়ার্ডলেস SSH কনফিগারেশন সম্পর্কে জানতে, https://linuxize.com/post/how-to-setup-passwordless-ssh-login/ দেখুন।
সোর্স নোড 192.168.24.28 রেপ্লিকা নোড 192.168.24.29 ইউজারনেম `postgres` উভয় সোর্স এবং রেপ্লিকায়। স্টেপ টু
উভয় সার্ভারে ফায়ারওয়াল বন্ধ করতে নিচের কমান্ডগুলো রান করুন:
$ sudo systemctl stop firewalld $ sudo systemctl disable firewalld স্টেপ থ্রি
-
সোর্স সার্ভারে, ডেটা ডিরেক্টরিতে যান:
cd /var/lib/pgsql/11/data -
postgresql.conf ফাইল এডিট করুন এবং নিচের পরিবর্তনগুলো করুন:
archive_mode = on archive_command = ‘cp %p /var/lib/pgsql/archive/%f’ max_wall_senders = 5 wal_keep_segment =32 wal_level = replica listen_addresses = ‘*’ -
pg_hba.conf-এ রেপ্লিকা সার্ভার IP ঠিকানা এন্ট্রি যোগ করুন:
host postgres postgres (ip_address)192.168.24.29/32 trust host replication postgres (ip_address)192.168.24.29/32 trust -
pg_hba.conf-এ যেকোনো পরিবর্তনের জন্য, সার্ভিস রিলোড করুন:
$ /usr/local/pgsql_11/bin/pg_ctl -D /var/lib/pgsql/11/ reload -
যদি /var/lib/pgsql/archive/ আর্কাইভ ডিরেক্টরি না থাকে তবে তৈরি করুন।
-
পরিবর্তনগুলো প্রতিফলিত করতে সার্ভার রিস্টার্ট করুন।
স্টেপ ফোর
রেপ্লিকা সার্ভারে:
-
ডেটা ডিরেক্টরিতে যান এবং সার্ভিস বন্ধ করুন:
$ /usr/pgsql-11/bin/pg_ctl -D /var/lib/pgsql/11/data/ stop -
রেপ্লিকায় ডেটা ডিরেক্টরির সব কিছু মুছুন এবং নিচের কমান্ড ব্যবহার করে সোর্সের সাথে কানেক্ট করার চেষ্টা করুন:
$ /usr/pgsql-11/bin/psql -h 192.168.24.28 -
যদি কাজ করে, রেপ্লিকা থেকে বেস ব্যাকআপ শুরু করুন:
$ cd /var/lib/pgsql/11/data $ /usr/pgsql-11/bin/pg_basebackup -D /var/lib/pgsql/11/data/ -X fetch -h 192.168.24.28 -R -P
এই কমান্ডগুলো সোর্স ডাটাবেসের ডেটা ডিরেক্টরির সকল ডেটা রেপ্লিকা ডেটা ডিরেক্টরিতে কপি করে এবং recovery.conf ফাইল তৈরি করে।
স্টেপ ফাইভ
বেস ব্যাকআপ পূর্ণ হওয়ার পর, আপনাকে recovery.conf ফাইল চেক করতে হবে। ডেটা ডিরেক্টরিতে recovery.conf ফাইল থাকা যেকোনো সার্ভার একটি রেপ্লিকা সার্ভার এবং সোর্স সার্ভারের তথ্য ধারণ করে। নিচের পরিবর্তনগুলো করুন:
Standby_mode = ‘on’ Primary_conninfo = ‘user=postgres host=192.168.24.28 port=5432’ ফাইলটি নিচের মত দেখাবে:
$ Vi recovery.conf Standby_mode = ‘on’ Primary_conninfo = ‘user=postgres passfile=’’/home/postgres/.pgpass’’ host=192.168.24.28 port=5432 sslmode=disable sslcompression=0 target_session_attrs=any’ স্টেপ সিক্স
এখন সার্ভার শুরু করুন এবং পরিবর্তনগুলো ভ্যালিডেট করুন:
-
সোর্স-এ লগইন করুন:
/usr/local/pgsql_11/bin/psql Postgres=# Postgres=# Select * from pg_stat_replication; -[ RECORD 1 ]----+------------------------------ pid | 1934 usesysid | 26712 usename | postgres application_name | walreceiver client_addr | 192.168.24.29 client_hostname | client_port | 52143 backend_start | 2020-11-07 11:30:31.035614-05 backend_xmin | state | streaming sent_lsn | 0/50000E34 write_lsn | 0/50000E34 flush_lsn | 0/50000E34 replay_lsn | 0/50000E34 write_lag | flush_lag | replay_lag | sync_priority | 0 sync_state | async -
রেপ্লিকায় লগইন করুন:
/usr/local/pgsql_11/bin/psql Postgres=# Postgres=# Select * from pg_is_in_recovery(); Pg_is_in_recovery ---------------------------------- t -
সোর্স থেকে OS-লেভেল কমান্ড দিয়ে চেক করুন:
$ ps -ef|grep sender postgres 1934 1718 0 11:31 ? 00:00:00 postgres: wal sender process replicator 192.168.24.29(52143) streaming 0/50000E34 -
রেপ্লিকা থেকে OS-লেভেল কমান্ড দিয়ে চেক করুন:
$ ps -ef|grep receiver postgres 1358 1748 0 11:31 ? 00:00:04 postgres: wal receiver process streaming 0/50000E34সেন্ডার এবং রিসিভার ট্রানজ্যাকশন একই হওয়া উচিত, এবং রেপ্লিকা সবসময় রিড-অনলি মোডে থাকে।
-
(ঐচ্ছিক) ডিফল্টভাবে, রেপ্লিকেশন অ্যাসিনক্রোনাস মোডে থাকে। সিনক্রোনাস রেপ্লিকেশনে পরিবর্তন করতে, সোর্স সার্ভারে যান এবং postgresql.conf-এ নিচের পরিবর্তন করুন:
synchronous_standby_names=’*’ inতারপর, সার্ভিসগুলো রিস্টার্ট করুন:
$ /usr/local/pgsql-11/bin/pg_ctl -D /var/lib/pgsql/11/ restart
উপসংহার
এই পোস্টটি রেপ্লিকেশনের টাইপ এবং স্ট্রিমিং রেপ্লিকেশন সেট আপ করার ধাপগুলো ব্যাখ্যা করে। আপনি সাধারণত এটি ব্যবহার করেন (বিশেষ করে এনালিটিক্সে) প্রাইমারি সার্ভারের লোড কমাতে একটি রিড-অনলি রেপ্লিকা প্রদান করার জন্য।
এটি আপনার কাছে সহায়ক যদি আপনাকে একটি হাই অভেলেবিলিটি এনভায়রনমেন্ট দরকার হয় বা প্রাইমারি ডাউন হলে একটি হট স্ট্যান্ডবাই সার্ভারে ফেইলওভার করতে হয়।
আমাদের ডেটা সার্ভিস সম্পর্কে আরও জানুন।
ফিডব্যাক ট্যাব ব্যবহার করে যেকোনো মন্তব্য করুন বা প্রশ্ন জিজ্ঞাসা করুন। আপনি আমাদের সাথে কথোপকথনও শুরু করতে পারেন।