Inhaltsverzeichnis
集群部署
Distribution模式
配置缓存容器和缓存
启动JDG集群
配置文件
客户端访问代码
Heim Datenbank MySQL-Tutorial JBossDataGrid的集群部署与访问

JBossDataGrid的集群部署与访问

Apr 01, 2017 pm 03:02 PM
访问 集群部署

集群部署 JDG的缓存模式包括本地(Local)模式和集群(Clustered)模式。本项目采用多节点的Clustered模式部署,数据在多个节点的子集间进行复制,而不是同步复制到所有的节点。使用子集复制可以提升容错的效率但对可伸缩性不会造成太大影响。在使用Clustere

集群部署

JDG的缓存模式包括本地(Local)模式和集群(Clustered)模式。本项目采用多节点的Clustered模式部署,数据在多个节点的子集间进行复制,而不是同步复制到所有的节点。使用子集复制可以提升容错的效率但对可伸缩性不会造成太大影响。在使用Clustered模式部署之前,应该配置JGroup。

1. 使用UDP方式广播。

l 适用于大的集群(超过100节点);

l 适用于Invalidation和Replication模式;

l 提高socket通信的效率。

2. 使用TCP方式广播。

更适合于distribution模式的小规模(少于100节点)的集群,这时因为TCP协议在点对点通信中更加高效。

Clustered模式又分为Invalidation、Replication和Distribution模式。

Distribution模式

JDG的Distribution模式可以存储缓存数据在集群的子集节点,而不是存储数据到每一个节点中。通常存储到多于1个节点来提供数据冗余和容错。

Distribution模式使用一致性Hash算法从集群中选择存储数据的节点,一致性Hash算法配置为一个缓存数据存储到多个副本。副本数的设置需要平衡性能和容错,过多的副本会影响性能而过少的副本会造成节点失效时丢失数据。

在Distribution模式中,一个put操作会执行num_copies次远程调用,同样在任意节点的get操作会执行至少一次的远程调用。实际上,get操作甚至也会执行num_copies次远程调用,但它们是并行的,只要有一个返回,结果就会被返回给调用者。

读一致性

由于get操作是并行从多个节点取数并使用第一个返回的结果,在使用异步方式时可能会导致数据的不一致。注意这种情况只会出现在异步调用方式,如果是同步方式,则不会出现读不一致。

配置缓存容器和缓存

JDG的Cache在使用时,必须在standalone/configuration/clustered.xml配置文件中设置要使用的Cache配置。如果客户端访问了未配置命名的Cache,将视为非法操作。

…… 中配置cache-container和distributed-cache,本项目使用分布式缓存模式。

节点中增加对Cache的配置节点,如下面的名称为default的cache(默认缓存配置):

在<subsystemxmlns="urn:infinispan:server:core:5.2"default-cache-container="clustered"> 
…… </subsystem>中配置cache-container和distributed-cache,本项目使用分布式缓存模式。
节点<cache-containername="clustered" 
default-cache="default">中增加对Cache的配置节点,如下面的名称为default的cache(默认缓存配置):
Nach dem Login kopieren


#定义缓存默认的过期策略以上的配置项目并非所有的都是必须,各节点说明见下:

#lifespan: 缓存条目最大的生存时间,单位毫秒,-1表示从不过期。

# max-idle: 缓存条目的最大空闲时间,单位毫秒,-1表示从不过期。如果空闲时间超过该值,条目将被视为过期。

#interval: 从缓存中清除过期条目的执行间隔时间(毫秒)。如果要完全禁用定期回收任务,设置为-1。

#定义缓存默认的回收策略

#eviction: 指定回收策略。可用的回收策略包括UNORDERED,FIFO,LIRS和NONE(禁用回收策略)。

#max-entries: 指定Cache实例中的最大条目数量,-1表示不限制。实际取值为>=选定值的2的幂的最小值

#定义缓存锁

#isolation: 定义隔离级别。可用的隔离级别包括NONE,READ_UNCOMMITED,READ_COMMITED,REPEATABLE_READ,SERIALIZABLE,默认REPEATABLE_READ

#striping: 锁条带化。如果为true,使用共享锁池来维护所有需要锁定的条目。否则,为每个条目创建一个锁。锁条带化有助于控制内存占用,但可能会降低系统的并发能力。

#acquire-timeout: 尝试获取一个特定锁的最大超时时间。

#concurrency-level: 锁容器的并发级别。根据和infinispan并发交互的线程数量来调整这个值。

#concurrent-updates: 仅用于非事务缓存。如果设置为true(默认值),则缓存在并发更新时保持数据的一致性。对于集群模式将带来额外的RPC成本,如果你的应用不会并发写数据,禁用该标志以提升性能。

#定义缓存事务

#虽然可以定义服务器缓存支持事务,但目前没有可用的协议来支持事务能力。

启动JDG集群

可以把JDG部署在多个节点构成一个集群,目前我们的项目使用的是数据缓存服务使用默认3个节点的分布式集群。在启动时各个节点的nodeName必须予以区分,例如分别命名为nodeA、nodeB和nodeC。

JDG是运行在JBoss容器中的,在启动时即启动了JBoss,如果服务器已经运行了JBOSS,请在启动时设置端口offset,以避免冲突。

同时为了避免和JBoss服务器的JBOSS_HOME冲突,定义环境变量JDG_HOME(例如exportJDG_HOME=/usr/local/jboss-datagrid-server-6.1.0),并修改bin/clustered.sh中的所有JBOSS_HOME替换为JDG_HOME。

以nodeA节点为例(JDG对外访问的端口为11222,下面offset后为11322),服务器ip是192.168.1.100,执行启动命令为:

./clustered.sh-Djboss.socket.binding.port-offset=100 -Djboss.bind.address=192.168.1.100 -Djboss.node.name=nodeA
Nach dem Login kopieren

客户端访问

远程客户端可以使用REST, memcached或HotRod协议,我们这里使用HotRod协议,它是一种二进制协议,性能较好,同时它提供了自动的负载均衡和failover。

配置文件

客户端访问缓存服务端的配置文件默认命名为hotrod-client.properties。定义解释见下。

############JDG 服务器配置############
##请求均衡策略,default =org.infinispan.client.hotrod.impl.transport.tcp.RoundRobinBalancingStrategy
#infinispan.client.hotrod.request_balancing_strategy=
##服务器列表,default = 127.0.0.1:11222
infinispan.client.hotrod.server_list=192.168.1.100:11322;192.168.1.101:11322;192.168.1.102:11322
##是否强迫返回值, default = false
#infinispan.client.hotrod.force_return_values=
##TCP_NO_DELAY, default = true
#infinispan.client.hotrod.tcp_no_delay=
##启动时是否发送PING请求来获取CLUSTER拓扑, default = true
#infinispan.client.hotrod.ping_on_startup=
##控制使用的传输机制,目前只支持TCP, 
default =org.infinispan.client.hotrod.impl.transport.tcp.TcpTransportFactory
#infinispan.client.hotrod.transport_factory=
##序列化使用的Marshaller, default =org.infinispan.marshall.jboss.GenericJBossMarshaller
##如果要降低传输负载,可以配置为ApacheAvroMarshaller
#infinispan.client.hotrod.marshaller=
##指定自定义的AsyncExecutorFactory, 
default =org.infinispan.client.hotrod.impl.async.DefaultAsyncExecutorFactory
#infinispan.client.hotrod.async_executor_factory=
##指定并发线程池大小, default = 10
#infinispan.client.hotrod.default_executor_factory.pool_size=
##指定并发队列大小, default = 100000
#infinispan.client.hotrod.default_executor_factory.queue_size=
##Hash函数实现的版本及一致性Hash算法,和HotRod的服务器版本相关
#infinispan.client.hotrod.hash_function_impl.1=
##序列化和反序列化键的缓存允许字节数,目的是避免数组大小调整, default =64
#infinispan.client.hotrod.key_size_estimate=
##序列化和反序列化值的缓存允许字节数,目的是避免数组大小调整, default =512
#infinispan.client.hotrod.value_size_estimate=
##socket读超时, default = 60000 (60 seconds)
infinispan.client.hotrod.socket_timeout=50000
##socket连接超时, default = 60000 (60 seconds)
infinispan.client.hotrod.connect_timeout=10000
##指定客户端使用的协议版本, default = 1.1,其他值还有1.0
#infinispan.client.hotrod.protocol_version=
##指定错误时的重试次数, default = 10
#infinispan.client.hotrod.max_retries=
############连接池配置############
##指定每个服务器的最大连接数,负值表示没有限制,默认-1
maxActive=100
##指定服务器组内允许的全局持久连接的数量,负值表示没有限制,默认-1
maxTotal=100
##指定每个服务器空闲持久连接的最大数,负值表示没有限制,默认-1
maxIdle=20
##指定当连接池耗尽时,服务器如何响应:
##0-抛出异常给调用者
##1-阻塞调用者,直到有空闲的连接
##2-创建一个新的连接(不受maxActive的限制)
##默认值是1
#whenExhaustedAction=1
##检查空闲连接的Eviction线程每次运行间隔的时间,默认是2分钟
#timeBetweenEvictionRunsMillis=120000
##在空闲池中的连接存在多长时间需要被销毁,负值表示没有空闲连接被销毁,默认值为30分钟
#minEvictableIdleTimeMillis=1800000
##指定在Eviction线程执行时,空闲的连接是否通过发送一个TCP数据包到服务器来验证,
##即无法验证的连接将从池中被清除
##默认值为true
#testWhileIdle=true
##指定每个服务器最小的可用连接的空闲线程数。默认值为1
#minIdle=1
Nach dem Login kopieren

客户端访问代码

import java.net.URL;

import java.util.Map;

 

import org.infinispan.client.hotrod.RemoteCache;

import org.infinispan.client.hotrod.RemoteCacheManager;

import org.infinispan.client.hotrod.ServerStatistics;

 

 

public class Quickstart {

 

 public static void main(String[] args) {

 

  URL resource = Thread.currentThread().getContextClassLoader()

                                     
  .getResource("hotrod-client.properties");

  RemoteCacheManager cacheContainer = new RemoteCacheManager(resource, true);

 

  //获得一个远程的Cache

  RemoteCache cache = cacheContainer.getCache("myCache");

 

  //put数据到缓存中,然后确认是否存在

  cache.put("name", "paul");

  if(cache.get("name").equals("paul")){

   System.out.println("Cache Hit!");

  } else {

   System.out.println("Cache Miss!");

  }

 

  //删除缓存数据

  cache.remove("name");

 

  cacheContainer.stop();

 }

}
Nach dem Login kopieren

 以上就是JBossDataGrid的集群部署与访问的内容,更多相关内容请关注PHP中文网(www.php.cn)!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

iOS 17: So steuern Sie, welche Apps auf Ihre Fotos zugreifen können iOS 17: So steuern Sie, welche Apps auf Ihre Fotos zugreifen können Sep 13, 2023 pm 09:09 PM

In iOS17 hat Apple mehr Kontrolle darüber, was Apps auf Fotos sehen können. Lesen Sie weiter, um zu erfahren, wie Sie den App-Zugriff pro App verwalten. In iOS können Sie mit der In-App-Fotoauswahl von Apple bestimmte Fotos mit der App teilen, während der Rest Ihrer Fotobibliothek privat bleibt. Apps müssen Zugriff auf Ihre gesamte Fotobibliothek anfordern, und Sie können Apps optional den folgenden Zugriff gewähren: Eingeschränkter Zugriff – Apps können nur Bilder sehen, die Sie auswählen können. Dies können Sie jederzeit in der App oder über Einstellungen &gt; Klicken Sie auf „Datenschutz und Sicherheit“ > „Fotos“, um ausgewählte Bilder anzuzeigen. Voller Zugriff – App kann Fotos anzeigen

Wie greife ich in Java auf die JSON-Felder, Arrays und verschachtelten Objekte von JSONNode zu? Wie greife ich in Java auf die JSON-Felder, Arrays und verschachtelten Objekte von JSONNode zu? Aug 30, 2023 pm 11:05 PM

Ein JsonNode ist Jacksons JSON-Baummodell, das JSON in JsonNode-Instanzen einlesen und JsonNode in JSON schreiben kann. Wir können Jackson verwenden, um JSON in einen JsonNode einzulesen, indem wir eine ObjectMapper-Instanz erstellen und die Methode readValue() aufrufen. Mit der Methode get() der Klasse JsonNode können wir auf Felder, Arrays oder verschachtelte Objekte zugreifen. Wir können die Methode asText() verwenden, um eine gültige Zeichenfolgendarstellung zurückzugeben und den Wert des Knotens mithilfe der Methode asInt() der Klasse JsonNode in Javaint umzuwandeln. Im folgenden Beispiel können wir auf Json zugreifen

Greifen Sie mit Python auf Metadaten verschiedener Audio- und Videodateien zu Greifen Sie mit Python auf Metadaten verschiedener Audio- und Videodateien zu Sep 05, 2023 am 11:41 AM

Mit Mutagen und dem eyeD3-Modul in Python können wir auf die Metadaten von Audiodateien zugreifen. Für Videometadaten können wir Filme und die OpenCV-Bibliothek in Python verwenden. Metadaten sind Daten, die Informationen über andere Daten bereitstellen, beispielsweise Audio- und Videodaten. Zu den Metadaten für Audio- und Videodateien gehören Dateiformat, Dateiauflösung, Dateigröße, Dauer, Bitrate usw. Durch den Zugriff auf diese Metadaten können wir Medien effizienter verwalten und die Metadaten analysieren, um nützliche Informationen zu erhalten. In diesem Artikel werfen wir einen Blick auf einige der von Python bereitgestellten Bibliotheken oder Module für den Zugriff auf Metadaten von Audio- und Videodateien. Auf Audio-Metadaten zugreifen Einige Bibliotheken für den Zugriff auf Audiodatei-Metadaten nutzen Mutagenese

So lösen Sie das Problem der Unzugänglichkeit, nachdem Tomcat das Kriegspaket bereitgestellt hat So lösen Sie das Problem der Unzugänglichkeit, nachdem Tomcat das Kriegspaket bereitgestellt hat Jan 13, 2024 pm 12:07 PM

Um das Problem zu lösen, dass Tomcat nach der Bereitstellung nicht erfolgreich auf das Kriegspaket zugreifen kann, sind bestimmte Codebeispiele erforderlich. Als weit verbreiteter Java-Webserver ermöglicht Tomcat Entwicklern, ihre eigenen entwickelten Webanwendungen zur Bereitstellung in Kriegsdateien zu packen. Manchmal kann es jedoch vorkommen, dass wir nach der Bereitstellung des Kriegspakets nicht erfolgreich darauf zugreifen können. Dies kann an einer falschen Konfiguration oder aus anderen Gründen liegen. In diesem Artikel stellen wir einige konkrete Codebeispiele bereit, die dieses Dilemma angehen. 1. Überprüfen Sie den Tomcat-Dienst

So lösen Sie externe Ressourcenzugriffe und Aufrufe in der PHP-Entwicklung So lösen Sie externe Ressourcenzugriffe und Aufrufe in der PHP-Entwicklung Oct 08, 2023 am 11:01 AM

Um das Problem des Zugriffs und Aufrufs externer Ressourcen in der PHP-Entwicklung zu lösen, sind bestimmte Codebeispiele erforderlich. Bei der PHP-Entwicklung stoßen wir häufig auf Situationen, in denen wir auf externe Ressourcen zugreifen und diese aufrufen müssen, z. B. auf API-Schnittstellen, Bibliotheken von Drittanbietern oder andere Serverressourcen . Beim Umgang mit diesen externen Ressourcen müssen wir darüber nachdenken, wie wir sicher darauf zugreifen und Anrufe tätigen und gleichzeitig Leistung und Zuverlässigkeit gewährleisten können. Dieser Artikel beschreibt mehrere gängige Lösungen und stellt entsprechende Codebeispiele bereit. 1. Verwenden Sie die Curl-Bibliothek, um externe Ressourcen aufzurufen. Curl ist eine sehr leistungsstarke Open-Source-Bibliothek.

So lösen Sie das Problem des verweigerten Zugriffs beim Ändern von Dateien in Windows 7 So lösen Sie das Problem des verweigerten Zugriffs beim Ändern von Dateien in Windows 7 Jul 04, 2023 pm 07:01 PM

Wie kann das Problem des verweigerten Zugriffs beim Ändern von Dateien in Win7 gelöst werden? Wenn wir einige Systemdateien ändern, werden wir häufig gefragt, dass wir keine Berechtigung zum Ausführen des Vorgangs haben. Wir können die Ordnerberechtigungen deaktivieren oder Administratorrechte erhalten. Für Benutzer, die solche Dateien ändern müssen, werfen wir einen Blick auf die folgenden spezifischen Tutorials. Lösung für das Problem, dass der Zugriff beim Ändern von Dateien in Windows 7 verweigert wird: 1. Wählen Sie zunächst den entsprechenden Ordner aus, klicken Sie auf das Tool oben und wählen Sie die Ordneroption. 2. Öffnen Sie die Registerkarte „Ansicht“. 3. Deaktivieren Sie „Einfache Dateifreigabe verwenden“ und bestätigen Sie. 4. Klicken Sie dann mit der rechten Maustaste auf den entsprechenden Ordner und klicken Sie auf Eigenschaften. 5. Öffnen Sie die Registerkarte „Sicherheit“. 6. Wählen Sie die Symbolposition und klicken Sie auf Erweitert. 7

Was tun, wenn in Windows 10 Home Edition kein Zugriff auf freigegebene Ordner möglich ist? Was tun, wenn in Windows 10 Home Edition kein Zugriff auf freigegebene Ordner möglich ist? Jan 11, 2024 pm 07:36 PM

Die Freigabe von Ordnern ist in der Tat eine äußerst nützliche Funktion in einer Heim- oder Geschäftsnetzwerkumgebung. Sie ermöglicht die einfache Freigabe von Ordnern für andere Benutzer und erleichtert so die Dateiübertragung und -freigabe. Auf den freigegebenen Win10 Home Edition-Ordner kann nicht zugegriffen werden. Lösung: Lösung 1: Überprüfen Sie die Netzwerkverbindung und Benutzerberechtigungen. Wenn Sie versuchen, den freigegebenen Win10-Ordner zu verwenden, müssen wir zunächst bestätigen, ob die Netzwerkverbindung und die Benutzerberechtigungen normal sind. Wenn ein Problem mit der Netzwerkverbindung vorliegt oder der Benutzer nicht über die Berechtigung zum Zugriff auf den freigegebenen Ordner verfügt, kann dies dazu führen, dass der Zugriff nicht möglich ist. 1. Stellen Sie zunächst sicher, dass die Netzwerkverbindung reibungslos funktioniert, damit sich der Computer und der Computer, auf dem sich der freigegebene Ordner befindet, im selben LAN befinden und normal kommunizieren können. 2. Überprüfen Sie anschließend die Benutzerberechtigungen, um sicherzustellen, dass der aktuelle Benutzer die Berechtigung zum Teilen von Dateien hat.

Erlauben Sie den Zugriff auf Kamerageräte nur in HTML5 Erlauben Sie den Zugriff auf Kamerageräte nur in HTML5 Sep 22, 2023 pm 11:09 PM

In iOS gibt es keinen eindeutigen Zugriff auf das Kameragerät. Die offizielle Spezifikationsempfehlung lautet wie folgt: Bei Implementierungen dieser Spezifikation durch Benutzeragenten wird empfohlen, die Zustimmung des Benutzers einzuholen, bevor mit der Erfassung von Inhalten über das Mikrofon oder die Kamera begonnen wird. Dies kann erforderlich sein, um behördliche, rechtliche und Best-Practice-Anforderungen im Zusammenhang mit dem Datenschutz der Benutzer zu erfüllen. Darüber hinaus werden Benutzeragentenimplementierungen empfohlen, um dem Benutzer einen Hinweis zu geben, wenn ein Eingabegerät aktiviert ist, und um es dem Benutzer zu ermöglichen, eine solche Erfassung zu beenden. Ebenso werden Benutzeragenten empfohlen, um Benutzersteuerungen bereitzustellen, die es dem Benutzer beispielsweise ermöglichen, das genaue zu verwendende Medienerfassungsgerät auszuwählen, wenn mehrere Geräte vorhanden sind – für dasselbe. Deaktivieren Sie die Tonaufnahme im Videoaufnahmemodus.

See all articles