• griddb 集群简单学习


    griddb集群可以使用多种方式部署

    • 多播集群
    • 静态配置(固定列表)
    • url 地址provider
      以下是一个简单的基于固定node 节点列表的模式部署

    环境准备

    为了方便使用docker-compose 部署,同时使用估计ip 分配模式

    • docker-compose 文件
    version: "3"
    services: 
      pgspider-griddb:
        image: dalongrong/pgspider:griddb-4.2
        environment: 
        - "POSTGRES_PASSWORD=dalong"
        ports: 
        - "5432:5432"
        networks:
         service1_net:
          ipv4_address: 192.168.1.14
      griddb-java:
        build: 
          context: ./
          dockerfile: ./Dockerfile-java
        environment: 
        - "MEMBER_ADDR=griddb-1:10001"
        networks:
         service1_net:
          ipv4_address: 192.168.1.13
      griddb-1:
       build: ./
       networks:
        service1_net:
          ipv4_address: 192.168.1.10
      griddb-2:
       build: ./
       networks:
        service1_net:
          ipv4_address: 192.168.1.11
      griddb-3:
       build: ./
       networks:
        service1_net:
          ipv4_address: 192.168.1.12
    networks:
      service1_net:
        ipam:
          driver: default
          config:
            - subnet: 192.168.1.0/16
     
     

    简单说明,包含了三类服务,griddb ,一个简单的java 应用,一个postgres griddb 的fdw

    • griddb 配置说明

      基于官方docker镜像,修改了部分配置

    FROM griddbnet/griddb
    COPY start_griddb.sh /start_griddb.sh

    start_griddb.sh脚本

    #!/bin/bash
    chown gsadm.gridstore /var/lib/gridstore/data
    IP=`grep $HOSTNAME /etc/hosts | awk ' { print $1 }'`
    cat << EOF > /var/lib/gridstore/conf/gs_cluster.json
    {
            "dataStore":{
                    "partitionNum":128,
                    "storeBlockSize":"64KB"
            },
            "cluster":{
                    "clusterName":"defaultCluster",
                    "replicationNum":2,
                    "notificationInterval":"5s",
                    "heartbeatInterval":"5s",
                    "loadbalanceCheckInterval":"180s",
                    "notificationMember": [
                            {
                                    "cluster": {"address":"192.168.1.10", "port":10010},
                                    "sync": {"address":"192.168.1.10", "port":10020},
                                    "system": {"address":"192.168.1.10", "port":10080},
                                    "transaction": {"address":"192.168.1.10", "port":10001},
                                    "sql": {"address":"192.168.1.10", "port":20001}
                            },
                            {
                                    "cluster": {"address":"192.168.1.11", "port":10010},
                                    "sync": {"address":"192.168.1.11", "port":10020},
                                    "system": {"address":"192.168.1.11", "port":10080},
                                    "transaction": {"address":"192.168.1.11", "port":10001},
                                    "sql": {"address":"192.168.1.11", "port":20001}
                            },
                            {
                                    "cluster": {"address":"192.168.1.12", "port":10010},
                                    "sync": {"address":"192.168.1.12", "port":10020},
                                    "system": {"address":"192.168.1.12", "port":10040},
                                    "transaction": {"address":"192.168.1.12", "port":10001},
                                    "sql": {"address":"192.168.1.12", "port":20001}
                            }
                    ]
            },
            "sync":{
                    "timeoutInterval":"30s"
            }
    }
    EOF
    cat << EOF > /var/lib/gridstore/conf/gs_node.json
    {
        "dataStore":{
            "dbPath":"data",
            "backupPath":"backup",
            "syncTempPath":"sync",
            "storeMemoryLimit":"1024MB",
            "storeWarmStart":false,
            "storeCompressionMode":"NO_COMPRESSION",
            "concurrency":6,
            "logWriteMode":1,
            "persistencyMode":"NORMAL",
            "affinityGroupSize":4,
            "autoExpire":false
        },
        "checkpoint":{
            "checkpointInterval":"60s",
            "checkpointMemoryLimit":"1024MB",
            "useParallelMode":false
        },
        "cluster":{
            "servicePort":10010
        },
        "sync":{
            "servicePort":10020
        },
        "system":{
            "servicePort":10040,
            "eventLogPath":"log"
        },
        "transaction":{
            "servicePort":10001,
            "connectionLimit":5000
        },
        "trace":{
            "default":"LEVEL_ERROR",
            "dataStore":"LEVEL_ERROR",
            "collection":"LEVEL_ERROR",
            "timeSeries":"LEVEL_ERROR",
            "chunkManager":"LEVEL_ERROR",
            "objectManager":"LEVEL_ERROR",
            "checkpointFile":"LEVEL_ERROR",
            "checkpointService":"LEVEL_INFO",
            "logManager":"LEVEL_WARNING",
            "clusterService":"LEVEL_ERROR",
            "syncService":"LEVEL_ERROR",
            "systemService":"LEVEL_INFO",
            "transactionManager":"LEVEL_ERROR",
            "transactionService":"LEVEL_ERROR",
            "transactionTimeout":"LEVEL_WARNING",
            "triggerService":"LEVEL_ERROR",
            "sessionTimeout":"LEVEL_WARNING",
            "replicationTimeout":"LEVEL_WARNING",
            "recoveryManager":"LEVEL_INFO",
            "eventEngine":"LEVEL_WARNING",
            "clusterOperation":"LEVEL_INFO",
            "ioMonitor":"LEVEL_WARNING"
        }
    }
    EOF
    gs_passwd admin -p admin
    gs_startnode
    sleep 5
    while gs_stat -u admin/admin | grep RECOV > /dev/null; do
        echo Waiting for GridDB to be ready.
        sleep 5
    done
    gs_joincluster -n 1 -u admin/admin -n 3
    tail -f /var/lib/gridstore/log/gridstore*.log
     
     
    • java 应用
      pom.xml
     
    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <encoding>UTF-8</encoding>
            <java.version>1.8</java.version>
            <maven.compiler.source>1.8</maven.compiler.source>
            <maven.compiler.target>1.8</maven.compiler.target>
        </properties>
        <groupId>com.dalong</groupId>
        <artifactId>griddb-app</artifactId>
        <version>1.0-SNAPSHOT</version>
       <dependencies>
           <dependency>
               <groupId>com.github.griddb</groupId>
               <artifactId>gridstore</artifactId>
               <version>4.0.0</version>
           </dependency>
       </dependencies>
        <build>
            <!-- Maven Shade Plugin -->
            <finalName>griddb-app</finalName>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-shade-plugin</artifactId>
                    <version>2.3</version>
                    <executions>
                        <!-- Run shade goal on package phase -->
                        <execution>
                            <phase>package</phase>
                            <goals>
                                <goal>shade</goal>
                            </goals>
                            <configuration>
                                <transformers>
                                    <!-- add Main-Class to manifest file -->
                                    <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                        <mainClass>com.dalong.Application</mainClass>
                                    </transformer>
                                </transformers>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </project>
     

    Java 代码

    package com.dalong;
    import java.util.Arrays;
    import java.util.Properties;
    import com.toshiba.mwcloud.gs.Collection;
    import com.toshiba.mwcloud.gs.GSException;
    import com.toshiba.mwcloud.gs.GridStore;
    import com.toshiba.mwcloud.gs.GridStoreFactory;
    import com.toshiba.mwcloud.gs.Query;
    import com.toshiba.mwcloud.gs.RowKey;
    import com.toshiba.mwcloud.gs.RowSet;
    public class Application {
        static class Person {
            @RowKey String name;
            boolean status;
            long count;
            byte[] lob;
        }
        public static void main(String[] args) throws GSException {
    // Get a GridStore instance
            Properties props = new Properties();
            props.setProperty("notificationMember", args[0]);
            props.setProperty("clusterName", "defaultCluster");
            props.setProperty("user", "admin");
            props.setProperty("password", "admin");
            GridStore store = GridStoreFactory.getInstance().getGridStore(props);
            // Create a Collection (Delete if schema setting is NULL)
            Collection<String, Person> col = store.putCollection("col01", Person.class);
            // Set an index on the Row-key Column
            col.createIndex("name");
            // Set an index on the Column
            col.createIndex("count");
            // Set the autocommit mode to OFF
            col.setAutoCommit(false);
            // Prepare data for a Row
            Person person = new Person();
            person.name = "name01";
            person.status = false;
            person.count = 1;
            person.lob = new byte[] { 65, 66, 67, 68, 69, 70, 71, 72, 73, 74 };
            // Operate a Row on a K-V basis: RowKey = "name01"
            boolean update = true;
            col.put(person); // Add a Row
            person = col.get(person.name, update); // Obtain the Row (acquiring a lock for update)
            col.remove(person.name); // Delete the Row
            // Operate a Row on a K-V basis: RowKey = "name02"
            col.put("name02", person); // Add a Row (specifying RowKey)
            // Commit the transaction (Release the lock)
            col.commit();
            // Search the Collection for a Row
            Query<Person> query = col.query("select * where name = 'name02'");
            // Fetch and update the searched Row
            RowSet<Person> rs = query.fetch(update);
            while (rs.hasNext()) {
                // Update the searched Row
                Person person1 = rs.next();
                person1.count += 1;
                rs.update(person1);
                System.out.println("Person: " +
                        " name=" + person1.name +
                        " status=" + person1.status +
                        " count=" + person1.count +
                        " lob=" + Arrays.toString(person1.lob));
            }
            // Commit the transaction
            col.commit();
            // Release the resource
            store.close();
        }
    }

    postgres griddb fdw 参考https://github.com/rongfengliang/pgspider-docker
    java Dockerfile

     
    FROM openjdk:8u242-jdk-stretch
    WORKDIR /app
    COPY java-app/target/griddb-app.jar /app/griddb-app.jar
    COPY entrypoint.sh /entrypoint.sh
    ENTRYPOINT [ "/entrypoint.sh" ]

    java 容器entrypoint

    #!/bin/sh
    MEMBER=$MEMBER_ADDR
    java -jar /app/griddb-app.jar $MEMBER

    启动&&测试

    • 启动

      因为服务有依赖关系,先启动griddb 集群,然后是添加测试数据,最后是使用pg 的fdw 进行数据sql 访问

    // 启动griddb 集群
    docker-compose up -d griddb-1 griddb-2 griddb-3
    // 稍等1分钟左右,或者看看griddb 的日志,查看集群的状态,然后启动java app
    docker-compose up -d griddb-java
    // 启动pg  griddb fdw 扩展:
    docker-compose up -d pgspider-griddb
    • 使用扩展查询
    // 创建扩展
    CREATE EXTENSION griddb_fdw;
    // 创建外部server
    CREATE SERVER griddb_svr FOREIGN DATA WRAPPER griddb_fdw OPTIONS(notification_member 'griddb-1:10001,griddb-2:10001,griddb-3:10001',clustername 'defaultCluster');

    // 创建用户映射
    CREATE USER MAPPING FOR public SERVER griddb_svr OPTIONS(username 'admin', password 'admin');
    // 导入schema
    IMPORT FOREIGN SCHEMA griddb_schema FROM SERVER griddb_svr INTO public;
    // 数据查询
    select * from col01;
    • 效果

    参考资料

    http://www.toshiba-sol.co.jp/en/pro/griddb/docs-en/v4_1/GridDB_TechnicalReference.html
    https://github.com/rongfengliang/griddb-cluster-pgspider-fdw
    https://github.com/rongfengliang/pgspider-docker
    https://github.com/rongfengliang/pgspider-griddb-fdw-docker-learninng
    https://griddb.net/en/blog/quickly-deploy-three-node-griddb-cluster/
    https://medium.com/griddb

  • 相关阅读:
    dstat
    centos安装指定版本的golang
    APP防CC为什么复杂
    火狐浏览器的书签如何自动在新窗口打开?
    linux jdk版本随时切换
    centos7 yum安装java环境
    kangle清除缓存接口
    CC攻击原理及防范方法
    GET 和 POST 的区别 以及为什么 GET请求 比 POST请求 更快
    HTTP缓存机制
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/12294649.html
Copyright © 2020-2023  润新知