Ostatnio dostałem w swoje łapki dwie macierze EMC VNX5300 (block). Na jakość dokumentacji jaką wyprodukowało spuszczę zasłonę milczenia (przynajmniej na razie). Skupię się za to na podłączeniu systemów do tego cuda. Mam kilka serwerów do podpięcia. Wszystkie mają po cztery interfejsy sieciowe Broadcom BCM5709S wyposażone w offloader iSCSI. Walcząc z jednym z wielu problemów dot. tej macierzy i jej uruchomienia przetestowałem działanie z i bez niego na centosie i potwierdziłem fakt, że działa i że działanie przynosi pozytywne efekty dając około 17% wydajności więcej, Na tym etapie mógłbym zakończyć opowiadanie, ale klient używa Debiana. iSCSI w trybie programowym działa poprawnie. Przy przełączeniu w tryb hardware (moduł bnx2i i cnic) nawet nie nawiązuje połączenia. Po dłuższej analizie i poszukiwaniach udało się ustalić, że Offloader do pracy potrzebuje modułu iscsiuio z którym przez netlink ma się komunikować iscsid. Niestety Debian nie dostarcza iscsiuio. Okazuje się, ze inne dystrybucje podchodzą do problemu tak, że biorą iscsiuio, open-iscsi i pakują to do kupy jako w paczce iscsi-initiator-tools. Dobra... ale skąd pobrać źródła iscsiuio? Aplikacja jest dewelopowana przez Broadcom i "dostępna w wybranych dystrubcjach". Nigdzie nie można od tak pobrać sobie kodu źródłowego mimo iż jest on wydawany na GPL, ale w zasadzie można użyć wersji, którą mają owe inne dystrybucje. Wiedząc co mniej-więcej trzeba zrobić założyłem bug report. Oto on http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=699240. Nastąpiła wymiana maili z maintainerem open-iscsi w debianie którym jest Ritesh Raj Sarraf. Podobnie jak ja nie mógł znaleźć źródeł. Zgodził się, że dobrze by było gdyby ten moduł znalazł się w Debianie jednak sam nie ma dość motywacji by to zrobić bo nie ma takiego sprzętu. Zaproponowałem, że pomogę on zaproponował, że może warto stworzyć oddzielny pakiet i może mnie zarekomendować jako nowego maintainera w społeczności. Nawet mi się to spodobało, zważywszy że i tak planuję tam dołączyć jako maintainer LMS'a. Zapytałem czy powinienem utworzyć repozytorium na github czy może Debian ma jakieś miejsce na takie wypadki, on zaproponował bym uderzył w tej sprawie do Broadcoma. Nie sądziłem, że się uda. W sumie to bardzo duża firma. Nie mniej jednak spróbować warto. Wysłałem maila dwoma kanałami. Jednym oficjalnym, w którym zapytano mnie jakiej dystrybucji używam, bo oni wspierają SLES i RHEL i zamknęli zgłoszenie nie czekając na odpowiedź. Drugim kanałem były adresy mailowe twórców iscsiuio wygrzebane z changelogów. Odpowiedział mi Eddie Wai podając na tacy linka do aktualnego źródła iscsiuio, który jak się okazało jest patchem na open-iscsi adresatem była też grupa google projektu open-iscsi. https://groups.google.com/forum/?fromgroups=#!topic/open-iscsi/pdK7Xw45i-k. W ten oto sposób twórca open-iscsi Mike Christie zgodził się dołączyć iscsiuio do open-iscsi. Co ostatecznie udostępni offloader broadcoma wszystkim, a nie tylko wybranym dystrybucjom.
Przede mną jeszcze tylko testy, które już wstępnie uzgodniłem z klientem. Na Debian Wheezy jest już stanowczo za późno, ale kolejne wersje pewnie już będą miały wsparcie. Tym ruchem może świata nie uratowałem. Lubię natomiast myśleć, że byłem inicjatorem malutkiego kroczka popychającego cywilizację na przód.
Zapiski admina
Admin - człek który siedzi przed czarnym ekranem i co jakiś czas się do niego uśmiecha.
niedziela, 17 lutego 2013
czwartek, 10 stycznia 2013
Przeładowanie - co mówi top?
Czasem jakaś maszyna dostanie zadyszki - to zrozumiałe. Rzadko jednak da się osiągnąć taki efekt.
Najbardziej podstawowym parametrem w najbardziej ogólny sposób opisującym stan obciążenia systemu jest "load average" czyli średnie obciążenie. Są to trzy liczby i w wielkim skrócie oznaczają one średnią ilość procesów/zadań/wątków oczekujących w kolejne na czas procesora. Kolejne wartości liczbowe pochodzą z różnych okresów dla jakich liczona była średnia. Pierwszy to minuta (mamy problem tu i teraz). Druga to pięć minut (już trochę trwa), ostatnia to minut piętnaście (co gorsza problem narasta). Wg doświadczenia i zdrowego rozsądku problemy wydajnościowe najczęściej zaczynają się w momencie gdy wartości tych liczb przekraczają liczbę rdzeni dostępnych w systemie. Potrafi dojść wtedy do lawinowego wzrostu obciążenia, co jak byk widać w tym wypadku. Load powyżej stu to rzadkość. W tym wypadku mamy prawie dwa tysiące.
Jako bonus dodam, że Rzadko zdarza się też by było więcej niż kilkadziesiąt zadań. Tutaj mamy ponad dwa tysiące. Jednym słowem bombowy dzień.
W trzecim wierszu topa znajdują się statystki procesorów. Często spotykam się z sytuacją w której okazuje się, że nawet relatywnie doświadczony admin ma problemy z rozszyfrowaniem do czego są te wszystkie procenty, a wiedza często ogranicza się do trzech podstawowych, choć czasem i tutaj są braki. Są to po kolei:
us - użytkownik
sy - system
ni - zadania z ujemnym priorytetem
id - bezczynność
wa - operacje I/O
hi - przerwanie sprzętowe
si - przerwanie programowe
st - "ukradzione"
Innym razem może opiszę dokładnie o co chodzi w każdej z tych kategorii.
Najbardziej podstawowym parametrem w najbardziej ogólny sposób opisującym stan obciążenia systemu jest "load average" czyli średnie obciążenie. Są to trzy liczby i w wielkim skrócie oznaczają one średnią ilość procesów/zadań/wątków oczekujących w kolejne na czas procesora. Kolejne wartości liczbowe pochodzą z różnych okresów dla jakich liczona była średnia. Pierwszy to minuta (mamy problem tu i teraz). Druga to pięć minut (już trochę trwa), ostatnia to minut piętnaście (co gorsza problem narasta). Wg doświadczenia i zdrowego rozsądku problemy wydajnościowe najczęściej zaczynają się w momencie gdy wartości tych liczb przekraczają liczbę rdzeni dostępnych w systemie. Potrafi dojść wtedy do lawinowego wzrostu obciążenia, co jak byk widać w tym wypadku. Load powyżej stu to rzadkość. W tym wypadku mamy prawie dwa tysiące.
Jako bonus dodam, że Rzadko zdarza się też by było więcej niż kilkadziesiąt zadań. Tutaj mamy ponad dwa tysiące. Jednym słowem bombowy dzień.
W trzecim wierszu topa znajdują się statystki procesorów. Często spotykam się z sytuacją w której okazuje się, że nawet relatywnie doświadczony admin ma problemy z rozszyfrowaniem do czego są te wszystkie procenty, a wiedza często ogranicza się do trzech podstawowych, choć czasem i tutaj są braki. Są to po kolei:
us - użytkownik
sy - system
ni - zadania z ujemnym priorytetem
id - bezczynność
wa - operacje I/O
hi - przerwanie sprzętowe
si - przerwanie programowe
st - "ukradzione"
Innym razem może opiszę dokładnie o co chodzi w każdej z tych kategorii.
wtorek, 8 stycznia 2013
Ciekawość po przypadkowej aktywacji WIMP
Po przypadkowej aktywacji WIMP przez telewizję N zacząłem zadawać sobie pytanie ile kosztuje taka usługa kupiona u źródła. Przecież skoro N sprzedając usługę za 19.90 na tym zarabia, to może da się kupić z pominięciem pośrednika. Była to tylko czysta ciekawość. Nie zamierzałem nic kupować.
Wszedłem na stronę http://www.wimp.pl i widzę, że zarejestrować się nie można, bo cała usługa to beta test. Ciekawe, N sprzedaje betę jako pełnoprawną usługę. Można jednak zostawić swój adres e-mail by wysłali informację jak zwolnią się konta. Uczyniłem to i po jakimś czasie przyszedł mail następującej treści:
Nie wiem czy mogę podać adres email pod którym można zakładać konta na beta testy ponieważ można tam wpisać dowolny adres email i numer telefonu. Czyli każdy może założyć konto, a ja nie chcę nadużywać gościnności.
Wszedłem na stronę http://www.wimp.pl i widzę, że zarejestrować się nie można, bo cała usługa to beta test. Ciekawe, N sprzedaje betę jako pełnoprawną usługę. Można jednak zostawić swój adres e-mail by wysłali informację jak zwolnią się konta. Uczyniłem to i po jakimś czasie przyszedł mail następującej treści:
No to poszedłem się zarejestrować. Należy podać adres email i numer telefonu. Na numer telefonu przychodzi SMS z hasłem i chwilę później można korzystać. Co ciekawe można potem w dekoderze platformy N podać login i hasło i również tam używać swojego konta. Sprawdzałem w iPhone również działa bez zarzutu. Super.
Drogi muzyczny przyjacielu,
Wszystkiego dobrego w nowym roku i dziękujemy za Twoją cierpliwość!
Z przyjemnością informujemy, że została udostępniona limitowana liczba kont WiMP Beta. W ciągu minuty możesz uzyskać dostęp do 18 milionów utworów...
Pamiętaj również, aby polubić nasz fanpage na Facebooku i dostawać najnowsze muzyczne rekomendacje, playlisty i inne muzyczne wiadomości.
Dziękujemy za dołączenie do WiMP. Ciesz się muzyką!
Pozdrawiamy,Ekipa WiMP
Nie wiem czy mogę podać adres email pod którym można zakładać konta na beta testy ponieważ można tam wpisać dowolny adres email i numer telefonu. Czyli każdy może założyć konto, a ja nie chcę nadużywać gościnności.
poniedziałek, 7 stycznia 2013
Infolinia N ujawnia PESEL?
Dziwne standardy bezpieczeństwa są w platformie cyfrowej N. Zaczęło się od tego, że dzieciaki bawiły się pilotem. W pewnym momencie żona mnie woła do pokoju i mówi, że dzieci coś zamówiły. Nie chciało mi się w to wierzyć, bo transakcje jak mi się wydawało są zabezpieczone pinem/loginem/hasłem lub w dowolny inny sposób który uniemożliwia przypadkowy zakup tego czy owego, ale patrzę, a tam komunikat "zamówienie zostało złożone". Naciskam przycisk "back", okazuje się, że jestem na ekranie aktywacyjnym usługi 'wimp'. Sama usługa to nic innego jak muzyka w chmurze. Za 9.90zł można posłuchać sobie na dekoderze i komputerze, natomiast za 19.90 dodatkowo na urządzeniach mobilnych. U mnie napis 'Aktywne' znajdował się przy obu tych usługach co jak mniemam miało znaczyć, że aktywna jest ta droższa. Obok jest pole na wpisane loginu i hasła. Myślę że może jakaś pomyłka, jak by było aktywne to powinni pewnie też coś wysłać mailem. Sprawdzam pocztę i widzę, że jest mail od N, a w nim treść "Dziękujemy za aktywację usługi nMusic WIMP" - albo mam dzieci takie sprytne, albo procedura aktywacji jest taka głupia. Trzeba to odkręcić. Zadzwoniłem na infolinię. Tam IVR pyta czy jestem klientem, no jestem więc naciskam jeden, pyta mnie o numer umowy. Dalej automat pyta mnie czy chcę rozmawiać o przedłużeniu umowy, o problemach technicznych czy o innych bzdetach. Opcji "dzieci aktywowały Ci usługę i chcesz zrezygnować" brak. Nie klikam niczego, automat upewnia się że został dobrze zrozumiany więc jeszcze raz recytuje menu. Znowu brak pożądanej przeze mnie opcji. Chwila Ciszy... no i jest. Automat mówi, że połączy mnie z konsultantem - super - jak by nie można było od razu w menu dać takiej opcji. Pani na infolinii tłumaczę jaka zaszła sytuacja i proszę o informację jak to możemy odkręcić. Pani sprawdza i informuje mnie, że usługa faktycznie jest aktywna, ale twierdzi że może ja dla mnie dezaktywować - to ja poproszę. I tu zaczyna się największe kuriozum. Pani stwierdza, że musi zweryfikować czy ja to ja. Zamiast zapytać mnie o to jak się nazywam Pani Pyta "Czy Pan Rafał Ramocki?". Tutaj nic dziwnego chyba. Pomyślałem, że może być tak, że do jednej umowy jest przypisanych kilka osób, więc musi wiedzieć o czyj adres/PESEL/cokolwiek zapytać. Potwierdziłem więc. A Pani pyta: "Czy Pana numer PESEL to ......" i recytuje. Eh, no i co ja mam powiedzieć? Że nie? Chyba nie tak to powinno wyglądać. Ponieważ Pani recytowała numer z szybkością AK47 i nie byłem pewien odparłem, że "chyba tak". Pani niewzruszona dezaktywowała usługę, za co jestem jej wdzięczny. Niesmak dot. szastania moim numerem PESEL na prawo i lewo jakoś pozostał.
Tak, wiem że wiedziała z kim rozmawia, bo wcześniej podałem numer umowy, podałem hasło cyfrowe i dzwoniłem z numeru telefonu który znają, ale jakoś tak niesmak pozostał.
Tak, wiem że wiedziała z kim rozmawia, bo wcześniej podałem numer umowy, podałem hasło cyfrowe i dzwoniłem z numeru telefonu który znają, ale jakoś tak niesmak pozostał.
piątek, 28 grudnia 2012
Paczkowanie LMS'a - część pierwsza
LMS od dłuższego czasu nie ma żadnego stabilnego wydania. Postanowiłem wypełnić tą lukę poprzz zapakowanie kodu w paczkę i dołączenie ją do repozytorium Debiana. Plan jest długofalowy, bo targetem jest kolejna po wheezy dystrybucja. Zobaczymy czy wystarczy mi czasu i chęci.
Przygotowanie źródeł do budowania:
1. Przygotowanie źródeł
wget https://github.com/lmsgit/lms/archive/master.zip
unzip master.zip
mv lms-master lms-1.11~git20121227
tar -cvf lms.tar.gz ./lms-1.11~git20121227
dh_make -f ../lms.tar.gz --copyright gpl2
2. Wstępnie przygotowany plik debian/control.
Source: lms
Section: admin
Priority: optional
Maintainer: Rafal Ramocki <rafal@ramocki.pl>
Build-Depends: cdbs, debhelper (>= 7.0.50~)
Standards-Version: 3.8.4
Homepage: http://lms.org.pl/
#Vcs-Git: git://git.debian.org/collab-maint/lms.git
#Vcs-Browser: http://git.debian.org/?p=collab-maint/lms.git;a=summary
Package: lms
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}
Description: Lan Management System siutable for ISP
"LMS" (LAN Management System) is the integrated system of networks management
designed for various size internet providers (ISP).
.
That software writed in PHP, Perl and C, works with variuos database systems.
It consists a friendly web user interface (frontend) and programs installed
on servers (backend). The main features of LMS are:
.
- internet access administration (e.g. traffic control and stats)
- finances with invoicing (automatic billing),
- database of customers and network devices (network map),
- serial mailing and administration messages to customers,
- hosting and accounts management,
- bug tracking system (helpdesk),
- any services management,
- time organizer (timetable),
- customer web panel.
3. Przygotowany plik debian/copyright. Tutaj pomocny okazał się listy debian-devel z 2006 roku. https://lists.debian.org/debian-devel-announce/2006/03/msg00023.html.
4. Podczas przygotowywania pliku debian/rules odpowiedzialnego za budowanie pojawiła się seria problemów. Chcę budować demona - co wydaje się być oczywiste. Niestety okazuje się, że plik configure używany do wyprodukowania plików Makefile jest napisany z palca i nie akceptuje domyślnych parametrów automake. W pierwszej kolejności chciałem pominąć te parametry. Użyłem do tego dyrektywy DEB_CONFIGURE_NORMAL_ARGS, która nadpisuje wszystkie argumenty z autotools.mk. Mniej - więcej przeszło. Ale chcę też budować wersję dla postgresa i dla mysql. Tutaj niestety ściana. Skrypt konfiguracyjny zakłada, że będzie wykonywany podczas gdy użytkownik będzie w katalogu bieżącym. Niestety podczas budowy z różnymi parametrami narzędzie debianowe wykonują go nie będąc tam. Jedyne sensowne rozwiązanie jakie przychodzi mi do głowy, to poprawa pliku configure tak, by był zgodny z ogólnie przyjętymi standardami. Ponieważ mam dostęp do repozytorium LMS, to może - po konsultacjach z chiłkiem i alecem zaktualizuje globalnie, tak by w przyszłości nie było problemu. Na chwilę obecną szybka konwersja do automake (bez parametrów opcjonalnych) wygląda tak jak poniżej. Poleciałem zgodnie z http://www.galassi.org/mark/mydocs/autoconf_tutorial_2.html:
for i in `find ./ -name Makefile ` ; do echo `dirname $i` ; cd `dirname $i` ; cp Makefile Makefile.orig ; mv Makefile Makefile.in ; autoheader ; cd ~/lms_packaging/work1_temp1/lms-1.11~git20121227/daemon ; done
autoscan
mv configure.scan configure.in
autoheader
autoconf
To wyprodukowało mi potrzebną konfigurację. ./configure pokazało, że jeszcze brakuje pliku install-sh. Na chwilę obecną nie wiem do czego on ma służyć. Najmniejszą linią oporu będzie:
touch install-sh
Lecąc dalej musiałem przygotować odpowiednią wersję configure.in. Sprawa okazała się czasochłonna. O 01:46 w nocy uzyskałem działającą i implementującą wszystkie funkcje ze starego systemu konfiguracji wersję plików configure.in oraz Makefile.in. Ku potomności przedstawiam.
configure.in:
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
AC_PREREQ([2.67])
AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])
AC_CONFIG_SRCDIR([lmsd.c])
AC_CONFIG_HEADERS([config.h])
# Checks for programs.
AC_PROG_YACC
AC_PROG_CXX
AC_PROG_CC
AC_PROG_LEX
AC_PROG_INSTALL
# Checks for libraries.
# FIXME: Replace `main' with a function in `-ldl':
AC_CHECK_LIB([dl], [main])
# FIXME: Replace `main' with a function in `-lfl':
AC_CHECK_LIB([fl], [main])
# FIXME: Replace `main' with a function in `-lgadu':
AC_CHECK_LIB([gadu], [main])
# FIXME: Replace `main' with a function in `-liberty':
AC_CHECK_LIB([iberty], [main])
# FIXME: Replace `main' with a function in `-lm':
AC_CHECK_LIB([m], [main])
AC_CHECK_LIB([pq], [PQconnectdb],
[have_pgsql=yes
LIBS="-lpq $LIBS"])
# FIXME: Replace `main' with a function in `-lrxspencer':
AC_CHECK_LIB([rxspencer], [main])
#AC_CHECK_LIB([mysqlclient], [mysql_fetch_row], )
AC_CHECK_LIB([mysqlclient], [mysql_fetch_row],
[have_mysql=yes
LIBS="-lmysqlclient $LIBS"])
# Checks for header files.
AC_CHECK_HEADERS([arpa/inet.h fcntl.h limits.h locale.h netinet/in.h stdlib.h string.h sys/ioctl.h sys/socket.h sys/time.h syslog.h unistd.h])
# Checks for typedefs, structures, and compiler characteristics.
AC_HEADER_STDBOOL
AC_TYPE_SIZE_T
AC_TYPE_SSIZE_T
# Checks for library functions.
AC_FUNC_FORK
AC_FUNC_MALLOC
AC_FUNC_MKTIME
AC_FUNC_REALLOC
AC_CHECK_FUNCS([getdelim gethostname gettimeofday inet_ntoa memset pow regcomp select setlocale socket strchr strdup strerror strstr strtol strtoul])
AC_CONFIG_FILES([Makefile
modules/Makefile
modules/cutoff/Makefile
modules/dhcp/Makefile
modules/dns/Makefile
modules/ethers/Makefile
modules/ewx-pt/Makefile
modules/ewx-stm-channels/Makefile
modules/ewx-stm/Makefile
modules/ggnotify/Makefile
modules/hostfile/Makefile
modules/notify/Makefile
modules/oident/Makefile
modules/parser/Makefile
modules/parser/extensions/Makefile
modules/parser/lib/Makefile
modules/payments/Makefile
modules/pinger/Makefile
modules/system/Makefile
modules/tc-new/Makefile
modules/tc/Makefile
modules/traffic/Makefile])
AC_ARG_ENABLE([debug0],
AS_HELP_STRING([--enable-debug0], [SQL query logging (disabled)]))
AC_ARG_ENABLE([debug1],
AS_HELP_STRING([--enable-debug1], [events logging (disabled)]))
AC_ARG_WITH([mysql],
AS_HELP_STRING([--with-mysql], [enables use of MySQL database (enabled)]))
AC_ARG_WITH([pgsql],
AS_HELP_STRING([--with-pgsql], [enables use of PostgreSQL database (disabled)]))
AC_ARG_WITH(lmslibdir,
[AC_HELP_STRING([--with-lmslibdir=DIR], [sets location of target LMS modules (PREFIX/lms/lib)])],
lmslibdir="$withval",
lmslibdir=$ac_default_prefix/lib/lms
)
AC_SUBST(lmslibdir)
# User can't choos to drivers during one build
AS_IF([test "x$with_mysql" = "xyes" && test "x$with_pgsql" = "xyes"],
[AC_MSG_ERROR([can't build with mysql and pgsql simultanously])])
# User didn't choos SQL library? Whe chosse mysql if it's available.
# And if not we choose pgsql if its available.
AS_IF([test "x$with_mysql" = "x" && test "x$with_pgsql" = "x"],
[AS_IF([test "x$have_mysql" = "xyes"], [with_mysql="yes"])],
[AS_IF([test "x$have_pgsql" = "xyes"], [with_pgsql="yes"])])
# User didn't choose SQL library or we don't have any available
AS_IF([test "x$with_mysql" = "xno" && test "x$with_pgsql" = "xno"],
[AC_MSG_ERROR([You need postgres or mysql client library])])
# User choose PGSQL library, but it isn't available
AS_IF([test "x$have_pgsql" != "xyes" && test "x$with_pgsql" = "xyes"],
[AC_MSG_ERROR([pgsql requested but library is missing])])
# User choose MySQL library, but it isn't available
AS_IF([test "x$have_mysql" != "xyes" && test "x$with_mysql" = "xyes"],
[AC_MSG_ERROR([mysql requested but library is missing])])
AS_IF([test "x$with_pgsql" = "xyes"],
[AC_SUBST([DBDRIVER], [pgsql])
CFLAGS="$CFLAGS -DUSE_PGSQL"])
AS_IF([test "x$with_mysql" = "xyes"],
[AC_SUBST([DBDRIVER], [mysql])
CFLAGS="$CFLAGS -DUSE_MYSQL"])
AC_OUTPUT
Makefile.in (sam początek, który musiałem dostosować)
INSTALLDIR = @INSTALL@
MODULESDIR = @lmslibdir@
LIBS = @LIBS@
LDFLAGS = @LDFLAGS@
CFLAGS = $(CPPFLAGS) @CFLAGS@ -DLMS_LIB_DIR=\"@lmslibdir@\"
DBDRIVER = @DBDRIVER@
OUT = lms
OS = $OS
środa, 26 grudnia 2012
XEN API - Słabość OpenSource prowadzonego przez komercyjne organizacje
Ostatnio stanąłem przed problemem projektowym, którego idealnym rozwiązaniem zdawała się zdalna, automatyczna instalacja zwirtualizowanego systemu, użycie go do określonego zadania i usunięcie. Wiedziałem o istnieniu XENAPI, ale nigdy nie był mi potrzebny. Tutaj xenowe api byłoby jak znalazł. Projektując takie API pewnie pierwszą z zaimplementowanych rzeczy (oprócz sprawdzania statusu) byłaby zdalna instalacja. Okazuje się, że samo API jest ułomne, OpenSourceowe API jest wykastrowane, a wersja dostępna w Debianie nie działa z powodu braku biblioteki.
Ułomność API polega na tym, że zdalna instalacja jest możliwa tylko z predefiniowanego template'u będącego w istocie zatrzymaną maszyną wirtualną z ustawioną odpowiednią flagą. Ustawienie tej flagi przez API nie jest możliwe. API w wersji OpenSource jest wykastrowane ponieważ próba użycia metody CLONE używanej do instalacji nowego systemu poprzez sklonowanie szablonu kończy się komunikatem błędu "NOTIMPLEMETED". Jest tak w wersji 4.0 jak i w 4.1. Ustawienie flagi is_a_template w debianie graniczy z cudem. Wymagane jest do tego użycie "xm new", któego użycie nie jest możliwe z powodu brakującej biblioteki.
By to wszystko ustalić potrzebowałem jednego dnia. Jedyny plus jest taki, że dowiedziałem się że można definiować maszyny wirtualne inaczej niż pliki konfiguracyjne w /etc/xen. Oprócz owych plików jest jeszcze wewnętrzny store. Użycie alternatywnej metody pozwala na wyświetlenie w xm list również maszyn zatrzymanych.
Ułomność API polega na tym, że zdalna instalacja jest możliwa tylko z predefiniowanego template'u będącego w istocie zatrzymaną maszyną wirtualną z ustawioną odpowiednią flagą. Ustawienie tej flagi przez API nie jest możliwe. API w wersji OpenSource jest wykastrowane ponieważ próba użycia metody CLONE używanej do instalacji nowego systemu poprzez sklonowanie szablonu kończy się komunikatem błędu "NOTIMPLEMETED". Jest tak w wersji 4.0 jak i w 4.1. Ustawienie flagi is_a_template w debianie graniczy z cudem. Wymagane jest do tego użycie "xm new", któego użycie nie jest możliwe z powodu brakującej biblioteki.
By to wszystko ustalić potrzebowałem jednego dnia. Jedyny plus jest taki, że dowiedziałem się że można definiować maszyny wirtualne inaczej niż pliki konfiguracyjne w /etc/xen. Oprócz owych plików jest jeszcze wewnętrzny store. Użycie alternatywnej metody pozwala na wyświetlenie w xm list również maszyn zatrzymanych.
poniedziałek, 24 grudnia 2012
Przydatne zapytania - lista do ubicia
Czasem pojawia się konieczność ubicia najdłużej wykonujących się zapytań na bazie. Z reguły jest to sytuacja awaryjna i nie ma zbyt wiele czasu, najczęściej chodzi o to by jak najszybciej odzyskać stabilność aplikacji. W takiej sytuacji przydaje się określenie które procesy wykonują najbardziej kosztowne zapytania - te są w kolejności do ubicia. Można to osiągnąć takim oto zapytaniem:
postgres=# SELECT procpid,query_start FROM pg_stat_activity WHERE current_query != '<IDLE>' ORDER BY query_start;
procpid | query_start
---------+-------------------------------
18422 | 2012-12-24 11:12:15.877034+01
18434 | 2012-12-24 11:40:36.074373+01
18394 | 2012-12-24 11:40:36.648773+01
18261 |
(4 rows)
W tym wypadku podejrzane jest pierwsze z zapytań. Wygląda na bardzo kosztowne obliczeniowo więc jest kandydatem do ubicia. Jeżeli jest na to czas, to wskazana jest weryfikacja jakie to zapytanie zostało wywołane - może być wskazana jego optymalizacja.
postgres=# SELECT current_query FROM pg_stat_activity WHERE procpid = 18422;
Mając tą listę i wiedząc co to za zapytanie można zostaje już tyko ubicie tego konkretnego zapytania.
postgres=# SELECT pg_cancel_backend(18422);
W wyniku wywołania funkcji pg_cancel_backend() zostanie przerwane tylko zapytanie. Połączenie aplikacji nie zostanie zerwane. To, co aplikacja zrobi już bardzo mocno zależy od tego w czym jest napisana i jak bardzo przewidujących mamy deweloperów.
procpid | query_start
---------+-------------------------------
18422 | 2012-12-24 11:12:15.877034+01
18434 | 2012-12-24 11:40:36.074373+01
18394 | 2012-12-24 11:40:36.648773+01
18261 |
(4 rows)
W tym wypadku podejrzane jest pierwsze z zapytań. Wygląda na bardzo kosztowne obliczeniowo więc jest kandydatem do ubicia. Jeżeli jest na to czas, to wskazana jest weryfikacja jakie to zapytanie zostało wywołane - może być wskazana jego optymalizacja.
postgres=# SELECT current_query FROM pg_stat_activity WHERE procpid = 18422;
Mając tą listę i wiedząc co to za zapytanie można zostaje już tyko ubicie tego konkretnego zapytania.
postgres=# SELECT pg_cancel_backend(18422);
W wyniku wywołania funkcji pg_cancel_backend() zostanie przerwane tylko zapytanie. Połączenie aplikacji nie zostanie zerwane. To, co aplikacja zrobi już bardzo mocno zależy od tego w czym jest napisana i jak bardzo przewidujących mamy deweloperów.
Subskrybuj:
Posty (Atom)