Doris初始化脚本全攻略
我来为您提供 Doris 的初始化脚本准备指南。Doris 提供了多种初始化方式,以下是详细的脚本和配置说明。
1. 环境准备脚本
首先,创建一个环境检查脚本 check_environment.sh:
#!/bin/bash# Doris 环境检查脚本
echo "=== Doris 环境检查 ==="# 检查系统版本
echo "1. 检查系统版本..."
cat /etc/os-release# 检查 Java 版本
echo "2. 检查 Java 版本..."
java -version 2>/dev/null || echo "Java 未安装"# 检查内存
echo "3. 检查内存..."
free -h# 检查磁盘空间
echo "4. 检查磁盘空间..."
df -h# 检查网络
echo "5. 检查网络..."
ping -c 3 www.baidu.com >/dev/null 2>&1 && echo "网络连接正常" || echo "网络连接异常"echo "=== 环境检查完成 ==="2. FE(Frontend)初始化脚本
创建 FE 初始化脚本 init_fe.sh:
#!/bin/bash# Doris FE 初始化脚本
DORIS_HOME=/opt/doris
FE_HOME=$DORIS_HOME/feecho "=== 开始初始化 Doris FE ==="# 创建目录
mkdir -p $FE_HOME/logs
mkdir -p $FE_HOME/doris-meta# 生成 FE 配置文件
cat > $FE_HOME/conf/fe.conf << EOF
# 元数据目录
meta_dir = ${FE_HOME}/doris-meta# 网络配置
priority_networks = 192.168.1.0/24
http_port = 8030
rpc_port = 9020
query_port = 9030
edit_log_port = 9010# JVM 配置
JAVA_OPTS = "-Xmx4096m -Xms4096m -XX:+UseG1GC"# 其他配置
sys_log_level = INFO
audit_log_modules = slow_query, query
qe_slow_log_ms = 5000
EOFecho "FE 配置文件已生成"# 启动 FE
echo "启动 FE 服务..."
cd $FE_HOME
./bin/start_fe.sh --daemon# 检查启动状态
sleep 10
curl http://localhost:8030/api/bootstrap || echo "FE 启动检查失败"echo "=== Doris FE 初始化完成 ==="3. BE(Backend)初始化脚本
创建 BE 初始化脚本 init_be.sh
#!/bin/bash# Doris BE 初始化脚本
DORIS_HOME=/opt/doris
BE_HOME=$DORIS_HOME/beecho "=== 开始初始化 Doris BE ==="# 创建目录
mkdir -p $BE_HOME/logs
mkdir -p $BE_HOME/storage/data
mkdir -p $BE_HOME/storage/ssd# 生成 BE 配置文件
cat > $BE_HOME/conf/be.conf << EOF
# 存储目录
storage_root_path = ${BE_HOME}/storage/data,medium:hdd;${BE_HOME}/storage/ssd,medium:ssd# 网络配置
priority_networks = 192.168.1.0/24
be_port = 9060
webserver_port = 8040
heartbeat_service_port = 9050
brpc_port = 8060# 资源限制
mem_limit = 80%
storage_page_cache_limit = 60%# 其他配置
sys_log_level = INFO
enable_metric_calculator = true
EOFecho "BE 配置文件已生成"# 启动 BE
echo "启动 BE 服务..."
cd $BE_HOME
./bin/start_be.sh --daemon# 检查启动状态
sleep 10
curl http://localhost:8040/api/health || echo "BE 启动检查失败"echo "=== Doris BE 初始化完成 ==="4. 集群部署脚本
创建集群部署脚本 deploy_cluster.sh:
#!/bin/bash# Doris 集群部署脚本
FE_MASTER="192.168.1.100"  # 主 FE 节点
FE_NODES=("192.168.1.100" "192.168.1.101" "192.168.1.102")  # FE 节点列表
BE_NODES=("192.168.1.110" "192.168.1.111" "192.168.1.112")  # BE 节点列表
DORIS_USER="doris"
DORIS_PASSWORD="doris123"echo "=== 开始部署 Doris 集群 ==="# 等待 FE 主节点启动
echo "等待 FE 主节点启动..."
sleep 30# 添加 FE  follower 节点
for fe_node in "${FE_NODES[@]:1}"; doecho "添加 FE 节点: $fe_node"mysql -h $FE_MASTER -P 9030 -uroot -e "ALTER SYSTEM ADD FOLLOWER \"$fe_node:9010\";"
done# 添加 BE 节点
for be_node in "${BE_NODES[@]}"; doecho "添加 BE 节点: $be_node"mysql -h $FE_MASTER -P 9030 -uroot -e "ALTER SYSTEM ADD BACKEND \"$be_node:9050\";"
done# 创建管理员用户
echo "创建管理员用户..."
mysql -h $FE_MASTER -P 9030 -uroot -e "CREATE USER '$DORIS_USER' IDENTIFIED BY '$DORIS_PASSWORD';"
mysql -h $FE_MASTER -P 9030 -uroot -e "GRANT ADMIN_PRIV ON *.* TO '$DORIS_USER';"# 检查集群状态
echo "=== 集群状态检查 ==="
mysql -h $FE_MASTER -P 9030 -uroot -e "SHOW PROC '/frontends';"
mysql -h $FE_MASTER -P 9030 -uroot -e "SHOW PROC '/backends';"echo "=== Doris 集群部署完成 ==="5. 数据库初始化脚本
创建数据库和表的初始化脚本 init_database.sql:
-- Doris 数据库初始化脚本-- 创建数据库
CREATE DATABASE IF NOT EXISTS example_db;USE example_db;-- 创建用户表
CREATE TABLE IF NOT EXISTS users (user_id BIGINT,username VARCHAR(50),email VARCHAR(100),age INT,city VARCHAR(50),create_time DATETIME,update_time DATETIME
)
DUPLICATE KEY(user_id, username)
DISTRIBUTED BY HASH(user_id) BUCKETS 10
PROPERTIES ("replication_num" = "3"
);-- 创建订单表
CREATE TABLE IF NOT EXISTS orders (order_id BIGINT,user_id BIGINT,amount DECIMAL(10,2),status VARCHAR(20),order_date DATE,create_time DATETIME
)
DUPLICATE KEY(order_id, user_id)
PARTITION BY RANGE(order_date) (PARTITION p202301 VALUES [('2023-01-01'), ('2023-02-01')),PARTITION p202302 VALUES [('2023-02-01'), ('2023-03-01')),PARTITION p202303 VALUES [('2023-03-01'), ('2023-04-01'))
)
DISTRIBUTED BY HASH(order_id) BUCKETS 10
PROPERTIES ("replication_num" = "3"
);-- 创建物化视图
CREATE MATERIALIZED VIEW user_order_mv AS
SELECT u.user_id,u.username,u.city,COUNT(o.order_id) as order_count,SUM(o.amount) as total_amount
FROM users u LEFT JOIN orders o ON u.user_id = o.user_id
GROUP BY u.user_id, u.username, u.city;-- 创建用户
CREATE USER 'app_user' IDENTIFIED BY 'app_password123';
GRANT SELECT_PRIV ON example_db.* TO 'app_user';-- 查看表结构
SHOW CREATE TABLE users;
SHOW CREATE TABLE orders;6. 健康检查脚本
创建健康检查脚本 health_check.sh:
#!/bin/bash# Doris 健康检查脚本
FE_HOST="localhost"
FE_PORT="8030"
BE_HOST="localhost"
BE_PORT="8040"echo "=== Doris 健康检查 ==="# 检查 FE 状态
echo "1. 检查 FE 状态..."
FE_STATUS=$(curl -s http://$FE_HOST:$FE_PORT/api/bootstrap | grep -o '"status"[^,]*' | cut -d: -f2 | tr -d '" ')
if [ "$FE_STATUS" = "OK" ]; thenecho "✓ FE 状态正常"
elseecho "✗ FE 状态异常"
fi# 检查 BE 状态
echo "2. 检查 BE 状态..."
BE_STATUS=$(curl -s http://$BE_HOST:$BE_PORT/api/health | grep -o '"status"[^,]*' | cut -d: -f2 | tr -d '" ')
if [ "$BE_STATUS" = "OK" ]; thenecho "✓ BE 状态正常"
elseecho "✗ BE 状态异常"
fi# 检查数据库连接
echo "3. 检查数据库连接..."
mysql -h $FE_HOST -P 9030 -uroot -e "SHOW DATABASES;" >/dev/null 2>&1
if [ $? -eq 0 ]; thenecho "✓ 数据库连接正常"
elseecho "✗ 数据库连接异常"
fi# 检查集群节点
echo "4. 检查集群节点..."
mysql -h $FE_HOST -P 9030 -uroot -e "SHOW PROC '/frontends'; SHOW PROC '/backends';"echo "=== 健康检查完成 ==="7. 使用说明
1)给脚本添加执行权限:
chmod +x *.sh2)执行顺序:
# 1. 环境检查
./check_environment.sh# 2. 初始化 FE
./init_fe.sh# 3. 初始化 BE
./init_be.sh# 4. 部署集群(如果是集群环境)
./deploy_cluster.sh# 5. 初始化数据库
mysql -h localhost -P 9030 -uroot < init_database.sql# 6. 健康检查
./health_check.sh3)注意事项:
- 根据实际环境修改 IP 地址、端口和路径配置 
- 确保服务器之间有网络互通 
- 生产环境需要设置更复杂的安全配置 
- 根据数据量调整分桶数和副本数 
这些脚本涵盖了 Doris 初始化的主要环节,您可以根据实际需求进行调整和扩展。
