Docker 安装部署 neo4j

2023-05-16

Neo4j是一个高性能的,NOSQL图形数据库,本身就支持集群部署,今天要搭建的就是neo4j的因果集群,其中分为:
核心节点:core-server,可以对数据进行读写的中心节点,通过选举确定leader,follower.
只读节点:read-replica,只提供数据访问的只读节点,需要连接核心节点,可以非常方便的进行扩展

一、Docker 安装部署neo4j

第一步,从镜像源中查找镜像

docker search neo4j

第二步,拉取镜像源

docker pull neo4j(:版本号) 
//缺省 :版本号” 时默认安装latest版本的

第三步,查看本地镜像,检验是否拉取成功

docker images

启动容器

docker run -d --name container_name -p 27474:7474 -p 27687:7687 -v /home/neo4j/data:/data -v /home/neo4j/logs:/logs -v /home/neo4j/conf:/var/lib/neo4j/conf -v /home/neo4j/import:/var/lib/neo4j/import --env NEO4J_AUTH=neo4j/password neo4j
	-d --name container_name   //-d表示容器后台运行 --name指定容器名字
	-p 27474:7474 -p 27687:7687   //映射容器的端口号到宿主机的端口号;27474 为宿主机端口
	-v /home/neo4j/data:/data   //把容器内的数据目录挂载到宿主机的对应目录下
	-v /home/neo4j/logs:/logs   //挂载日志目录
	-v /home/neo4j/conf:/var/lib/neo4j/conf   //挂载配置目录
	-v /home/neo4j/import:/var/lib/neo4j/import   //挂载数据导入目录
	--env NEO4J_AUTH=neo4j/password   //设定数据库的名字的访问密码
	neo4j //指定使用的镜像

修改配置文件

// 进入容器配置目录挂载在宿主机的对应目录,我这里是/home/neo4j/conf
cd /home/neo4j/conf

// vim编辑器打开neo4j.conf
vim neo4j.conf

// 进行以下更改
//在文件配置末尾添加这一行
dbms.connectors.default_listen_address=0.0.0.0  //指定连接器的默认监听ip为0.0.0.0,即允许任何ip连接到数据库

//修改
dbms.connector.bolt.listen_address=0.0.0.0:7687  //取消注释并把对bolt请求的监听“地址:端口”改为“0.0.0.0:7687
dbms.connector.http.listen_address=0.0.0.0:7474  //取消注释并把对http请求的监听“地址:端口”改为“0.0.0.0:7474

重启neo4j容器

二、源码包安装 neo4j

// 命令下载
curl -O http://dist.neo4j.org/neo4j-community-3.4.5-unix.tar.gz

// 解压安装
tar -axvf neo4j-community-3.4.5-unix.tar.gz

安装目录下找到conf目录下的neo4j.conf文件,修改相应配置

# 修改第22行load csv时l路径,在前面加个#,可从任意路径读取文件
#dbms.directories.import=import

# 修改35行和36行,设置JVM初始堆内存和JVM最大堆内存
# 生产环境给的JVM最大堆内存越大越好,但是要小于机器的物理内存
dbms.memory.heap.initial_size=5g
dbms.memory.heap.max_size=10g

# 修改46行,可以认为这个是缓存,如果机器配置高,这个越大越好
dbms.memory.pagecache.size=10g

# 修改54行,去掉改行的#,可以远程通过ip访问neo4j数据库
dbms.connectors.default_listen_address=0.0.0.0

# 默认 bolt端口是7687,http端口是7474,https关口是7473,不修改下面3项也可以
# 修改71行,去掉#,设置http端口为7687,端口可以自定义,只要不和其他端口冲突就行
dbms.connector.bolt.listen_address=:7687

# 修改75行,去掉#,设置http端口为7474,端口可以自定义,只要不和其他端口冲突就行
dbms.connector.http.listen_address=:7474

# 修改79行,去掉#,设置http端口为7473,端口可以自定义,只要不和其他端口冲突就行
dbms.connector.https.listen_address=:7473

# 修改227行,去掉#,允许从远程url来load csv
dbms.security.allow_csv_import_from_file_urls=true

# 修改246行,允许使用neo4j-shell,类似于mysql 命令行之类的
dbms.shell.enabled=true

# 修改248行,去掉#,设置连接neo4j-shell的端口,一般都是localhost或者127.0.0.1,这样安全,其他地址的话,一般使用https就行
dbms.shell.host=127.0.0.1

# 修改250行,去掉#,设置neo4j-shell端口,端口可以自定义,只要不和其他端口冲突就行
dbms.shell.port=1337

# 修改254行,设置neo4j可读可写
dbms.read_only=false

# 设置JDK,若系统默认是jdk1.8及以上可以不需要设置
JAVA_HOME=/usr/java/jdk1.8.0_144
JRE_HOME=/usr/java/jdk1.8.0_144/jre

APOC下载

Neo4j插件APOC
将下载好的.jar文件直接放到neo4j安装目录下的plugins文件夹目录下就可以了。不要解压!!!

配置

neo4j安装目录下conf文件夹里的neo4j.conf
将dbms.security.auth_enabled=false注释掉

文件末尾加上:

dbms.sercurity.procedures.unrestricted=apoc.*
dbms.memory.pagecache.size=10g
dbms.memory.heap.initial_size=1g
dbms.memory.heap.max_size=4g

三、k8s搭建NEO4J因果集

此集群是有状态的服务,所以使用k8s的StatefulSet进行部署,创建neo4j-core-server.yaml文件

部署NEO4J-CORE-SERVER集群

# 先创建neo4j的命名空间namespace
---
apiVersion: v1
kind: Namespace
metadata:
   name: neo4j
   labels:
     name: neo4j
     
---

apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
  name: neo4j-core
  namespace: neo4j
  labels:
    app: neo4j-core
spec:
  replicas: 2    # 部署2个core-server
  selector:
    matchLabels:
      app: neo4j-core
  serviceName: neo4j-core
  template:
    metadata:
      labels:
        app: neo4j-core
    spec:
      containers:
      - name: neo4j-core
        image: neo4j:3.5.5-enterprise   # 官方镜像,3.5.5企业版
        imagePullPolicy: IfNotPresent
        env:    # 这里通过env,配置镜像环境参数,这是因为此镜像是通过这样来进行配置参数的
          - name: NEO4J_ACCEPT_LICENSE_AGREEMENT    # 接受证书协议,必须的
            value: "yes"
          - name: NEO4J_dbms_connectors_default__advertised__address  # 指定自身pod的ip地址,默认为localhost,在集群中必须注明自身地址,这里直接用ip
            valueFrom:
              fieldRef:
                fieldPath: status.podIP
          - name: NEO4J_dbms_mode  # 节点的模式,选择CORE,就是核心节点
            value: "CORE"
          - name: NEO4J_AUTH   # 一定要自定义初始验证的用户名/密码
            value: "neo4j/your-password"
          - name: NEO4J_causal__clustering_minimum__core__cluster__size__at__formation
            value: "2"
          - name: NEO4J_causal__clustering_minimum__core__cluster__size__at__runtime
            value: "2"
          - name: NEO4J_causal__clustering_discovery__type  # 默认集群发现方式为LIST,这里写不写都行
            value: "LIST"
          - name: NEO4J_causal__clustering_initial__discovery__members  # 手动写明集群中所有成员的ip:port,5000端口为集群发现端口
            value: "neo4j-core-0.neo4j-core.neo4j.svc.cluster.local:5000,neo4j-core-1.neo4j-core.neo4j.svc.cluster.local:5000"
          - name: NEO4J_causal__clustering_discovery__advertised__address  # 下面这三个必须定义,为节点自身的ip:port,相当于节点自身的名称,因为默认是会用自身hostname,但是在k8s中,无法单单通过hostname解析到ip地址,这样定义的自身地址会无法识别
            value: $(NEO4J_dbms_connectors_default__advertised__address):5000
          - name: NEO4J_causalClustering_transactionAdvertisedAddress
            value: $(NEO4J_dbms_connectors_default__advertised__address):6000
          - name: NEO4J_causalClustering_raftAdvertisedAddress
            value: $(NEO4J_dbms_connectors_default__advertised__address):7000
        volumeMounts:
        - name: neo4j-core    # 挂载数据目录/data
          mountPath: /data
  volumeClaimTemplates:
  - metadata:
      name: neo4j-core  # 这里name要和上面volumeMounts的name一致,才能绑定到对应的pod
      annotations:
        volume.beta.kubernetes.io/storage-class: "managed-nfs-storage"  # 这里是上一步创建的nfs动态卷name
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 2Gi   # 大小自定义
          
---

apiVersion: v1
kind: Service
metadata:
  name: neo4j-core
  namespace: neo4j
spec:
  selector:
    app: neo4j-core
  type: NodePort     # 这里用nodeport来开启外网访问,没用traefik是因为7687的连接端口不是http访问,需要4层负载,但是traefik不支持,所以只能通过nodeport来实现外网访问,才能正常访问7474端口的web管理界面。
  ports:
    - protocol: TCP
      name: http
      port: 7474
      nodePort: 27474
      targetPort: 7474
    - protocol: TCP
      name: blot
      port: 7687
      nodePort: 27687
      targetPort: 7687

执行 yaml文件

kubectl create -f neo4j-core-server.yaml

【注】

1. 以上yaml文件中的注释要看清楚,因为 因果集群的核心节点是采用的选举方式来确定主节点的,所以最好是单数节点,我这里只部署了2个节点,只是因为资源不太够,测试而已,生产使用的话,最少3节点。

2. 在这里,我用的默认的list的集群发现方式,有一点不好,就是如果增加节点,需要自己手动写上所有集群节点到列表中,且增加核心节点的时候,会比较麻烦。

	官方有三种发现方式,分别为LIST,DNS,K8S。
	DNS的发现方式,可以通过在Service中,使用clusterIP:None 来取消负载的ip,然后在`NEO4J_causal__clustering_initial__discovery__members` 中设置为 `neo4j-core-0.neo4j-core.neo4j.svc.cluster.local:5000`,然后通过k8s集群中的dns服务,来解析到此Service中所有的ip。
	这样配置非常方便,还不需要修改,没用是因为Service中,如果用了clusterIP:None 则没发使用nodeport来暴露7687的tcp端口给k8s外部网络使用,除非traefik可以实现tcp的4层负载,或者不是使用的traefik,二是nginx的Ingress,实现4层负载即可。
	K8S的发现方式呢,由于文档没有示例的配置参考,不管怎么样设置,都还是无法正常启动,所以就没法用。

3. 数据持久化存储,我这里用的nfs动态卷。

4. 其中一定要自定义初始化的用户密码,因为neo4j的每个节点的用户验证系统是独立的!
也就是说,你在leader节点上新增用户或修改密码,是不会同步到follower节点上的。
所以,为了不至于当leader节点挂掉后,新的leader节点密码不同导致出错,部署时最好统一用户密码,当然只读节点也是。

执行后,查看pod的日志,如下则为正常启动

在这里插入图片描述

部署只读节点READ-REPLICA

core核心节点部署完成后,则可以进行只读节点的部署,只读节点比核心节点则简单很多,创建neo4j-read-replica.yaml 文件

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: neorj-read-replica
  namespace: neo4j
  labels:
    app: neorj-read-replica
spec:
  replicas: 3
  selector:
    matchLabels:
      app: neorj-read-replica
  template:
    metadata:
      labels:
        app: neorj-read-replica
    spec:
      containers:
      - name: neorj-read-replica
        image: neo4j:3.5.5-enterprise
        imagePullPolicy: IfNotPresent
        env:
          - name: NEO4J_ACCEPT_LICENSE_AGREEMENT
            value: "yes"
          - name: NEO4J_dbms_connectors_default__advertised__address
            valueFrom:
              fieldRef:
                fieldPath: status.podIP
          - name: NEO4J_dbms_mode   # 指定模式为只读节点模式
            value: "READ_REPLICA"
          - name: NEO4J_AUTH
            value: "neo4j/your-password"   # 统一设置用户密码
          - name: NEO4J_causal__clustering_discovery__type
            value: "LIST"
          - name: NEO4J_causal__clustering_initial__discovery__members
            value: "neo4j-core-0.neo4j-core.neo4j.svc.cluster.local:5000,neo4j-core-1.neo4j-core.neo4j.svc.cluster.local:5000"
            
---

apiVersion: v1
kind: Service
metadata:
  name: neorj-read-replica
  namespace: neo4j
spec:
  selector:
    app: neorj-read-replica
  ports:
  - protocol: TCP
    port: 7687
    targetPort: 7687

执行此yaml文件,创建只读节点

kubectl create -f neo4j-read-replica.yaml

【注】
部署3个只读节点,无状态服务,不需要进行数据持久化,只需要将core节点的集群列表写出就行了,会自动去找到核心节点的集群,然后从中复制数据,提供访问即可。
因为只读节点只能访问数据,所以没必要提供k8s的外部访问,所以直接在service中负载一下bolt的访问端口就行了,以提供给k8s内部应用访问即可。

查看日志如下为正常启动

在这里插入图片描述

访问WEB界面

部署完成后,设置域名,设置nginx,访问web界面
默认用户密码为: neo4j / neo4j
登录修改密码,然后查看状态,可以看到集群的状态

在这里插入图片描述

neo4j 3个成员组成的集群

为每个成员创建一个PersistentVolume
volume.sh

for i in $(seq 0 2); do
  cat <<EOF | kubectl create -f -
kind: PersistentVolume
apiVersion: v1
metadata:
  name: pv${i}
  labels:
    type: local
    app: neo4j
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/tmp/${i}"
EOF
 
  cat <<EOF | kubectl create -f -
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: datadir-neo4j-${i}
  labels:
    app: neo4j
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
EOF
done

运行此脚本,它将创建3个卷

$ kubectl get pv
NAME      CAPACITY   ACCESSMODES   STATUS    CLAIM                     REASON    AGE
pv0       1Gi        RWO           Bound     default/datadir-neo4j-0             7s
pv1       1Gi        RWO           Bound     default/datadir-neo4j-1             7s
pv2       1Gi        RWO           Bound     default/datadir-neo4j-2             7s
$ kubectl get pvc
NAME              STATUS    VOLUME    CAPACITY   ACCESSMODES   AGE
datadir-neo4j-0   Bound     pv0       1Gi        RWO           26s
datadir-neo4j-1   Bound     pv1       1Gi        RWO           26s
datadir-neo4j-2   Bound     pv2       1Gi        RWO           25s

我们需要创建一个PetSet模板

# Headless service to provide DNS lookup
apiVersion: v1
kind: Service
metadata:
  labels:
    app: neo4j
  name: neo4j
spec:
  clusterIP: None
  ports:
    - port: 7474
  selector:
    app: neo4j
----
# new API name
apiVersion: "apps/v1alpha1"
kind: PetSet
metadata:
  name: neo4j
spec:
  serviceName: neo4j
  replicas: 3
  template:
    metadata:
      annotations:
        pod.alpha.kubernetes.io/initialized: "true"
        pod.beta.kubernetes.io/init-containers: '[
            {
                "name": "install",
                "image": "gcr.io/google_containers/busybox:1.24",
                "command": ["/bin/sh", "-c", "echo \"
                unsupported.dbms.edition=enterprise\n
                dbms.mode=CORE\n
                dbms.connectors.default_advertised_address=$HOSTNAME.neo4j.default.svc.cluster.local\n
                dbms.connectors.default_listen_address=0.0.0.0\n
                dbms.connector.bolt.type=BOLT\n
                dbms.connector.bolt.enabled=true\n
                dbms.connector.bolt.listen_address=0.0.0.0:7687\n
                dbms.connector.http.type=HTTP\n
                dbms.connector.http.enabled=true\n
                dbms.connector.http.listen_address=0.0.0.0:7474\n
                causal_clustering.raft_messages_log_enable=true\n
                causal_clustering.initial_discovery_members=neo4j-0.neo4j.default.svc.cluster.local:5000,neo4j-1.neo4j.default.svc.cluster.local:5000,neo4j-2.neo4j.default.svc.cluster.local:5000\n
                causal_clustering.leader_election_timeout=2s\n
                  \" > /work-dir/neo4j.conf" ],
                "volumeMounts": [
                    {
                        "name": "confdir",
                        "mountPath": "/work-dir"
                    }
                ]
            }
        ]'
      labels:
        app: neo4j
    spec:
      containers:
      - name: neo4j
        image: "neo4j/neo4j-experimental:3.1.0-M13-beta3-enterprise"
        imagePullPolicy: Always
        ports:
        - containerPort: 5000
          name: discovery
        - containerPort: 6000
          name: tx
        - containerPort: 7000
          name: raft
        - containerPort: 7474
          name: browser
        - containerPort: 7687
          name: bolt
        securityContext:
          privileged: true
        volumeMounts:
        - name: datadir
          mountPath: /data
        - name: confdir
          mountPath: /conf
      volumes:
      - name: confdir
  volumeClaimTemplates:
  - metadata:
      name: datadir
      annotations:
        volume.alpha.kubernetes.io/storage-class: anything
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 2Gi

创建PetSet

$ kubectl create -f neo4j.yaml 
service "neo4j" created
petset "neo4j" created

检查Pod是否已启动并正在运行

$ kubectl get pods
NAME      READY     STATUS    RESTARTS   AGE
neo4j-0   1/1       Running   0          2m
neo4j-1   1/1       Running   0          14s
neo4j-2   1/1       Running   0          10s

neo4j的日志文件

$ kubectl logs neo4j-0
Starting Neo4j.
2016-11-25 16:39:50.333+0000 INFO  Starting...
2016-11-25 16:39:51.723+0000 INFO  Bolt enabled on 0.0.0.0:7687.
2016-11-25 16:39:51.733+0000 INFO  Initiating metrics...
2016-11-25 16:39:51.911+0000 INFO  Waiting for other members to join cluster before continuing...
2016-11-25 16:40:12.074+0000 INFO  Started.
2016-11-25 16:40:12.428+0000 INFO  Mounted REST API at: /db/manage
2016-11-25 16:40:13.350+0000 INFO  Remote interface available at http://neo4j-0.neo4j.default.svc.cluster.local:7474/
$ kubectl logs neo4j-1
Starting Neo4j.
2016-11-25 16:39:53.846+0000 INFO  Starting...
2016-11-25 16:39:56.212+0000 INFO  Bolt enabled on 0.0.0.0:7687.
2016-11-25 16:39:56.225+0000 INFO  Initiating metrics...
2016-11-25 16:39:56.341+0000 INFO  Waiting for other members to join cluster before continuing...
2016-11-25 16:40:16.623+0000 INFO  Started.
2016-11-25 16:40:16.951+0000 INFO  Mounted REST API at: /db/manage
2016-11-25 16:40:17.607+0000 INFO  Remote interface available at http://neo4j-1.neo4j.default.svc.cluster.local:7474/
$ kubectl logs neo4j-2
Starting Neo4j.
2016-11-25 16:39:57.828+0000 INFO  Starting...
2016-11-25 16:39:59.166+0000 INFO  Bolt enabled on 0.0.0.0:7687.
2016-11-25 16:39:59.176+0000 INFO  Initiating metrics...
2016-11-25 16:39:59.329+0000 INFO  Waiting for other members to join cluster before continuing...
2016-11-25 16:40:19.216+0000 INFO  Started.
2016-11-25 16:40:19.675+0000 INFO  Mounted REST API at: /db/manage
2016-11-25 16:40:21.029+0000 INFO  Remote interface available at http://neo4j-2.neo4j.default.svc.cluster.local:7474/

为每个服务器设置了端口转发

$ kubectl port-forward neo4j-0 27474:7474 27687:7687

运行以下过程来获得集群的概述

CALL dbms.cluster.overview()
 
╒════════════════════════════════════╤══════════════════════════════════════════════════════╤════════╕
│id                                  │addresses                                             │role    │
╞════════════════════════════════════╪══════════════════════════════════════════════════════╪════════╡
│81d8e5e2-02db-4414-85de-a7025b346e84│[bolt://neo4j-0.neo4j.default.svc.cluster.local:27687,│LEADER  │
│                                    │ http://neo4j-0.neo4j.default.svc.cluster.local:27474]│        │
├────────────────────────────────────┼──────────────────────────────────────────────────────┼────────┤
│347b7517-7ca0-4b92-b9f0-9249d46b2ad3│[bolt://neo4j-1.neo4j.default.svc.cluster.local:27687,│FOLLOWER│
│                                    │ http://neo4j-1.neo4j.default.svc.cluster.local:27474]│        │
├────────────────────────────────────┼──────────────────────────────────────────────────────┼────────┤
│a5ec1335-91ce-4358-910b-8af9086c2969│[bolt://neo4j-2.neo4j.default.svc.cluster.local:27687,│FOLLOWER│
│                                    │ http://neo4j-2.neo4j.default.svc.cluster.local:27474]│        │
└────────────────────────────────────┴──────────────────────────────────────────────────────┴────────┘

如果 希望集群中有5台服务器而不是3台,运行以下命令来增加副本的大小

$ kubectl patch petset neo4j -p '{"spec":{"replicas":5}}'
"neo4j" patched

再次运行该过程

CALL dbms.cluster.overview()
 
╒════════════════════════════════════╤══════════════════════════════════════════════════════╤════════╕
│id                                  │addresses                                             │role    │
╞════════════════════════════════════╪══════════════════════════════════════════════════════╪════════╡
│81d8e5e2-02db-4414-85de-a7025b346e84│[bolt://neo4j-0.neo4j.default.svc.cluster.local:27687,│LEADER  │
│                                    │ http://neo4j-0.neo4j.default.svc.cluster.local:27474]│        │
├────────────────────────────────────┼──────────────────────────────────────────────────────┼────────┤
│347b7517-7ca0-4b92-b9f0-9249d46b2ad3│[bolt://neo4j-1.neo4j.default.svc.cluster.local:27687,│FOLLOWER│
│                                    │ http://neo4j-1.neo4j.default.svc.cluster.local:27474]│        │
├────────────────────────────────────┼──────────────────────────────────────────────────────┼────────┤
│a5ec1335-91ce-4358-910b-8af9086c2969│[bolt://neo4j-2.neo4j.default.svc.cluster.local:27687,│FOLLOWER│
│                                    │ http://neo4j-2.neo4j.default.svc.cluster.local:27474]│        │
├────────────────────────────────────┼──────────────────────────────────────────────────────┼────────┤
│28613d06-d4c5-461c-b277-ddb3f05e5647│[bolt://neo4j-3.neo4j.default.svc.cluster.local:27687,│FOLLOWER│
│                                    │ http://neo4j-3.neo4j.default.svc.cluster.local:27474]│        │
├────────────────────────────────────┼──────────────────────────────────────────────────────┼────────┤
│2eaa0058-a4f3-4f07-9f22-d310562ad1ec│[bolt://neo4j-4.neo4j.default.svc.cluster.local:27687,│FOLLOWER│
│                                    │ http://neo4j-4.neo4j.default.svc.cluster.local:27474]│        │
└────────────────────────────────────┴──────────────────────────────────────────────────────┴────────┘

再次回到3很简单

$ kubectl patch petset neo4j -p '{"spec":{"replicas":3}}'
"neo4j" patched
CALL dbms.cluster.overview()
 
╒════════════════════════════════════╤══════════════════════════════════════════════════════╤════════╕
│id                                  │addresses                                             │role    │
╞════════════════════════════════════╪══════════════════════════════════════════════════════╪════════╡
│81d8e5e2-02db-4414-85de-a7025b346e84│[bolt://neo4j-0.neo4j.default.svc.cluster.local:27687,│LEADER  │
│                                    │ http://neo4j-0.neo4j.default.svc.cluster.local:27474]│        │
├────────────────────────────────────┼──────────────────────────────────────────────────────┼────────┤
│347b7517-7ca0-4b92-b9f0-9249d46b2ad3│[bolt://neo4j-1.neo4j.default.svc.cluster.local:27687,│FOLLOWER│
│                                    │ http://neo4j-1.neo4j.default.svc.cluster.local:27474]│        │
├────────────────────────────────────┼──────────────────────────────────────────────────────┼────────┤
│a5ec1335-91ce-4358-910b-8af9086c2969│[bolt://neo4j-2.neo4j.default.svc.cluster.local:27687,│FOLLOWER│
│                                    │ http://neo4j-2.neo4j.default.svc.cluster.local:27474]│        │
└────────────────────────────────────┴──────────────────────────────────────────────────────┴────────┘

托管Kubernetes上部署Neo4J单核

cd /tmp/  git clone https: //github.com/sdaschner/neo4j-helm --branch single-instance  cd neo4j-helm/  helm template graphdb \ 
   --set acceptLicenseAgreement=yes \ 
   --set neo4jPassword=mySecretPassword . \ 
   > /tmp/neo4j.yaml  kubectl apply -f /tmp/neo4j.yaml 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Docker 安装部署 neo4j 的相关文章

  • Ubuntu20.04系统下进行复制粘贴文件显示没有权限的解决办法

    Ctrl 43 alt 43 T打开终端输入命令sudo nautilus然后就可以打开一个不需要管理员权限的界面 xff0c 可以直接复制粘贴 亲测有效 xff01 xff01 借鉴于博客 xff1a https blog csdn ne
  • Ubuntu20.04安装anaconda3成功以后,找不到conda命令

    原因 xff1a 环境设置没有更新 解决办法 xff1a 注意路径 xff01 找到anaconda安装完成后生成的文件夹位置 相应修改 xff0c 如下图我的位置就在主目录下 xff1a 因此 xff0c 我执行的命令为 xff1a ec
  • ubuntu16.04 opencv打开摄像头失败

    ubuntu16 04 opencv打开摄像头失败 按照opencv检测AruCo标记教程 xff0c 运行程序时打开摄像头失败 xff0c 使用的相机是Intel RealSense D435 发生问题的代码如下 span class t
  • 计算机视觉学习笔记&思维导图(一起轻松学习计算机视觉与图像处理)

    文章目录 前言一 思维导图二 笔记勘误 前言 本文为计算机视觉课程期末复习的笔记 xff0c 编者耗时近半个月整理而成 内容依据课程的学习资料以及查阅网上一些资料梳理得到的 xff0c 编者希望在应付考试的同时能够将计算机视觉的知识体系建立
  • python发送邮件

    text 61 39 亲爱的Jerry 我是你的邻居Tom xff01 5 1邀请你来参加劳动 xff01 CALL ME xff1a 123 64 qq com 39 from email mime text import MIMETex
  • Python实现微信自动化发送信息

    需求 xff1a 利用PC端微信实现自动向文件传输助手 xff0c 好友等发送信息 库说明 psutil 获取系统运行的进程和系统利用率 xff08 包括CPU 内存 磁盘 网络等 xff09 信息 xff0c 用于获取进程ID pywin
  • 数据类型——枚举

    文章目录 枚举是什么枚举的声明枚举与其他数据类型的转换与int类型转换枚举转intint转枚举 与string类型转换枚举转字符串字符串转枚举 枚举的意义是什么 枚举是什么 在c 中 xff0c 枚举 enumeration 是一种数据类型
  • C# 调用WebService的方式汇总

    C 调用WebService的方式汇总 方式一 xff1a 根据提供的webservice地址 xff0c 用VS自带工具生成cs文件 xff0c 添加到项目中使用即可 方式二 xff1a 根据webservice地址 xff0c 动态在项
  • npm 报错:`[HPM] Error occurred while trying to proxy request (ECONNREFUSED)`

    npm 报错 xff1a HPM Error occurred while trying to proxy request users from localhost 8000 to https localhost 5000 ECONNREF
  • selenium Grid 4.x版本 部署操作 笔记

    selenium Grid 4 x版本 部署操作 笔记 selenium Grid 是 selenium套件 的一部分 xff0c 实现分布式测试 xff0c 多用于浏览器兼容性测试 使用 hub nodes 理念 xff1a 一台 hub
  • 图解辗转相除法

    前言 虽然在很久很久以前刚入门ACM的时候就已经知道辗转相除法的存在 xff0c 并且也用GCD解了不少题 xff0c 不过说实话辗转相除法的原理一直不是很清楚 直到最近做到这样一道题 Codeforces 343A xff0c 本以为是一
  • 【程序设计思维与实践 Week2 实验C】瑞神打牌

    题意 xff1a 牌局由四个人构成 xff0c 围成一圈 我们称四个方向为北 东 南 西 对应的英文是North xff0c East xff0c South xff0c West 游戏一共由一副扑克 xff0c 也就是52张构成 开始 x
  • 【程序设计思维与实践 Week5 作业D】滑动窗口

    题目描述 xff1a 有一个长度为 n 的数列和一个大小为 k 的窗口 窗口可以在数列上来回移动 现在 我们想知道在窗口从左往右滑的时候 xff0c 每次窗口内数的最大值和最小值分别是多少 例如 xff1a 数列是 1 3 1 3 5 3
  • 【Week8 CSP-M2 C】咕咕东的奇妙序列

    题目描述 格式说明 样例输入 样例输出 数据规模 思路 由题知 xff0c 这个无限序列的第i部分是从1 i的子序列 xff0c 该解法的大体思路是我们首先确定要查询的项 设为k项 在无限序列的第几部分 第几个子序列 xff0c 然后再从这
  • 【Week 8 作业A】区间选点II

    题目描述 给定一个数轴上的 n 个区间 xff0c 要求在数轴上选取最少的点使得第 i 个区间 ai bi 里至少有 ci 个点 输入格式 输入第一行一个整数 n 表示区间的个数 xff0c 接下来的 n 行 xff0c 每一行两个用空格隔
  • 【Week 8 作业 B】猫猫向前冲

    题目描述 众所周知 xff0c TT 是一位重度爱猫人士 xff0c 他有一只神奇的魔法猫 有一天 xff0c TT 在 B 站上观看猫猫的比赛 一共有 N 只猫猫 xff0c 编号依次为1 xff0c 2 xff0c 3 xff0c xf
  • 【Week 9 作业 A】咕咕东的目录管理器

    题目描述 咕咕东的雪梨电脑的操作系统在上个月受到宇宙射线的影响 xff0c 时不时发生故障 xff0c 他受不了了 xff0c 想要写一个高效易用零bug的操作系统 这工程量太大了 xff0c 所以他定了一个小目标 xff0c 从实现一个目
  • 【Week 11 作业】必做题

    Week 11 必做题 A 必做题 1题目描述输入格式输出格式输入样例输出样例思路代码 B 必做题 2题目描述输入格式输出格式数据范围样例输入样例输出思路代码 C 必做题 3题目描述输入格式输出格式样例输入样例输出思路代码 D 必做题 4题
  • 【Week 12 作业】必做题

    Week12必做题 必做题1题目描述输入格式输出格式输入样例输出样例代码 必做题2题目描述输入格式输出格式输入样例输出样例思路注意代码 必做题3题目描述输入格式输出格式输入样例输出样例思路代码 必做题1 题目描述 给出n个数 xff0c z
  • 【Week 13 作业E】TT的神秘任务3

    题目描述 TT 猫咖的生意越来越红火 xff0c 人越来越多 xff0c 也越来越拥挤 为了解决这个问题 xff0c TT 决定扩大营业规模 xff0c 但猫从哪里来呢 xff1f TT 第一时间想到了神秘人 xff0c 想要再次通过完成任

随机推荐

  • 【Week 14 作业E】Q老师度假

    题目描述 忙碌了一个学期的 Q老师 决定奖励自己 N 天假期 假期中不同的穿衣方式会有不同的快乐值 已知 Q老师 一共有 M 件衬衫 xff0c 且如果昨天穿的是衬衫 A xff0c 今天穿的是衬衫 B xff0c 则 Q老师 今天可以获得
  • Git安装和Azure DevOps使用

    Git安装和Azure DevOps使用 为了方便团队开发 xff0c 需要用到Azure DevOps作为代码仓库 xff0c DevOps需要用到Git环境 xff0c 如果你已经安装git请跳过前两步 本次重点是介绍DevOps克隆项
  • 【Week 15 作业B】ZJM与生日礼物

    题目描述 ZJM 收到了 Q老师 送来的生日礼物 xff0c 但是被 Q老师 加密了 只有 ZJM 能够回答对 Q老师 的问题 xff0c Q老师 才会把密码告诉 ZJM Q老师 给了 ZJM 一些仅有 01 组成的二进制编码串 他问 ZJ
  • 【Week 15 作业C】ZJM与纸条

    题目描述 ZJM 的女朋友是一个书法家 xff0c 喜欢写一些好看的英文书法 有一天 ZJM 拿到了她写的纸条 xff0c 纸条上的字暗示了 ZJM 的女朋友 想给 ZJM 送生日礼物 ZJM 想知道自己收到的礼物是不是就是她送的 xff0
  • 【Week 16】CSP-M4

    TT数鸭子 题目描述 输入输出描述 样例 思路 对每个数字按数位进行遍历 xff0c 求取不重复数字个数即可 代码 span class token macro property span class token directive key
  • Windows 版Oracle 数据库(安装)史上最详细过程

    Oracle 11 g数据库的卸载步骤 Oracle 11 g数据库的安装步骤 首先到官网上去下载oracle64位的安装程序 第一步 xff1a 将两个datebase文件夹解压到同一目录中 当下载完成后 它里面是两个文件夹 span c
  • Windows 版Oracle 数据库(卸载)史上最详细过程

    上一篇文章已经详细说明了 Oracle 11 g数据库的安装步骤 这次我们再来详细说明一下卸载 xff0c 无论是不想继续使用 xff0c 还是因为安装过程出现错误失败 xff0c 我们都需要将其卸载重新安装 xff0c 卸载此时尤为重要
  • Oracle 11 g 数据库使用教程以及使用过程中的问题

    2020 12 21 更新bug PLSQL 登录oracle数据库出现 无法解析指定的连接标识符 错误 解决办法 xff1a 问题就是安装完client后 xff0c 出在tnsnames oRA xff0c 你需要把tnsnames o
  • IIS 搭建简单网站 并 发布项目

    IIS说的是互联网信息服务 全名 xff1a Internet Information Services 是微软提供的基于运行Windows的互联网基本服务 基本的windows版本都支持IIS配置 xff0c XP win8等家庭版的II
  • Fiddler 抓包工具使用详解

    Fiddler是一个蛮好用的抓包工具 xff0c 可以将网络传输发送与接受的数据包进行截获 重发 编辑 转存等操作 也可以用来检测网络安全 Fiddler xff1a 译名 小提琴手 xff0c 由Eric开发 xff0c 曾就职微软 Fi
  • Xmanager 5 (Windows 远程Centos工具 )

    Xmanager是一款小巧 便捷的浏览远端X窗口系统的工具 xff0c 是市场上领先的PC X服务器 xff0c 可将X应用程序的强大功能带入Windows环境 Xmanager xff0c 可以将PC变成X Windows工作站 xff0
  • 使用Docker部署MySQL

    在 Docker 下部署 xff0c 使用命令行进行拉取 1 拉取mysql 最新版本mysql xff1a span class token function docker span pull mysql latest 拉取5 7版本my
  • 阿里云盘 WebDAV升级

    目录 升级背景 升级步骤 1 查看已安装的阿里云盘 WebDAV 2 卸载已安装的阿里云盘 WebDAV 3 重装阿里云盘 WebDAV 可能遇到的问题 参考链接 环境 xff1a eSir 版 OpenWrt 升级背景 安装阿里云盘 We
  • CentOS 安装 转码软件FFMPeg

    FFmpeg是一个自由软件 xff0c 可以运行音频和视频多种格式的录影 转换 流功能 xff0c 包含了 libavcodec 这是一个用于多个项目中音频和视频的解码器库 xff0c 和libavformat 一个音频与视频格式转换库 通
  • 使用 Docker 部署 minio 文件服务器

    一 获取镜像 span class token variable docker span span class token variable search span span class token variable minio span
  • Docker 安装 Nginx 与 配置 环境

    Nginx 是一个高性能的 HTTP 和反向代理 web 服务器 xff0c 同时也提供了 IMAP POP3 SMTP 服务 Nginx 镜像库地址 通过 Sort by 查看其他版本的 Nginx xff0c 默认是最新版本 nginx
  • RabbitMQ安装部署命令

    一 Docker安装部署RabbitMQ 1 通过Docker拉取镜像 docker pull rabbitmq span class token punctuation span span class token number 3 7 s
  • Docker 同步系统时间问题

    查看当前时区 系统时区是通过符号链接 etc localtime 到目录中的二进制时区标识符来 配置的 usr share zoneinfo span class token variable timedatectl span span c
  • 制作Ghost备份与还原

    用Ghost手动备份系统 用Ghost手动备份系统 xff0c 主要是针对组装电脑而言 xff0c 至于品牌机 xff0c 它都会有自己的系统恢复工具 xff0c 所以不在此列 现在很多人对在使用电脑中出现系统崩溃的故障 xff0c 都会采
  • Docker 安装部署 neo4j

    Neo4j是一个高性能的 NOSQL图形数据库 xff0c 本身就支持集群部署 xff0c 今天要搭建的就是neo4j的因果集群 xff0c 其中分为 xff1a 核心节点 xff1a core server xff0c 可以对数据进行读写