প্রতিলিপি দিয়ে, আপনি একটি ডাটাবেস সার্ভার থেকে ডেটা কপি করেন, উৎস , অন্য সার্ভারে, প্রতিলিপি . প্রতিলিপি একটি শক্তিশালী ডাটাবেস বৈশিষ্ট্য, উচ্চ প্রাপ্যতা প্রদান করে এবং দুর্যোগ পুনরুদ্ধারে সহায়তা করে।
পরিচয়
আপনি পরীক্ষা এবং প্রতিবেদনের উদ্দেশ্যে ব্যবহার করার জন্য রেপ্লিকা সার্ভারও তৈরি করতে পারেন, অনলাইন লেনদেন প্রক্রিয়াকরণ (OLTP) ডাটাবেসের উপর লোড কমাতে পারেন। এই পোস্টটি আপনাকে PostgreSQL®-এ বিভিন্ন ধরনের প্রতিলিপি এবং একটি PostgreSQL ডাটাবেসের স্ট্রিমিং প্রতিলিপি বাস্তবায়নের জন্য প্রয়োজনীয় পদক্ষেপগুলি বুঝতে সাহায্য করে।
প্রতিলিপি বিবরণ
এখন, পোস্টগ্রেএসকিউএল-এ প্রতিলিপি মোড, মডেল এবং প্রতিলিপির প্রকারগুলি বোঝার এবং লিখতে-আগে লগিং সম্পর্কে শিখার সময় এসেছে৷
অসিঙ্ক্রোনাস এবং সিঙ্ক্রোনাস মোড
নিম্নলিখিত চিত্রটি PostgreSQL প্রতিলিপির মোডগুলি দেখায়:
অসিঙ্ক্রোনাস-এ প্রতিলিপি, উৎস সার্ভারকে প্রতিরূপ সার্ভার থেকে লেনদেন-সম্পূর্ণতার স্বীকৃতির জন্য অপেক্ষা করতে হবে না। প্রতিলিপি লেনদেন রেপ্লিকা সার্ভারে সারিবদ্ধ, এবং প্রক্রিয়াকরণ সম্পূর্ণ না হওয়া পর্যন্ত দুটি সার্ভার একটি নির্দিষ্ট সময়ের জন্য সিঙ্কের বাইরে থাকতে পারে৷
সিঙ্ক্রোনাস-এ মোড রেপ্লিকেশন, সোর্স সার্ভার থেরেপ্লিকা সার্ভার বা সার্ভারের কাছ থেকে স্বীকৃতির জন্য অপেক্ষা করে যে প্রতিটি প্রতিলিপি লেনদেন এগিয়ে যাওয়ার আগে সম্পূর্ণ হয়৷ উত্স এবং প্রতিলিপি সার্ভার উভয়ই সর্বদা উপলব্ধ থাকতে হবে৷ যদি এটি প্রতিরূপ থেকে লেনদেন-বিফল বার্তা পায়, তাহলে উৎস সার্ভার সেই লেনদেনটি ফিরিয়ে দেয়। প্রতিলিপিকরণের এই মোডে, উত্স এবং প্রতিলিপি সার্ভারগুলি সর্বদা সিঙ্কে থাকে৷ ত্রুটিটি হল যদি একটি প্রতিরূপ সার্ভার ডাউন হয়ে যায় বা একটি লেনদেন সম্পূর্ণ করতে না পারে, তাহলে উত্স সার্ভার একটি স্তব্ধ অবস্থায় চলে যায়৷
একক- এবং বহু-উৎস প্রতিলিপি মডেল
একক-উৎস সহ প্রতিলিপি, আপনার শুধুমাত্র একটি উৎস সার্ভার এবং এক বা একাধিক প্রতিলিপি সার্ভার আছে। উত্সটি সমস্ত প্রতিলিপিতে প্রতিলিপি লেনদেন পাঠায়৷
৷প্রতিরূপ সার্ভার শুধুমাত্র উৎস সার্ভার থেকে পরিবর্তন গ্রহণ করতে পারে. যদি তারা একটি অ-উৎস সার্ভার থেকে পরিবর্তনগুলি গ্রহণ করে, তাহলে প্রতিলিপিগুলি সেই লেনদেনগুলিকে উত্সে প্রতিলিপি করে না৷
মাল্টি সোর্স-এ প্রতিলিপি, আপনার একাধিক সোর্স সার্ভার আছে। যদি একটি টেবিল সারি একটি উৎস ডাটাবেসে পরিবর্তন হয়, সেই উৎস সার্ভার অন্য উৎস সার্ভারে কাউন্টারপার্টটেবল সারিগুলিতে পরিবর্তনগুলি প্রতিলিপি করে। এই মডেলটি সফল হওয়ার জন্য, ডুপ্লিকেট প্রাইমারি কী এবং অন্যান্য সমস্যাগুলি প্রতিরোধ করার জন্য আপনাকে নিয়োগ দ্বন্দ্ব সমাধানের স্কিমগুলি করতে হবে৷
প্রতিলিপির প্রকারগুলি
প্রতিলিপি তিন ধরনের আছে:
- স্ট্রিমিং প্রতিলিপি :PostgreSQL এই ধরনের প্রতিলিপি সংস্করণ9 এবং পরবর্তী সংস্করণে উপলব্ধ করেছে। প্রতিলিপি শুধুমাত্র রান-নির্বাচিত প্রশ্নের জন্য উপলব্ধ। এই ধরনের জন্য প্রাথমিক প্রয়োজন হল উৎস এবং প্রতিলিপি ডাটাবেস একই প্রধান সংস্করণ হতে হবে।
- ক্যাসকেডিং প্রতিলিপি :PostgreSQL 9.2-এ প্রবর্তিত, তার প্রতিলিপির ধরন আপনাকে সরাসরি সোর্স সার্ভারের পরিবর্তে একটি স্ট্যান্ডবাই সার্ভার থেকে প্রতিলিপি করতে দেয়। এটি সোর্স সার্ভারে লোড কমাতে পারে।
- লজিক্যাল প্রতিলিপি :আপনি একটি নির্বাচিত ডেটা সেট ordatabase অবজেক্টের প্রতিলিপি করতে বা PostgreSQL এর বিভিন্ন প্রধান সংস্করণগুলির মধ্যে প্রতিলিপি করতে এই প্রকারটি ব্যবহার করতে পারেন৷ অযৌক্তিক প্রতিলিপি, আপনি লেখার জন্য স্ট্যান্ডবাই সার্ভার ব্যবহার করতে পারেন, তবে এর কিছু সীমাবদ্ধতা রয়েছে। এটি ট্রানকেট, বড় বস্তু যেমন (লব, ব্লব, ক্লব), সিকোয়েন্স, স্কিমা এবং ডিডিএল প্রতিলিপি করতে পারে না।
লেখা-আগে লগিং
আপনি স্ট্রিমিং প্রতিলিপি ব্যবহার শুরু করার আগে, আপনাকে রাইট-এহেড লগিং (WAL) এবং এটি কীভাবে কাজ করে তা বুঝতে হবে।
PostgreSQL-এ, সিস্টেমটি প্রথমে একটি ডাটা ফাইলে সংরক্ষণ করার আগে একটি লগ ফাইলে ডাটাবেসে করা যেকোনো পরিবর্তন সংরক্ষণ করে, এবং এই পরিবর্তনগুলিকে WAL রেকর্ড বলা হয়। প্রতিটি WAL রেকর্ডে একটি অনন্য নম্বর থাকে যাকে লগ সিকোয়েন্স নম্বর (LSN) বলা হয়।
PostgreSQL-এ স্ট্রিমিং রেপ্লিকেশনের সাথে, রেপ্লিকা ডাটাবেস সার্ভার সোর্স ডাটাবেস সার্ভারে পরিবর্তনগুলি প্রতিলিপি করতে WAL ফাইল ব্যবহার করে।
তিনটি বাধ্যতামূলক প্রক্রিয়া একটি PostgreSQLdatabase এ স্ট্রিমিং প্রতিলিপিতে গুরুত্বপূর্ণ ভূমিকা পালন করে:
- ওয়াল প্রেরক
- WAL রিসিভার
- স্টার্টআপ
একটি WAL প্রেরক প্রক্রিয়া সোর্স সার্ভারে চলে, যেখানে WAL রিসিভার এবং স্টার্টআপ প্রসেসগুলি রেপ্লিকা সার্ভারে চলে। আপনি যখন প্রতিলিপি শুরু করেন, নিম্নলিখিত ঘটনাগুলি ঘটে:
- একটি WAL রিসিভার প্রক্রিয়া LSN পাঠায় যতক্ষণ না রেপ্লিকা WAL ডেটা মাস্টারের কাছে রিপ্লে করে।
- উৎসের উপর WAL প্রেরক প্রক্রিয়া তারপর WAL রিসিভার দ্বারা প্রেরিত সর্বশেষ LSN-এ না পৌঁছা পর্যন্ত প্রতিলিপিতে WAL ডেটা পাঠায়।
- এরপর, WAL রিসিভার WAL সেগমেন্টে WAL প্রেরক কর্তৃক প্রেরিত WAL ডেটা লেখে।
- প্রতিলিপিতে স্টার্টআপ প্রক্রিয়াটি একটি WAL সেগমেন্টে লেখা ডেটা পুনরায় প্লে করে৷
- অবশেষে, স্ট্রিমিং প্রতিলিপি শুরু হয়।
টেস্ট কেস
পোস্টগ্রেএসকিউএল-এ সোর্স এবং ওয়ানরেপ্লিকার মধ্যে স্ট্রিমিং রেপ্লিকেশন সেট আপ করার ধাপগুলি এখানে রয়েছে:
প্রথম ধাপ
প্রথমত, আমাদের নিশ্চিত করতে হবে যে সোর্স এবং রেপ্লিকা সার্ভারে পাসওয়ার্ডহীন SSHauthentication কনফিগার করা আছে। যদি না হয়, আমাদের ssh-keygen
ব্যবহার করে এটি কনফিগার করতে হবে .
পাসওয়ার্ডহীন SSH কনফিগারেশন সম্পর্কে জানতে, https://linuxize.com/post/how-to-setup-passwordless-ssh-login/ দেখুন।
Source node 192.168.24.28
Replica node 192.168.24.29
Username `postgres` on both source and replica.
ধাপ দুই
ফায়ারওয়াল বন্ধ করতে উভয় সার্ভারে নিম্নলিখিত কমান্ডগুলি চালান:
$ 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-এ রেপ্লিকা সার্ভার আইপি ঠিকানা এন্ট্রি যোগ করুন :
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
উপসংহার
এই পোস্টটি প্রতিলিপির ধরন এবং স্ট্রিমিং প্রতিলিপি সেট আপ করার পদক্ষেপগুলি ব্যাখ্যা করে। প্রাথমিক সার্ভার থেকে লোডঅফ নেওয়ার জন্য আপনি সাধারণত এটি ব্যবহার করেন (বিশেষত বিশ্লেষণে) শুধুমাত্র পঠনযোগ্য প্রতিলিপি প্রদান করতে।
আপনার যদি একটি উচ্চ প্রাপ্যতা পরিবেশের প্রয়োজন হয় বা প্রাথমিকটি ডাউন হয়ে গেলে হটস্ট্যান্ডবাই সার্ভারে ব্যর্থ হওয়ার জন্য এটিও সহায়ক৷
আমাদের ডেটা পরিষেবাগুলি সম্পর্কে আরও জানুন৷
৷কোনো মন্তব্য করতে বা প্রশ্ন জিজ্ঞাসা করতে প্রতিক্রিয়া ট্যাব ব্যবহার করুন। আপনি আমাদের সাথে একটি কথোপকথনও শুরু করতে পারেন৷