我将为您提供一套自动配置Neo4j集群的脚本,这些脚本涵盖了从安装到配置的完整流程。

主安装脚本 (install-neo4j-cluster.sh)
#!/bin/bash
# Neo4j集群自动配置脚本
set -e
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
# 配置参数
NEO4J_VERSION="5.19.0"
NEO4J_HOME="/opt/neo4j"
CLUSTER_NAME="my-neo4j-cluster"
MINIMUM_MEMBERS=3
# 日志函数
log_info() {
echo -e "${GREEN}[INFO]${NC} $1"
}
log_warn() {
echo -e "${YELLOW}[WARN]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# 检查系统要求
check_system_requirements() {
log_info "检查系统要求..."
# 检查Java版本
if command -v java &> /dev/null; then
java_version=$(java -version 2>&1 | awk -F '"' '/version/ {print $2}')
log_info "Java版本: $java_version"
else
log_error "需要Java 17+"
exit 1
fi
# 检查内存
total_mem=$(free -g | awk '/^Mem:/{print $2}')
if [ "$total_mem" -lt 4 ]; then
log_warn "建议至少4GB内存,当前: ${total_mem}GB"
fi
# 检查磁盘空间
disk_space=$(df -h /opt | awk 'NR==2 {print $4}')
log_info "可用磁盘空间: $disk_space"
}
# 安装依赖
install_dependencies() {
log_info "安装依赖..."
if command -v apt-get &> /dev/null; then
sudo apt-get update
sudo apt-get install -y wget curl tar jq
elif command -v yum &> /dev/null; then
sudo yum install -y wget curl tar jq
else
log_error "不支持的包管理器"
exit 1
fi
}
# 下载并安装Neo4j
install_neo4j() {
local node_id=$1
local install_path="${NEO4J_HOME}_${node_id}"
log_info "为节点${node_id}安装Neo4j ${NEO4J_VERSION}..."
if [ -d "$install_path" ]; then
log_warn "节点${node_id}已安装,跳过..."
return 0
fi
# 下载
wget -q "https://dist.neo4j.org/neo4j-community-${NEO4J_VERSION}-unix.tar.gz" \
-O /tmp/neo4j-${NEO4J_VERSION}.tar.gz
# 解压
sudo tar -xzf "/tmp/neo4j-${NEO4J_VERSION}.tar.gz" -C /opt/
sudo mv "/opt/neo4j-community-${NEO4J_VERSION}" "$install_path"
# 清理
rm -f "/tmp/neo4j-${NEO4J_VERSION}.tar.gz"
log_info "节点${node_id}安装完成"
}
# 配置集群
configure_cluster() {
local node_id=$1
local install_path="${NEO4J_HOME}_${node_id}"
local config_file="${install_path}/conf/neo4j.conf"
local server_discovery_file="${install_path}/conf/server-discovery.yaml"
log_info "配置节点${node_id}..."
# 备份原始配置
cp "$config_file" "${config_file}.backup"
# 生成配置文件
cat > "$config_file" << EOF
# Neo4j Cluster Configuration for Node ${node_id}
# Server settings
server.directories.data=data
server.directories.logs=logs
server.directories.plugins=plugins
# Network configuration
server.default_listen_address=0.0.0.0
server.default_advertised_address=${NODE_IPS[$node_id]}
# HTTP and Bolt ports
server.http.listen_address=:${HTTP_PORTS[$node_id]}
server.http.advertised_address=${NODE_IPS[$node_id]}:${HTTP_PORTS[$node_id]}
server.bolt.listen_address=:${BOLT_PORTS[$node_id]}
server.bolt.advertised_address=${NODE_IPS[$node_id]}:${BOLT_PORTS[$node_id]}
# Cluster configuration
dbms.cluster.enabled=true
dbms.cluster.cluster_name=${CLUSTER_NAME}
dbms.cluster.discovery.listen_address=:5000
dbms.cluster.discovery.advertised_address=${NODE_IPS[$node_id]}:5000
dbms.cluster.transaction.listen_address=:6000
dbms.cluster.transaction.advertised_address=${NODE_IPS[$node_id]}:6000
dbms.cluster.raft.listen_address=:7000
dbms.cluster.raft.advertised_address=${NODE_IPS[$node_id]}:7000
# Minimum number of members in the cluster
dbms.cluster.minimum_cluster_size=${MINIMUM_MEMBERS}
# Initial discovery members
# These are the addresses of all nodes in the cluster
EOF
# 添加发现成员
echo "# Initial discovery members" >> "$config_file"
for i in $(seq 0 $((${#NODE_IPS[@]} - 1))); do
if [ "$i" -eq "$node_id" ]; then
echo "# dbms.cluster.discovery.initial_discovery_members_${i}=${NODE_IPS[$i]}:5000" >> "$config_file"
else
echo "dbms.cluster.discovery.initial_discovery_members_${i}=${NODE_IPS[$i]}:5000" >> "$config_file"
fi
done
# 集群发现配置
cat > "$server_discovery_file" << EOF
# Server Discovery Configuration
cluster:
discovery:
type: static
initial_discovery_members: |
EOF
# 添加所有节点到发现配置
for i in $(seq 0 $((${#NODE_IPS[@]} - 1))); do
echo " - ${NODE_IPS[$i]}:5000" >> "$server_discovery_file"
done
log_info "节点${node_id}配置完成"
}
# 启动节点
start_node() {
local node_id=$1
local install_path="${NEO4J_HOME}_${node_id}"
log_info "启动节点${node_id}..."
# 设置环境变量
export NEO4J_CONF="${install_path}/conf"
# 启动Neo4j
sudo -u neo4j "${install_path}/bin/neo4j" start
# 等待启动
sleep 10
# 检查状态
if sudo -u neo4j "${install_path}/bin/neo4j" status | grep -q "is running"; then
log_info "节点${node_id}启动成功"
else
log_error "节点${node_id}启动失败"
exit 1
fi
}
# 创建系统用户
create_system_user() {
if ! id -u neo4j &>/dev/null; then
sudo useradd -r -s /bin/false neo4j
fi
# 设置权限
for i in $(seq 0 $((${#NODE_IPS[@]} - 1))); do
sudo chown -R neo4j:neo4j "${NEO4J_HOME}_${i}"
done
}
# 检查集群状态
check_cluster_status() {
log_info "检查集群状态..."
local first_node_ip=${NODE_IPS[0]}
local first_node_port=${HTTP_PORTS[0]}
# 尝试连接到第一个节点
for i in $(seq 1 10); do
if curl -s -o /dev/null -w "%{http_code}" \
"http://${first_node_ip}:${first_node_port}" | grep -q "200"; then
log_info "集群API可用"
break
fi
log_info "等待集群就绪... ($i/10)"
sleep 5
done
log_info "集群配置完成!"
echo "================================"
echo "集群节点信息:"
for i in $(seq 0 $((${#NODE_IPS[@]} - 1))); do
echo " 节点${i}: http://${NODE_IPS[$i]}:${HTTP_PORTS[$i]}"
echo " Bolt: bolt://${NODE_IPS[$i]}:${BOLT_PORTS[$i]}"
done
echo "================================"
}
# 主函数
main() {
log_info "开始Neo4j集群自动配置..."
# 检查系统要求
check_system_requirements
# 安装依赖
install_dependencies
# 创建系统用户
create_system_user
# 节点数量和配置
declare -a NODE_IPS=(
"192.168.1.10"
"192.168.1.11"
"192.168.1.12"
)
declare -a HTTP_PORTS=(
7474
7475
7476
)
declare -a BOLT_PORTS=(
7687
7688
7689
)
# 检查节点数量
if [ ${#NODE_IPS[@]} -lt 3 ]; then
log_error "集群至少需要3个节点"
exit 1
fi
# 安装和配置每个节点
for i in $(seq 0 $((${#NODE_IPS[@]} - 1))); do
install_neo4j $i
configure_cluster $i
done
# 启动所有节点
for i in $(seq 0 $((${#NODE_IPS[@]} - 1))); do
start_node $i
done
# 检查集群状态
check_cluster_status
}
# 运行主函数
main "$@"
辅助脚本 (neo4j-cluster-helper.sh)
#!/bin/bash
# Neo4j集群管理辅助脚本
# 设置集群变量
setup_cluster_vars() {
export NEO4J_CLUSTER_NODES=(
"192.168.1.10"
"192.168.1.11"
"192.168.1.12"
)
export NEO4J_HTTP_PORTS=(
7474
7475
7476
)
export NEO4J_BOLT_PORTS=(
7687
7688
7689
)
}
# 停止所有节点
stop_cluster() {
echo "停止所有集群节点..."
for i in $(seq 0 $((${#NEO4J_CLUSTER_NODES[@]} - 1))); do
local install_path="${NEO4J_HOME}_${i}"
if [ -d "$install_path" ]; then
sudo -u neo4j "${install_path}/bin/neo4j" stop
echo "节点${i}已停止"
fi
done
}
# 检查集群状态
cluster_status() {
echo "检查集群状态..."
for i in $(seq 0 $((${#NEO4J_CLUSTER_NODES[@]} - 1))); do
local install_path="${NEO4J_HOME}_${i}"
if [ -d "$install_path" ]; then
local status=$(sudo -u neo4j "${install_path}/bin/neo4j" status 2>&1)
echo "节点${i}: $status"
fi
done
}
# 备份配置
backup_config() {
local backup_dir="/tmp/neo4j_backup_$(date +%Y%m%d_%H%M%S)"
mkdir -p "$backup_dir"
echo "备份配置到 $backup_dir"
for i in $(seq 0 $((${#NEO4J_CLUSTER_NODES[@]} - 1))); do
local install_path="${NEO4J_HOME}_${i}"
if [ -d "$install_path" ]; then
cp -r "${install_path}/conf" "${backup_dir}/conf_${i}"
echo "节点${i}配置已备份"
fi
done
}
# 重置集群
reset_cluster() {
echo "警告: 这将删除所有数据和配置!"
read -p "确认删除? (y/n): " confirm
if [ "$confirm" = "y" ]; then
stop_cluster
for i in $(seq 0 $((${#NEO4J_CLUSTER_NODES[@]} - 1))); do
local install_path="${NEO4J_HOME}_${i}"
if [ -d "$install_path" ]; then
sudo rm -rf "${install_path}/data" "${install_path}/logs"
echo "节点${i}数据已清理"
fi
done
fi
}
# 帮助信息
show_help() {
echo "Neo4j集群管理工具"
echo "用法: $0 [选项]"
echo ""
echo "选项:"
echo " stop 停止所有节点"
echo " status 检查集群状态"
echo " backup 备份配置"
echo " reset 重置集群"
echo " help 显示帮助信息"
}
# 主逻辑
case "${1:-help}" in
stop)
setup_cluster_vars
stop_cluster
;;
status)
setup_cluster_vars
cluster_status
;;
backup)
setup_cluster_vars
backup_config
;;
reset)
setup_cluster_vars
reset_cluster
;;
help|*)
show_help
;;
esac
使用说明
-
设置执行权限:
chmod +x install-neo4j-cluster.sh neo4j-cluster-helper.sh
-
配置节点IP: 在
install-neo4j-cluster.sh中修改NODE_IPS数组为您的实际节点IP地址 -
运行安装:
sudo ./install-neo4j-cluster.sh
-
管理集群:
# 检查状态 ./neo4j-cluster-helper.sh status
停止集群
./neo4j-cluster-helper.sh stop
这些脚本会自动处理Neo4j集群的安装、配置和启动,支持3节点以上的集群部署。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播