Catégorie : Non classé

Configuration d’un réplica MYSQL avec MariaDB

Bonjour à tous,

À la suite de l’incendie d’OVH de Mars 2021, j’ai dû réinstaller mon serveur de secours, c’est l’occasion de vous présenter ici la mise en place d’un nœud MARIADB dans un cluster GTID. L’idée est d’avoir une base disponible en permanence, les backups étant fait sur le nœud passif.

Ici mes données MYSQL sont :
les bases dans : /var/lib/mysql/databases/
les logs binaires dans : /var/lib/mysql/logbin/

Anciennement j’utilisais un simple snapshot LVM pour faire la réinstallation d’un nœud mais l’utilisation d’INODB ne fonctionne pas simplement avec ce type de backup à chaud. C’est pourquoi après des recherches je suis tombé sur l’outil de BACKUP : mariabackup.

1. Création du backup sur le nœud actif, ici crx-bdd01 :

Ici je commence par créer le dossier cible qui va contenir les fichiers du backup,
puis je lance celui-ci :

mkdir /var/lib/mysql/backup/

mariabackup --defaults-file=/etc/mysql/my.cnf --target-dir=/var/lib/mysql/backup --user=root --password="mypassword" --backup --parallel=4

2. Restauration/ajout du nœud passif ici crx-bdd02 :

Ici je commence par récupérer les fichiers par SCP, puis je prépare le backup :

mkdir /backup/backup_full_crx-bdd01/

scp -rp root@crx-bdd01:/var/lib/mysql/backup /backup/backup_full_crx-bdd01

mariabackup --prepare --target-dir=/backup/backup_full_crx-bdd01/

Maintenant, je vais effacer les anciennes données MYSQL, puis déplacer les données du backup dans le dossier de bases mysql  ( mon service mysql étant coupé ), contrôler que vous êtes bien sur votre nœud passif avant toute chose et que le service mysql est coupé :

service mysql stop 

rm -fr /var/lib/mysql/logbin/*
rm -fr /var/lib/mysql/databases/*

mv /backup/backup_full_crx-bdd01/* /var/lib/mysql/databases/

chown mysql:mysql -R /var/lib/mysql/databases/

Ensuite je récupère les informations de réplication GTID contenues dans le backup :

cat /var/lib/mysql/databases/xtrabackup_info | grep -i GTID

binlog_pos = filename 'mysql-bin.000041', position '151038936', GTID of the last change '1-1-94949100'

Je peux maintenant démarrer le service mysql, puis activer la réplication GTID :

service mysql start

mysql > 

stop slave; reset slave; reset slave all; reset master;

SET GLOBAL gtid_slave_pos = '1-1-94949100';

CHANGE MASTER TO master_use_gtid=slave_pos;

CHANGE MASTER TO master_host="IP-DU-PRIMAIRE", master_port=3306, master_user="replication_user", master_password="********", master_use_gtid=slave_pos;

start slave;

show slave status \G;

Enfin je peux contrôler que la réplication se fait bien, ici je vais regarder le décalage horaire entre le slave et le master qui doit être le plus proche possible de 0, après plusieurs minutes, j’arrive à zéro, cela signifie que la réplication est maintenant faite en temps réel :


mysql 

show slave status \G;

Seconds_Behind_Master: 0

Et voilà j’ai maintenant un cluster actif passif MARIADB !

 

Source : https://mariadb.com/kb/en/setting-up-a-replication-slave-with-mariabackup/

 

 

HAM – Amélioration de l’audio du client « remote ».

Bonjour à tous,

Dans la continuité de mes tests, j’ai ajouté une carte USB externe sur mon client VOIP (qui tourne sous LINUX), l’idée était d’améliorer la qualité audio vu que ma carte intégré sur le mini pc était de basse qualité. Ici j’utilise une carte son « E-MU 0202 » de chez CREATIVE qui était dans mes cartons (merci au passage à F5JM).

Le gros avantage de ce type de carte est que le réglage micro/haut-parleur se fait avec des potentiomètres sur la carte directement, sans utiliser de logiciel. Ici je vais utiliser le client SEREN pour la VOIP (voir mon guide de pilotage à distance ici : https://bastien.barbe.pw/guide-de-pilotage-de-votre-station-radioamateur-a-distance/ ).

J’en profite au passage pour ne plus utiliser la couche sonore ALSA mais plutôt la couche PULSE AUDIO (qui permet l’utilisation de plusieurs applications LINUX avec la même carte son).

Lancement du client, attention celui se fait PAS en root mais avec votre utilisateur LINUX standard :

  • je déclare ma carte son USB avant de lancer SEREN (ici elle sera utilisée par défaut).
  • ensuite j’ajoute -d pulse à la fin pour indiquer à SEREN d’utiliser PULSE AUDIO plutôt qu’ALSA.
export LC_ALL=C

ADAPTER_SINK_NAME=$( pacmd list-sinks | sed -n 's/^.*name: <\([^>]*\.usb[^>]*\)>$/\1/p' | head -n 1 )

if [[ -z "${ADAPTER_SINK_NAME:-}" ]]
then
ADAPTER_SINK_NAME=$( pactl list sinks | sed -n 's/^.*Name: \(.*\.usb.*\)$/\1/p' | head -n 1 )
fi

echo will plug on $ADAPTER_SINK_NAME

pactl set-default-sink $ADAPTER_SINK_NAME

seren -t 1 -S -n f4eyq-remote -c 10.77.0.25 -d pulse

Notez aussi que le support de cette carte son est inclus avec UBUNTU, donc aucun driver n’est à prévoir.

73 !

Sources:   
Configuration PULSE AUDIO avec une carte USB externe :
https://unix.stackexchange.com/questions/204782/pulseaudio-with-external-sound-adapter-work-around-broken-sound

Update your wordpress blog via CLI.

Recently, i try to update my blog via the web,
and it return « timeout » after few minutes.
So i move this task to CLI, more safer !

First, if you crash your last web setup,
Remove the lock into the php :

wp-admin/includes/class-core-upgrader.php

Simply comment this :

if ( ! $lock ) {
#return new WP_Error( 'locked', $this->strings['locked'] );
}

-> Setup is very easy, you have to install wp command, here i’m doing this into my /opt/ :

cd /opt/
wget -c http://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
ln -s /opt/wp-cli.phar /usr/local/bin/wp

Now i’m using this command :

-> Go to your blog root path and simply to :

root@crx-web01 html # cd /myultrasecurepath/bastien.barbe.pw/
root@crx-web01 html # sudo /usr/local/bin/wp core --allow-root update
Updating to version 5.4.2 (fr_FR)...
Téléchargement de la mise à jour depuis https://downloads.wordpress.org/release/fr_FR/wordpress-5.4.2.zip…
Décompression de la mise à jour...
Success: WordPress updated successfully.

#same for plugins/themes : 

sudo /usr/local/bin/wp plugin update --all --allow-root

sudo /usr/local/bin/wp theme update --all --allow-root

 

Sources:
https://blog.microlinux.fr/wp-cli-update/

Control your radio transceiver from your web browser

About 5 years ago, i’ve create a small php script to control my YAESU FT817 via APACHE server and a LINUX box,
since this moment, i have work on my « cloud » for HAM radio « www.crx.cloud » and I thought about how to have the most powerfull system and on the cloud.

During this time, i’ve test various project a DLL for IE/Firefox for serial COM port operation with Javascript,
also a Google Chrome application and extension to do this job.

In parallel I discovered NODEJS and also the WEBSOCKETS with Socket.IO, suddenly I left on this concept:

– A NODEJS application that fulfills the role of WEBSOCKETS server and also allows to control the serial port.

– On the other a client, in the browser using JAVASCRIPT and WEBSOCKETS to connect to the server via his WEB BROWSER.

 

 

Thus the user launches the server in the background on the PC he wants. Then it connects to it from any browser (CHROME / FIREFOX or OPERA).

On the protocol side, each radio equipment manufacturer uses its own system except for some of the groups, so I had to deal with that, so I grouped:

– yaesu1 / icom1

– kenwood1 / elecraft1 / yaesu2

Why that ? simply because the method of writing and reading the serial port is not the same.

On one side are hexadecimal values ​​for ICOM / YAESU and on the other character strings for YAESU2 / KENWOOD1.

Finally in terms of protocol ICOM uses identifiers for each of their equipment, against the procole remains the same,
so even if the code is more complicated to use their protocol, it’s quite simple in the end to control. YAESU side,
it’s not the same thing because there are 2 different protocols.

Funny thing also at YAESU protocol V1 the radio returns frequency and mode in the same frame … so I had to adapt my code
so that it works in all situations, so JAVASCRIPT side I had to use the Promise class here allows to control the execution
of an asynchronous task before launching another example:

– My client JS asks the server: What is the frequency?

– He must wait before asking what is the mode,

Otherwise the remote NODEJS server will not be able to execute commands on the serial port and may overlap with them.

This is where the JS Promise class comes into play.

Then I created a class javascript by constructor to generate the commands, the most complicated being that
for ICOM because of the calculations and the changes of bases to operate (with binary shift for example).

Note that for the moment the system is not perfect because on the part NODEJS I still have books of reading specific to each
manufacturer in the long term I would like to do these operations also on the client side JS / WEBSOCKET and not side NodeJS.

Finally for the moment, the project is in « beta » because I do not have hardware kenwood1 / yaesu2
so I advance the code thanks to feedback from users.

If you want to see what this gives:

Server CRX-COM (NODEJS):
https://git.crx.cloud/f4eyq/crx-com

Client part (JS Web browser) CRX-CLOUD:
https://git.crx.cloud/crx-php/crx-cloud-ham/tree/master/app-php/crxComClient
https://git.crx.cloud/crx-php/crx-cloud-ham/tree/master/app-js/crxComClient

I also posted a little documentation to explain all this here:
https://project.crx.cloud/crx-com

And a diagram is available here:
https://project.crx.cloud/crx-com-schema

73  to   all