60ed547eb17da50ecce87291a6708d45.png

本文结合StatefulSet,Deployment,PVC等技术来实现neo4j分布式搭建

主节点采用StatefullSet部署
kubectl create -f neo4j-master.yaml -n neo4j
apiVersion: v1
kind: PersistentVolume
metadata:
  name: task-pv-volume
  labels:
    type: local
spec:
  storageClassName: manual
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Recycle
  hostPath:
    path: /Users/work/code/sample/data/neo4j"

---

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: task-pv-claim
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 3Gi

apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
  name: neo4j-core
  namespace: neo4j
  labels:
    app: neo4j-core
spec:
  replicas: 2 
  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/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    
          mountPath: /data/neo4j
      volumes:
      - name: neo4j-core
        persistentVolumeClaim:
          claimName: task-pv-claim
---
apiVersion: v1
kind: Service
metadata:
  name: neo4j-core
  namespace: neo4j
spec:
  selector:
    app: neo4j-core
  type: NodePort    
  ports:
    - protocol: TCP
      name: http
      port: 7474
      nodePort: 31474
      targetPort: 7474
    - protocol: TCP
      name: blot
      port: 7687
      nodePort: 31687
      targetPort: 7687
从节点采用的Deployment来部署
neo4j-master.yaml -f neo4j-slave.yaml neo4j-master.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: neorj-read-replica
  namespace: neo4j
  labels:
    app: neorj-read-replica
spec:
  replicas: 2
  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/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
创建成功

611a85258bc15d2a736b214d635adf5e.png
测试 http://localhost:31474/browser/
CREATE (n:Person {name:'John'}) RETURN n


CREATE (n:Person {name:'Sally'}) RETURN n
CREATE (n:Person {name:'Steve'}) RETURN n
CREATE (n:Person {name:'Mike'}) RETURN n
CREATE (n:Person {name:'Liz'}) RETURN n
CREATE (n:Person {name:'Shawn'}) RETURN n


CREATE (n:Location {city:'Miami', state:'FL'})
CREATE (n:Location {city:'Boston', state:'MA'})
CREATE (n:Location {city:'Lynn', state:'MA'})
CREATE (n:Location {city:'Portland', state:'ME'})
CREATE (n:Location {city:'San Francisco', state:'CA'})

MATCH (a:Person {name:'Liz'}), 
      (b:Person {name:'Mike'}) 
MERGE (a)-[:FRIENDS]->(b)
查看效果

73b882e3298d64a5d394c6938c3ab663.png

7aa1679b1a2140ea93d4abe250dbfeaa.png
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐