compile
قم بتنزيل شفرة مصدر TORQUE: http://www.clusterresources.com/downloads/torque/. ترجمة بعد الضغط.
$ tar zxvf torque-2.3.3.tar.gz$ cd torque-2.3.3$ ./configure --with-scp$ make$ sudo make install
إذا كانت هناك حاجة إلى تثبيت العديد من الأجهزة ، يمكنك استخدام وظيفة حزمة التثبيت التي يوفرها عزم الدوران.
$ make packages
سيؤدي ذلك إلى إنتاج حزمة سلسلة عزم الدوران في الدليل. يجب تثبيت حزمة الخادم على الجهاز الرئيسي ، ويجب تثبيت حزمة أمي على العقدة. يجب تثبيت حزمة العملاء على الأجهزة التي تحتاج إلى تقديم مهام PBS.
تكوين وبدء عمليات الخلفية
التكوين مطلوب بعد تثبيت الحزم المناسبة. يمكن تهيئتها يدويًا ، لكن يوصى باستخدام البرنامج النصي torque.setup الذي يوفره عزم الدوران لإنشاء التكوين الأولي. للقيام بذلك ، استخدم الأمر على الجهاز الرئيسي:
$ sudo ./torque.setup yewenbinitializing TORQUE (admin: yewenb@ubuntu.ubuntu-domain)Max open servers: 4Max open servers: 4
بعد التكوين الصحيح ، يمكنك استخدام qmgr -c "خادم الطباعة" للتحقق من نجاح التهيئة.
$ qmgr -c 'p s'## Create queues and set their attributes.### Create and define queue batch#create queue batchset queue batch queue_type = Executionset queue batch resources_default.nodes = 1set queue batch resources_default.walltime = 01:00:00set queue batch enabled = Trueset queue batch started = True## Set server attributes.#set server scheduling = Trueset server acl_hosts = ubuntuset server managers = yewenb@ubuntu.ubuntu-domainset server operators = yewenb@ubuntu.ubuntu-domainset server default_queue = batchset server log_events = 511set server mail_from = admset server scheduler_iteration = 600set server node_check_rate = 150set server tcp_timeout = 6set server mom_job_sync = Trueset server keep_completed = 300
ثم تحتاج إلى بدء عملية الجدولة. يمكنك اختيار استخدام جدولة منفصلة مثل maui. هنا مباشرة استخدام المجدول pbs_sched المقدمة من عزم الدوران.
$ sudo pbs_sched
ابدأ عملية أمي على كل عقدة:
$ sudo pbs_mom
بعد بدء أمي ، تحتاج إلى إضافة العقد إلى الجهاز الرئيسي:
$ qmgr -c 'create node ubuntu np=2'
بعد الانضمام إلى العقدة ، يمكنك استخدام الأمر pbsnodes للتحقق مما إذا كانت العقدة متاحة (قد يستغرق الأمر بعض الوقت بعد إنشاء العقدة لتصبح حرة):
$ pbsnodesubuntu state = free np = 2 ntype = cluster status = opsys=linux,uname=Linux ubuntu 2.6.27-7-generic #1 SMP Tue Nov 4 19:33:20 UTC 2008 i686,sessions=4378 4853 5161 5298 5301 5307 5315 5317 5318 5320 5327 5354 5366 5436 5446 25697 25770 25777 25778 25779 25780 27368,nsessions=22,nusers=3,idletime=935,totmem=640676kb,availmem=319392kb,physmem=319416kb,ncpus=1,loadave=0.13,netload=111712774,state=free,jobs=,varattr=,rectime=1229343008
تكوين scp
قم بتثبيت خادم ssh أولاً
$ sudo apt-get install openssh-server
تحتاج أيضًا إلى تكوين ssh على الجهاز حيث تم تثبيت العقدة لضمان نقل ملفات السجل بنجاح مرة أخرى إلى الجهاز الرئيسي. يتطلب ذلك إنشاء مفتاح SSH على العقدة.
$ ssh-keygen -t rsa
إذا كنت لا تستخدم عبارة المرور ، فاستخدم:
$ ssh-keygen -P "" -t rsa
نصيحة: بروتوكول 2 لخادم openssh في Ubuntu 8.10 ، لذلك استخدم rsa بدلاً من rsa1
إذا تم تعيين عبارة المرور ، فستحتاج أيضًا إلى تكوين ssh-agent لتذكر كلمة المرور. قم بتشغيل الأمر التالي:
$ eval `ssh-agent`$ ssh-add ~/.ssh/id_rsa
بعد إعداد هذا الأمر ، أضف ~ / .ssh / id_rsa.pub إلى ملف ~ / .ssh / Author_keys على الجهاز الرئيسي.
تعديل التكوين ~ / .ssh / config
StrictHostKeyChecking no
إذا استخدمت الأمر التالي على العقدة دون المطالبة بكلمة مرور ، فيجب أن يكون ملف الإخراج للمهمة قادراً على تمريره بشكل طبيعي:
$ scp file user@server_host:/tmp
بالنسبة للنظام المستقل الذي أنشأناه هنا ، ما عليك سوى اختباره و ssh على الوضع المستقل دون كلمة المرور:
$ ssh localhost
إرسال مهمة الاختبار
بعد مرور التكوينات والاختبارات المذكورة أعلاه ، يمكنك إرسال اختبار مهمة:
$ echo 'sleep 10 && echo hello world' | qsub0.ubuntu $ qstat -qserver: ubuntuQueue Memory CPU Time Walltime Node Run Que Lm State ---------------- ----- --------- -------- ---- --- --------- batch ---- 1 0-ER- --- ----- 1 0 $ ls -l إجمالي الاستخدام 8-rw ------- 1 yewenb yewenb 0 2008-12-15 20:36 STDIN.e0-rw ------- 1 yewenb yewenb 12 2008-12-15 20:36 STDIN.o0
إذا نجحت الاختبارات المذكورة أعلاه ، تهانينا ، فلديك أخيرًا نظام PBS الخاص بك.
Trouble shoot
ترجمة خطأ تنسيق عزم الدوران
cc1: warnings being treated as errorspbsd_main.c: In function ‘lock_out’:pbsd_main.c:1621: error: format not a string literal and no format argumentsmake[2]: *** [pbsd_main.o] Error 1make[2]: Leaving directory `/home/yewenb/softwares/torque-2.3.3/src/server'
هذا الخطأ الذي واجهته أثناء عملية التحويل البرمجي لـ Ubuntu 8.10 ، لأن المحول البرمجي فشل في الترجمة بسبب هجوم سلسلة تنسيق الثغرة الأمنية المعروفة.
الحل هو تعديل رمز الخطأ وتغيير المخرجات المباشرة للثوابت غير السلسلة لاستخدام سلاسل التنسيق ، مثل fprintf (stderr ، "٪ s" ، var).
يمكنك استخدام هذا الأمر لإصلاح مشكلة استخدام fprintf في الكود:
$ cd /home/yewenb/softwares/torque-2.3.3/$ find . -name *.c | xargs -n1 perl -i.bak -e 'while(<>){if(/\bfprintf\(stderr,/&&!/stderr,$/&&!/stderr, ?"/&&!/msg_momsetlim/){s/stderr,/stderr,"%s",/;print}else{print}}'$ find . -name *.bak -exec rm {} \;
بعد ذلك ، لا يزال هناك عدد قليل من المطبوعات التي تواجه مشاكل:
qmgr.c:1780: error: format not a string literal and no format argumentsqmgr.c:1782: error: format not a string literal and no format arguments
قم بتحريرها وإصلاحها يدويًا (تغيير prinf (إلى printf ("٪ s")
[2.3.3] تعذر العثور على مكتبة الارتباط الحيوي libtorque.so.2
عند بدء العملية ، إذا طُلب منك ذلك:
pbs_server: error while loading shared libraries: libtorque.so.2: cannot open shared object file: No such file or directory
إذا كنت تستخدم خيارات التكوين الافتراضية ، فيجب أن يكون مسار تثبيت مكتبة الارتباط الحيوي على ما يرام ، فقط قم بتحديث ذاكرة التخزين المؤقت للتكوين ld:
$ sudo ldconfig
[2.3.0] تجميع عزم الدوران warn_unused_result
[تم تغيير خيارات التحويل البرمجي 2.3.3 دون هذا الخطأ]
خطأ في الترجمة:
pbs_sched.c:984: error: ignoring return value of ‘freopen’, declared with attribute warn_unused_resultpbs_sched.c:998: error: ignoring return value of ‘freopen’, declared with attribute warn_unused_result
الحل: قم يدويًا بتحرير src / scheduler.cc / pbs_sched.c وتغيير freopen (dbfile ، "a" ، stdout) إلى if (freopen (dbfile، "a"، stdout) == NULL) {}؛ (تغيير ذلك) بحتة للتأثيرات الجانبية ؛ نظرًا لأن طريقة الإضافة المباشرة (الفراغ) أمام freopen لا تعمل ، لا يزال المترجم يبلغ عن خطأ)
[2.3.0] خطأ torque.setup
$ sudo ./torque.setup liuqingyinitializing TORQUE (admin: liuqingy@ubuntu)Max open servers: 4qmgr obj= svr=default: Bad ACL entry in host list MSG=First bad host: ubuntuMax open servers: 4qmgr obj= svr=default: Bad ACL entry in host list MSG=First bad host: ubuntu
هذا خطأ على أوبونتو 8.10 مقدام أبيكس.
عند تنفيذ الأمر ، قم بإضافة معلمة أخرى ubuntu.ubuntu-domain لإكمال بدء تشغيل pbs_server:
$ sudo ./torque.setup liuqingy ubuntu.ubuntu-domain
ولكن خادم الاتصالات اللاحقة وأمي دائما مشاكل! لذلك ، لا يوجد حاليًا إصلاح لهذه المشكلة.
الحل هو عدم استخدام الإصدار 2.3.0! لا يوجد مثل هذه المشكلة في 2.3.3.
تثبيت بوستجرس
تثبيت PostgreSQL بسيط نسبيًا ، فإذا كان لديك نظام مناسب ، فما عليك سوى استخدام apt-get لتثبيته:
$ sudo apt-get install postgresql-8.3
ومع ذلك ، نظرًا لأن pg_bulkload يحتاج إلى تثبيته أدناه ، فمن المستحسن استخدام شفرة المصدر لتجميع وتثبيت ، كما أن الطريقة بسيطة للغاية ، ويمكن تنزيلها من http://www.postgresql.org/ftp/source/. فك الضغط وتجميعه:
$ tar zxvf postgresql-8.3.5.tar.gz$ cd postgresql-8.3.5$ ./configure --with-perl$ make$ sudo make install
يمكنك إنشاء قاعدة البيانات الخاصة بك بعد التثبيت.
$ export PGDATA=/path/to/db$ initdb
تثبيت ملحق PostgreSQL
plproxy
قم بتنزيل الكود المصدري من http://pgfoundry.org/projects/plproxy.
$ tar zxvf plproxy-2.0.7.tar.gz$ cd plproxy-2.0.7$ make$ sudo make install
pg_bulkload
قم بتنزيل الكود المصدري من http://pgfoundry.org/projects/pgbulkload.
يتطلب تجميع pg_bulkload شفرة مصدر PostgreSQL.
$ cp pg_bulkload-2.4beta1.tar.gz postgresql-8.3.5/contrib$ cd postgresql-8.3.5/contrib$ tar zxvf pg_bulkload-2.4beta1.tar.gz$ cd pg_bulkload$ make$ sudo make install$ mkdir $PGDATA/pg_bulkload
plproxy_rehash
قم بتنزيل الكود المصدري http://farsail.googlecode.com/files/plproxy_rehash-0.0.2.tar.gz تجميع وتثبيت.
$ make$ sudo make install
تركيب Farsail والتكوين
أولاً تثبيت الوحدة النمطية :: تثبيت الوحدة النمطية باستخدام cpan.
ثم قم بتنزيل أحدث شفرة مصدر لبرنامج Farsail:
$ svn export http://farsail.googlecode.com/svn/trunk/ $HOME/farsail$ cd $HOME/farsail$ perl Makefile.PL PREFIX=$HOME/local$ make$ make install
يمكنك اختيار عدم استخدام make install والاستخدام المباشر للدليل $ HOME / farsail كدليل للتطبيق ، ما عليك سوى إضافة مسار $ HOME / farsail / scripts إلى PATH ، أو الاتصال بالأمر المقابل لاستخدام المسار الكامل.
تحتاج أيضًا إلى تثبيت بعض الوحدات النمطية التي لم يتم تقديمها إلى CPAN. قم بتنزيل http://farsail.googlecode.com/files/Term-PromptEdit-0.0.1.tar.gz ، http://farsail.googlecode.com/files/Pg-Hashtext-0.1.2.tar.gz ، استخدم طريقة التثبيت العادي:
$ perl Makefile.PL$ make$ make install
أبسط ملف التكوين
لنبدأ بأبسط التكوين لتثبيت تكوين بيئة Farsail. قم أولاً بإنشاء دليل جديد لمشروعنا.
$ mkdir farsail$ cd farsail $ cp -r $HOME/farsail/conf .$ export FARSAILDIR=`pwd`/conf
الآن يجب أن يكون تشغيل مساعدة farsail_do الإخراج التالي:
$ farsail_do helpglobal: bulkload helprehash_table: setupmanager: config install print setup
تكوين PBS
تكوين PBS هو اسم كل عقدة واسم قائمة الانتظار الافتراضية. أتمتة التكوين باستخدام الأمر التالي:
$ farsail_mgr config --pbs --inplaceGet PBS compute nodes list...Compute Nodes are list following:ubuntuedit the list? [n ]Get PBS queue name...PBS queue is: [batch ]
سيحصل farsail_mgr على جميع أسماء العقدة من خلال أمر pbsnodes ، ويستخدم qmgr للحصول على اسم قائمة الانتظار الافتراضي. عادة هذا لا يحتاج إلى تعديل. بعد تأكيد التكوين ، سيتم إخراج ملف التكوين الجديد على الشاشة وسيتم استبدال ملف التكوين الأصلي مباشرة. إذا لم تكن بحاجة إلى استبدال ملف التكوين الأصلي وإزالة الخيار --inplace في سطر الأوامر ، فسيتم إنشاء ملف farsail.conf بنفس المحتوى في الدليل الحالي.
يجب أن يبدو ملف farsail.conf الآن كما يلي:
#---------------------------------------------# PBS settings#---------------------------------------------pbs.queue = batchpbs.nodes.0 = ubuntu#---------------------------------------------# Pl/Proxy cluster settings#---------------------------------------------default_cluster = #--------------------------------------------# Database configuration#--------------------------------------------databases_config_file = farsail_db.yml#---------------------------------------------# Actions definition#---------------------------------------------action_define_file = farsail.act#---------------------------------------------# Command line options#---------------------------------------------global_arguments = fake!, force!, ni!, cron!
تكوين الكتلة
تتكون كتلة قاعدة بيانات plproxy من قاعدة بيانات وكيل وعقد قاعدة بيانات عديدة. يجب أن يكون عدد عقد قاعدة البيانات قوة اثنين. أدناه نقوم بإنشاء كتلة مع قاعدة بيانات وكيل باسم الوكيل وقاعدتي العقدة مع أسماء قاعدة البيانات db_1 و db_2.
لتهيئة الكتلة ، استخدم الأمر التالي:
$ farsail_mgr config -cluster -inplaceConfigure pl/proxy cluster:1) add cluster> (1 - 1) 1name of cluster: farsailCreate new database nodes list? (y/n) [default y] Number of database nodes (power of 2) [default 16] 2Prefix for database name: db_Known host are:ubuntuAdd host: (enter to quit) Database user: yewenb
نظرًا لأننا نقوم بإنشاء كتلة قاعدة البيانات لأول مرة ، حدد خيار إضافة كتلة وأدخل اسم الكتلة. مطالبة ما إذا كنت تريد إنشاء قاعدة بيانات عقدة جديدة. عند تحديد "نعم" ، تتم مطالبتك بقائمة المضيف لقاعدة البيانات. سيتم استخدام قائمة المضيف هذه لإنشاء قاعدة بيانات وقائمة اقتران المضيف تلقائيًا. يتم إعطاء قائمة المضيف الأولي بواسطة مضيف عقدة PBS.
بعد إدخال هذه المعلومات ، سيفتح المحرر نافذة بالمحتوى التالي:
## Set proxy database here ### If use exists database only db_id need, otherwise# db_id dbname host user password port## Set nodes database here ### if use exists database only db_id need, otherwise# node_index db_id dbname user host port1 db_1 db_1 ubuntu yewenb ~ ~2 db_2 db_2 ubuntu yewenb ~ ~
ما تحتاج إلى تعبئته هو تكوين اتصال قاعدة بيانات الوكيل ، أما بالنسبة لتكوين اتصال قاعدة بيانات العقدة ، فيمكنك تعديلها أو استخدام القائمة الافتراضية مباشرة. على سبيل المثال ، بعد السطر الثالث:
proxy proxy ubuntu yewenb
تجدر الإشارة إلى أن قاعدة بيانات العقدة الخاصة بـ plproxy تحتاج إلى الوصول إليها بدون كلمة مرور ، وإذا لزم الأمر ، يجب تعديل ملف pg_hba.conf الخاص بكل قاعدة بيانات عقدة لجعل نوع ثقة مستوى الوصول إلى قاعدة بيانات الوكيل.
بعد الحفظ ، سيتم تكوين التكوين المقابل وتكوين اتصال البيانات. يبدو الملف farsail.conf الآن كما يلي:
#---------------------------------------------# PBS settings#---------------------------------------------pbs.queue = batchpbs.nodes.0 = ubuntu#---------------------------------------------# Pl/Proxy cluster settings#---------------------------------------------default_cluster = farsailcluster.farsail.proxy = proxycluster.farsail.nodes.0 = db_1 cluster.farsail.nodes.1 = db_2 #--------------------------------------------# Database configuration#--------------------------------------------databases_config_file = farsail_db.yml#---------------------------------------------# Actions definition#---------------------------------------------action_define_file = farsail.act#---------------------------------------------# Command line options#---------------------------------------------global_arguments = fake!, force!, ni!, cron!
الملف farsail_db.yml في نفس الدليل كما يلي:
---db_1: dbd: Pg dbname: db_1 host: ubuntu user: yewenbdb_2: dbd: Pg dbname: db_2 host: ubuntu user: yewenbproxy: dbd: Pg dbname: proxy host: ubuntu user: yewenb
هذا ينتج فقط تكوين قاعدة البيانات ، وقاعدة البيانات غير موجودة حقا. يمكنك استخدام الأمر التالي لإنشاء جميع قواعد البيانات:
$ farsail_mgr setup --createdbcreatedb -h ubuntu -U yewenb proxycreatedb -h ubuntu -U yewenb db_1createdb -h ubuntu -U yewenb db_2
تثبيت ملحق pg_bulkload
استخدم الأمر farsail_mgr install لتثبيت البرنامج النصي sql في قاعدة البيانات. إذا تم تحديد الخيار -proxy ، يتم تثبيت البرنامج النصي sql على قاعدة بيانات الوكيل للكتلة ، وإلا يتم تثبيت البرنامج النصي على جميع قواعد بيانات العقدة.
$ farsail_mgr install `pg_config --sharedir`/contrib/pg_bulkload.sql$ farsail_mgr install `pg_config --sharedir`/contrib/pg_timestamp.sql
لاستخدام امتداد pg_bulkload ، يجب إضافة التكوين التالي إلى farsail.conf:
bulkload.share_directory = ../tmp/bulkloadbulkload.format_directory = bulkload
ما يفعلونه هو أن format_directory يستخدم لقراءة ملف القالب الخاص بـ pg_bulkload ، والذي يجب أن يكون بالفعل في دليل $ FARSAILDIR. يستخدم share_directory لتخزين ملف التكوين المؤقت pg_bulkload ، يجب إنشاء هذا الدليل:
$ mkdir -p $FARSAILDIR/../tmp/bulkload
تثبيت ملحق plproxy
لتثبيت ملحق plproxy نفسه ، فقط قم بتنفيذ الأمر:
$ farsail_mgr install --proxy `pg_config --sharedir`/contrib/plproxy.sql
يوفر farsail بعض الإجراءات المخزنة المخصصة لسهولة استخدام plproxy.
$ farsail_mgr install --proxy $HOME/farsail/sql/plproxy/proxy.sql$ farsail_mgr install $HOME/farsail/sql/plproxy/node.sql
تحتاج أيضًا إلى إنشاء التكوين المناسب لنظام المجموعة في ملف التكوين الحالي:
$ farsail_mgr setupSELECT plproxy.set_default_cluster_name('farsail');DELETE FROM plproxy.conf WHERE cluster_name='farsail';INSERT INTO plproxy.conf (cluster_name, host, port, dbname, username) VALUES('farsail','ubuntu','5432','db_1','yewenb'),('farsail','ubuntu','5432','db_2','yewenb');$ farsail_mgr setup | psql proxy
تثبيت ملحق plproxy_rehash
تحتاج أيضًا إلى تثبيت SQL الموسعة في قاعدة بيانات الوكيل وقاعدة بيانات العقدة:
$ farsail_mgr install --proxy `pg_config --sharedir`/contrib/plproxy_rehash_proxy.sql$ farsail_mgr install `pg_config --sharedir`/contrib/plproxy_rehash.sql
يجب أيضًا تثبيت ملحق التجزئة الثقيل وتكوينه في قاعدة بيانات العقدة. يتضمن التكوين الذي يتطلبه دليلًا مشتركًا لملفات الجرافات المؤقتة وطريقة لتحميل البيانات. يمكن لطريقة تحميل البيانات الحالية اختيار نسخ أو pg_bulkload. يمكنك استخدام rehash_table.setup لإنشاء تكوين الكتلة تلقائيًا:
$ farsail_mgr rehash_table.setup -dir $FARSAILDIR/rehash -loadby pg_bulkload -output rehash_setup.sql\c cluster.farsail.proxyINSERT INTO plproxy.cluster_config (name, setting) VALUES('share_directory', '/home/yewenb/temp/farsail/conf/rehash');\c cluster.farsail.nodes.0INSERT INTO plproxy.cluster_config (name, setting) VALUES('db_node', 1),('nof_nodes', 2),('load_method', 'pg_bulkload');\c cluster.farsail.nodes.1INSERT INTO plproxy.cluster_config (name, setting) VALUES('db_node', 2),('nof_nodes', 2),('load_method', 'pg_bulkload');
لا يتم تقديم التعليمات \ c في بيان sql الذي تم إنشاؤه مباشرة إلى بيان psql ، ولكن يتم التعرف عليه بواسطة تثبيت farsail_mgr ويستخدم للتشغيل في قاعدة البيانات المقابلة باستخدام DBI. لذلك تحتاج إلى استخدام تثبيت farsail_mgr للتثبيت.
$ farsail_mgr install rehash_setup.sql
عند هذه النقطة ، ينتهي إعداد PBS وقاعدة بيانات farsail ، دعونا نجري تحليلًا لسجل apache.
Trouble shoot
لا يمكن الاتصال بقاعدة البيانات
إذا قمت بإنشاء قاعدة بيانات ، فسيُطلب منك:
createb: تعذر الاتصال بقاعدة بيانات postgres: تعذر الاتصال بالخادم: تم رفض الاتصال هل الخادم قيد التشغيل على المضيف "ubuntu" وقبول اتصالات TCP / IP على المنفذ 5432؟
تحتاج إلى تغيير postgresql.conf و pg_hba.conf لجعل قاعدة البيانات تستمع إلى عنوان IP للعميل وتسمح للعميل بالوصول. أبسط تعديل هو تغيير listen_addresses في postgresql.conf إلى "*" وإضافة سطر إلى pg_hba.conf:
host all all 1.0.0.0/0 trust
ملاحظة: ستسمح هذه التعديلات لأي جهاز بالوصول إلى خادم pg.
مثال تحليل سجل اباتشي
يمكن الحصول على بيانات سجل الاستخدام التجريبي من http://farsail.googlecode.com/files/exampleWebLog.bz2.
يمكن الحصول على الوحدة النمطية LogParser المستخدمة في تحليل السجل من دليل العرض التوضيحي الخاص بالكود المصدري Farsail.
تصميم قاعدة البيانات
بنية جدول قاعدة بيانات السجل كالتالي:
CREATE TABLE log_daily ( thedate date, ip text, log_time timestamptz, url text, method text, status int, referer text, user_agent text);
سنقوم بتجزئة الدلو بواسطة ip. نستخدم حاليًا قاعدتي بيانات ، ومن أجل توسيع قاعدة البيانات في المستقبل ، قمنا بتعيين العدد الفعلي للجرافات على 8.
استخدم التاريخ لفصل الجداول ، وسيتم تخزين السجل اليومي في جدول منفصل. بيان إنشاء جدول جديد كما يلي:
CREATE TABLE log_daily_20081225 ( check (thedate = '20081225')) INHERITS (log_daily);
تصميم ملف التكوين
تحتاج أولاً إلى تصميم ملف التكوين.
log.datadir = ../datalog.tempdir = ../tmplog.buckets = 8
في جميع التكوينات ، لمنع التعارضات ، نضيف بادئة السجل. يمكن تحديث ملف السجل يوميًا ، ومن المقرر تعيين ملف date.log $ في دليل بيانات $ FARSAILDIR /../ يوميًا. يتم استخدام tempdir لتحديد دليل كتابة ملف الجرافة. يتم استخدام الجرافات لتحديد عدد الجرافات.
اكتب التكوين أعلاه إلى ملف log.conf واحفظه في دليل $ FARSAILDIR / app. أضف خطًا إلى ملف farsail.conf:
include = app/*.conf
وبهذه الطريقة ، سيتم قراءة جميع الملفات في دليل التطبيق مع اللاحقة conf في التكوين.
تصميم سطر الأوامر
نظرًا لأن سجل ETL يتم تنفيذه يوميًا ، فلا بد من معلمة تاريخ واحدة على الأقل. لذلك تحتاج إلى كتابة إجراء مثل هذا:
log: module: Etl::ApacheLog daily: args: date: { type: date, default: yesterday }
حفظ ما سبق إلى ملف $ FARSAILDIR / app / log.act. سيقوم البرنامج بتحميل هذا الملف تلقائيا.
كتابة قانون العمل
وأخيرا نكتب كود etl لدينا.
يمكنك استخدام farsail_do لتشغيل الإجراءات المحددة:
$ farsail_do log.daily --date 20081224
تحقق من أن البيانات مستوردة بالفعل في قاعدة البيانات:
$ psql proxy -c "SELECT * from dquery('select current_database(), count(*) from log_daily') as(db name, cnt int8)" db | cnt ------+-------- db_1 | 111256 db_2 | 138744
قم بتنزيل شفرة مصدر TORQUE: http://www.clusterresources.com/downloads/torque/. ترجمة بعد الضغط.
$ tar zxvf torque-2.3.3.tar.gz$ cd torque-2.3.3$ ./configure --with-scp$ make$ sudo make install
إذا كانت هناك حاجة إلى تثبيت العديد من الأجهزة ، يمكنك استخدام وظيفة حزمة التثبيت التي يوفرها عزم الدوران.
$ make packages
سيؤدي ذلك إلى إنتاج حزمة سلسلة عزم الدوران في الدليل. يجب تثبيت حزمة الخادم على الجهاز الرئيسي ، ويجب تثبيت حزمة أمي على العقدة. يجب تثبيت حزمة العملاء على الأجهزة التي تحتاج إلى تقديم مهام PBS.
تكوين وبدء عمليات الخلفية
التكوين مطلوب بعد تثبيت الحزم المناسبة. يمكن تهيئتها يدويًا ، لكن يوصى باستخدام البرنامج النصي torque.setup الذي يوفره عزم الدوران لإنشاء التكوين الأولي. للقيام بذلك ، استخدم الأمر على الجهاز الرئيسي:
$ sudo ./torque.setup yewenbinitializing TORQUE (admin: yewenb@ubuntu.ubuntu-domain)Max open servers: 4Max open servers: 4
بعد التكوين الصحيح ، يمكنك استخدام qmgr -c "خادم الطباعة" للتحقق من نجاح التهيئة.
$ qmgr -c 'p s'## Create queues and set their attributes.### Create and define queue batch#create queue batchset queue batch queue_type = Executionset queue batch resources_default.nodes = 1set queue batch resources_default.walltime = 01:00:00set queue batch enabled = Trueset queue batch started = True## Set server attributes.#set server scheduling = Trueset server acl_hosts = ubuntuset server managers = yewenb@ubuntu.ubuntu-domainset server operators = yewenb@ubuntu.ubuntu-domainset server default_queue = batchset server log_events = 511set server mail_from = admset server scheduler_iteration = 600set server node_check_rate = 150set server tcp_timeout = 6set server mom_job_sync = Trueset server keep_completed = 300
ثم تحتاج إلى بدء عملية الجدولة. يمكنك اختيار استخدام جدولة منفصلة مثل maui. هنا مباشرة استخدام المجدول pbs_sched المقدمة من عزم الدوران.
$ sudo pbs_sched
ابدأ عملية أمي على كل عقدة:
$ sudo pbs_mom
بعد بدء أمي ، تحتاج إلى إضافة العقد إلى الجهاز الرئيسي:
$ qmgr -c 'create node ubuntu np=2'
بعد الانضمام إلى العقدة ، يمكنك استخدام الأمر pbsnodes للتحقق مما إذا كانت العقدة متاحة (قد يستغرق الأمر بعض الوقت بعد إنشاء العقدة لتصبح حرة):
$ pbsnodesubuntu state = free np = 2 ntype = cluster status = opsys=linux,uname=Linux ubuntu 2.6.27-7-generic #1 SMP Tue Nov 4 19:33:20 UTC 2008 i686,sessions=4378 4853 5161 5298 5301 5307 5315 5317 5318 5320 5327 5354 5366 5436 5446 25697 25770 25777 25778 25779 25780 27368,nsessions=22,nusers=3,idletime=935,totmem=640676kb,availmem=319392kb,physmem=319416kb,ncpus=1,loadave=0.13,netload=111712774,state=free,jobs=,varattr=,rectime=1229343008
تكوين scp
قم بتثبيت خادم ssh أولاً
$ sudo apt-get install openssh-server
تحتاج أيضًا إلى تكوين ssh على الجهاز حيث تم تثبيت العقدة لضمان نقل ملفات السجل بنجاح مرة أخرى إلى الجهاز الرئيسي. يتطلب ذلك إنشاء مفتاح SSH على العقدة.
$ ssh-keygen -t rsa
إذا كنت لا تستخدم عبارة المرور ، فاستخدم:
$ ssh-keygen -P "" -t rsa
نصيحة: بروتوكول 2 لخادم openssh في Ubuntu 8.10 ، لذلك استخدم rsa بدلاً من rsa1
إذا تم تعيين عبارة المرور ، فستحتاج أيضًا إلى تكوين ssh-agent لتذكر كلمة المرور. قم بتشغيل الأمر التالي:
$ eval `ssh-agent`$ ssh-add ~/.ssh/id_rsa
بعد إعداد هذا الأمر ، أضف ~ / .ssh / id_rsa.pub إلى ملف ~ / .ssh / Author_keys على الجهاز الرئيسي.
تعديل التكوين ~ / .ssh / config
StrictHostKeyChecking no
إذا استخدمت الأمر التالي على العقدة دون المطالبة بكلمة مرور ، فيجب أن يكون ملف الإخراج للمهمة قادراً على تمريره بشكل طبيعي:
$ scp file user@server_host:/tmp
بالنسبة للنظام المستقل الذي أنشأناه هنا ، ما عليك سوى اختباره و ssh على الوضع المستقل دون كلمة المرور:
$ ssh localhost
إرسال مهمة الاختبار
بعد مرور التكوينات والاختبارات المذكورة أعلاه ، يمكنك إرسال اختبار مهمة:
$ echo 'sleep 10 && echo hello world' | qsub0.ubuntu $ qstat -qserver: ubuntuQueue Memory CPU Time Walltime Node Run Que Lm State ---------------- ----- --------- -------- ---- --- --------- batch ---- 1 0-ER- --- ----- 1 0 $ ls -l إجمالي الاستخدام 8-rw ------- 1 yewenb yewenb 0 2008-12-15 20:36 STDIN.e0-rw ------- 1 yewenb yewenb 12 2008-12-15 20:36 STDIN.o0
إذا نجحت الاختبارات المذكورة أعلاه ، تهانينا ، فلديك أخيرًا نظام PBS الخاص بك.
Trouble shoot
ترجمة خطأ تنسيق عزم الدوران
cc1: warnings being treated as errorspbsd_main.c: In function ‘lock_out’:pbsd_main.c:1621: error: format not a string literal and no format argumentsmake[2]: *** [pbsd_main.o] Error 1make[2]: Leaving directory `/home/yewenb/softwares/torque-2.3.3/src/server'
هذا الخطأ الذي واجهته أثناء عملية التحويل البرمجي لـ Ubuntu 8.10 ، لأن المحول البرمجي فشل في الترجمة بسبب هجوم سلسلة تنسيق الثغرة الأمنية المعروفة.
الحل هو تعديل رمز الخطأ وتغيير المخرجات المباشرة للثوابت غير السلسلة لاستخدام سلاسل التنسيق ، مثل fprintf (stderr ، "٪ s" ، var).
يمكنك استخدام هذا الأمر لإصلاح مشكلة استخدام fprintf في الكود:
$ cd /home/yewenb/softwares/torque-2.3.3/$ find . -name *.c | xargs -n1 perl -i.bak -e 'while(<>){if(/\bfprintf\(stderr,/&&!/stderr,$/&&!/stderr, ?"/&&!/msg_momsetlim/){s/stderr,/stderr,"%s",/;print}else{print}}'$ find . -name *.bak -exec rm {} \;
بعد ذلك ، لا يزال هناك عدد قليل من المطبوعات التي تواجه مشاكل:
qmgr.c:1780: error: format not a string literal and no format argumentsqmgr.c:1782: error: format not a string literal and no format arguments
قم بتحريرها وإصلاحها يدويًا (تغيير prinf (إلى printf ("٪ s")
[2.3.3] تعذر العثور على مكتبة الارتباط الحيوي libtorque.so.2
عند بدء العملية ، إذا طُلب منك ذلك:
pbs_server: error while loading shared libraries: libtorque.so.2: cannot open shared object file: No such file or directory
إذا كنت تستخدم خيارات التكوين الافتراضية ، فيجب أن يكون مسار تثبيت مكتبة الارتباط الحيوي على ما يرام ، فقط قم بتحديث ذاكرة التخزين المؤقت للتكوين ld:
$ sudo ldconfig
[2.3.0] تجميع عزم الدوران warn_unused_result
[تم تغيير خيارات التحويل البرمجي 2.3.3 دون هذا الخطأ]
خطأ في الترجمة:
pbs_sched.c:984: error: ignoring return value of ‘freopen’, declared with attribute warn_unused_resultpbs_sched.c:998: error: ignoring return value of ‘freopen’, declared with attribute warn_unused_result
الحل: قم يدويًا بتحرير src / scheduler.cc / pbs_sched.c وتغيير freopen (dbfile ، "a" ، stdout) إلى if (freopen (dbfile، "a"، stdout) == NULL) {}؛ (تغيير ذلك) بحتة للتأثيرات الجانبية ؛ نظرًا لأن طريقة الإضافة المباشرة (الفراغ) أمام freopen لا تعمل ، لا يزال المترجم يبلغ عن خطأ)
[2.3.0] خطأ torque.setup
$ sudo ./torque.setup liuqingyinitializing TORQUE (admin: liuqingy@ubuntu)Max open servers: 4qmgr obj= svr=default: Bad ACL entry in host list MSG=First bad host: ubuntuMax open servers: 4qmgr obj= svr=default: Bad ACL entry in host list MSG=First bad host: ubuntu
هذا خطأ على أوبونتو 8.10 مقدام أبيكس.
عند تنفيذ الأمر ، قم بإضافة معلمة أخرى ubuntu.ubuntu-domain لإكمال بدء تشغيل pbs_server:
$ sudo ./torque.setup liuqingy ubuntu.ubuntu-domain
ولكن خادم الاتصالات اللاحقة وأمي دائما مشاكل! لذلك ، لا يوجد حاليًا إصلاح لهذه المشكلة.
الحل هو عدم استخدام الإصدار 2.3.0! لا يوجد مثل هذه المشكلة في 2.3.3.
تثبيت بوستجرس
تثبيت PostgreSQL بسيط نسبيًا ، فإذا كان لديك نظام مناسب ، فما عليك سوى استخدام apt-get لتثبيته:
$ sudo apt-get install postgresql-8.3
ومع ذلك ، نظرًا لأن pg_bulkload يحتاج إلى تثبيته أدناه ، فمن المستحسن استخدام شفرة المصدر لتجميع وتثبيت ، كما أن الطريقة بسيطة للغاية ، ويمكن تنزيلها من http://www.postgresql.org/ftp/source/. فك الضغط وتجميعه:
$ tar zxvf postgresql-8.3.5.tar.gz$ cd postgresql-8.3.5$ ./configure --with-perl$ make$ sudo make install
يمكنك إنشاء قاعدة البيانات الخاصة بك بعد التثبيت.
$ export PGDATA=/path/to/db$ initdb
تثبيت ملحق PostgreSQL
plproxy
قم بتنزيل الكود المصدري من http://pgfoundry.org/projects/plproxy.
$ tar zxvf plproxy-2.0.7.tar.gz$ cd plproxy-2.0.7$ make$ sudo make install
pg_bulkload
قم بتنزيل الكود المصدري من http://pgfoundry.org/projects/pgbulkload.
يتطلب تجميع pg_bulkload شفرة مصدر PostgreSQL.
$ cp pg_bulkload-2.4beta1.tar.gz postgresql-8.3.5/contrib$ cd postgresql-8.3.5/contrib$ tar zxvf pg_bulkload-2.4beta1.tar.gz$ cd pg_bulkload$ make$ sudo make install$ mkdir $PGDATA/pg_bulkload
plproxy_rehash
قم بتنزيل الكود المصدري http://farsail.googlecode.com/files/plproxy_rehash-0.0.2.tar.gz تجميع وتثبيت.
$ make$ sudo make install
تركيب Farsail والتكوين
أولاً تثبيت الوحدة النمطية :: تثبيت الوحدة النمطية باستخدام cpan.
ثم قم بتنزيل أحدث شفرة مصدر لبرنامج Farsail:
$ svn export http://farsail.googlecode.com/svn/trunk/ $HOME/farsail$ cd $HOME/farsail$ perl Makefile.PL PREFIX=$HOME/local$ make$ make install
يمكنك اختيار عدم استخدام make install والاستخدام المباشر للدليل $ HOME / farsail كدليل للتطبيق ، ما عليك سوى إضافة مسار $ HOME / farsail / scripts إلى PATH ، أو الاتصال بالأمر المقابل لاستخدام المسار الكامل.
تحتاج أيضًا إلى تثبيت بعض الوحدات النمطية التي لم يتم تقديمها إلى CPAN. قم بتنزيل http://farsail.googlecode.com/files/Term-PromptEdit-0.0.1.tar.gz ، http://farsail.googlecode.com/files/Pg-Hashtext-0.1.2.tar.gz ، استخدم طريقة التثبيت العادي:
$ perl Makefile.PL$ make$ make install
أبسط ملف التكوين
لنبدأ بأبسط التكوين لتثبيت تكوين بيئة Farsail. قم أولاً بإنشاء دليل جديد لمشروعنا.
$ mkdir farsail$ cd farsail $ cp -r $HOME/farsail/conf .$ export FARSAILDIR=`pwd`/conf
الآن يجب أن يكون تشغيل مساعدة farsail_do الإخراج التالي:
$ farsail_do helpglobal: bulkload helprehash_table: setupmanager: config install print setup
تكوين PBS
تكوين PBS هو اسم كل عقدة واسم قائمة الانتظار الافتراضية. أتمتة التكوين باستخدام الأمر التالي:
$ farsail_mgr config --pbs --inplaceGet PBS compute nodes list...Compute Nodes are list following:ubuntuedit the list? [n ]Get PBS queue name...PBS queue is: [batch ]
سيحصل farsail_mgr على جميع أسماء العقدة من خلال أمر pbsnodes ، ويستخدم qmgr للحصول على اسم قائمة الانتظار الافتراضي. عادة هذا لا يحتاج إلى تعديل. بعد تأكيد التكوين ، سيتم إخراج ملف التكوين الجديد على الشاشة وسيتم استبدال ملف التكوين الأصلي مباشرة. إذا لم تكن بحاجة إلى استبدال ملف التكوين الأصلي وإزالة الخيار --inplace في سطر الأوامر ، فسيتم إنشاء ملف farsail.conf بنفس المحتوى في الدليل الحالي.
يجب أن يبدو ملف farsail.conf الآن كما يلي:
#---------------------------------------------# PBS settings#---------------------------------------------pbs.queue = batchpbs.nodes.0 = ubuntu#---------------------------------------------# Pl/Proxy cluster settings#---------------------------------------------default_cluster = #--------------------------------------------# Database configuration#--------------------------------------------databases_config_file = farsail_db.yml#---------------------------------------------# Actions definition#---------------------------------------------action_define_file = farsail.act#---------------------------------------------# Command line options#---------------------------------------------global_arguments = fake!, force!, ni!, cron!
تكوين الكتلة
تتكون كتلة قاعدة بيانات plproxy من قاعدة بيانات وكيل وعقد قاعدة بيانات عديدة. يجب أن يكون عدد عقد قاعدة البيانات قوة اثنين. أدناه نقوم بإنشاء كتلة مع قاعدة بيانات وكيل باسم الوكيل وقاعدتي العقدة مع أسماء قاعدة البيانات db_1 و db_2.
لتهيئة الكتلة ، استخدم الأمر التالي:
$ farsail_mgr config -cluster -inplaceConfigure pl/proxy cluster:1) add cluster> (1 - 1) 1name of cluster: farsailCreate new database nodes list? (y/n) [default y] Number of database nodes (power of 2) [default 16] 2Prefix for database name: db_Known host are:ubuntuAdd host: (enter to quit) Database user: yewenb
نظرًا لأننا نقوم بإنشاء كتلة قاعدة البيانات لأول مرة ، حدد خيار إضافة كتلة وأدخل اسم الكتلة. مطالبة ما إذا كنت تريد إنشاء قاعدة بيانات عقدة جديدة. عند تحديد "نعم" ، تتم مطالبتك بقائمة المضيف لقاعدة البيانات. سيتم استخدام قائمة المضيف هذه لإنشاء قاعدة بيانات وقائمة اقتران المضيف تلقائيًا. يتم إعطاء قائمة المضيف الأولي بواسطة مضيف عقدة PBS.
بعد إدخال هذه المعلومات ، سيفتح المحرر نافذة بالمحتوى التالي:
## Set proxy database here ### If use exists database only db_id need, otherwise# db_id dbname host user password port## Set nodes database here ### if use exists database only db_id need, otherwise# node_index db_id dbname user host port1 db_1 db_1 ubuntu yewenb ~ ~2 db_2 db_2 ubuntu yewenb ~ ~
ما تحتاج إلى تعبئته هو تكوين اتصال قاعدة بيانات الوكيل ، أما بالنسبة لتكوين اتصال قاعدة بيانات العقدة ، فيمكنك تعديلها أو استخدام القائمة الافتراضية مباشرة. على سبيل المثال ، بعد السطر الثالث:
proxy proxy ubuntu yewenb
تجدر الإشارة إلى أن قاعدة بيانات العقدة الخاصة بـ plproxy تحتاج إلى الوصول إليها بدون كلمة مرور ، وإذا لزم الأمر ، يجب تعديل ملف pg_hba.conf الخاص بكل قاعدة بيانات عقدة لجعل نوع ثقة مستوى الوصول إلى قاعدة بيانات الوكيل.
بعد الحفظ ، سيتم تكوين التكوين المقابل وتكوين اتصال البيانات. يبدو الملف farsail.conf الآن كما يلي:
#---------------------------------------------# PBS settings#---------------------------------------------pbs.queue = batchpbs.nodes.0 = ubuntu#---------------------------------------------# Pl/Proxy cluster settings#---------------------------------------------default_cluster = farsailcluster.farsail.proxy = proxycluster.farsail.nodes.0 = db_1 cluster.farsail.nodes.1 = db_2 #--------------------------------------------# Database configuration#--------------------------------------------databases_config_file = farsail_db.yml#---------------------------------------------# Actions definition#---------------------------------------------action_define_file = farsail.act#---------------------------------------------# Command line options#---------------------------------------------global_arguments = fake!, force!, ni!, cron!
الملف farsail_db.yml في نفس الدليل كما يلي:
---db_1: dbd: Pg dbname: db_1 host: ubuntu user: yewenbdb_2: dbd: Pg dbname: db_2 host: ubuntu user: yewenbproxy: dbd: Pg dbname: proxy host: ubuntu user: yewenb
هذا ينتج فقط تكوين قاعدة البيانات ، وقاعدة البيانات غير موجودة حقا. يمكنك استخدام الأمر التالي لإنشاء جميع قواعد البيانات:
$ farsail_mgr setup --createdbcreatedb -h ubuntu -U yewenb proxycreatedb -h ubuntu -U yewenb db_1createdb -h ubuntu -U yewenb db_2
تثبيت ملحق pg_bulkload
استخدم الأمر farsail_mgr install لتثبيت البرنامج النصي sql في قاعدة البيانات. إذا تم تحديد الخيار -proxy ، يتم تثبيت البرنامج النصي sql على قاعدة بيانات الوكيل للكتلة ، وإلا يتم تثبيت البرنامج النصي على جميع قواعد بيانات العقدة.
$ farsail_mgr install `pg_config --sharedir`/contrib/pg_bulkload.sql$ farsail_mgr install `pg_config --sharedir`/contrib/pg_timestamp.sql
لاستخدام امتداد pg_bulkload ، يجب إضافة التكوين التالي إلى farsail.conf:
bulkload.share_directory = ../tmp/bulkloadbulkload.format_directory = bulkload
ما يفعلونه هو أن format_directory يستخدم لقراءة ملف القالب الخاص بـ pg_bulkload ، والذي يجب أن يكون بالفعل في دليل $ FARSAILDIR. يستخدم share_directory لتخزين ملف التكوين المؤقت pg_bulkload ، يجب إنشاء هذا الدليل:
$ mkdir -p $FARSAILDIR/../tmp/bulkload
تثبيت ملحق plproxy
لتثبيت ملحق plproxy نفسه ، فقط قم بتنفيذ الأمر:
$ farsail_mgr install --proxy `pg_config --sharedir`/contrib/plproxy.sql
يوفر farsail بعض الإجراءات المخزنة المخصصة لسهولة استخدام plproxy.
$ farsail_mgr install --proxy $HOME/farsail/sql/plproxy/proxy.sql$ farsail_mgr install $HOME/farsail/sql/plproxy/node.sql
تحتاج أيضًا إلى إنشاء التكوين المناسب لنظام المجموعة في ملف التكوين الحالي:
$ farsail_mgr setupSELECT plproxy.set_default_cluster_name('farsail');DELETE FROM plproxy.conf WHERE cluster_name='farsail';INSERT INTO plproxy.conf (cluster_name, host, port, dbname, username) VALUES('farsail','ubuntu','5432','db_1','yewenb'),('farsail','ubuntu','5432','db_2','yewenb');$ farsail_mgr setup | psql proxy
تثبيت ملحق plproxy_rehash
تحتاج أيضًا إلى تثبيت SQL الموسعة في قاعدة بيانات الوكيل وقاعدة بيانات العقدة:
$ farsail_mgr install --proxy `pg_config --sharedir`/contrib/plproxy_rehash_proxy.sql$ farsail_mgr install `pg_config --sharedir`/contrib/plproxy_rehash.sql
يجب أيضًا تثبيت ملحق التجزئة الثقيل وتكوينه في قاعدة بيانات العقدة. يتضمن التكوين الذي يتطلبه دليلًا مشتركًا لملفات الجرافات المؤقتة وطريقة لتحميل البيانات. يمكن لطريقة تحميل البيانات الحالية اختيار نسخ أو pg_bulkload. يمكنك استخدام rehash_table.setup لإنشاء تكوين الكتلة تلقائيًا:
$ farsail_mgr rehash_table.setup -dir $FARSAILDIR/rehash -loadby pg_bulkload -output rehash_setup.sql\c cluster.farsail.proxyINSERT INTO plproxy.cluster_config (name, setting) VALUES('share_directory', '/home/yewenb/temp/farsail/conf/rehash');\c cluster.farsail.nodes.0INSERT INTO plproxy.cluster_config (name, setting) VALUES('db_node', 1),('nof_nodes', 2),('load_method', 'pg_bulkload');\c cluster.farsail.nodes.1INSERT INTO plproxy.cluster_config (name, setting) VALUES('db_node', 2),('nof_nodes', 2),('load_method', 'pg_bulkload');
لا يتم تقديم التعليمات \ c في بيان sql الذي تم إنشاؤه مباشرة إلى بيان psql ، ولكن يتم التعرف عليه بواسطة تثبيت farsail_mgr ويستخدم للتشغيل في قاعدة البيانات المقابلة باستخدام DBI. لذلك تحتاج إلى استخدام تثبيت farsail_mgr للتثبيت.
$ farsail_mgr install rehash_setup.sql
عند هذه النقطة ، ينتهي إعداد PBS وقاعدة بيانات farsail ، دعونا نجري تحليلًا لسجل apache.
Trouble shoot
لا يمكن الاتصال بقاعدة البيانات
إذا قمت بإنشاء قاعدة بيانات ، فسيُطلب منك:
createb: تعذر الاتصال بقاعدة بيانات postgres: تعذر الاتصال بالخادم: تم رفض الاتصال هل الخادم قيد التشغيل على المضيف "ubuntu" وقبول اتصالات TCP / IP على المنفذ 5432؟
تحتاج إلى تغيير postgresql.conf و pg_hba.conf لجعل قاعدة البيانات تستمع إلى عنوان IP للعميل وتسمح للعميل بالوصول. أبسط تعديل هو تغيير listen_addresses في postgresql.conf إلى "*" وإضافة سطر إلى pg_hba.conf:
host all all 1.0.0.0/0 trust
ملاحظة: ستسمح هذه التعديلات لأي جهاز بالوصول إلى خادم pg.
مثال تحليل سجل اباتشي
يمكن الحصول على بيانات سجل الاستخدام التجريبي من http://farsail.googlecode.com/files/exampleWebLog.bz2.
يمكن الحصول على الوحدة النمطية LogParser المستخدمة في تحليل السجل من دليل العرض التوضيحي الخاص بالكود المصدري Farsail.
تصميم قاعدة البيانات
بنية جدول قاعدة بيانات السجل كالتالي:
CREATE TABLE log_daily ( thedate date, ip text, log_time timestamptz, url text, method text, status int, referer text, user_agent text);
سنقوم بتجزئة الدلو بواسطة ip. نستخدم حاليًا قاعدتي بيانات ، ومن أجل توسيع قاعدة البيانات في المستقبل ، قمنا بتعيين العدد الفعلي للجرافات على 8.
استخدم التاريخ لفصل الجداول ، وسيتم تخزين السجل اليومي في جدول منفصل. بيان إنشاء جدول جديد كما يلي:
CREATE TABLE log_daily_20081225 ( check (thedate = '20081225')) INHERITS (log_daily);
تصميم ملف التكوين
تحتاج أولاً إلى تصميم ملف التكوين.
log.datadir = ../datalog.tempdir = ../tmplog.buckets = 8
في جميع التكوينات ، لمنع التعارضات ، نضيف بادئة السجل. يمكن تحديث ملف السجل يوميًا ، ومن المقرر تعيين ملف date.log $ في دليل بيانات $ FARSAILDIR /../ يوميًا. يتم استخدام tempdir لتحديد دليل كتابة ملف الجرافة. يتم استخدام الجرافات لتحديد عدد الجرافات.
اكتب التكوين أعلاه إلى ملف log.conf واحفظه في دليل $ FARSAILDIR / app. أضف خطًا إلى ملف farsail.conf:
include = app/*.conf
وبهذه الطريقة ، سيتم قراءة جميع الملفات في دليل التطبيق مع اللاحقة conf في التكوين.
تصميم سطر الأوامر
نظرًا لأن سجل ETL يتم تنفيذه يوميًا ، فلا بد من معلمة تاريخ واحدة على الأقل. لذلك تحتاج إلى كتابة إجراء مثل هذا:
log: module: Etl::ApacheLog daily: args: date: { type: date, default: yesterday }
حفظ ما سبق إلى ملف $ FARSAILDIR / app / log.act. سيقوم البرنامج بتحميل هذا الملف تلقائيا.
كتابة قانون العمل
وأخيرا نكتب كود etl لدينا.
package Etl::ApacheLog;use strict; use warnings;use Carp;use LogParser;use Path::Class;use Farsail::Util qw/parse_date/;use Pg::Hashtext qw/hashtext/;my $farsail;sub init { my $pkg = shift; $farsail = shift; $farsail->load_modules("Farsail::Bulkload");}sub ACTION_daily { my $config = $farsail->config; my $args = $farsail->args; my $date = parse_date( $args->date ) || confess "Argument date need!\n"; $date = $date->ymd(''); my $buckets = $config->get('log.buckets'); my $logfile = $config->get_expand_file( 'log.datadir', "$date.log" ); my $dir = dir( $config->get_expand_file( 'log.tempdir', $date ) ); my $prefix = "log_"; if ( !-d $dir ) { $dir->mkpath or die "can't make directory $dir: $!"; } my @fh = map { file( $dir, $prefix . "$_.dat" )->openw } 0 .. ($buckets-1); my $p = LogParser->new($logfile->openr); while ( my $ent = $p->next ) { my $date = substr( $ent->{time}, 0, 11 ); print { $fh[ hashtext( $ent->{ip} ) % $buckets ] } join( "\x01", $date, map { !defined( $ent->{$_} ) || $ent->{$_} eq '-' ? '' : $ent->{$_} } qw/ip time url method status referer ua/ ), "\n"; } my $sql = <<SQL; DROP TABLE IF EXISTS \$table; CREATE TABLE \$table ( CHECK (thedate = '$date') ) INHERITS (log_daily);SQL Farsail::Bulkload->bulkload( dir => $dir, prefix => $prefix, suffix => 'dat', cluster => 'farsail', format => 'ctrla', table => "log_daily_date", create_sql => $sql, ); Farsail::PBS::Job->new({command => 'sleep 1'})->submit(); check_done($config->get('bulkload.done_file'));}sub check_done { my $file = shift; print "Wait done $file\n"; for ( 1..100 ) { if ( !-e $file ) { print "Sleep $_\n"; sleep 30; } else { return 1; } } confess "The done file '$file' is not generate\n";}1;
جولة
يمكنك استخدام farsail_do لتشغيل الإجراءات المحددة:
$ farsail_do log.daily --date 20081224
تحقق من أن البيانات مستوردة بالفعل في قاعدة البيانات:
$ psql proxy -c "SELECT * from dquery('select current_database(), count(*) from log_daily') as(db name, cnt int8)" db | cnt ------+-------- db_1 | 111256 db_2 | 138744
توصية ذكية
Post a Comment