一、主機規划
| IP | 主機名 | 安裝包 |
|---|---|---|
| 10.207.228.64 | doris-1 | FE、BE、Broker |
| 10.207.228.194 | doris-2 | FE、BE、Broker |
| 10.207.228.197 | doris-3 | FE、BE、Broker |
二、JDK 部署
(1) 下載安裝包
jdk-8u301-linux-x64.tar.gz
(2) 解壓
tar -xf jdk-8u301-linux-x64.tar.gz -C /app
(3) 配置環境變量
cat > /etc/profile.d/jdk.sh << EOF
export JAVA_HOME=/app/jdk1.8.0_301
export PATH=$PATH:$JAVA_HOME/bin
EOF
(4) 使環境變量生效
source /etc/profile.d/jdk.sh
(5) 驗證
java -version
三、Doris 高可用集群的部署
3.1、安裝包准備
在其中一個節點上操作,以10.207.228.64為例
(1) 准備安裝包
apache-doris-0.15.1.tar.gz
(2) 解壓
tar -xf apache-doris-0.15.1.tar.gz -C /app
(3) 修改 FE 配置文件
grep -vE "^$|^#" /app/apache-doris-0.15.1/fe/conf/fe.conf
LOG_DIR = ${DORIS_HOME}/log
DATE = `date +%Y%m%d-%H%M%S`
JAVA_OPTS="-Xmx4096m -XX:+UseMembar -XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=7 -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX
:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSClassUnloadingEnabled -XX:-CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFract
ion=80 -XX:SoftRefLRUPolicyMSPerMB=0 -Xloggc:$DORIS_HOME/log/fe.gc.log.$DATE"
JAVA_OPTS_FOR_JDK_9="-Xmx4096m -XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=7 -XX:+CMSClassUnloadingEnabled -XX:-CMSParallelRemar
kEnabled -XX:CMSInitiatingOccupancyFraction=80 -XX:SoftRefLRUPolicyMSPerMB=0 -Xlog:gc*:$DORIS_HOME/log/fe.gc.log.$DATE:time"
sys_log_level = INFO
http_port = 8030
rpc_port = 9020
query_port = 9030
edit_log_port = 9010
mysql_service_nio_enabled = true
priority_networks = 10.207.228.0/22 #添加此項,網段為當前主機網段
(4) 創建BE數據存儲路徑,並修改 BE 配置文件
mkdir /app/apache-doris-0.15.1/storage
grep -vE "^$|^#" /app/apache-doris-0.15.1/be/conf/be.conf
PPROF_TMPDIR="$DORIS_HOME/log/"
sys_log_level = INFO
be_port = 9060
webserver_port = 8040
heartbeat_service_port = 9050
brpc_port = 8060
storage_root_path = /app/apache-doris-0.15.1/storage #添加此項
(5) 將修改好的了包傳至其它節點
cd /app
tar -czvf apache-dorios-0.15.1-new.tar.gz apache-doris-0.15.1
#使用scp傳包,需要事先知道用戶密碼
scp apache-dorios-0.15.1-new.tar.gz 10.207.228.194:/app
scp apache-dorios-0.15.1-new.tar.gz 10.207.228.197:/app
#建議使用以下方式傳包
#在包所在服務器上執行
python -m SimpleHTTPServer 12345 #如果默認python為python2
python -m http.server 12345 #如果默認python為python3
wget http://10.207.228.194:12345/apache-dorios-0.15.1-new.tar.gz #其它節點獲取包
3.2、單節點搭建
在其中一個節點上操作,以10.207.228.64為例
(1) 啟動 FE
/app/apache-doris-0.15.1/fe/bin/start_fe.sh --daemon
(2) 啟動 BE
/app/apache-doris-0.15.1/be/bin/start_be.sh --daemon
(3) 啟動 Broker
Broker 是用於訪問外部數據源(如 hdfs)的進程。通常,在每台機器上部署一個 broker 實例即可。
/app/apache-doris-0.15.1/apache_hdfs_broker/bin/start_broker.sh --daemon
(4) 安裝 mysql 客戶端
yum install -y mysql
(5) mysql 連接 FE ,並添加 BE 節點與 Broker 節點
#root密碼默認為空
mysql -h 127.0.0.1 -P 9030 -uroot -p
#查看當前集群的FE節點
> SHOW FRONTENDS;
#添加BE節點 ALTER SYSTEM ADD BACKEND "be_host:be_heartbeat_service_port";
> ALTER SYSTEM ADD BACKEND "10.207.228.64:9050";
#查看當前集群的BE節點
> SHOW BACKENDS;
#添加Broker節點 ALTER SYSTEM ADD BROKER broker_name "host:port";
> ALTER SYSTEM ADD BROKER my_broker "10.207.228.64:8000";
#查看當前集群的Broker節點
> SHOW BROKER;
(6) web 管理
#FE web,默認用戶root,密碼空
http://10.207.228.64:8030
#BE web
http://10.207.228.64:8040/
3.3、高可用部署
FE 的高可用集群采用主從復制架構,可避免FE單點故障。 FE 采用了類 raft 的 bdbje 協議完成選主,日志復制和故障切換。
FE 分為 Leader,Follower 和 Observer 三種角色。 默認一個集群,只能有一個 Leader,可以有多個 Follower 和 Observer。Follower 和 Observer 組成一個 Paxos 選擇組;前者為復制協議的可投票成員,參與選主和提交日志,一般數量為奇數(2n+1), 使用多數派(n+1)確認,可容忍少數派(n)故障;而后者屬於非投票成員,用於異步訂閱復制日志,Observer 的狀態落后於 Follower ,類似其他復制協議中的learner角色。
FE 節點數據至少為1(1 個 Follower)。當部署 1 個 Follower 和 1 個 Observer 時,可以實現讀高可用。當部署 3 個 Follower 時,可以實現讀寫高可用(HA)。Follower 的數量必須為奇數,Observer 數量隨意。
FE 集群從 Follower 中自動選出 Master 節點,所有更改狀態操作都由 Master 節點執行, 從 FE 的 Master 節點可以讀到最新的狀態。更改操作可以從非 Master 節點發起,繼而轉發給 Master 節點執行, 非 Master 節點記錄最近一次更改操作在復制日志中的 LSN ,讀操作可以直接在非 Master 節點上執行,但需要等待非 Master 節點的狀態已經同步到最近一次更改操作的 LSN,因此讀寫非 Master 節點滿足順序一致性。
Observer 節點能夠增加FE集群的讀負載能力,時效性要求放寬的非緊要用戶可以讀 Observer 節點。
FE 節點之間的時鍾相差不能超過5s, 使用 NTP 協議校准時間。
3.3.1、FE 節點的擴容
一個機器上只能部署一個 FE ,因為所有 FE 節點的 http_port 需要相同,可以部署多個 BE 或者 FE + BE 。
(1) 新節點啟動 FE
FE 節點首次啟動時,需要指定現有集群中的一個節點作為 helper 節點,從該節點獲得集群的所有 FE 節點的配置信息,才能建立通信連接,因此首次啟動需要指定 --helper 參數。目前我們只搭好了一個主節點,所以使用 10.207.228.64 這台作為 helper 節點。
根據主機規划,在另兩個節點上執行:
#首次啟動,必需使用--helper參數,不然后續加入集群不成功
#注意修改helper節點的IP為第一台已經裝好了的節點IP
/app/apache-doris-0.15.1/fe/bin/start_fe.sh --helper 10.207.228.64:9010 --daemon
#之后可以按以下方式啟動
/app/apache-doris-0.15.1/fe/bin/start_fe.sh --daemon
(2) 在 10.207.228.64 上擴容 FE 節點
#root密碼默認為空
mysql -h 127.0.0.1 -P 9030 -uroot -p
#擴容FE節點,可以將新節點添加為follower
> ALTER SYSTEM ADD FOLLOWER "10.207.228.194:9010";
#或新節點添加為observer
> ALTER SYSTEM ADD OBSERVER "10.207.228.197:9010";
#查看集群的FE節點
> SHOW FRONTENDS;
3.3.2、BE 節點的擴容
(1) 新節點啟動 BE
根據主機規划,在另兩個節點上執行:
/app/apache-doris-0.15.1/be/bin/start_be.sh --daemon
(2) 在 10.207.228.64 上擴容 BE 節點
#root密碼默認為空
mysql -h 127.0.0.1 -P 9030 -uroot -p
#擴容BE節點
> ALTER SYSTEM ADD BACKEND "10.207.228.194:9050";
> ALTER SYSTEM ADD BACKEND "10.207.228.197:9050";
#查看當前集群的BE節點
> SHOW BACKENDS;
3.3.3、Broker 節點的擴容
(1) 新節點啟動 Broker
根據主機規划,在另兩個節點上執行:
/app/apache-doris-0.15.1/apache_hdfs_broker/bin/start_broker.sh --daemon
(2) 在 10.207.228.64 上擴容 Broker 節點
#root密碼默認為空
mysql -h 127.0.0.1 -P 9030 -uroot -p
#擴容BE節點
> ALTER SYSTEM ADD BROKER MY_BROKER "10.207.228.194:8000";
> ALTER SYSTEM ADD BROKER MY_BROKER "10.207.228.197:8000";
#查看當前集群的BROKER節點
> SHOW BROKER;
(3) 簡單測試使用 load broker 從 hdfs 導入數據至 doris
#建庫建表
> create database example_db;
> CREATE TABLE example_db.table_hash
(
k1 BOOLEAN,
k2 TINYINT,
k3 DECIMAL(10, 2) DEFAULT "10.5",
v1 CHAR(10) REPLACE,
v2 INT SUM
)
ENGINE=olap
AGGREGATE KEY(k1, k2, k3)
COMMENT "my first doris table"
DISTRIBUTED BY HASH(k1) BUCKETS 32;
#在hdfs上創建一個txt文件
cat hytest.txt
0,100,9,xxx
1,200,8,sss
0,300,7,bbb
hdfs dfs -put hytest.txt hdfs://10.202.77.201:8020/tmp/hy/
#使用load broker導入數據
> LOAD LABEL example_db.label_filter
(
DATA INFILE("hdfs://10.202.77.201:8020/hive/warehouse/sfbdp/TMP/tmp_test_etl/emp_dept")
INTO TABLE `table_hash`
COLUMNS TERMINATED BY ","
(k1,k2,v1,v2)
)
with broker 'my_broker' (
"username"="root",
"password"=""
);
#查看導入情況
> SHOW LOAD FROM example_db order by createtime desc limit 1\G;
