Neo4J 图库的集群部署与基础使用

Ned4J 图库的集群部署与基础使用

部署机器

名称 配置 IP
server1 8 核 16G 172.16.0.2
server2 8 核 16G 172.16.0.3
server3 8 核 16G 172.16.0.4
server4 8 核 16G 172.16.0.5

# 创建项目目录
mkdir -p /opt/neo4j/

# 环境变量
export USER_ID="$(id -u)"
export GROUP_ID="$(id -g)"
export NEO4J_DOCKER_IMAGE=neo4j:5-community
export NEO4J_EDITION=docker_compose
export EXTENDED_CONF=yes
export NEO4J_ACCEPT_LICENSE_AGREEMENT=yes
export NEO4J_AUTH=neo4j/your_password

neo4j.conf 配置文件

# Setting that specifies how much memory Neo4j is allowed to use for the page cache.
server.memory.pagecache.size=100M

# Setting that specifies the initial JVM heap size.
server.memory.heap.initial_size=100M

# The behavior of the initial discovery is determined by the parameters `dbms.cluster.discovery.resolver_type` and `dbms.cluster.discovery.endpoints`.
# The DNS strategy fetches the IP addresses of the cluster members using the DNS A records.
# ### dbms.cluster.discovery.resolver_type=DNS

# The value of `dbms.cluster.discovery.endpoints` should be set to a single domain name and the port of the discovery service.
# The domain name returns an A record for every server in the cluster when a DNS lookup is performed.
# Each A record returned by DNS should contain the IP address of the server in the cluster.
# The configured server uses all the IP addresses from the A records to join or form a cluster.
# The discovery port must be the same on all servers when using this configuration.
# ### dbms.cluster.discovery.endpoints=neo4j-network:5000

# Address (the public hostname/IP address of the machine)
# and port setting that specifies where this instance advertises for discovery protocol messages from other members of the cluster.
# ### server.discovery.advertised_address=$(hostname -i)

# Address (the public hostname/IP address of the machine)
# and port setting that specifies where this instance advertises for Raft messages within the cluster.
# ### server.cluster.raft.advertised_address=$(hostname)

 # Address (the public hostname/IP address of the machine)
 # and port setting that specifies where this instance advertises for requests for transactions in the transaction-shipping catchup protocol.
# ### server.cluster.advertised_address=$(hostname)

# Enable server-side routing
# ###dbms.routing.enabled=true

# Use server-side routing for neo4j:// protocol connections.
# ###dbms.routing.default_router=SERVER

# The advertised address for the intra-cluster routing connector.
# ###server.routing.advertised_address=$(hostname)

# HTTP Connector
#
dbms.connector.http.type=HTTP
dbms.connector.http.enabled=true
dbms.connectors.default_listen_address=0.0.0.0
#
#dbms.connector.http.address=0.0.0.0:#{default.http.port}
dbms.connector.http.address=0.0.0.0:7474
dbms.connector.http.listen_address=0.0.0.0:7474

Docker-Compose.yml 文件

version: '3.8'

# Custom top-level network
networks:
  neo4j-internal:

services:

  server1:
    # Docker image to be used
    image: ${NEO4J_DOCKER_IMAGE}

    # Hostname
    hostname: server1

    # Service-level network, which specifies the networks, from the list of the top-level networks (in this case only neo4j-internal), that the server will connect to.
    # Adds a network alias (used in neo4j.conf when configuring the discovery members)
    networks:
      neo4j-internal:
        aliases:
          - neo4j-network

    # The ports that will be accessible from outside the container - HTTP (7474) and Bolt (7687).
    ports:
      - "7474:7474"
      - "7687:7687"

    # Uncomment the volumes to be mounted to make them accessible from outside the container.
    volumes:
      - /opt/neo4j/neo4j.conf:/conf/neo4j.conf # This is the main configuration file.
      - /opt/neo4j/data/server1:/var/lib/neo4j/data
      - /opt/neo4j/logs/server1:/var/lib/neo4j/logs
      - /opt/neo4j/conf/server1:/var/lib/neo4j/conf
      - /opt/neo4j/import/server1:/var/lib/neo4j/import
      #- /opt/neo4j/metrics/server1:/var/lib/neo4j/metrics
      #- /opt/neo4j/licenses/server1:/var/lib/neo4j/licenses
      #- /opt/neo4j/ssl/server1:/var/lib/neo4j/ssl

    # Passes the following environment variables to the container
    environment:
      - NEO4J_ACCEPT_LICENSE_AGREEMENT
      - NEO4J_AUTH
      - EXTENDED_CONF
      - NEO4J_EDITION
      - NEO4J_initial_server_mode__constraint=PRIMARY

    # Simple check testing whether the port 7474 is opened.
    # If so, the instance running inside the container is considered as "healthy".
    # This status can be checked using the "docker ps" command.
    healthcheck:
      test: ["CMD-SHELL", "wget --no-verbose --tries=1 --spider localhost:7474 || exit 1"]

    # Set up the user
    user: ${USER_ID}:${GROUP_ID}

  server2:
    image: ${NEO4J_DOCKER_IMAGE}
    hostname: server2
    networks:
      neo4j-internal:
        aliases:
          - neo4j-network
    ports:
      - "7475:7474"
      - "7688:7687"
    volumes:
      - /opt/neo4j/neo4j.conf:/conf/neo4j.conf
      - /opt/neo4j/data/server2:/var/lib/neo4j/data
      - /opt/neo4j/logs/server2:/var/lib/neo4j/logs
      - /opt/neo4j/conf/server2:/var/lib/neo4j/conf
      - /opt/neo4j/import/server2:/var/lib/neo4j/import
      #- /opt/neo4j/metrics/server2:/var/lib/neo4j/metrics
      #- /opt/neo4j/licenses/server2:/var/lib/neo4j/licenses
      #- /opt/neo4j/ssl/server2:/var/lib/neo4j/ssl
    environment:
      - NEO4J_ACCEPT_LICENSE_AGREEMENT
      - NEO4J_AUTH
      - EXTENDED_CONF
      - NEO4J_EDITION
      - NEO4J_initial_server_mode__constraint=PRIMARY
    healthcheck:
      test: ["CMD-SHELL", "wget --no-verbose --tries=1 --spider localhost:7474 || exit 1"]
    user: ${USER_ID}:${GROUP_ID}

  server3:
    image: ${NEO4J_DOCKER_IMAGE}
    hostname: server3
    networks:
      neo4j-internal:
        aliases:
          - neo4j-network
    ports:
      - "7476:7474"
      - "7689:7687"
    volumes:
      - /opt/neo4j/neo4j.conf:/conf/neo4j.conf
      - /opt/neo4j/data/server3:/var/lib/neo4j/data
      - /opt/neo4j/logs/server3:/var/lib/neo4j/logs
      - /opt/neo4j/conf/server3:/var/lib/neo4j/conf
      - /opt/neo4j/import/server3:/var/lib/neo4j/import
      #- /opt/neo4j/metrics/server3:/var/lib/neo4j/metrics
      #- /opt/neo4j/licenses/server3:/var/lib/neo4j/licenses
      #- /opt/neo4j/ssl/server3:/var/lib/neo4j/ssl
    environment:
      - NEO4J_ACCEPT_LICENSE_AGREEMENT
      - NEO4J_AUTH
      - EXTENDED_CONF
      - NEO4J_EDITION
      - NEO4J_initial_server_mode__constraint=PRIMARY
    healthcheck:
      test: ["CMD-SHELL", "wget --no-verbose --tries=1 --spider localhost:7474 || exit 1"]
    user: ${USER_ID}:${GROUP_ID}

  server4:
    image: ${NEO4J_DOCKER_IMAGE}
    hostname: server4
    networks:
      neo4j-internal:
        aliases:
          - neo4j-network
    ports:
      - "7477:7474"
      - "7690:7687"
    volumes:
      - /opt/neo4j/neo4j.conf:/conf/neo4j.conf
      - /opt/neo4j/data/server4:/var/lib/neo4j/data
      - /opt/neo4j/logs/server4:/var/lib/neo4j/logs
      - /opt/neo4j/conf/server4:/var/lib/neo4j/conf
      - /opt/neo4j/import/server4:/var/lib/neo4j/import
      #- /opt/neo4j/metrics/server4:/var/lib/neo4j/metrics
      #- /opt/neo4j/licenses/server4:/var/lib/neo4j/licenses
      #- /opt/neo4j/ssl/server4:/var/lib/neo4j/ssl
    environment:
      - NEO4J_ACCEPT_LICENSE_AGREEMENT
      - NEO4J_AUTH
      - EXTENDED_CONF
      - NEO4J_EDITION
      - NEO4J_initial_server_mode__constraint=SECONDARY
    healthcheck:
      test: ["CMD-SHELL", "wget --no-verbose --tries=1 --spider localhost:7474 || exit 1"]
    user: ${USER_ID}:${GROUP_ID}
version: '2'
services:
  neo4j:
    image: docker.io/bitnami/neo4j:5
    ports:
      - '7474:7474'
      - '7473:7473'
      - '7687:7687'
    volumes:
      - 'neo4j_data:/bitnami'
    environment:
      - NEO4J_AUTH=neo4j/bitnami1
volumes:
  neo4j_data:
    driver: local

Neo4J 的基础使用

基于 7474 端口的访问

通过远程配置的IP访问与配置,特别需要注意的就是对应的Auth这块,从而基于对应的外部IP才可以访问 比如 http://192.168.1.217:7474/

参考

Neo4J Developer Docs

posted @ 2023-05-18 16:30  上海志彦  阅读(66)  评论(0编辑  收藏  举报