dijous, 26 de novembre de 2015

Access.log: The Ten IPs accessing more our web server

Una de les tasques amb la que ens podem trobar és tenir que revisar quines son les 10 IPs que més accedeixen la nostra pàgina web. Aquesta informació és útil a l'hora de prendre decisions en l'administració del servidor web. Aquesta tasca es relativament senzilla si tenim access al log access.log d'Apache.
...
192.168.122.4 - - [22/Dec/2015:11:35:42 -0500] "GET / HTTP/1.1" 200 \
              115 "-" "ELinks/0.12pre6 (textmode; Linux; 140x37-2)"
192.168.122.1 - - [22/Dec/2015:11:36:33 -0500] "GET / HTTP/1.1" 200 \
              115 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:38.0)\
              Gecko/20100101 Firefox/38.0"
192.168.122.1 - - [22/Dec/2015:11:38:00 -0500] "GET / HTTP/1.1" 200 \
              115 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:38.0) \
              Gecko/20100101 Firefox/38.0"
...
Per obtenir les 10 IPs que més han accedit a la nostra plana web i el contador del nombre de voltes que l'han visitada utilitzarem la següent comanda:
cat access.log  |  grep \"\ 200 | cut -d" " -f1 | sort -n | uniq \
                -c | head -n10
Una volta tenim aquesta comanda es relativament fàcil extraure els navegadors que més visiten el nostre lloc web, el codis HTTP que ha donat el servidor web, ..., realitzant modificacions sencilles sobre la mateixa.

Enllaços:

http://i-heart-geek.blogspot.co.uk/2011/10/top-command-line-tips-apache-access-log.html

divendres, 13 de novembre de 2015

MariaDB 10 Master-Slave Replication on Debian 8.2

Introducció:

En aquest tutorial configurarem dues màquines amb MariaDB amb una configuració master-slave i comprobarem que funcionen correctament.

Configuracio Bàsica de les màquines:

Les màquines que utilitzarem per a realitzar la proba tindran els segûents hostnames:
  • king (master)
  • plebeian (slave)
Les màquines tenen instal·lada una distribució Debian 8.2 amb tots els paquets actualitzats.
cat /etc/debian_version
8.2
Les dues màquines estan a la mateixa subxarxa i són capaces de realitzar-se ping entre elles. La configuració de la xarxa es la següent:
#KING
# The primary network interface
allow-hotplug eth0
iface eth0 inet static
 address 192.168.122.2
 netmask 255.255.255.0
 gateway 192.168.122.1
#PLEBEIAN
# The primary network interface
allow-hotplug eth0
iface eth0 inet static
 address 192.168.122.3
 netmask 255.255.255.0
 gateway 192.168.122.1 
No hi ha cap firewall activitat.

MariaDB

En ambdues màquines instal·lem la base de dades mariadb.
apt-get install mariadb-server
I executem la següent comanda per securitzar la instal·lació tb a les dues màquines:
# /usr/bin/mysql_secure_installation
Enter current password for root (enter for none):
...
Set root password? [Y/n] Y
...
Remove anonymous users? [Y/n] Y
...
Disallow root login remotely? [Y/n] Y
...
Remove test database and access to it? [Y/n] Y
...
Reload privilege tables now? [Y/n] Y
A partir d'ací tota la configuració i passos del tutorial es realitzaran sobre la maquina king. El primer que farem sera connectar-nos a la base de dades i crear una base de dades i afegir dades.
mysql -u root -p 

MariaDB [(none)]> create database test;
MariaDB [(none)]> use test;
MariaDB [(none)]> create table  \
                  t1 (id INT not null, name CHAR(15), age INT);
MariaDB [(none)]> insert into t1 values (1, "Joan", 25);
MariaDB [(none)]> insert into t1 values (2, "Laia", 28);
Creem un usuari anomenat "slave_user" li proporcionem un password i li concedim per permis de replicació per a que puga replicar la base de dades al host plebeian.
mysql -u root -p 
MariaDB [(none)]> grant replication slave \
                  on *.* to slave_user@´%´ identified by 'qwerty'; 
Editem el fitxer de configuració de MariaDB, /etc/mysql/my.cnf amb els següents valors:
bind-address            = 192.168.122.2
server-id               = 1
log_bin                 = /var/log/mysql/mysql-bin.log
binlog-ignore-db        = “mysql”
Una volta editar el fitxer reiniciem el daemon.
systemctl restart mysql
Preparem la base de dades per a realitzar un backup. La següent comanda estableix un read lock global, per tant ja no es poden llançar insert/update/delete/replace/alter, també tanca totes les taules obertes, aquestes no es tancara fins que els processos en acció no finalitzen la seua execució. Per últim bloqueja els commits.
MariaDB [(none)]> flush tables with read lock;
Query OK, 0 rows affected (0.00 sec)
Una volta tenim la base de dades preparada per realitzar el backup, prenem noda de la posició dels binary logs i del fitxer que s'esta modificiant actualment.
MariaDB [(none)]> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000004 |     1212 |              | mysql            |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
Realitzem el backup.
mysqldump -u root -p --databases test > kingdump.sql
Eliminem el lock que hem realitzat abans a la base de dades per a que tot puga seguir funcionant normalment.
MariaDB [(none)]> unlock tables;
Query OK, 0 rows affected (0.00 sec)
Transferim el backup de la base de dades a l'altra màquina.
scp kingdump.sql user@192.168.122.3:~/ 
Apartir d'ací tots els passos de configuració es realitzaran sobre la màquina plebeian, el servidor que actua com a slave.

Editem el fitxer de configuració de MariaDB, /etc/mysql/my.cnf amb els següents valors:
bind-address            = 192.168.122.3
server-id               = 2
log_bin                 = /var/log/mysql/mysql-bin.log
Reinicim MariaDB.
systemctl restart mysql
Restaurem el backup que hem fet de king en plebeian.
mysql -u root -p < kingdump.sql 
Parem el slave, si esta funcionant.
MariaDB [(none)]> stop slave;
Configurem la replicació del slave amb la IP i port de la base de dades del master, l'usuari i el password que hem configurat anteriorment i el fitxer dels binary logs i la posició apartir de la qual s'ha de recuperar la informació. Per últim configurem el temps passat el qual ha de tractar de tornar a connectar.
MariaDB [(none)]> change master to master_host='192.168.122.2', \
                  master_user='slave_user', master_password='qwerty', \
                  master_port=3306, master_log_file='mysql-bin.000004', \
                  master_log_pos=1212, master_connect_retry=60;
Una volta configurats els parametres ja podem arrancar el slave per a que comence la replicació.
MariaDB [(none)]> start slave;
Com podem veure l'slave ja està funcionant.
MariaDB [(none)]> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.122.2
                  Master_User: slave_user
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000009
          Read_Master_Log_Pos: 326
               Relay_Log_File: mysqld-relay-bin.000011
                Relay_Log_Pos: 613
        Relay_Master_Log_File: mysql-bin.000009
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 326
              Relay_Log_Space: 1198
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 1
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
                   Using_Gtid: No
                  Gtid_IO_Pos: 
1 row in set (0.00 sec)

Probes finals

Per últim per comprobar que la replicació realment funciona ja només ens queda fer unes últimes probes. Ens connectarem a la maquina king (master) i afegim dues files mes a la base de dades que hem creat.
MariaDB [(none)]> use test
MariaDB [(none)]> insert into t1 values (1, "Pere", 36);
MariaDB [(none)]> insert into t1 values (2, "Julia", 21);
Quan ens connectem a la màquina plebeian (slave) i realitzem una consulta podem veure que la informació s'ha replicat i que ja esta disponible també al slave.
MariaDB [(none)]> use test
MariaDB [test]> select * from t1;
+----+-------+------+
| id | name  | age  |
+----+-------+------+
|  1 | Joan  |   25 |
|  2 | Laia  |   28 |
|  1 | Pere  |   36 |
|  2 | Julia |   21 |
+----+-------+------+
4 rows in set (0.00 sec)

Enllaços:

: http://www.rackspace.com/knowledge_center/article/mysql-replication-masterslave
https://mariadb.com/kb/en/mariadb/setting-up-replication/
http://fromdual.com/how_to_setup_mysql_master-slave_replication
http://www.tecmint.com/how-to-setup-mysql-master-slave-replication-in-rhel-centos-fedora/
http://www.unixmen.com/setup-mariadb-master-slave-replication-in-centos-7/
http://mysqlha.blogspot.co.uk/2008/07/what-exactly-does-flush-tables-with.html

dimecres, 11 de novembre de 2015

Solarized Colors on Centos 7 Terminal

Fa uns mesos que hem vaig instal·lar un Centos 7.1 i un dels defectes mes grans que trobava era l'horroros esquema de colors del que disposa. Si la comparem a una distribució Ubuntu, aquesta te una paleta de colors mes agradable a la vista per treballar. Després de realitzar una cerca per Internet he trobat el projecte Solarized que permet dotar d'una paleta de colors molt agradable a la vista per a diferents ferramentes. Per a instal·lar aquesta paleta de colors en el gnome terminal hem de seguir els següents passos: 1. En primer lloc instal·lem GIT (aquest pas el fem com a usuari root).
yum install git  
2. Creem un directori on guardar el repositori que descarregarem (apartir d'ací tots els passos son amb usuari no privilegiat).
mkdir ~/Projectes/Solarized
cd ~/Projectes/Solarized
3. Descarreguem el repositori.
git clone https://github.com/sigurdga/gnome-terminal-colors-solarized.git
4. Executem l'script
cd gnome-terminal-colors-solarized/
./install.sh
5. Contestem totes les preguntes que ens demana l'script i quan tornem a executar un terminal ja tenim una paleta de colors acceptable sobre el Perfil que li hem dit que sobrescriga.

Enllaços:

http://www.if-not-true-then-false.com/2012/solarized-linux/
http://ethanschoonover.com/solarized

dimarts, 10 de novembre de 2015

Alternative Centos/RHEL 7 booting modes

Introducció:

En aquest article revisarem els diferents tipus de modes amb els que podem arrancar el sistema per diagnosticar i sol·lucionar problemes.

Rescue Mode:

El "Rescue Mode" es un entorn sigle-user que permet reparar el sistema quan aquest no es capaç d'arrancar. Quan el sistema arranca en "Rescue Mode" es monten tots els sistemes de fitxers locals i alguns sistemes basics pero no s'activen els serveis de xarxa ni es deixa accedir a mes usuaris al sistema. Es equivalent al "single user mode" i requereix el password de root.

Per a arrancar un sistema en "rescue mode" amb Redhat/CentOS 7, fem clic a la "e" quan apareix el menu de grub2 i afegim el següent.
systemd.unit=rescue.target
Hem d'afegir l'anterior parametre al final de la linia linux16 en sistemes basats en bios x86-64 o al final de la linia linuxefi en els sistemes UEFI. Per arrancar una volta modificada la linia cliquem Ctrl+X o si estem utilitzant un MacBook F10. En els MacBooks el grub mapeja les convinacions Ctrl+X amb F10 i Ctrl+C com a F2 (Per accedir al prompt del Grub).

Emergency Mode:

El "Emergency Mode" proporciona el mínim entorn possible i permet reparar el sistema en ocasions on no es pot accedir al "rescue mode". En aquest mode, el sistema només monta el sistema de fitxers de root en mode lectura i no intenta montar ningun altre sistema de fitxers local. Les interficies de de xarxa no son activades i només s'arranquen el serveis essencials. L'"emergency mode" requereix el password de root.

Per a arrancar un sistema en "emergency mode" amb Redhat/CentOS 7, fem clic a la "e" quan apareix el menu de grub2 i afegim el següent:
systemd.unit=emergency.target
Hem d'afegir el següent parametre al final de la linia linux16 en sistemes basats en bios x86-64 o al final de la linia linuxefi en els sistemes UEFI. Per arrancar una volta modificada la linia cliquem Ctrl+X o si estem utilitzant un MacBook F10. En els MacBooks el grub mapeja les convinacions Ctrl+X amb F10 i Ctrl+C com a F2 (Per accedir al prompt del Grub).

Enllaços:

https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/System_Administrators_Guide/sec-Terminal_Menu_Editing_During_Boot.html
http://www.certdepot.net/rhel7-boot-systems-different-targets-manually/