środa, marca 18, 2009

CruiseControl

Narzędzie do ciągłej integracji: pobiera projekt z SVN-a, kompiluje, zapuszcza testy JUnit, buduje jar-y.



Jak naprościej zacząć? Ściągnąć binarną dystrybucję, w katalogu projects wycheckoutować swój projekt z SVN-a i stworzyć plik build.xml (przykładowa zawartość poniżej):

<project name="wppm3" default="all">
<path id="classpath">
<fileset dir="lib">
<include name="util/junit.jar"/>
<include name="jdom/jdom.jar"/>
<include name="jdom/xstream.jar"/>
<include name="jdom/commons-jxpath-1.3.jar"/>
<include name="weblogic/weblogic.jar"/>
<include name="weblogic/wl-extra.jar"/>
<include name="weblogic/wlclient.jar"/>
<include name="weblogic/wls-api.jar"/>
<include name="weblogic/wljmsclient.jar"/>
<include name="weblogic/javax.servlet_1.0.0.0_2-5.jar"/>
<include name="xerces/xerces.jar"/>
<include name="oracle/xmlparserv2.jar"/>
<include name="oracle/xdb.jar"/>
<include name="oracle/ojdbc14.jar"/>
<include name="oracle/orai18n.jar"/>
<include name="castor/castor-1.0.3.jar"/>
<include name="castor/castor-1.0.3-xml.jar"/>
<include name="Microsoft SQL Server 2005 JDBC Driver/sqljdbc_1.0/enu/sqljdbc.jar" />
</fileset>
</path>

<target name="all" depends="clean, compile, sleep, test, jar"/>

<target name="clean">
<delete dir="target" quiet="true" />
</target>

<target name="compile">
<exec executable="svn">
<arg line="up"/>
</exec>

<mkdir dir="target/classes"/>
<javac srcdir="src" destdir="target/classes">
<classpath refid="classpath"/>
</javac>
</target>

<target name="sleep">
<echo message="Sleeping for a while so you can see the build in the new dashboard" />
<sleep seconds="10" />
</target>

<target name="test" depends="compile">
<mkdir dir="target/test-results"/>
<junit haltonfailure="no" printsummary="on">
<classpath>
<pathelement location="target/classes"/>
<pathelement location="target/test-classes"/>
<pathelement location="lib/junit.jar"/>
<pathelement location="lib/util/junit.jar"/>
<pathelement location="lib/jdom/jdom.jar"/>
<pathelement location="lib/jdom/xstream.jar"/>
<pathelement location="lib/jdom/commons-jxpath-1.3.jar"/>
<pathelement location="lib/weblogic/weblogic.jar"/>
<pathelement location="lib/weblogic/wl-extra.jar"/>
<pathelement location="lib/weblogic/wlclient.jar"/>
<pathelement location="lib/weblogic/wls-api.jar"/>
<pathelement location="lib/weblogic/wljmsclient.jar"/>
<pathelement location="lib/weblogic/javax.servlet_1.0.0.0_2-5.jar"/>
<pathelement location="lib/oracle/xmlparserv2.jar"/>
<pathelement location="lib/oracle/xdb.jar"/>
<pathelement location="lib/oracle/ojdbc14.jar"/>
<pathelement location="lib/oracle/orai18n.jar"/>
<pathelement location="lib/castor/castor-1.0.3.jar"/>
<pathelement location="lib/castor/castor-1.0.3-xml.jar"/>
<pathelement location="lib/Microsoft SQL Server 2005 JDBC Driver/sqljdbc_1.0/enu/sqljdbc.jar" />
</classpath>
<formatter type="brief" usefile="false"/>
<formatter type="xml" />
<batchtest todir="target/test-results" >
<fileset dir="target/classes" includes="com/nordea/junit/**/*Test*.class"/>
</batchtest>
</junit>
</target>

<target name="jar" depends="compile">
<jar jarfile="target/wppm3.jar" basedir="target/classes"/>
</target>
</project>

Jeszcze trzeba w konfiguracji narzędzia obok projektu demonstracyjnego dodać ten nasz (a tamten skasować).

wtorek, marca 17, 2009

Jak sprawdzić czy nasz kod działa wewnątrz WebLogic-a

weblogic.kernel.Kernel.isServer() &&
weblogic.kernel.Kernel.isInitialized()

poniedziałek, marca 16, 2009

EUPL

Organizacja Open Source Initiative uznała Licencję publiczną Unii Europejskiej v1.1 za licencję open source. Licencja jest dostępna i ważna w języku polskim. Założenia są podobne do GPLv2, mowa jest o udostępnieniu repozytorium kodu źródłowego w czasie dystrybucji programu (Utworu), zakazie zmiany treści licencji podczas redystrybucji oprogramowania, wygaśnięciu licencji przy naruszeniu jej warunków. Ciekawostką jest możliwość łączenia kodu objętego licencją EUPL z kodem licencjonowanym na warunkach tzw. Licencji Zgodnej (m.in. GPLv2, Eclipse Public Licence 1.o), kiedy to postanowienia Licencji Zgodnej są nadrzędne wobec EUPL dla całości źródeł. EUPL zakłada udostępnienie wszystkich praw dot. własności intelektualnej dla celów korzystania z oprogramowania, jednocześnie zakłada, że kod ma postać 'utworu niedokończonego' i może zawierać błędy, w tym niecelowe naruszenie czyjejś własności intelektualnej. Licencja EUPL może być ograniczania przez prawa państw Unii Europejskiej bez naruszenia licencji jako całości.

czwartek, marca 12, 2009

MS Office 2007 pod Linuksem







Wine 1.1.9 - kawał dobrej roboty.
Z Outlookiem, PowerPointem, Accessem i Visio jest jeszcze problem.

czwartek, lutego 19, 2009

Proste balansowanie WebMethods

<VirtualHost _default_:5555>
ServerName wmproxy:5555
ErrorLog /var/log/apache2/error_log_wm
TransferLog /var/log/apache2/access_log_wm

##################
ProxyPass /invoke balancer://WmInvokeCluster5555 stickysession=ssnid
<Proxy balancer://WmInvokeCluster5555>
BalancerMember http://192.168.1.208:5555/invoke route=instance0 loadfactor=50
BalancerMember http://192.168.1.219:5555/invoke route=instance1 loadfactor=50
</Proxy>

<Location /invoke >
Order Deny,Allow
Deny from all
Allow from all
</Location>
##################

##################
ProxyPass /ws balancer://WmWsCluster5555 stickysession=ssnid
<Proxy balancer://WmWsCluster5555>
BalancerMember http://192.168.1.208:5555/ws route=instance0 loadfactor=50
BalancerMember http://192.168.1.219:5555/ws route=instance1 loadfactor=50
</Proxy>

<Location /ws >
Order Deny,Allow
Deny from all
Allow from all
</Location>
##################

<Location /balancer-manager5555>
Order Deny,Allow
Deny from all
Allow from 192.168.2.0/255.255.255.0
SetHandler balancer-manager
</Location>

</VirtualHost>



Cały koncept w oparciu o zmodyfikowany Apache 2.2.10 mod_proxy.

środa, lutego 18, 2009

Jakimi fajnymi furami jeżdżą studenci EiTI




Alfa MiTo. Doktorów na takie coś nie stać, a profesorowie wolą bardziej klasyczne Toyoty Avensis.

niedziela, lutego 15, 2009

Windows 7 preferuje dyski SSD

Na obrazku ocena laptopa Acer Aspire 4530 - tylko 3,0 za HDD.

środa, lutego 11, 2009

Linux podpięty do AD

$ cat /etc/openldap/ldap.conf
TLS_REQCERT allow
host 192.168.1.1
base dc=example,dc=com

$ cat /etc/ldap.conf
host 192.168.1.1
uri ldap://ntpdc.example.com
port 389
ssl no
base dc=example,dc=com
scope sub

binddn LDAP@example.com
bindpw haslohaslo

nss_base_passwd dc=example,dc=com?sub
nss_base_shadow dc=example,dc=com?sub
nss_base_group dc=example,dc=com?sub&(objectCategory=group)
nss_map_objectclass posixAccount user
nss_map_objectclass shadowAccount user
nss_map_objectclass posixGroup user
nss_map_attribute gecos name
nss_map_attribute homeDirectory unixHomeDirectory
nss_map_attribute uniqueMember member

pam_password ad
nss_map_attribute userPassword authPassword

$ cat /etc/krb5.conf
[libdefaults]
default_realm = EXAMPLE.COM
clockskew = 300

[realms]
EXAMPLE.COM = {
kdc = ntpdc.example.com
admin_server = ntpdc.example.com
default_domain = example.com
}

[logging]
kdc = FILE:/var/log/krb5/krb5kdc.log
admin_server = FILE:/var/log/krb5/kadmind.log
default = FILE:/var/log/krb5/krb5libs.log

[domain_realm]
.example.com = EXAMPLE.COM

[appdefaults]
pam = {
debug = false
ticket_lifetime = 1d
renew_lifetime = 1d
forwardable = true
proxiable = false
minimum_uid = 1
clockskew = 300
external = sshd
use_shmem = sshd
}

$ cat /etc/samba/smb.conf
[global]
workgroup = EXAMPLE
realm = EXAMPLE.COM
preferred master = no
security = ads
encrypt passwords = true
log file = /var/log/samba/%m.log
log level = 3
dos charset = CP1250
unix charset = UTF8
display charset = UTF8
idmap gid = 10000-20000
idmap uid = 10000-20000
template homedir = /home/%D/%U
template shell = /bin/bash
winbind enum users = Yes
winbind enum groups = Yes
winbind use default domain = Yes
winbind nested groups = Yes
winbind refresh tickets = yes
winbind separator = +
passdb backend = tdbsam
idmap backend = ad
winbind nss info = rfc2307

oplocks = yes
max xmit = 65535
dead time = 15
getwd cache = yes
large readwrite = no
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
load printers = no

$ cat /etc/nsswitch.conf
passwd: files winbind ldap
shadow: files windind ldap
group: files winbind ldap

$ nano /etc/pam.d/ [tab]
{auth,account,password} sufficient pam_winbind.so use_first_pass

$ net groupmap add rid=1000 ntgroup="Development" unixgroup=dev type=d
# lepiej zamiast tego nadac grupie nt atrybut gidNumber taki sam jak gid uniksowy

$ nano /etc/samba/smb.conf
[project]
comment = 'Remote project'
path = /home/dev/project
browseable = yes
read only = no
map inherit acl = no
inherit acls = no
inherit permissions = no
create mask = 664
directory mask = 775
valid users = @"EXAMPLE+Development"
admin users = @"EXAMPLE+Domain Admins"
force user = dev
force group = dev

$ cat /etc/apache2/vhosts.d/svn.conf

DAV svn
SVNPath /var/lib/svn/svnrepo
AuthBasicProvider ldap
AuthType Basic
AuthName "Subversion svnrepo repository"

AuthzSVNAccessFile /var/lib/svn/svn-acl

AuthLDAPURL ldap://192.168.1.1:389/OU=IT,dc=example,dc=com?samAccountName?sub?(objectCategory=person)
AuthLDAPBindDN "example\LDAP"
AuthLDAPBindPassword "haslohaslo"

Require valid-user

poniedziałek, lutego 09, 2009

Użytkownicy i grupy, SVG w mediawiki



Będąc leniwym można użyć Eclipse'a JEE z driverem z jdbc.postgresql.org.
Wygląda na to, że wybranie na tabelce opcji edit nie działa jeśli istnieje
autonumerowana kolumna.

Jeśli nie działa generacja PNG z SVG (w którym robimy use-case'y) to należy zajrzeć do /srv/www/htdocs/mediawiki/bin/ulimit*/sh i zrobić coś z -v $2.
Dodatkowo dla rzeczy wyeksportowanych z Visio są problemy z mime-type,
workaround to '$wgMimeDetectorCommand = 'file --brief --mime'.

czwartek, lutego 05, 2009

WebObjects - easy WebMethods development in Java

WebObjects framework provides easy way for WebMethods development using Java.
For every flow, java or adapter service existing in a IS package the framework generates Java beans covering pipeline's input and output, and packs generated classes into one jar file. So for every document used as a pipeline's input or output you get a Java class. You don't have to do complex multi-step flow mappings, you can do your job easily in Java. You operate on real Java objects, not on pipeline's keys and values. From Java you can call other services using Java objects.
All development can be done in Eclipse after importing jar file generated by WebObjects from IS package.



On the picture above you can see a Java service called abcd. It uses JDBC adapter service called invokeFb. WebObjects framework generated invokeFb_In and invokeFb_Out classes for that service. Service invokeFb exists in test.sql namespace, its input and output classes (invokeFb_In, invokeFb_Out) were generated in pkg.test.sql Java package. DataProxy.invokeService() method called with invokeFb_In object, knows exactly which service to invoke and what object should be returned.
You can generate jars for WmPublic and WmRoot and call native WM services from Java.

Under heavy load with huge documents processed by flow services it is possible to hang Integration Server - pipeline's objects have circular references and they are hard to process by Garbage Collector. One work around is to mark services as stateless, change session lifetime from 10 to 2 minutes, tune GC (concurrent mark sweep), the other is to change JVM to JRockit (but then your installation is not supported by Software AG).
With WebObjects you just call DataProxy.clear(pipeline) between getting Java input object from pipeline and putting output.
How to get and put objects? If invokeFb were a Java Service written with WebObjects you would do:

invokeFb_In in = DataProxy.unbox(pipeline, invokeFb_In.class);
invokeFb_Out out = new invokeFb_Out();
// do something with out
DataProxy.box(out);

niedziela, lutego 01, 2009

Windows Server 2008 R2 - szary i niebieski wracają





Widać wpływy Mac OS-a X w pasku zadań. Wersja systemu 6.1 powoduje, że Oracle 11g nie chce się instalować (ale wystarczy uruchomić Program compatibility na pliku Oracle Universal Installer i idzie).

wtorek, stycznia 13, 2009

Windows 7 - nic specjalnego

Zainstalowałem dzisiaj Windows 7 beta (w VMWarze). W zasadzie to taka Vista SP2, dla bajeru zmienili trochę wygląd, coś tam jest bardziej user friendly, coś tam może szybciej chodzi i tyle. Wcale nie czułem, że system chodzi tak szybko jak Windows XP.
Mam na laptopie KDE 4.1.87 i dużo bardziej mi się podoba niż Windows 7.

piątek, grudnia 19, 2008

Benchmarki VM c.d

Tym razem hostem jest laptop z procesorem AMD Athlon X2 QL-60, 2GB pamięci RAM, grafiką GeForce 9100M G a testowym systemem jest 64-bitowy Windows Server 2008 EE. Dla działającego realnie Windowsa zostały zmierzone wyniki PCMark05 w trybie oszczędzania energii (obniżenie do połowy taktowania CPU, spowolnienie grafiki itd.) i w trybie wydajności -obydwa testy wykonywane na jednym rdzeniu CPU (żeby można było porównywać wyniki maszyn wirtualnych, które raczej mają jeden VCPU) i tryb wydajności na obu rdzeniach.
V100 to VMWare Server 2.0 + 1 VCPU + W2K8 768MB RAM, V200 to ta sama konfiguracja ale na dwóch wirtualnych procesorach. VB to VirtualBox 2.1.
VM2 i VB2 to VMWare i VirtualBox z W2K8 na 1 CPU i zmniejszoną pamięcią do 512MB. Oprogramowanie do wirtualizacji było w 64-bitowych wersjach, zainstalowane na OpenSUSE 11.1 64-bit, jedna partycja / na XFS-ie.









Jakie z tego wnioski?
  • Cache'owanie systemu plików w Linuksie i Windowsie 2008 (wow) jest ładnie zrobione i jak jedno zgra się z drugim to mamy system wirtualny szybszy od rzeczywistego
  • VirtualBox gdyby miał dobre narzędzia do zarządzania mógłby być produktem serwerowym
  • Nie ma sensu wybierać Xen-a, bo wirtualizacja z patchowaniem strumienia instrukcji jest szybsza
  • Zamiast VMotion można zrobić wirtualizację usług, jeśli mamy do czynienia z WebService'ami to wystarczy Apache 2.2.10 i mod_proxy_balancer
  • Powinienem na Oracle'u 11 wystawić jako WebService'y jakieś operacje w schemacie hr i wtedy można by mieć jakieś sensowne życiowe testy



Jeśli wyeliminujemy wyniki grafiki 2D to można przyjąć, że mamy 20% spadku wydajności. Ale... 20% per CPU. Jeśli na kilkurdzeniowym serwerze mamy uruchomioną maszynę z jednym wirtualnym procesorem to... patrz przypadek 'AVG Performance 2CPU'. Powiedzmy, że ten spadek wydajności rekompensujemy sobie stawiając równolegle pare maszyn, usługa w nich uruchomiona moze być balansowana - czy teraz też będziemy mieć 20% per CPU? Pewnie więcej...

czwartek, grudnia 18, 2008

Prawie się zakochałem...



  • Ideał dziewczyny ma tytuł magistra inżyniera z informatyki na EiTI PW

  • Napisała, i to pod Windowsem, i to bardzo ładnym kodem (wszystkie formatowanie perfect, czyta się jak książkę Clancy'ego), kawałek softu sprawdzający, czy działamy węwnątrz sprzętowo akcelerowanej maszyny wirtualnej. Robi się to tak, przy wyłączonych przerwaniach: (1) czyszczenie TLB (czyli przeładowanie rejestru CR3), (2) sprawdzenie za pomocą źródła czasu TSC i operacji dostępu do pamięci, ile cykli robi procesor przy istniejącym mapowaniu adresu wirtualnego na fizyczny, (3) sprawdzenie tego samego ze wsadzeniem po środku instrukcji vmexit. Jeśli jesteśmy wewnątrz maszyny wirtualnej instrukcja wyjścia z niej spowoduje wywołanie handlera po stronie nadzorcy maszyny wirtualnej i zanim wrócimy minie sporo cykli procka. Czyli czas(3) - czas(2) będzie większy od zera.

  • Napisała rootkita, który obchodzi w/w detektor...

Gdyby jeszcze nie paliła... (nie wiem czy pali). Fajnie się ubierała na niektórych konferencjach - na czarno-biało, tak w stylu profesjonalnej hackerki.

Wracając do badań Pani Rutkowskiej, można napisać takiego rootkita, który wsadzi działający system operacyjny do maszyny wirtualnej (w locie, odpalamy rootkita i ziuum, a nawet szybciej) i z wnętrza maszyny wirtualnej nie będzie można tego wykryć. Matrix. System działa w wirtualnym świecie i nic o tym nie wie. I nie przyjdzie do niego żadna Trinity od firmy Symantec i nie powie, że to co widzi to ułuda.

Swoją drogą, czy ścigający się AMD i Intel, tworząc sprzętową wirtualizację pomyśleli o bezpieczeństwie, czy nie mieli czasu? Nie twierdzę, że HVM jest złe, bo sam na 32-bitowym Gentoo miałem 64-bitowego Solarisa, ale przy takim komercyjnym wyścigu dużych graczy o kasę*, może ktoś zapomniał zastanowić się nad bezpieczeństwem.

*technologię wirtualizacji ma EMC/VMware, Citrix, Oracle, Novell, RedHat, Sun i Microsoft (z tym, że to coś Microsoftu w wersji beta umie tylko "coś tam, coś tam" i po instalacji na moim laptopie z Athlonem X2 QL-60 blokuje sprzętową wirtualizację totalnie tak, że narzędzie od AMD mówi, że jej nie ma).

wtorek, grudnia 09, 2008

hpscan.tgz

Dzisiaj musiałem zeskanować siebie z dowodu. Mam w domu skaner HP 3530c, który jest obsługiwany przez kookę (której nie ma na Fedorze 10, ale jest na OpenSUSE 11.1) - niestety zeskanowane obrazki mają dziwnie podbitą korekcję gamma (są za jasne). Wygooglałem hpscan.tgz, rozpakowałem, pod GCC 4.3 się nie chciało skompilować, ale całe szczęscie w pakiecie była binarka. Binarka wymaga dostępu do pliku urządzenia - najprościej odpalić ją jako root. Udało się: 'Please wait, warming up...', brrrrm, brrrm, iyyyyy, 'head is returning' i mam obrazek w formacie PPM. Z tym hpscan.tgz to było tak, że dawno temu kiedy byłem piękny i młody miałem sobie kupić na imieniny skaner HP. Ale kupiłem takiej jednej Ance pierścionek i odłożyłem zakup skanera na następne imieniny. Niestety w następnym roku pojawiła się nowa seria skanerów HP niekompatybilna z Linuksem, a starych już nie było. Kupując HP 3530c byłem święcie przekonany, że skaner będzie działał mi z Linuksem (w 2001 roku chyba używałem już Gentoo). A okazało się, że no way i w wakacje męczyłem się nad programem w C, którym mógłbym coś wydobyć ze skanera. Sterowanie ruchem głowicy trochę jest do kitu (odgłosy są straszne), ale generalnie program działa. Dzisiaj Anka jest prawdpodobnie gruba i brzydka (a na pewno nosi okulary), a skaner HP 3530c nadal wygląda (po starciu kurzu) jak nowy.

środa, grudnia 03, 2008

Prosty skrypt do przyrostowego monitorowania logów

#!/bin/sh
function check_log() {
logfile="$1"
pattern="$2"
if [[ -z $pattern ]] ; then
echo "Wzorzec do wyszukiwania nie moze byc pusty"
return 1
fi
if [[ -f $logfile ]] ; then
size=`LC_ALL=C stat ${logfile} | grep Size | cut -d" " -f4 2>/dev/null`
old_size=`cat $logfile.size 2>/dev/null`
diff=`expr $size - $old_size 2>/dev/null`
if [[ -z $diff ]] ; then
diff=$size
fi
if [[ $diff -lt 0 ]] ; then
diff=$size
fi
if [[ $diff -gt 0 ]] ; then
echo "Plik zmodyfikowany, roznica $diff bajtow"
tail -c $diff $logfile | grep -A 20 -B 5 -e "${pattern}" 2>/dev/null 1> $logfile.err
cat $logfile.err
else
echo "Plik bez zmian, rozmiar $size"
fi

echo "$size" > $logfile.size
else
echo "Nie ma takiego pliku $logfile"
fi
}

logfile="/home/weblogic/bea/domains/WebPortal/servers/WebPortalServer1/logs/WebPortalServer1.out"
pattern="Exception"
check_log $logfile $pattern

wtorek, grudnia 02, 2008

Intel Core i7 i TLB

Translacja adresów wirtualnych na fizyczne jest w x86 tak zrobiona, że mamy drzewiastą strukturę tablic stron (jedna tabelka na najwyższym poziomie z elementami wskazującymi na tabelkę na drugim poziomie, a elementy w tabelce drugiego poziomu wskazują na tabelkę trzeciego poziomu, ..., w tablicy czwartego poziomu mamy odowołania do fizycznych ramek pamięci).
Pierwsza cześć adresu wirtualnego (ileś tam bitów) stanowi indeks dla pierwszej tabelki, druga część dla drugiej tabelki itd. Trick jest taki, że element w tabelce pierwszego poziomu może wskazywać na swoją tabelkę, i taka referencja do własnej tabelki może zajść 3 razy pod rząd.
Procesor bierze adres wirtualny, przechodzi po drzewku i na końcu uzyskuje adres fizyczny.
Takie chodzenie jest kosztowne dlatego pary [adres wirtualny, adres fizyczny] są cache'owane w buforze TLB. W Core i7 TLB ma cache dwupoziomowy: level 1 - 64 pozycje, level 2 - 512 pozycji, takiego dużego TLB procesory jeszcze nie miały - powinno to dać dużego kopa (i daje, co widać w benchmarkach).
Manual Intela mówi, że jeżeli ta sama fizyczna ramka pamięci jest używana w N mapowaniach, to wyczyszczenie cache'u TLB dla tej ramki powinno być wykonane N razy, czyli N razy musi być wykonana instrukcja INVLPG. Jeśli za mało razy zawołamy INVLPG, to procesor pamięta złe mapowanie i coś złego się stanie, bo użyje złego adresu pamięci fizycznej, w najlepszym przypadku BSOD. Manual mówi też, że jeśli są robione tricki z wskazywaniem elementu tablicy na swoją własną tablicę M razy, to INVLPG musi być zawołane M-1 razy. A wszyscy myśleli, że INVLPG działa raz a dobrze...

Balancer, failover i wdrożenia zero-downtime

#################################
# INSTANCJA 443
#################################
<VirtualHost _default_:443>
ServerRoot "/etc/httpd"
ProxyPass /svc balancer://svcCluster443 stickysession=JSESSIONID

<Proxy balancer://svcCluster443>
BalancerMember http://10.70.10.2:8080/svc route=instance0 loadfactor=99
BalancerMember http://10.70.10.3:8080/svc route=instance1 loadfactor=1
BalancerMember http://localhost/maintenance route=maintenance loadfactor=1 status=+H
</Proxy>

<Location /balancer-manager>
Order Deny,Allow
Deny from all
Allow from 192.168.2.33
SetHandler balancer-manager
</Location>

</VirtualHost>


Apache 2.2.10 ma bardzo fajnego wbudowanego balancera. Załóżmy, że serwowana przez nas usługa ma być uaktualniona. Zestawiamy całe środowisko na instance1 i za pomocą balance managera zmieniamy wagi instance0 i instance1 - bieżące operacje zostaną dokończone na aktywnej instancji 0, a nowe będą wykonane przez instancję 1. Całkowicie transparentnie dla użytkownika końcowego. Żeby przełączanie działało tak jak chcemy musimy tylko wyedytować plik źródłowy httpd-2.2.10/modules/proxy/mod_proxy.c i zmienić ograniczenia na lbfactor (np. na zakres 1-1000000). Apache'a konfigurujemy następująco:

./configure --prefix=/usr/local/apache_balancer --enable-static-support --enable-mods-shared=all --enable-deflate=shared --enable-logio=shared --enable-mime-magic=shared --enable-expires=shared --enable-headers=shared --enable-usertrack=shared --enable-proxy=shared --enable-proxy-connect=shared --enable-proxy-ftp=shared --enable-proxy-http=shared --enable-proxy-balancer=shared --enable-ssl=shared --enable-http --enable-rewrite=shared

Gdyby usługa na instance0 zespuła się możemy zaserwować statyczną odpowiedź o awarii serwisu, służy do tego route=maintenance ze statusem ustawionym na +H (hot standby).
Hot standby nie działa na RedHacie 5.1/5.2 i SLES 10 SP2, które mają starszego Apache'a.

czwartek, listopada 06, 2008

Obrazek prawie jak z IT Crowd


(C)2008 Andrzej S.

środa, listopada 05, 2008

WJMX i WebLogic 10

-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=8888
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false

service:jmx:rmi:///jndi/rmi://192.168.1.100:8888/jmxrmi