安装
#准备三台物理机, 需要以下环境支持:
Linux (Centos 7+)
Java 1.8+
CPU需要支持AVX2指令集
`cat /proc/cpuinfo |grep avx2`
有结果输出表明CPU支持,如果没有支持,建议更换机器,
StarRocks使用向量化技术需要一定的指令集支持才能发挥效果。
StarRocks-XX-1.0.0
├── be # BE目录
│ ├── bin
│ │ ├── start_be.sh # BE启动命令
│ │ └── stop_be.sh # BE关闭命令
│ ├── conf
│ │ └── be.conf # BE配置文件
│ ├── lib
│ │ ├── starrocks_be # BE可执行文件
│ │ └── meta_tool
│ └── www
├── fe # FE目录
│ ├── bin
│ │ ├── start_fe.sh # FE启动命令
│ │ └── stop_fe.sh # FE关闭命令
│ ├── conf
│ │ └── fe.conf # FE配置文件
│ ├── lib
│ │ ├── starrocks-fe.jar # FE jar包
│ │ └── *.jar # FE 依赖的jar包
│ └── webroot
└── udf
软硬件需求
(1)linux操作系统要求
linux系统 | 版本 |
---|---|
Centos | 7.1及以上 |
Ubuntu | 16.04及以上 |
(2)软件需求
软件 | 版本 |
---|---|
Java | 1.8及以上 |
GCC | 4.8.2及以上 |
(3)开发测试环境
模块 | CPU | 内存 | 磁盘 | 网络 | 实例数量 |
---|---|---|---|---|---|
Frontend | 8核+ | 8GB | SSD 或 SATA,10GB+ * | 千兆网卡 | 1 |
Backend | 8核+ | 16GB | SSD 或 SATA,50GB+ * | 千兆网卡 | 1-3* |
(4)生产环境
模块 | CPU | 内存 | 磁盘 | 网络 | 实例数量 |
---|---|---|---|---|---|
Frontend | 16核+ | 64GB | SSD 或 SATA,100GB+ * | 万兆网卡 | 1-5* |
Backend | 16核+ | 64GB | SSD 或 SATA,100GB+ * | 万兆网卡 | 10-100* |
(5)默认端口
实例名称 | 端口名称 | 默认端口 | 通讯方向 | 说明 |
---|---|---|---|---|
BE | be_prot | 9060 | FE-->BE | BE 上 thrift server 的端口,用于接收来自 FE 的请求 |
BE | webserver_port | 8040 | BE<-->FE | BE上的http server端口 |
BE | heartbeat_service_port | 9050 | FE-->BE | BE上心跳服务端口,用于接收来自FE的心跳 |
BE | brpc_prot* | 8060 | FE<-->BE,BE<-->BE | BE上的brpc端口,用于BE之间通信 |
FE | http_port | 8030 | FE<-->FE,用户 | FE上的http_server端口 |
FE | rpc_port | 9020 | BE-->FE,FE<-->FE | FE上thirt server端口号 |
FE | query_port | 9030 | 用户 | FE上的mysql server端口 |
FE | edit_log_port | 9010 | FE<-->FE | FE上bdbje之间通信用的端口 |
Broker | broker_ipc_port | 8000 | FE-->BROKERBE-->BROKER | Broker上的thrift server,用于接收请求 |
注:
1.FE的磁盘主要用于存储元数据,包括日志,和image。通常几百MB到几个GB不等
2.BE的磁盘主要用于存储用户数据,总磁盘空间按用户总数据量*3(3份副本)计算,然后再预留额外40%的空间用作后台compaction以及一些中间数据的存放。
3.一台机器上可以部署多个BE实例,但只能部署一个FE。如果需要3副本数据,那么至少三台机器各部署一个BE实例。
4.FE角色分为Follower和Observer,(Leader为Follwer中选举出来的一种角色)
5.FE节点至少为1个。当部署1个Follower和1个Observer时,可以实现高可用HA
6.Follower的数量必须为奇数,Observer数量随意
7.根据官网描述,以往经验,当集群可用性要求很高,可以部署3个Follower和1-3个Observer。如果是离线业务,建议部署1个Follower和1-3个Observer
8.Broker部署,Broker是用于访问外部数据源hdfs进程。通常每台机器上部署一个broker实例即可。
集群部署
Dors1 | Dors2 | Dors3 |
---|---|---|
FE(LEADER) | FE(FOLLOWER) | FE(OBSERVER) |
BE | BE | BE |
BROKER | BROKER | BROKER |
关闭防火墙以及selinux
# 关闭防火墙
systemctl stop firewalld.service
# 禁止防火墙开机启动
systemctl disable firewalld.service
# 查看服务是否开机启动
systemctl is-enabled firewalld.service
# 查看防火墙状态
firewall-cmd --state
#关闭selinux要执行
setenforce 0
三台机器配置固定ip
[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE="Ethernet"
BOOTPROTO="static"
IPADDR="192.168.92.140"
NETMASK="255.255.255.0"
GATEWAY="192.168.92.2"
DNS="192.168.92.2"
NM_CONTROLLED="no"
DEFROUTE="yes"
PEERDNS="yes"
PEERROUTES="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_PEERDNS="yes"
IPV6_PEERROUTES="yes"
IPV6_FAILURE_FATAL="no"
NAME="ens33"
UUID="aa4b6db1-a838-464d-98c6-18009dfcd8e7"
DEVICE="ens33"
ONBOOT="yes"
#重启网络服务
[root@localhost network-scripts]# systemctl stop NetworkManager.service
[root@localhost network-scripts]# systemctl disable NetworkManager.service
[root@localhost network-scripts]# systemctl restart network.service
# systemctl restart NetworkManager.service
三台机器准备ssh环境
[root@op ~]# ssh hadoop@op.hadoop op要拿到三台电脑的公钥
[hadoop@nn1 ~]$ mkdir sshkey #创建文件夹
[hadoop@nn1 ~]$ ssh-keygen -t rsa #生成公钥
[hadoop@nn1 ~]$ ll -a #查看隐藏文件
[hadoop@nn1 ~]$ cd .ssh/ #隐藏目录有.
[hadoop@dr2 .ssh]$ scp id_rsa.pub root@192.168.92.141:~/sshkey/dr2 #将公钥拷贝到一台主机
[hadoop@dr3 .ssh]$ scp id_rsa.pub root@192.168.92.141:~/sshkey/dr3 #将公钥拷贝到一台主机
# ctrl d 退出
#
[hadoop@nn1 sshkey]$ touch authorized_keys
[hadoop@nn1 sshkey]$ chmod 600 authorized_keys
[hadoop@nn1 sshkey]$ cat nn1_rsa >> authorized_keys
[hadoop@nn1 sshkey]$ cat nn2_rsa >> authorized_keys
[hadoop@nn1 sshkey]$ cat s1 >> authorized_keys
[hadoop@nn1 sshkey]$ cat s2 >> authorized_keys
[hadoop@nn1 sshkey]$ cat s3 >> authorized_keys
#分发
[hadoop@nn1 sshkey]$ scp authorized_keys root@192.168.92.138:~/.ssh
[hadoop@nn1 sshkey]$ scp authorized_keys root@192.168.92.140:~/.ssh
(1)准备三台机器,配置对应域名
root@doris1:~# vim /etc/hosts
172.26.16.60 doris1 doris1
172.26.16.61 doris2 doris2
172.26.16.62 doris3 doris3
(2)安装jdk8
rpm -ivh jdk-8u144-linux-x64.rpm
#配置环境变量
[root@localhost ]# vim /etc/profile
export JAVA_HOME=/usr/java/jdk1.8.0_144
export JRE_HOME=$JAVA_HOME/jre
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
#使修改生效
source /etc/profile
#查看系统变量值
echo $PATH
#检查JDK 配置情况
java -version
(3)手动部署,配置FE,三台机器上传编译后的doris,并进行配置
#上传服务jar到三台服务器
root@doris123:~# mkdir /opt/module && cd /opt/module/
root@doris123:# cd /opt/module/StarRocks-1.19.0/fe/conf
root@doris123:# vim fe.conf
meta_dir = /opt/module/doris-meta
root@doris123:# mkdir /opt/module/doris-meta
root@doris123:# cd /opt/module/doris-meta
root@doris123:# sh /opt/module/StarRocks-1.19.0/fe/bin/start_fe.sh --daemon
root@doris123:# jps
15878 PaloFe
15983 Jps
(5)部署三台BE节点
storage_root_path配置存储目录,可以用;来指定多个目录,每个目录后可以跟逗号,指定大小默认GB
root@doris123:# vim /opt/module/StarRocks-1.19.0/be/conf/be.conf
storage_root_path = /opt/module/doris_storage1,10;/opt/module/doris_storage2
root@doris123:# mkdir /opt/module/doris_storage1 && mkdir /opt/module/doris_storage2
(5)官网示例:
storage_root_path=/home/disk1/doris.HDD,50;/home/disk2/doris.SSD,10;/home/disk2/doris
说明
/home/disk1/doris.HDD, 50,表示存储限制为50GB, HDD;
/home/disk2/doris.SSD 10, 存储限制为10GB,SSD;
/home/disk2/doris,存储限制为磁盘最大容量,默认为HDD
示例2如下:
注意:不论HHD磁盘目录还是SSD磁盘目录,都无需添加后缀,storage_root_path参数里指定medium即可
storage_root_path=/home/disk1/doris,medium:hdd,capacity:50;/home/disk2/doris,medium:ssd,capacity:50
说明
/home/disk1/doris,medium:hdd,capacity:10,表示存储限制为10GB, HHD;
/home/disk2/doris,medium:ssd,capacity:50,表示存储限制为50GB, SSD;
(6)安装mysql客户端,上传所需离线包
#在 doris1上面安装 mysql
[hadoop@nn1 tmp]$ cd tmp/upload
1.#下载yum原
wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
2.#安装mysql 源
rpm -ivh mysql57-community-release-el7-11.noarch.rpm
3.#查看是否安装成功
yum repolist enabled | grep "mysql.*-community.*"
4.#用 yum 命令安装mysql
yum install mysql-community-server
5.#查看MYSQL配置文件加载顺序:
mysqld --help --verbose|grep -A1 -B1 cnf
6.#修改/etc/my.cnf 配置文件内的文件目录 修改mysql的配置文件
[root@nn1 yum.repos.d]# vim /etc/my.cnf
#data目录
datadir=/data/mysql/data
#严格模式
sql_mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
log-error=/data/mysql/log/mysqld.log
7.#创建mysql 文件目录
[root@localhost jar]# mkdir -p /data/mysql/data
[root@localhost jar]# mkdir -p /data/mysql/log
7.1#生成首次登录随机密码
mysqld --initialize
8.查看密码
[root@nn1 log]# cat /data/mysql/log/mysqld.log
A temporary password is generated for root@localhost: DL7Mgfh9rh(r
9.#修改mysql 文件目录所有者为 mysql 用户
sudo chown -R mysql:mysql /data/mysql
10.#启动mysql
sudo systemctl start mysqld.service
10.1#查看服务
[root@nn1 log]# ps aux | grep mysqld.service
11.#用生成的随机密码登录mysql
mysql -uroot -p'DL7Mgfh9rh(r'
12.#设置密码
mysql> set password=PASSWORD('123456')
Query OK, 0 rows affected, 1 warning (0.03 sec)
mysql>exit #退出
(7)安装mysql客户端后,使用客户端访问doris pe节点
root@doris1:/opt/software# mysql -hdoris1 -P 9030 -uroot
(8)登录后添加be节点,port为be上的heartbeat_service_port端口,默认9050
ALTER SYSTEM ADD BACKEND "doris1:9050";
ALTER SYSTEM ADD BACKEND "doris2:9050";
ALTER SYSTEM ADD BACKEND "doris3:9050";
(9)启动be节点 安装到这里了
root@doris123:~# sh /opt/module/StarRocks-1.19.0/be/bin/start_be.sh --daemon
(10)通过mysql客户端,检测be节点状态,alive必须为true
root@doris1:/opt/software# mysql -hdoris1 -P 9030 -uroot
SHOW PROC '/backends';
(11)可选,非必须部署,部署FS_BROKER,BROKER以插件的形式,独立与Doris的部署,建议每个PE和BE节点都部署一个Broker,Broker是用于访问外部数据源的进程,默认是HDSF。上传编译好的hdfs_broker。
#上传broker (--daemon在后台启动)
root@doris123:# sh /opt/module/StarRocks-1.19.0/apache_hdfs_broker/bin/start_broker.sh --daemon
(12)使用mysql客户端访问pe,添加broker节点
root@doris1:/opt/module/apache_hdfs_broker# mysql -hdoris1 -P 9030 -uroot
ALTER SYSTEM ADD BROKER broker_name "doris1:8000","doris2:8000","doris3:8000";
(13)查看Broker状态
SHOW PROC "/brokers";
扩容和缩容
(1)使用mysql登录客户端后,可以使用sql命令查看FE状态,目前就一台FE
root@doris1:/opt/module/apache_hdfs_broker# mysql -hdoris1 -P 9030 -uroot
mysql> SHOW PROC '/frontends';
(2)也可以通过页面访问进行监控,访问8030,账户为root,密码默认为空不用填写
(3)增加FE节点,FE分为Leader,Follower和Observer三种角色。默认一个集群只能有一个Leader,可以有多个Follower和Observer.其中Leader和Follower组成一个Paxos选择组,如果Leader宕机,则剩下的Follower会成为Leader,保证HA。Observer是负责同步Leader数据的不参与选举。如果只部署一个FE,则FE默认就是Leader。
(4)在doris2再部署一台FE,doris3上部署Observer。--helper参数指定leader地址和端口号
mysql> ALTER SYSTEM ADD FOLLOWER "doris2:9010";
mysql> ALTER SYSTEM ADD OBSERVER "doris3:9010";
root@doris2:/opt/module/doris/fe# mkdir /opt/module/doris/fe/doris-meta
root@doris2:/opt/module/doris/fe# sh bin/start_fe.sh --helper doris1:9010 --daemon
root@doris3:/opt/module/doris/fe# mkdir /opt/module/doris/fe/doris-meta
root@doris3:/opt/module/doris/fe# sh bin/start_fe.sh --helper doris1:9010 --daemon
(5)全部启动完毕后,再通过mysql客户端,查看FE状况
mysql> SHOW PROC '/frontends';
(6) 增加BE节点,就像上面安装一样在mysql客户端,使用ALTER SYSTEM ADD BACKEND语句即可,相对应删除BE节点,使用ALTER SYSTEM DECOMMISSION BACKEND "be_host:be_heartbeat_service_port";