J'ai lancé Apache Ignite pour étudier la grille de données en mémoire. Tout d'abord, installez-le, démarrez-le sur 1 serveur / 2 serveurs et essayez de l'utiliser comme serveur de cache à partir d'un programme Java.
Nous avons également créé une collection de liens vers la documentation sur Apache Ignite ci-dessous, nous espérons donc que vous la trouverez utile.
Apache Ignite est un middleware qui réalise une grille de données en mémoire. La grille de données en mémoire est une technologie qui distribue une grande quantité de données en mémoire sur plusieurs serveurs. Une caractéristique majeure est qu'elle peut être accélérée en manipulant les données en mémoire. Une utilisation est le cache distribué d'une base de données qui stocke une grande quantité de données.
Avec Apache Ignite centré autour de la grille de données en mémoire, il peut également jouer les rôles suivants:
Traitez la grille de données en mémoire comme une base de données. La lecture / écriture est décentralisée, facile à évoluer et plus rapide que les RDB tels qu'Oracle. La version actuelle ne gère pas les transactions, mais il semble que les versions futures la prendront en charge. Il conserve également les données en mémoire mais peut être conservé dans le système de fichiers (HDFS). Il est également stocké en mémoire avec une structure similaire à HDFS, et est positionné comme un sous-ensemble de fichiers sur HDFS.
Une API simple pour KVS est préparée et peut être utilisée comme KVS distribué.
Les bases de données / NoSQL telles qu'Oracle et Cassandra peuvent être utilisées pour la mise en cache.
Pour plus d'informations, consultez Cas d'utilisation d'Apache Ignite (https://ignite.apache.org/usecases.html).
Veuillez également vous référer à la collection de liens contenant diverses informations ci-dessous.
Liens vers la documentation sur Apache Ignite
Avec Vagrant, j'ai préparé l'environnement de CentOS 7 et exécuté Apache Ignite. La procédure jusqu'à la construction de CentOS 7 est omise car il existe d'autres sites faciles à comprendre.
Essayez une configuration unique et une configuration de cluster (2 unités). Il existe les deux serveurs suivants.
・ 192.168.20.71 igniteserver1 ・ 192.168.20.72 igniteserver2
Apache Ignite nécessite un JDK et prend en charge Oracle JDK et Open JDK. Cette fois, nous utiliserons l'Open JDK.
# yum -y install java-1.8.0-openjdk-devel
# java -version
openjdk version "1.8.0_191"
OpenJDK Runtime Environment (build 1.8.0_191-b12)
OpenJDK 64-Bit Server VM (build 25.191-b12, mixed mode)
J'ai défini JAVA_HOME et ajouté le chemin Java à mon PATH.
# echo "export JAVA_HOME=$(readlink -e $(which java)|sed 's:/bin/java::')" > /etc/profile.d/java.sh
# echo "PATH=\$PATH:\$JAVA_HOME/bin" >> /etc/profile.d/java.sh
# source /etc/profile
Téléchargez le module depuis le site Apache Ignite (https://ignite.apache.org/). Sélectionnez "Versions binaires" ci-dessous.
Cette fois, j'ai téléchargé la dernière version, v2.6.0 ci-dessous.
Téléchargez le "apache-ignite-fabric-2.6.0-bin.zip" que vous avez téléchargé précédemment sur le serveur, et extrayez-le sous "/ opt" avec la commande suivante.
# cd /opt
# unzip /tmp/apache-ignite-fabric-2.6.0-bin.zip
# ln -s /opt/apache-ignite-fabric-2.6.0-bin/ /opt/apache-ignite
Exécutez la commande suivante pour démarrer Apache Ignite.
cd /opt/apache-ignite/bin
./ignite.sh
Sans argument, le fichier de configuration par défaut dans "/opt/apache-ignite/config/default-config.xml" est chargé et démarré.
Si le démarrage réussit, les informations suivantes seront envoyées à la console. Lorsque serveurs = 1, vous pouvez confirmer qu'un serveur est en cours d'exécution.
[22:42:07] Ignite node started OK (id=9ae050e2)
[22:42:07] Topology snapshot [ver=1, servers=1, clients=0, CPUs=1, offheap=0.74GB, heap=1.0GB]
Le fichier de configuration par défaut est le suivant. J'écrirai les paramètres nécessaires sous l'élément "\ <bean id =" grid.cfg "", mais les paramètres par défaut sont vides.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--
Alter configuration below as needed.
-->
<bean id="grid.cfg" class="org.apache.ignite.configuration.IgniteConfiguration"/>
</beans>
Utilisons Apache Ignite démarré plus tôt en tant que serveur de cache à partir d'une application Java. Les applications Java utilisent le projet Maven et ajoutent les dépendances suivantes à pom.xml.
<dependency>
<groupId>org.apache.ignite</groupId>
<artifactId>ignite-core</artifactId>
<version>2.6.0</version>
</dependency>
Le client Java a été créé comme suit en se référant à l'exemple de programme Apache Ignite. C'est un programme qui met les données dans le cache appelé "" put-get-example "" sur Apache Ignite, et obtient et affiche les mêmes données que celles-ci.
SimpleCacheApp.java
import org.apache.ignite.Ignition;
import org.apache.ignite.client.ClientCache;
import org.apache.ignite.client.ClientException;
import org.apache.ignite.client.IgniteClient;
import org.apache.ignite.configuration.ClientConfiguration;
public class SimpleCacheApp
{
public static void main(String[] args) {
//Spécifiez l'adresse IP et le port du serveur Apache Ignite auquel se connecter.
ClientConfiguration cfg = new ClientConfiguration().setAddresses("192.168.20.71:10800");
try (IgniteClient igniteClient = Ignition.startClient(cfg)) {
final String CACHE_NAME = "put-get-example";
ClientCache<Integer, String> cache = igniteClient.getOrCreateCache(CACHE_NAME);
Integer key = 1;
String val = "put-get-test";
cache.put(key, val);
System.out.format("PUT [%s]\n", val);
String cachedVal = cache.get(key);
System.out.format("GET [%s]\n", cachedVal);
}
catch (ClientException e) {
e.printStackTrace();
}
catch (Exception e) {
e.printStackTrace();
}
}
}
Le résultat de l'exécution est le suivant. Vous pouvez mettre les données "put-get-test" et confirmer que vous pouvez obtenir la valeur du cache.
PUT [put-get-test]
GET [put-get-test]
Pour vérifier qu'il est mis en cache côté serveur, essayez d'utiliser l'interface de ligne de commande Ignite "Ignite Visor".
Commencez par démarrer Visor.
# /opt/apache-ignite/bin/ignitevisorcmd.sh
Lorsque la console Visor s'affiche, connectez-vous au cluster avec la commande "open".
visor> open
Local configuration files:
+==========================================================================================+
| # | Configuration File |
+==========================================================================================+
| 0 | config/default-config.xml |
~~ Omis ~~
Une liste de fichiers de paramètres sera affichée, donc le "0" par défaut est actuellement utilisé: config/default-config.Sélectionnez xml.
Choose configuration file number ('c' to cancel) [0]: 0
Si vous exécutez ici la commande "cache", l'état du cache sera affiché.
visor> cache
Time of the snapshot: 2018-08-18 03:18:21
+========================================================================================================================+
| Name(@) | Mode | Nodes | Entries (Heap / Off-heap) | Hits | Misses | Reads | Writes |
+========================================================================================================================+
| put-get-example(@c0) | PARTITIONED | 1 | min: 1 (0 / 1) | min: 0 | min: 0 | min: 0 | min: 0 |
| | | | avg: 1.00 (0.00 / 1.00) | avg: 0.00 | avg: 0.00 | avg: 0.00 | avg: 0.00 |
| | | | max: 1 (0 / 1) | max: 0 | max: 0 | max: 0 | max: 0 |
+------------------------------------------------------------------------------------------------------------------------+
Vous pouvez voir qu'un cache (voir Entrées) est stocké dans le cache "put-get-example".
J'avais l'habitude de configurer un serveur plus tôt, mais configurons-le avec deux serveurs. Créez un fichier de configuration (default-config-cluster2server.xml) pour une configuration à deux unités.
# cp -p /opt/apache-ignite/config/default-config.xml /opt/apache-ignite/config/default-config-cluster2server.xml
Exécutez les paramètres de cluster à l'aide de la méthode de découverte TCP / IP.
Modifiez le fichier "default-config-cluster2server.xml" et ajoutez "\
Créez le même fichier sur deux serveurs. (Ou copier avec scp)
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--
Alter configuration below as needed.
-->
<bean id="grid.cfg" class="org.apache.ignite.configuration.IgniteConfiguration">
<property name="discoverySpi">
<bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
<property name="ipFinder">
<bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder">
<property name="addresses">
<list>
<value>igniteserver1:47500..47509</value>
<value>igniteserver2:47500..47509</value>
</list>
</property>
</bean>
</property>
</bean>
</property>
</bean>
</beans>
Cette fois, démarrez deux nœuds Apache Ignite à partir de Visor. Pour faire fonctionner un nœud distant depuis Visor, vous devez pouvoir vous connecter avec ssh. Réglez avec la commande suivante.
$ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
$ chmod 600 ~/.ssh/authorized_keys
Assurez-vous que vous pouvez le définir sans mot de passe.
$ ssh igniteserver1
$ ssh igniteserver2
Démarrez la console Visor et exécutez la commande suivante.
# /opt/apache-ignite/bin/ignitevisorcmd.sh
Lorsque la console Visor s'affiche, connectez-vous au cluster avec la commande "open".
visor> open
~ Omis ~
| 6 | config/default-config-cluster2server.xml
~ Omis ~
Choose configuration file number ('c' to cancel) [0]: 6
+------------------------------------------------------------------------------------+
| Status | Connected |
| Ignite instance name | <default> |
| Config path | /opt/apache-ignite/config/default-config-cluster2server.xml |
| Uptime | 00:00:00 |
+------------------------------------------------------------------------------------+
visor> start -h=192.168.20.71~72 -u=root -k=/root/.ssh/id_rsa -g=/opt/apache-ignite -c=config/default-config-cluster2server.xml
+-------------------------------+
| Successful start attempts | 2 |
| Failed start attempts | 0 |
+-------------------------------+
«Tentatives de démarrage réussies» est «2», ce qui signifie que les deux serveurs ont été démarrés avec succès.
Pour terminer tous les nœuds, exécutez la commande suivante.
visor> kill -k
Are you sure you want to kill ALL nodes? (y/n) [n]: y
You are about to kill ALL nodes. Are you 100% sure? (y/n) [n]: y
Les nœuds du cluster Ignite incluent des nœuds de serveur qui stockent des caches et des nœuds clients sans données. À partir d'un programme Java, connectez-vous au cluster Ignite en tant que nœud client. Le but est de spécifier le client comme "Ignition.setClientMode (true);".
Apportez "default-config.xml" du serveur et codez-le comme suit: Le paramètre lit "default-config.xml", mais il est également possible de le configurer par programme sans utiliser le fichier de paramètres.
Je peux me connecter à plusieurs unités même avec le programme créé lorsqu'une unité est configurée, mais je l'ai réécrit car la cause était inconnue et le basculement ne fonctionnait pas lorsqu'une unité tombait en panne.
import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteCache;
import org.apache.ignite.Ignition;
import org.apache.ignite.client.ClientException;
public class SimpleCacheApp2Server
{
public static void main(String[] args) {
Ignition.setClientMode(true);
try (Ignite igniteClient = Ignition.start("default-config-cluster2server.xml")) {
final String CACHE_NAME = "put-get-example";
IgniteCache<Integer, String> cache = igniteClient.getOrCreateCache(CACHE_NAME);
Integer key = 1;
String val = "put-get-test";
cache.put(key, val);
System.out.format("PUT [%s]\n", val);
String cachedVal = cache.get(key);
System.out.format("GET [%s]\n", cachedVal);
}
catch (ClientException e) {
e.printStackTrace();
}
catch (Exception e) {
e.printStackTrace();
}
}
}