Clustering - studiofu/brain GitHub Wiki
Hazelcast Data Grid, Hazelcast is a distributed In-Memory Data Grid platform for Java.
https://en.wikipedia.org/wiki/Hazelcast
Hazelcast Example
https://www.heapcode.com/hazelcast-java-example/
Guide to Hazelcast with Java
http://www.baeldung.com/java-hazelcast
Sample Hazelcast Server Code
POM
<dependency>
<groupId>com.hazelcast</groupId>
<artifactId>hazelcast</artifactId>
<version>3.2</version>
</dependency>
<dependency>
<groupId>com.hazelcast</groupId>
<artifactId>hazelcast-client</artifactId>
<version>3.2</version>
</dependency>
Java
Config cfg = new Config();
/** connect node **/
NetworkConfig network = cfg.getNetworkConfig();
JoinConfig join = network.getJoin();
join.getMulticastConfig().setEnabled(false);
join.getTcpIpConfig().addMember("10.134.74.57")
.addMember("172.24.202.239").setEnabled(true);
network.getInterfaces().setEnabled(true)
.addInterface("10.134.74.57").addInterface("172.24.202.239");
HazelcastInstance instance = Hazelcast.newHazelcastInstance(cfg);
Map<Integer, Integer> customerMap = instance.getMap("customers");
for(int i=0;i<10;i++) {
int key = (int)(Math.random()*100);
int value = (int)(Math.random()*100);
customerMap.put(key, value);
}
System.out.println("Map Size:" + customerMap.size());
Set<Entry<Integer,Integer>> customers = customerMap.entrySet();
for (Iterator<Entry<Integer, Integer>> iterator = customers.iterator(); iterator.hasNext();) {
Entry<Integer, Integer> entry = (Entry<Integer, Integer>) iterator.next();
System.out.println("Customer Id : "+ entry.getKey()+" Customer Value : "+entry.getValue());
}
Redis Starting Command
C:\Applications\redis>redis-server.exe redis.windows.conf
Database Change, where 1 is the database index which could be from 0 to xx
C:\Applications\redis>redis-cli.exe
127.0.0.1:6379> select 1
OK
Spring Boot, Spring Session With Redis
https://docs.spring.io/spring-session/docs/current/reference/html5/guides/boot-redis.html
Vaadin Redis Http Session Clustering - using filter to rewrite the http session and then create a filter bean (refer to spring-session-redis open source project)
:web:clustering:vaadinsessionrewritefilter.zip
@Configuration
public class SpringConfig {
@Bean
public Filter vaadinSessionRewriteFilter() {
return new VaadinSessionRewriteFilter();
}
Spring Session, Nginx Load Balance
https://blog.csdn.net/u010648555/article/details/79459953
Basic Nginx Setup
https://dotblogs.com.tw/grayyin/2017/05/18/183117
Nginx, Spring Boot as system services
Simple Setting for Fail-over load balancer by using Nginx
#user nobody;
worker_processes 1;
events{
worker_connections 1024;
}
http{
upstream myproject {
ip_hash; # apply ip hash for sticky session <-- important
server 127.0.0.1:8888; #server 1
server 127.0.0.1:9999; #server 2
server 172.24.202.239:8088; #server 3
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://myproject;
proxy_next_upstream error timeout invalid_header http_500;
proxy_connect_timeout 2;
}
}
}
sample for passing client ip through firewall
upstream my_app {
ip_hash;
server 111.11.11.11:3001 weight=100 max_fails=5 fail_timeout=300;
server 222.22.22.22:3002 weight=100 max_fails=5 fail_timeout=300;
keepalive 8;
}
server {
server_name my-app.com;
location / {
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Real_IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
# This is necessary to pass the correct IP to be hashed
real_ip_header X-Real-IP;
proxy_pass http://my_app/;
proxy_redirect off;
}
}
start nginx and stop nginx
$ nginx
$ nginx -sstop
Using Robbin as Client Side Load Balancer