Update server z verze 2.1 na 2.2 + mereni (warden-dev.cesnet.cz)¶
=========================================================== Plan prechodu produkcniho Warden serveru z verze 2.1 na 2.2 =========================================================== Otestovani prechodu na serveru warden-dev.cesnet.cz =========================================================== - na testovacim serveru warden-dev je nutne nejprve pripravit prostredi, na kterem nasledne provedeme otestovani procesu prechodu Pripravna faze na warden-dev: ----------------------------- 1. Nainstalovat starsi verzi serveru 2.1 - warden 2.1 nainstalovan do /opt/warden-server-2.1/warden-server ./install.sh -d /opt/warden-server-2.1/ -k /etc/ssl/private/warden-dev.cesnet.cz.key -c /etc/ssl/certs/warden-dev.cesnet.cz.pem -a /etc/ssl/certs/tcs-ca-bundle.pem - porizena kopie vyvojove databaze warden-server-2.2-aplha3 (warden22bkp) $ mysqldump -u root -p warden > warden22bkp.sql > create database warden22bkp; $ mysql -u root -p warden22bkp < warden22db.sql 2. Na produkcnim serveru poridit dump stavajici produkcni databaze. (5m 37s) $ mysqldump -u root -p warden > warden_21.sql $ scp warden_21.sql plesnik@warden-dev.cesnet.cz 3. Dump produkcni databaze nahrat na warden-dev (1h 11m 3s) > drop database warden; > create database warden; $ mysql -u root -p warden < warden_21.sql 4. Spustit Warden server 2.1 nad produkcni databazi a overit plnou funkcionalitu prijimaciho/odesilajiciho klienta 2.1 - do /etc/apache2/sites-enabled/default-ssl pridano /etc/apache2 Include /opt/warden-server-2.1/warden-server/etc/warden-apache.conf a nastaven warden-server.conf - restartovan apache2 - problem: Incorrect parameter at /usr/local/share/perl/5.10.1/SOAP/Lite.pm line 1993. - na warden-dev je pouzivan SOAP::Lite z /usr/local/share (verze 0.715), kdezto na warden serveru se pouziva z /usr/share (verze 0.712) - verze 0.715 z /usr/local/share odinstalovana pomoci cpanm - zaregistrovani testovaci klienti: - ./registerSender.pl -n warden-dev.cesnet.cz -r plesnik@ics.muni.cz -s tester -d "Test" -i 195.113.161.39/32 - ./registerReceiver.pl -n warden-dev.cesnet.cz -r plesnik@ics.muni.cz -t _any_ -o -i 195.113.161.39/32 - ./registerSender.pl -n warden-dev.cesnet.cz -r plesnik@ics.muni.cz -s tester2 -d Test -i 195.113.161.39/32 Testovaci faze na warden-dev: ----------------------------- 5. Nainstalovat balicek warden-server-2.2 - warden 2.2 nainstalovan do /opt/warden-server-2.2 ./install.sh -d /opt/warden-server-2.2 -k /etc/ssl/private/warden-dev.cesnet.cz.key -c /etc/ssl/certs/warden-dev.cesnet.cz.pem -a /etc/ssl/certs/tcs-ca-bundle.pem -e plesnik@ics.muni.cz 6. Vytvořit nove tabulky pro verzi 2.2 - vytvoreni tabulky client22 create table clients22 like clients; insert into clients22 select * from client; ALTER TABLE clients22 ADD valid varchar(1) DEFAULT 't'; - vytvoreni tabulky events22 SET @saved_cs_client = @@character_set_client; SET character_set_client = utf8; CREATE TABLE `events22` ( `id` int(11) NOT NULL auto_increment, `detected` timestamp NOT NULL default '0000-00-00 00:00:00', `received` timestamp NOT NULL default '0000-00-00 00:00:00', `type` varchar(64) default NULL, `source_type` varchar(64) default NULL, `source` varchar(256) default NULL, `target_proto` varchar(16) default NULL, `target_port` int(2) unsigned default NULL, `attack_scale` int(4) unsigned default NULL, `note` text, `priority` int(1) unsigned default NULL, `timeout` int(2) unsigned default NULL, `valid` varchar(1) default 't', `client_id` int(11) default NULL, PRIMARY KEY (`id`), KEY `idx_events_type_valid` (`type`,`valid`), KEY `idx_events_client_id` (`client_id`), KEY `idx_events_detected` (`detected`) ) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=latin1; SET character_set_client = @saved_cs_client; 7. Vložit fiktivní zprávu do tabulky events 2.2 s ID vyšším, než bude nejvyšší současné. (MySQL bude další ID generovat od nejvyššího, tzn. zůstane místo na původní zprávy.) - zjistit aktualni nejvyssi ID z 'events' a pricist 100: (65472995 + 100) select max(id) from events; insert into events22 (id) values ('65473095'); 8. Upravit novy server 2.2 tak, aby nevracel zprávy čtenářům, ale přijímal je pouze od zapisovatelů. Nepřijdeme tak o žádné zprávy - zapisovatelé stale posílají. Čtenáři také o nic nepřijdou, protože budou mít stále sve platne ID poslední zprávy nezměněné - server jim nic nového nedá, pouze si počkají, než server začne opet dávat (u verze 2.0 tahle úprava byla jednořádkova) - v /opt/warden-server-2.2/lib/Warden.pm zakomentovat radek 436 ("return @events;") 9. Vypnout server 2.1, nahodit upravený 2.2 - nastavit /opt/warden-server-2.2/etc/warden-apache.conf 9.1 Zmenit cesty k Warden serveru - v souboru /etc/apache2/sites-enabled/default-ssl pridat radek: Include /opt/warden-server-2.2/etc/warden-apache.conf a zakomentovat Include /opt/warden-server-2.1/warden-server/etc/warden-apache.conf 9.2 Prejmenovat tabulky (Drobny vypadek cca 5 sekund) - stopnout Apache # /etc/init.d/apache2 stop - prejmenovani tabulek rename table clients to clients21; rename table events to events21; rename table clients22 to clients; rename table events22 to events; - spustit Apache # /etc/init.d/apache2 start 10. Vytvorit zalozni kopii stavajici neupravene tabulky events 2.1 (9m 10.37s) create table events21_bkp like events21; insert into events21_bkp select * from events21; 11. Převést schema tabulky events 2.1 na nový formát ALTER TABLE events21 ADD client_id int(11) DEFAULT NULL; (7m 37.58s) UPDATE events21 e, clients21 c SET e.client_id = c.client_id WHERE e.hostname = c.hostname AND e.service = c.service; (13m 33.99s) ALTER TABLE events21 DROP COLUMN hostname, DROP COLUMN service; (4 m 16.83s) UPDATE events21 SET valid = 'o' WHERE client_id is NULL; (1m 3.57s) ALTER TABLE events21 ADD INDEX idx_events21_type_valid (type,valid), ADD INDEX idx_events21_client_id (client_id), ADD INDEX idx_events21_detected (detected); (12m 1s) 12. Dump tabulky events 2.1 s novym schematem (2m 55s) mysqldump -u root -p --no-create-info --compact warden events21 > warden_events_21_compact.sql 13. Import dumpu tabulky events 2.1 s novym schematem do nove tabulky events 2.2 - zaplní se tím uvolněné místo vytvorene ID fiktivni zpravy (2h 24m) replace 'events21' 'events' -- warden_events_21_compact.sql mysql -u root -p warden < warden_events_21_compact.sql Kontrola prenesenych udalosti: mysql> select count(*) from events21; +----------+ | count(*) | +----------+ | 65105777 | +----------+ 1 row in set (0.00 sec) mysql> select count(*) from events where id < '65473095'; +----------+ | count(*) | +----------+ | 65105777 | +----------+ 1 row in set (14.19 sec) 14. Smazat fiktivní zprávu v tabulce events 2.2 delete from events where id = '65473095'; 15. Upravit server 2.2 na normální odesilaci funkci (server opet zacne odesilat zpravy ctenarum) - v /opt/warden-server-2.2/lib/Warden.pm odkomentovat radek 436 ("return @events;") 16. Restart serveru 2.2 (čtenáři nyní dostanou všechny zprávy od svého posledního ID, cimz o nic nepřijdou, jen je dostanou o nějakou dobu později) # /etc/init.d/apache2 restart 17. Overit plnou funkcionalitu prijimaciho/odesilajiciho klienta 2.1 oproti Warden serveru 2.2 18. Uklidit server a pripravit opet na vyvoj