Postgresql Slony
ایجاد یک بک آپ دیتابیس پست گرس بوسیلهرپلیکشن
اول از هم مطمثن شوید که دو سرور دارای زمان یکسان باشند. حتما زمان را با سرویس ان تی پی یکسان کنید. وبستههای زیر را نصب کنید:
ntpdate -b -u 216.52.237.153 213.239.197.201 213.222.11.21 apt-get install postgresql-8.3-slony1 slony1-bin
حتما این متغیر را ست کنید و در پروندهی زیر ذخیره کنید.
export PGTZ='GMT' vi ~/.bashrc export PGTZ='GMT'
این فایل را ایجاد کرده:
$ vi /etc/slony1/slon_tools.conf if ($ENV{"SLONYNODES"}) { require $ENV{"SLONYNODES"}; } else { $CLUSTER_NAME = 'IBSng_cluster'; $LOGDIR = '/var/log/slony1'; $MASTERNODE = 1; add_node(node => 1, host => '192.168.8.52', dbname => 'IBSng', port => 5432, user => 'postgres', password => ''); add_node(node => 2, host => '192.168.8.53', dbname => 'IBSng', port => 5432, user => 'postgres', password => ''); } $SLONY_SETS = { "set1" => { "set_id" => 1, # foldCase => 0, "table_id" => 1, "sequence_id" => 1, "pkeyedtables" => [ 'isp', 'isp_deposit_change', 'admin', 'admin_perms', 'admin_perm_templates', 'admin_perm_templates_detail', 'ippool', 'ippool_ips', 'ras', 'ras_ports', 'ras_attrs', 'ras_ippools', 'groups', 'group_attrs', 'users', 'persistent_lan_users', 'add_user_saves', 'add_user_save_details', 'user_attrs', 'caller_id_users', 'user_serials', 'defs', 'ibs_states', 'credit_change', 'credit_change_userid', 'connection_log', 'connection_log_internet_details', 'connection_log_voip_details', 'connection_log_details', 'user_deposit_change', 'bw_interface', 'bw_node', 'bw_leaf', 'bw_leaf_services', 'bw_static_ip', 'charges', 'charge_rules', 'charge_rule_attrs', 'user_audit_log', 'internet_onlines_snapshot', 'voip_onlines_snapshot', 'internet_bw_snapshot', 'group_internet_bw_snapshot', 'isp_internet_bw_snapshot', 'user_messages', 'admin_messages', 'ias_event', 'ias_event_extended', 'web_analyzer_log', 'voip_tariff', 'voip_prefix_group', 'voip_prefix_group_attrs', 'voip_tariff_prefix', 'mc_providers', 'mc_provider_attrs', 'provider_endpoint_groups', 'provider_endpoints', 'mc_message_queue', 'mc_user_receive_message', 'mc_isp_receive_message', 'mc_user_send_message', 'mc_isp_send_message', 'mc_remote_request', 'mc_activation_code', 'notification_profile', 'notification_rule', 'online_payment_gateway', 'online_payment_gateway_attributes', 'online_payment_payments', 'online_payment_payment_attributes', 'temporary_extend_log', 'caller_id_blacklist', 'routing_profile', 'voip_provider', 'voip_route', 'voip_route_provider', 'voip_route_prefix', 'voip_providers_snapshot', 'extra_charge_profile', 'extra_charge_rule', 'location_region', 'location_province', 'location_city', 'location_telco_center', 'location_device', 'location_port', 'batch', 'voucher', 'ldap_domain', 'ldap_server', 'audit_log', 'admin_otp', ], # For tables that have unique not null keys, but no primary # key, enter their names and indexes here. "keyedtables" => { 'voip_users' => 'voip_users_user_id', 'normal_users' => 'normal_users_user_id', }, #"serialtables" => ["mc_activation_code", # #"mc_provider_attrs", # #'mc_remote_request', # 'normal_users', # 'voip_users', # ], "sequences" => [ 'isp_id_seq', 'admin_id_seq', 'admin_perm_template_id', 'ippool_id_seq', 'ras_id_seq', 'groups_group_id_seq', 'add_user_save_id_seq', 'users_user_id_seq', 'user_serials_serial_id', 'credit_change_id', 'connection_log_id', 'user_deposit_change_id', 'bw_interface_interface_id_seq', 'bw_node_node_id_seq', 'bw_leaf_leaf_id_seq', 'bw_leaf_services_leaf_service_id_seq', 'bw_static_ip_bw_static_ip_id_seq', 'charges_charge_id_seq', 'charge_rules_charge_rule_id_seq', 'user_messages_message_id', 'admin_messages_message_id', 'ias_event_event_id', 'web_analyzer_log_log_id', 'voip_tariff_voip_tariff_id_seq', 'voip_prefix_group_voip_tariff_prefix_id_seq', 'voip_tariff_prefix_voip_tariff_prefix_id_seq', 'mc_providers_provider_id', 'provider_endpoint_groups_ep_group_id', 'provider_endpoints_end_point_id', 'mc_message_id', 'mc_message_pack_id', 'notification_profile_id_seq', 'notification_rule_id_seq', 'online_payment_unique_id_seq', 'online_payment_gateway_id', 'online_payment_payment_id', 'temporary_extend_log_id', 'caller_id_blacklist_id', 'routing_profile_routing_profile_id_seq', 'voip_provider_voip_provider_id_seq', 'voip_route_voip_route_id_seq', 'voip_provider_prefix_voip_provider_prefix_id_seq', 'extra_charge_profile_id_seq', 'extra_charge_rule_id_seq', 'location_region_region_id_seq', 'location_province_province_id_seq', 'location_city_city_id_seq', 'location_telco_center_telco_center_id_seq', 'location_device_device_id_seq', 'location_port_port_id_seq', 'batch_id_seq', 'voucher_id_seq', 'ldap_domain_id', 'ldap_server_id', 'audit_log_audit_log_id_seq', 'admin_otp_id_seq', 'isp_deposit_change_isp_deposit_change_id_seq', ], }, }; if ($ENV{"SLONYSET"}) { require $ENV{"SLONYSET"}; } # Please do not add or change anything below this point. 1;
قفط در قسمت:
add_node(node => 1, host => '192.168.8.52', dbname => 'IBSng', port => 5432, user => 'postgres', password => '');
آپی سرور را به سرور اصلی تغییر میدهی. بعد در قسمت زیر هم در نود ۲ آپی سرور را به آیپی سرور بک آپ عوض میکنیم:
add_node(node => 2, host => '192.168.8.53', dbname => 'IBSng', port => 5432, user => 'postgres', password => '');
این فایل را در سرور پک آپ هم در همان مسیر ذخیره کنید.
فایل زیر را در هر دو سرور ویرایش کنید:
vi /etc/postgresql/8.3/main/pg_hba.conf host all all 192.168.8.52/32 trust host all all 192.168.8.53/32 trust
دقت کنید که حتما از آی پی اینترفیس در اینجا و فایل قبلی استفاده کنید . و از localhost یا ۱۲۷.۰.۰.۱ استفاده نکنید که در موقع رپلیکشن به سرور های دیگر به مشکل برمی خورید.
برای شروع کار اول باید اطلاعات لازم را برای شروع جمعاوری کنید. برای شروع از دستورهای زیر استفاده کنید:
slonik_init_cluster | slonik
سپس در مسیر /etc/default/slony1 مقادیر زیر را به ترتیب در سرور اصلی و پشتیبان قرار دهید
SLON_TOOLS_START_NODES="1"
SLON_TOOLS_START_NODES="2"
دستور بعدی جدولها رابه مجموعه اضافه میکند:
slonik_create_set 1 | slonik
دستور بعدی سرور دوم را بعنوان بردهی اولی معرفی میکند.
slonik_subscribe_set 1 2 | slonik
رپلیکشن انجام شده است. محل قرار گیری لاگها در اینجا میباشد
/var/log/slony1/
اگر مشکلی برای سرو اصلی پیشامد حتما مطمثن شوید که سرور اصلی بعد از عوض کردن نقشهاران نیست . چون ممکن است که هر دو سرو بعد از عوض کردن نقش خود را به عنوان سرور اصلی بشناسند و مشکل پیش بیاید.
برای جابجا کردن تقش بر روی سرور بکآپ از دستور زیر استفاده کنید:
slonik_failover 1 2
لطفا توجه داشته باشید که این برای مواقع اضطراری است. در این حالت شما ممکن است که اطلاعاتی را که هنوز در سرور اصلی قبل وجود دارد را از دست بدهید. برای جابجا کردن سرور درحالت عادی از دستور زیر استفاده کنید:
slonik_move_set 1 1 2 | slonik
بعد از جابجایی تغییر لازم را در فایل بالا بدهید.