Project

General

Profile

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