ক্রোন জব ব্যর্থতা কীভাবে সম্পাদন করবেন?


8

দুটি ডেবিয়ান সার্ভার ব্যবহার করে, ক্রোন জবগুলির জন্য আমার একটি শক্তিশালী ব্যর্থ পরিবেশ স্থাপন করতে হবে যা একবারে কেবল একটি সার্ভারে কল করা যেতে পারে।

/Etc/cron.d এ ফাইল সরিয়ে ফেলা কৌশলটি করা উচিত, তবে এই জাতীয় ক্রিয়াকলাপ পরিচালনা করার জন্য কি কোনও সাধারণ এইচএ সমাধান আছে? এবং যদি সম্ভব হয় হার্টবিট দিয়ে না;)


রেকর্ডের জন্য, অবশেষে আমি কাজটি করতে হৃদস্পন্দন ব্যবহার করেছি। তবে এর আরও সহজ সমাধান রয়েছে, যদি আপনার মেশিনগুলি একই সাবনেটে থাকে এবং মাল্টিকাস্ট করতে পারে তবে আমি ucarp ব্যবহারের পরামর্শ দেব। হৃত্স্পন্দন তুলনায় অনেক সহজ -> ucarp.org
Falken

1
rcron? Gnubatch? পুতুল?
সিমকিবিয়ান

আমি দ্বিতীয় rcron। আমি বর্তমানে এটি ব্যবহার করছি এবং প্রায় একই সেটআপ (একটি লোডবালেন্সারের পিছনে 2 উবুন্টু সার্ভার) রয়েছে।
আলী

উত্তর:


5

আমি মনে করি হার্টবিট / পেসমেকার হ'ল সেরা সমাধান হতে পারে, যেহেতু তারা আপনার জন্য রেস শর্ত, বেড়া ইত্যাদির অনেকগুলি যত্ন নিতে পারে যাতে কাজটি একবারে কেবল একটি হোস্টেই চলে ensure নিজেই কিছু ডিজাইন করা সম্ভব, তবে সম্ভবত এই প্যাকেজগুলির সমস্ত পরিস্থিতিতে এটির হিসাব হবে না এবং অবশেষে আপনি চক্রের বেশিরভাগ অংশের পরিবর্তে শেষ করে দেবেন।

আপনি যদি সত্যই এই জাতীয় জিনিসগুলির প্রতি যত্নশীল না হন এবং আপনি একটি সহজ সেটআপ চান। আমি কয়েক মিনিটের মধ্যে সার্ভারগুলিতে ক্রোন জবগুলি স্তম্ভিত করার পরামর্শ দিচ্ছি। তারপরে যখন প্রাথমিকটি কাজটি শুরু হয় তখন এটি যে কোনও ভাগ করা সংস্থানগুলিতে কাজ করে তার উপর কোনও চিহ্ন রেখে যেতে পারে (আপনি এটি নির্দিষ্ট করেন না, তাই আমি ইচ্ছাকৃতভাবে অস্পষ্ট হয়েছি)। যদি এটি একটি ডেটাবেস হয় তবে তারা কোনও টেবিলের ক্ষেত্র আপডেট করতে পারে বা যদি এটি কোনও ভাগ করা ফাইল সিস্টেমে কোনও ফাইল লক করে।

কাজটি যখন দ্বিতীয় সার্ভারে চলে তখন এটি চিহ্নিতকারীটির উপস্থিতি যাচাই করতে পারে এবং যদি সেখানে থাকে তবে তা বাতিল করতে পারে।


1

প্রয়োজনীয়তার উপর নির্ভর করে আমরা দুটি পন্থা ব্যবহার করি। উভয়ই ক্রোনের উপস্থিত থাকা এবং সমস্ত মেশিন থেকে চালানো জড়িত, তবে কিছুটা বিশুদ্ধতা যাচাইয়ের সাথে জড়িত:

  1. যদি মেশিনগুলি প্রাথমিক এবং মাধ্যমিকের (একাধিক মাধ্যমিক থাকতে পারে) সম্পর্কের মধ্যে থাকে তবে স্ক্রিপ্টগুলি মেশিনটি চালাচ্ছে যেগুলি প্রাথমিক অবস্থায় রয়েছে কিনা তা পরীক্ষা করার জন্য এটি পরিবর্তন করা হয়। যদি তা না হয় তবে তারা কেবল নিঃশব্দে প্রস্থান করে। এই মুহুর্তে আমার কাছে এইচবি সেটআপ নেই তবে আমি বিশ্বাস করি আপনি এই তথ্যের জন্য এইচবিকে জিজ্ঞাসা করতে পারেন।

  2. সমস্ত মেশিন যদি যোগ্য প্রাইমারী হয় (যেমন একটি ক্লাস্টারে থাকে) তবে কিছু লকিং ব্যবহৃত হয়। কোনও ভাগ করা ডাটাবেস বা পিআইডি ফাইলের মাধ্যমে। কেবলমাত্র একটি মেশিনই লকের স্থিতি পায় এবং যা নিরবভাবে বের হয় না।


1

দীর্ঘ গল্প সংক্ষিপ্ত করতে আপনাকে আপনার ক্রোন স্ক্রিপ্টগুলি কিছু ধরণের ক্লাস্টার-সক্ষম অ্যাপ্লিকেশনগুলিতে রূপান্তর করতে হবে। আপনার প্রয়োজন মতো হালকা ওজন হিসাবে ভারী ওজন হিসাবে কার্যকর হওয়ার কারণে তাদের এখনও একটি জিনিস প্রয়োজন - প্রাথমিক নোড ব্যর্থতার পরে যথাযথভাবে পুনরায় চালু / পুনরায় চালু করতে সক্ষম (বা তাদের অবস্থা পুনরুদ্ধার করতে) সক্ষম হোন। তুচ্ছ ঘটনাটি হ'ল এগুলি হ'ল রাষ্ট্রবিহীন কর্মসূচি (বা "পর্যাপ্ত রাষ্ট্রবিহীন" প্রোগ্রাম), যে কোনও সময় সহজেই পুনরায় চালু করা যেতে পারে এবং ঠিকঠাক কাজ করবে। এটি সম্ভবত আপনার ক্ষেত্রে নয়। নোট করুন যে স্টেটলেস প্রোগ্রামগুলির জন্য আপনার ফেইলওভারের দরকার নেই কারণ আপনি এগুলি সমস্ত নোডের সমান্তরালে চালাতে পারেন।

সাধারণত জটিল ক্ষেত্রে, আপনার স্ক্রিপ্টগুলি ক্লাস্টারের শেয়ারকৃত স্টোরেজে থাকা উচিত, সেখানে তাদের ফাইলগুলি সেখানে ফাইলগুলিতে সংরক্ষণ করা উচিত, কেবলমাত্র ডিস্কে সঞ্চিত রাষ্ট্রের পরিবর্তন করা উচিত এবং কোনও প্রবর্তনীয় অবস্থা থেকে তাদের কাজটি চালিয়ে যেতে সক্ষম হওয়া উচিত যা তারা প্রারম্ভকালে সনাক্ত করতে পারে।


1

আসলে এই ক্ষেত্রে সন্তোষজনক কোন সমাধান নেই। আমরা তাদের সব চেষ্টা করেছি। স্ক্রিপ্টিং সমাধান, হার্টবিট / পেসমেকার সহ ক্রোন এবং আরও অনেক কিছু more একমাত্র সমাধান, সম্প্রতি অবধি, একটি গ্রিড সমাধান ছিল। প্রাকৃতিকভাবে আমরা এটি দেখতে চাই না কেন গ্রিড সমাধানটি দৃশ্যের জন্য ওভারকিলের চেয়ে কিছুটা বেশি।

এজন্য আমি ক্রোনবালেন্সার প্রকল্প শুরু করেছি। বিতরণ, লোড-ভারসাম্যযুক্ত এবং এইচএ (শেষ হয়ে গেলে) ব্যতীত ক্রোন সার্ভারের মতো ঠিক কাজ করে। বর্তমানে প্রথম 2 পয়েন্ট সমাপ্ত হয়েছে (বিটা) এবং একটি স্ট্যান্ডার্ড ক্রন্টব ফাইলের সাথে কাজ করে।

এইচএ কাঠামো জায়গায় রয়েছে। যা যা বাকি রয়েছে তা হ'ল ব্যর্থতা ও পুনরুদ্ধারের ক্রিয়াগুলি নির্ধারণের জন্য প্রয়োজনীয় সংকেত।

http://sourceforge.net/projects/cronbalancer/

প্রি়


1

আমি একটি সহজ সমাধান হিসাবে নাগিও ইভেন্ট হ্যান্ডলারটি ব্যবহার করেছি ।

এনআরপিই সার্ভারে:

command[check_crond]=/usr/lib64/nagios/plugins/check_procs -c 1: -C crond
command[autostart_crond]=sudo /etc/init.d/crond start
command[stop_crond]=sudo /etc/init.d/crond stop

nagiosব্যবহারকারীদের sudoers গ্রুপে যুক্ত করতে ভুলবেন না :

nagios  ALL=(ALL)   NOPASSWD:/usr/lib64/nagios/plugins/, /etc/init.d/crond

এবং অক্ষম করুন requiretty:

Defaults:nagios !requiretty

নাগিও সার্ভারে:

services.cfg

define service{
    use                     generic-service
    host_name               cpc_3.145
    service_description     crond
    check_command           check_nrpe!check_crond
    event_handler           autostart_crond!cpc_2.93
    process_perf_data       0
    contact_groups          admin,admin-sms
}

commands.cfg

define command{
    command_name    autostart_crond
    command_line    $USER1$/eventhandlers/autostart_crond.sh $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$ $ARG1$
}

autostart_crond.sh

#!/bin/bash

case "$1" in
    OK)
        /usr/local/nagios/libexec/check_nrpe -H $4 -c stop_crond
        ;;
    WARNING)
        ;;
    UNKNOWN)
        /usr/local/nagios/libexec/check_nrpe -H $4 -c autostart_crond
        ;;
    CRITICAL)
        /usr/local/nagios/libexec/check_nrpe -H $4 -c autostart_crond
        ;;
esac

exit 0

তবে আমি পেসমেকার এবং করোজিন ব্যবহার করতে শুরু করেছি যেহেতু এটি একবারে রিসোর্সটি কেবল একটি নোডে চালিত হয় তা সর্বাধিক সমাধান।

আমি যে পদক্ষেপগুলি করেছি তা এখানে:

Crond init স্ক্রিপ্টটি LSB এর সাথে সামঞ্জস্যপূর্ণ কিনা তা যাচাই করুন । আমার CentOS এ, প্রয়োজনীয়তার সাথে মিলে যাওয়ার জন্য আমাকে প্রস্থান স্থিতিটি 1 থেকে 0 থেকে পরিবর্তন করতে হবে (যদি কোনও রানিং শুরু হয় বা থামানো বন্ধ হয়):

start() {
    echo -n $"Starting $prog: " 
    if [ -e /var/lock/subsys/crond ]; then
        if [ -e /var/run/crond.pid ] && [ -e /proc/`cat /var/run/crond.pid` ]; then
            echo -n $"cannot start crond: crond is already running.";
            failure $"cannot start crond: crond already running.";
            echo
            #return 1
            return 0
        fi
    fi

stop() {
    echo -n $"Stopping $prog: "
    if [ ! -e /var/lock/subsys/crond ]; then
        echo -n $"cannot stop crond: crond is not running."
        failure $"cannot stop crond: crond is not running."
        echo
        #return 1;
        return 0;
    fi

তারপরে এটি ব্যবহার করে পেসমেকারে যুক্ত করা যেতে পারে:

# crm configure primitive Crond lsb:crond \
        op monitor interval="60s"

crm কনফিগার শো

node SVR022-293.localdomain
node SVR233NTC-3145.localdomain
primitive Crond lsb:crond \
        op monitor interval="60s"
property $id="cib-bootstrap-options" \
        dc-version="1.1.5-1.1.el5-01e86afaaa6d4a8c4836f68df80ababd6ca3902f" \
        cluster-infrastructure="openais" \
        expected-quorum-votes="2" \
        stonith-enabled="false" \
        no-quorum-policy="ignore"
rsc_defaults $id="rsc-options" \
        resource-stickiness="100"

crm অবস্থা

============
Last updated: Fri Jun  7 13:44:03 2013
Stack: openais
Current DC: SVR233NTC-3145.localdomain - partition with quorum
Version: 1.1.5-1.1.el5-01e86afaaa6d4a8c4836f68df80ababd6ca3902f
2 Nodes configured, 2 expected votes
1 Resources configured.
============

Online: [ SVR022-293.localdomain SVR233NTC-3145.localdomain ]

 Crond  (lsb:crond):    Started SVR233NTC-3145.localdomain

3.145-তে পেসমেকার এবং করোজিনেক বন্ধ করে পরীক্ষার ব্যর্থতা:

[root@3145 corosync]# service pacemaker stop
Signaling Pacemaker Cluster Manager to terminate:          [  OK  ]
Waiting for cluster services to unload:......              [  OK  ]

[root@3145 corosync]# service corosync stop
Signaling Corosync Cluster Engine (corosync) to terminate: [  OK  ]
Waiting for corosync services to unload:.                  [  OK  ]

তারপরে ২.৯৩-এ ক্লাস্টারের স্থিতি পরীক্ষা করুন:

============
Last updated: Fri Jun  7 13:47:31 2013
Stack: openais
Current DC: SVR022-293.localdomain - partition WITHOUT quorum
Version: 1.1.5-1.1.el5-01e86afaaa6d4a8c4836f68df80ababd6ca3902f
2 Nodes configured, 2 expected votes
1 Resources configured.
============

Online: [ SVR022-293.localdomain ]
OFFLINE: [ SVR233NTC-3145.localdomain ]

Crond   (lsb:crond):    Started SVR022-293.localdomain

0

নির্দিষ্ট মেশিনে এটিকে মৃত্যুদন্ড কার্যকর করা / চালানো না করা তুচ্ছ কাজ। হয় আপনার পরামর্শ অনুসারে স্ক্রিপ্টটি /etc/cron.d এ একটি ক্রোন কাজ রেখে দেয় বা স্ক্রিপ্ট স্থায়ীভাবে /etc/cron.d এ রেখে দেয়, তবে স্ক্রিপ্টটি নিজেই ব্যর্থতা যাচাই করে নিন এবং কার্যকর করতে হবে কিনা তা স্থির করুন।

এই উভয়ের সাধারণ (অনুপস্থিত) অংশটি অন্য মেশিনে স্ক্রিপ্টটি চলছে কিনা তা স্ক্রিপ্টটি পরীক্ষা করে।

আপনি যা করার চেষ্টা করছেন সে সম্পর্কে আরও তথ্য ছাড়াই, উত্তর দেওয়া শক্ত।


0

এই বিশেষ সমস্যার জন্য আমি আরক্রনকে পছন্দ করি। আপনার একটি স্টেট ফাইল রয়েছে যা কেবল "সক্রিয়" বা "প্যাসিভ" বলে এবং এটি সক্রিয় থাকলে আপনার ক্রোন নির্দিষ্ট মেশিনে চলবে। যদি রাষ্ট্র ফাইলটি প্যাসিভতে সেট করা থাকে তবে এটি চলবে না। যে হিসাবে সহজ।

এখন, আপনি আপনার ক্লাস্টারের ওপারে স্টেট ফাইল পরিচালনা করতে রেডহ্যাট ক্লাস্টার স্যুট বা অন্য কোনও ক্লাস্টারিং মিডলওয়্যার ব্যবহার করতে পারেন বা আপনি কোনও নির্দিষ্ট নোডে ম্যানুয়ালি সক্রিয় করতে পারেন এবং এটিই।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.