一、部署流程
部署准备
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) | BE | Broker | |
---|---|---|---|---|
172.29.1.48 | * | * | * | |
172.29.1.49 | * | * | * | |
172.29.1.51 | * | * | * |
后续计划
FE(Follwer) | FE(Observer) | BE | Broker | |
---|---|---|---|---|
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)