CentOS 6 – Install Voldemort
FrançaisLinuxTutorials
Voldemort est une base de données NoSQL, un système de stockage distribué fonctionnant par clef/valeur… en très très gros c’est une hashmap (pour ceux qui viennent du monde Java).
Les URLs des différentes ressources :
– http://project-voldemort.com/
– https://github.com/voldemort/voldemort/downloads
– https://github.com/voldemort/voldemort/wiki
Installation CentOS 6 Net install x86_64 en “Basic server”.
Et première commande pour commencer, tout mettre à jour :
yum update -y
On installe une machine virtuelle Java au passage :
yum install -y java-1.6.0-openjdk
Puis on télécharge le projet Voldemort :
cd /usr/local/ wget -c https://github.com/downloads/voldemort/voldemort/voldemort-0.90.tar.gz tar zxvf voldemort-0.90.tar.gz rm -f voldemort-0.90.tar.gz ln -s voldemort-0.90 voldemort
On prépare quelques fichiers de conf au bon endroit :
cp /usr/local/voldemort/config/single_node_cluster/config/* /usr/local/voldemort/config/
Affectation des droits :
groupadd voldemort useradd -g voldemort voldemort chown -R voldemort:voldemort /usr/local/voldemort chown -R voldemort:voldemort /usr/local/voldemort-0.90
cat > /etc/init.d/voldemort << "EOF" #!/bin/bash # chkconfig: 3 21 91 # # Voldemort # # description: Start up the Voldemort NoSQL DB. # Source function library. . /etc/init.d/functions RETVAL=$? VOLDEMORT_HOME=/usr/local/voldemort VOLDEMORT_USER=voldemort case "$1" in start) if [ -f $VOLDEMORT_HOME/bin/voldemort-server.sh ]; then echo $"Starting Voldemort" /bin/su - $VOLDEMORT_USER -c $VOLDEMORT_HOME/bin/voldemort-server.sh > $VOLDEMORT_HOME/voldemort.log 2>&1 & fi ;; stop) if [ -f $VOLDEMORT_HOME/bin/voldemort-stop.sh ]; then echo $"Stopping Voldemort" /bin/su - $VOLDEMORT_USER -c $VOLDEMORT_HOME/bin/voldemort-stop.sh fi ;; *) echo $"Usage: $0 {start|stop}" exit 1 ;; esac exit $RETVAL EOF
On rend ce fichier exécutable :
chmod a+x /etc/init.d/voldemort
Et on ajoute VOLDEMORT_HOME au /etc/bashrc pour tous les users :
cat >> /etc/bashrc << EOF export VOLDEMORT_HOME=/usr/local/voldemort EOF
On déclare la commande pour en profiter dans le shell courant :
export VOLDEMORT_HOME=/usr/local/voldemort
Il ne reste plus qu’à lancer voldemort :
/etc/init.d/voldemort start
Pour l’exécuter automatiquement au lancement du serveur et le couper :
/sbin/chkconfig --level 3 voldemort on /sbin/chkconfig --level 06 voldemort off
Est-il besoin de régler le firewall :
iptables -A INPUT -p tcp --dport 6666 -j ACCEPT iptables -A INPUT -p tcp --dport 6667 -j ACCEPT iptables -A INPUT -p tcp --dport 8081 -j ACCEPT /sbin/service iptables save
Et voilà vous avez un serveur Voldemort (simple pour l’instant).
Configuration
Tout est très bien décrit ici : http://project-voldemort.com/configuration.php (faites attention certaines balises XML sont mal fermées dans leurs exemples).
J’utilise pour mes tests des serveurs virtualisés dans VirtuaBox, j’ai créé 2 serveurs comme ci-dessus.
Les cartes réseaux des serveurs sont configurés en “Réseau privé hôte”.
Voici le fichier de /usr/local/voldemort/config/cluster.xml que j’utilise :
<cluster> <name>VBOX_JU_CLUSTER</name> <zone> <zone-id>0</zone-id> <proximity-list>1</proximity-list> </zone> <zone> <zone-id>1</zone-id> <proximity-list>0</proximity-list> </zone> <server> <id>0</id> <host>192.168.56.101</host> <http-port>8081</http-port> <socket-port>6666</socket-port> <admin-port>6667</admin-port> <!-- A list of data partitions assigned to this server --> <partitions>0,1,2,3</partitions> <zone-id>0</zone-id> </server> <server> <id>1</id> <host>192.168.56.102</host> <http-port>8081</http-port> <socket-port>6666</socket-port> <admin-port>6667</admin-port> <partitions>4,5,6,7</partitions> <zone-id>1</zone-id> </server> </cluster>
Vous copiez ce fichier sur vos 2 serveurs, les fichiers cluster.xml
doivent être identique sur chaque serveur. Puis vous configurez vos /usr/local/voldemort/config/server.properties
en adaptant notamment les node.id
et max.thread
en fonction de chaque serveur. node.id
est séquentiel, unique, et commence à 0.:
– Serveur 01
1 2 3 |
node.id=0 max.threads=42 ... |
– Serveur 02
1 2 3 |
node.id=1 max.threads=142 ... |
Nous n’allons pour l’instant ne configurer qu’un seul magasin de données, et ça se configure dans le fichier /usr/local/voldemort/config/stores.xml
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
2</preferred-reads> <required-reads>1</required-reads> <preferred-writes>2</preferred-writes> <required-writes>1</required-writes> <persistence>bdb</persistence> <routing>client</routing> <routing-strategy>consistent-routing</routing-strategy> <key-serializer> <type>string</type> </key-serializer> <value-serializer> <type>string</type> </value-serializer> </store> </stores> [/xml] Les 2 serveurs n'ont pas besoin d'avoir nécessairement le même (dans mon test j'ai mis le même) car vous pouvez ici configurer les bases en fonction de facteurs de réplication par zone... le détail est ici : <a href="http://project-voldemort.com/configuration.php" title="http://project-voldemort.com/configuration.php" target="_blank">http://project-voldemort.com/configuration.php</a> <strong>Tester les serveurs</strong> Il nous reste à tester que tout cela fonctionne correctement. Depuis l'un des serveur, exécutez la commande : [shell]/usr/local/voldemort/bin/voldemort-shell.sh test tcp://127.0.0.1:6666[/shell] Vous êtes maintenant connectés sur le store <strong>test</strong> et pouvez insérer des données. <pre> > get "key02" null > put "key01" "value 01" > put "key02" "value 02" > get "key01" version(0:1): "value 01" |
Let’s check where the data are currently saved :
1 2 3 4 5 6 7 8 9 10 11 12 |
> preflist "key01" Node 1 host: 192.168.56.102 port: 6666 available: yes last checked: 1314187968521 ms ago Node 0 host: 192.168.56.101 port: 6666 available: yes last checked: 1314187968521 ms ago |
This means your data is saved on both server ! Why ? Just look inside your /usr/local/voldemort/config/stores.xml
file, we have :
– replication-factor = 2
– preferred-reads = 2
– required-reads = 1
– preferred-writes = 2
– required-writes = 1
Pretty clear no !
See you…
Leave a comment