Doris集群部署

一、部署流程

部署准备

1.版本要求

软件版本要求
Mysql>=5.7
jdk>=8.0
Doris>= 2.0.0
Kubernetes>= 1.19

1.准备至少3台机器(172.29.1.48, 172.29.1.49, 172.29.1.50, 172.29.1.51)具体配置如下

FE(Follwer)FE(Observer)BEBroker
172.29.1.48***
172.29.1.49***
172.29.1.51***

后续计划

FE(Follwer)FE(Observer)BEBroker
172.29.1.48**
172.29.1.49**
172.29.1.51***
xxx.xx.x.xx***
xxx.xx.x.xx***

后续计划

2.禁用和关闭 swap

nohup sudo swapoff -a &
echo "vm.swappiness = 0">> /etc/sysctl.conf
sysctl -p

3.设置系统最大打开文件句柄数

sysctl -w vm.max_map_count=2000000

4.关闭透明大页

echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag

5.进入doris官网下载最新版

https://doris.apache.org/

6.解压后文件二级文件目录为

├── be
│   ├── bin
│   ├── conf
│   ├── dict
│   ├── lib
│   ├── LICENSE-dist.txt
│   ├── licenses
│   ├── log
│   ├── NOTICE.txt
│   ├── storage
│   ├── www
│   └── zoneinfo
├── extensions
│   └── apache_hdfs_broker
└── fe
    ├── bin
    ├── conf
    ├── doris-meta
    ├── lib
    ├── LICENSE-dist.txt
    ├── licenses
    ├── log
    ├── minidump
    ├── mysql_ssl_default_certificate
    ├── NOTICE.txt
    ├── plugins
    ├── spark-dpp
    ├── temp_dir
    └── webroot

可以看到主要分为三个部分(be,fe,extensions)

部署FE

1.修改fe配置文件
# 打开配置文件
vim doris/fe/conf/fe.conf
# 添加 priority_networks 参数,改成本地地址
priority_networks=172.29.1.48/24
# 添加元数据目录
meta_dir=/home/search/doris/doris/fe/doris-meta
2.执行启动服务脚本
# 直接执行将作为leader角色
sh fe/bin/start_fe.sh --daemon

启动完成后,可以通过浏览器访问doris UI, 默认端口为8030, 默认账号为root ,默认密码为空

http://172.29.1.48:8030/
3.安装mysql,连接doris
# 安装mysql
wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
rpm -ivh mysql-community-release-el7-5.noarch.rpm
yum update
yum install mysql-server
# 权限设置
chown -R mysql:mysql /var/lib/mysql/
# 初始化 MySQL
mysqld --initialize
# 启动 MySQL
systemctl start mysqld
# 查看 MySQL 运行状态
systemctl status mysqld(注意doris mysql默认端口为9030)
# 连接doris mysql
sudo mysql -u root -P9030 -h 127.0.0.1
# 设置密码(设置完成后进入doris mysql无需输入密码,但进入doris UI需要输入密码)
set password = password("hbgj")
4.部署FE Follwer及扩缩容

经过之前的步骤,48服务器已经作为FE Leader角色, 接下来把49,50作为FE Follwer进行部署,以下步骤在49,50都需要进行一遍

# 还是修改配置文件,跟上述一样
# 执行启动脚本,但跟上述启动方式不一样,上述是作为leader进行启动,本次启动要以follwer角色进行启动
# 指定172.29.1.48为leader,默认端口为9010
# 注意只有第一次启动才需要加--helper参数,后续启动无需添加直接启动即可
sh bin/start_fe.sh --helper 172.29.1.48:9010 --daemo
# 进入172.29.1.48 doris mysql,将172.29.1.49加入进去,此时49doris服务就成为follwer角色,也可以说是完成了扩容
alter system add follower "172.29.1.49:9010";

当49,50全部加入时,通过48doris mysql可以看到以下内容,当然在doris UI同时可以查看

*************************** 1. row ***************************
              Name: fe_02497cdf_c3bc_4fce_9463_47f3955134b6
              Host: 172.29.1.49
       EditLogPort: 9010
          HttpPort: 8030
         QueryPort: 0
           RpcPort: 0
ArrowFlightSqlPort: 0
              Role: FOLLOWER
          IsMaster: false
         ClusterId: 560380897
              Join: false
             Alive: false
 ReplayedJournalId: 0
     LastStartTime: NULL
     LastHeartbeat: NULL
          IsHelper: true
            ErrMsg: java.net.ConnectException: Connection refused (Connection refused)
           Version: NULL
  CurrentConnected: No
*************************** 2. row ***************************
              Name: fe_44b3c7da_5053_4249_bc83_d64fd48f4a4c
              Host: 172.29.1.48
       EditLogPort: 9010
          HttpPort: 8030
         QueryPort: 9030
           RpcPort: 9020
ArrowFlightSqlPort: -1
              Role: FOLLOWER
          IsMaster: true
         ClusterId: 560380897
              Join: true
             Alive: true
 ReplayedJournalId: 19805
     LastStartTime: 2024-04-23 11:07:59
     LastHeartbeat: 2024-04-24 14:36:06
          IsHelper: true
            ErrMsg:
           Version: doris-2.1.2-rc04-b130df2488
  CurrentConnected: Yes
*************************** 3. row ***************************
              Name: fe_27d21bc7_96c1_4abb_9ad9_28565ecbb31a
              Host: 172.29.1.50
       EditLogPort: 9010
          HttpPort: 8030
         QueryPort: 0
           RpcPort: 0
ArrowFlightSqlPort: 0
              Role: FOLLOWER
          IsMaster: false
         ClusterId: 560380897
              Join: false
             Alive: false
 ReplayedJournalId: 0
     LastStartTime: NULL
     LastHeartbeat: NULL
          IsHelper: true
            ErrMsg: java.net.ConnectException: Connection refused (Connection refused)
           Version: NULL
  CurrentConnected: No
3 rows in set (0.03 sec)

FE Follwer缩容

# 以49为例,进入到49服务器,执行doris服务停止脚本
sh bin/stop_fe.sh
# 进入到48服务器,连接doris mysql,执行删除49
alter system drop follower "172.29.1.49:9010";
5.部署FE Observer及扩缩容

基本上跟follwer一致,不再进行赘述,只是48doris mysql添加删除命令修改一下

# 扩容
alter system add observer "172.29.1.51:9010";
# 缩容
alter system drop observer "172.29.1.51:9010";

部署BE

1.修改be配置文件
# 打开配置文件
vim doris/be/conf/be.conf
# 添加 priority_networks 参数,改成本地地址
priority_networks=172.29.1.48/24
# 修改存储数据位置
storage_root_path =  /home/search/doris/doris/be/storage
2.配置jdk环境
# 打开全局变量
vim ~/.bashrc
# 写入Java环境
export JAVA_HOME=/usr/java/jdk1.8.0_131
export PATH=$JAVA_HOME/bin:$PATH
# source刷新
source ~/.bashrc
3.执行启动脚本
sh be/bin/start_be.sh --daemon
4.doris MySQL新增BE
# 连接doris mysql
sudo mysql -u root -P9030 -h 127.0.0.1
# 扩容
alter system add backend "172.29.1.51:9050";
# 缩容
alter system dropp backend "172.29.1.51:9050";

部署Broker(可选)

Broker 以插件的形式,独立于 Doris 部署。如果需要从第三方存储系统导入数据,需要部署相应的 Broker,默认提供了读取 HDFS 、对象存储的 fs_broker。fs_broker 是无状态的,建议每一个 FE 和 BE 节点都部署一个 Broker。

1.进入broker项目,启动脚本
cd doris/extensions/apache_hdfs_broker/
sh bin/start_broker.sh --daemon
2.doris MySQL新增broker
# 连接doris mysql
sudo mysql -u root -P9030 -h 127.0.0.1
# 扩容
ALTER SYSTEM ADD BROKER broker_name "172.29.1.48:8000","172.29.1.49:8000","172.29.1.51:8000";
# 缩容
ALTER SYSTEM FROP BROKER broker_name "172.29.1.48:8000";

二、使用实例

1.Doris UI

# 账号:root 密码:hbgj
http://172.29.1.48:8030/

2.建表

# 连接 Doris Mysql
进入172.29.1.48
sudo mysql -u root -P9030 -h 127.0.0.1
# 创建一个数据库
create database demo;
# 进入数据库
use demo;
# 建表
CREATE TABLE IF NOT EXISTS demo.example_tbl
(
    `user_id` LARGEINT NOT NULL COMMENT "用户id",
    `date` DATE NOT NULL COMMENT "数据灌入日期时间",
    `city` VARCHAR(20) COMMENT "用户所在城市",
    `age` SMALLINT COMMENT "用户年龄",
    `sex` TINYINT COMMENT "用户性别",
    `last_visit_date` DATETIME REPLACE DEFAULT "1970-01-01 00:00:00" COMMENT "用户最后一次访问时间",
    `cost` BIGINT SUM DEFAULT "0" COMMENT "用户总消费",
    `max_dwell_time` INT MAX DEFAULT "0" COMMENT "用户最大停留时间",
    `min_dwell_time` INT MIN DEFAULT "99999" COMMENT "用户最小停留时间"
)
AGGREGATE KEY(`user_id`, `date`, `city`, `age`, `sex`)
DISTRIBUTED BY HASH(`user_id`) BUCKETS 1
PROPERTIES (
    "replication_allocation" = "tag.location.default: 1"
);

### 3.导入数据

```shell
# 通过 Stream load 方式导入数据
curl  --location-trusted -u root:hbgj -T test.csv -H "column_separator:," http://127.0.0.1:8030/api/demo/example_tbl/_stream_load
# -T test.csv : 这里是保存的数据文件
# -u root : 这里是用户名密码,我们使用默认用户 root,密码是hbgj
# 127.0.0.1:8030 : 分别是 fe 的 ip 和 http_port
# 下面为导入成功后的返回信息
{
    "TxnId": 30303,
    "Label": "8690a5c7-a493-48fc-b274-1bb7cd656f25",
    "TwoPhaseCommit": "false",
    "Status": "Success",
    "Message": "OK",
    "NumberTotalRows": 7,
    "NumberLoadedRows": 7,
    "NumberFilteredRows": 0,
    "NumberUnselectedRows": 0,
    "LoadBytes": 399,
    "LoadTimeMs": 381,
    "BeginTxnTimeMs": 3,
    "StreamLoadPutTimeMs": 5,
    "ReadDataTimeMs": 0,
    "WriteDataTimeMs": 191,
    "CommitAndPublishTimeMs": 175
}
# NumberLoadedRows: 表示已经导入的数据记录数
# NumberTotalRows: 表示要导入的总数据量
# Status :Success 表示导入成功

4.通过python连接Doris Mysql

from urllib.parse import quote_plus
from sqlalchemy.engine import create_engine
import pandas as pd

doris_db = {
    'host': '172.29.1.48',
    'port': 9030,
    'db': 'demo',
    'user': 'root',
    'passwd': 'hbgj',
    'charset': 'utf8',
}
address = 'mysql://{user}:{password}@{host}:{port}/{db}?charset=utf8'
doris_address = address.format(password=quote_plus(doris_db['passwd']), **doris_db)
doris_engine = create_engine(doris_address)

query = "SELECT * FROM example_tbl"
df = pd.read_sql_query(query, doris_engine)
print(df)
  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值