Neo4j安装部署,企业版3.5.4封装到镜像并部署单机、ha集群、因果集群
转载:https://blog.csdn.net/m0_37492923/article/details/142977357
1、文档简介
文档相当于采用离线的方式,生成neo4j的镜像,并安装。
通过本文档可以获得以下内容
neo4j企业版镜像的生成
neo4j 企业版图库的安装(单节点、ha集群、因果集群(Core + Replica))
基础镜像 + 安装过程
2、图库简介
neo4j是一个高性能的nosql图形数据库,同时是一个嵌入式、基于磁盘并且拥有完整事务特性的java持久化存储引擎,他的数据存储于图中,而不是表中。neo4j也可以被看作是一个高性能的图引擎。
3、安装步骤
1、首先需要两个东西,一个是基础镜像openjdk:8-jdk-silm,一个是neo4j-3.5.4企业版的安装包(neo4j-enterprise-3.5.4-unix.tar)
2、自己编写dockerfile
3、生成最终的neo4j镜像
4、安装neo4j单机版、ha集群或者因果集群
获取neo4j的镜像的有2种方法,直接pull或者自己制作一个镜像,这里是使用jdk和neo4j的包来制作一个自己的镜像
4、封装neo4j-3.5.4企业版镜像
4.1 下载openjdk:8-jdk-slim镜像和 neo4j的运行包 neo4j-enterprise-3.5.4-unix.tar.gz
neo4j的运行依赖jdk, 所以需要相关版本的jdk的镜像
docker pull openjdk:8-jdk-slim
为什么要安装企业版,因为只有企业版可以建立集群(尤其是因果集群),ha集群(主备)可以通过neo4j社区版+nfs(网络文件系统)+ keepalived 来完成类似于ha集群的模式。
neo4j下载地址链接: https://pan.baidu.com/s/1P3gIT3ZhGlToUIZDKApccA 提取码: 87t3
注:ha集群貌似在图库后期已经废弃
4.2 加载镜像
如果直接使用pull来获取了jdk的镜像,那就不需要下面这步了
通过docker load将镜像加载
docker load -i openjdk.tar.gz
加载镜像是使用的load方法,同样也可以从docker中分离镜像文件,分离出来的文件是jar格式:
#分离openjdk:8-jdk-slim镜像文件并保存到openjdk.tar中
docker save -o /home/docker/openjdk.tar openjdk:8-jdk-slim
4.3 解压neo4j安装包,重命名在打包
这一步的意义是为了在后面的dockerfile中,可以直接add到镜像中,从而避免使用neo4j-enterprise-3.5.4 路径
tar -zxvf neo4j-enterprise-3.5.4-unix.tar.gz
mv neo4j-enterprise-3.5.4 neo4j
tar -zcvf neo4j-enterprise-3.5.4-unix.tar.gz neo4j
4.4 编写dockerfile
在编写dockerfile之后生成镜像时,可能会将当前目录下的内容传递进去,所以建议保持当前目录中,只有dockerfile文件和要安装的内容。所以我这里在创建一个空的目录,并将安装包移入其中
# 创建一个目录,其中只有dockerfile 和安装包
mkdir images
cp neo4j-enterprise-3.5.4-unix.tar.gz images/
cd images
4.5 创建容器内neo4j的启动脚本
此步骤是因为在启动容器的时候,设置neo4j用户的密码,即修改了neo4j用户的密码是neo4j
# 创建容器内neo4j的启动脚本
cat >env.sh<< EOF
#! /bin/bash
source /etc/profile
/var/lib/neo4j/bin/neo4j-admin set-initial-password \${neo4j_password}
/var/lib/neo4j/bin/neo4j start
tail -f /dev/null
EOF
相关参数说明:
- source /etc/profile 是为了能够确保容器中系统环境变量可以使用
- neo4j-admin set-initial-password \${neo4j_password}:是通过admin工具,在启动时,修改掉默认密码neo4j,其中的\是为了解决在cat > env.sh <<EOF EOF过程中,命令会将eof中的变量自动替换,表示不要将其解释为环境变量
- /var/lib/neo4j/bin/neo4j start:容器启动后,启动图库
- tail -f /dev/null:不让容器在启动后便退出
4.6 创建dockerfile
# 创建dockerfile(dockerfile中通过apt-get安装了locales,需要联网)
cat > dockerfile << EOF
FROM openjdk:8-jdk-slim
LABEL author=ncjx
ENV TZ=Asia/Shanghai
ADD env.sh /var/lib/
ADD neo4j-enterprise-3.5.4-unix.tar.gz /var/lib/
RUN apt-get update && apt-get install -y locales && localedef -f UTF-8 -i en_US en_US.UTF-8 && \
ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone && \
chmod +x /var/lib/env.sh
ENV LANG=en_US.UTF-8 LANGUAGE=en_US:en LC_ALL=en_US.UTF-8
ENV PATH \$PATH:/var/lib/neo4j/bin
WORKDIR /var/lib/neo4j
ENTRYPOINT ["/var/lib/env.sh"]
CMD ["/usr/sbin/init"]
EOF
相关参数说明:
- FROM openjdk:8-jdk-slim:使用 openjdk:8-jdk-slim作为基础镜像
- LABEL author=ncjx:作者
- ENV TZ=Asia/Shanghai:设置时区
- ADD env.sh /var/lib/:将env.sh文件,添加到/var/lib 目录中
- ADD neo4j-enterprise-3.5.4-unix.tar.gz /var/lib/将安装包自动添加并解压到/var/lib 目录中
- RUN中表示要执行的命令,安装locales 并且创建字符集库,设置时区,给env.sh脚本设置执行权限
- ENV LANG:传递字符集为utf-8
- ENV PATH: 添加到系统路径
- ENTRYPOINT启动时要执行的命令,当dockerfile中存在ENTRYPOINT时后续的CMD则无效果
4.7 生成镜像
通过docker build 构建镜像
docker build -f dockerfile -t ncjx_neo4j:3.5.4 .
相关参数说明:
- docker build 构建镜像的命令
- -f 表示使用的dockerfile文件
- -t 生成镜像的名字:版本号
- . :表示传递的是当前目录
5 安装Core集群版
下载个已经存在的neo4j版本,用刚才自己生成的也可以
docker pull neo4j:3.4.0-enterprise
每个节点都拥有完整的数据,提高了高可用性
确保 Docker 有足够资源(至少 4GB 内存)
我们将创建一个包含 3 个核心节点的集群:
neo4j-1 (核心节点1)
neo4j-2 (核心节点2)
neo4j-3 (核心节点3)
步骤 1: 创建 Docker 网络
首先创建一个专用的 Docker 网络以便节点间通信:
docker network create neo4j-net
步骤 2: 准备配置文件
本机设置docker的工作目录是 /Users/apple/workfolder/docker ,进入当前目录
为每个节点创建单独的配置目录和数据目录:
mkdir -p neo4j-cluster/{node1,node2,node3}/{conf,data,logs,plugins,import}
公共配置文件 (neo4j.conf)
在每个节点的 conf 目录中创建 neo4j.conf 文件,内容如下(根据节点调整相应参数):
# 公共配置
dbms.mode=CORE
dbms.connector.bolt.enabled=true
dbms.connector.http.enabled=true
dbms.connector.https.enabled=true
# 注意这个配置项,需要设置为容器的主机名或IP地址,确保集群节点之间可以互相通信,这里设置为neo4j-1,但是在brower界面上操作cypher时会出错。
dbms.connectors.default_advertised_address=neo4j-1
# 集群配置
causal_clustering.discovery_type=LIST
causal_clustering.initial_discovery_members=neo4j-1:5000,neo4j-2:5000,neo4j-3:5000
# 安全配置
dbms.security.auth_enabled=true
dbms.connector.bolt.tls_level=DISABLED
# 其他配置
dbms.allow_upgrade=true
dbms.directories.plugins=/plugins
dbms.directories.import=/import
wrapper.java.additional=-Dneo4j.ext.udc.source=docker
ha.host.data=a26a9d024206:6001
ha.host.coordination=a26a9d024206:5001
dbms.tx_log.rotation.retention_policy=100M size
dbms.memory.pagecache.size=512M
dbms.memory.heap.max_size=512M
dbms.memory.heap.initial_size=512M
dbms.connectors.default_listen_address=0.0.0.0
dbms.connector.https.listen_address=0.0.0.0:7473
dbms.connector.http.listen_address=0.0.0.0:7474
dbms.connector.bolt.listen_address=0.0.0.0:7687
causal_clustering.transaction_listen_address=0.0.0.0:6000
causal_clustering.transaction_advertised_address=a26a9d024206:6000
causal_clustering.raft_listen_address=0.0.0.0:7000
causal_clustering.raft_advertised_address=a26a9d024206:7000
causal_clustering.discovery_listen_address=0.0.0.0:5000
causal_clustering.discovery_advertised_address=a26a9d024206:5000
EDITION=enterprise
ACCEPT.LICENSE.AGREEMENT=yes
这个配置文件有些奇怪,dbms.directories.plugins 及以下部分是docker实例启动时自动生成的,所以这一部分可以不用配置。
其中a26a9d024206是容器的实例编码,所以需要在运行时对上面的端口需要进行映射操作。
注意:每个节点的配置文件中需要修改以下参数:
步骤 3: 启动集群节点
分别启动下面三个命令,会生成三个容器
docker run -itd --name neo4j-1 --privileged=true --network=neo4j-net \
-p 17473:7473 -p 17474:7474 -p 17687:7687 -p 15000:5000 -p 16000:6000 -p 17000:7000 \
--volume=/Users/apple/workfolder/docker/neo4j-cluster/node1/data:/data \
--volume=/Users/apple/workfolder/docker/neo4j-cluster/node1/conf:/var/lib/neo4j/conf \
--env=NEO4J_ACCEPT_LICENSE_AGREEMENT=yes \
--env=NEO4J_AUTH=neo4j/yuan9876 neo4j:3.4.0-enterprise
docker run -itd --name neo4j-2 --privileged=true --network=neo4j-net \
-p 27473:7473 -p 27474:7474 -p 27687:7687 -p 25000:5000 -p 26000:6000 -p 27000:7000 \
--volume=/Users/apple/workfolder/docker/neo4j-cluster/node2/data:/data \
--volume=/Users/apple/workfolder/docker/neo4j-cluster/node2/conf:/var/lib/neo4j/conf \
--env=NEO4J_ACCEPT_LICENSE_AGREEMENT=yes \
--env=NEO4J_AUTH=neo4j/yuan9876 neo4j:3.4.0-enterprise
docker run -itd --name neo4j-3 --privileged=true --network=neo4j-net \
-p 37473:7473 -p 37474:7474 -p 37687:7687 -p 35000:5000 -p 36000:6000 -p 37000:7000 \
--volume=/Users/apple/workfolder/docker/neo4j-cluster/node3/data:/data \
--volume=/Users/apple/workfolder/docker/neo4j-cluster/node3/conf:/var/lib/neo4j/conf \
--env=NEO4J_ACCEPT_LICENSE_AGREEMENT=yes \
--env=NEO4J_AUTH=neo4j/yuan9876 neo4j:3.4.0-enterprise
步骤 4: 验证集群状态
访问任一节点的浏览器界面:
Node 1: http://localhost:17474
Node 2: http://localhost:27476
Node 3: http://localhost:37478
由于集群中只有Leader才可以写入数据:需要查询哪个节点是Leader

步骤 5: 测试集群
在Leader节点上创建数据
在其他节点上验证数据是否同步

浙公网安备 33010602011771号