这是我第一次安装部署Starrocks三节点分布式集群数据库,采用存算一体的架构,花了大半天时间,部署过程中也不到不少问题,包括主机环境、参数配置、网络和实施操作步骤先后等方面引发的问题。

Starrocks数据库是怎么样的数据库,它的架构原理等内容,我在这里就不必多说了,这些内容可以从它的官网了解到。我在这里想用更多篇幅去讲述部署过程,以及一些个人感想。针对安装过程遇到的问题,进行的一些感想,就放到文章的后面部分讲述。

Starrocks集群数据库安装
部署概要

这次安装的是StarRocks-3.2.1版本,采用了三台云服务器,初始环境,MySQL Client安装在主节点上,三个节点都需要安装上JDK 11,FE启动需要依赖JDK(至少JDK 8),FE组件存放集群的元数据,BE组件存放业务数据。
部署过程
准备安装环境
--说明
以下操作都是使用root用户操作,无特殊说明,一般的操作是在三个节点都执行,三个节点执行相同内容但有节点区分的情况,一般都有说明。
--下载并安装并配置JDK
##下载与安装cd /usr/local/wget https://repo.huaweicloud.com/openjdk/11.0.1/openjdk-11.0.1_linux-x64_bin.tar.gz#tar -zxvf openjdk-11.0.1_linux-x64_bin.tar.gz## jdk 配置vi ~/.bash_profileexport JAVA_HOME=/usr/local/jdk-11.0.1export CLASSPATH=$CLASSPATH:$JAVA_HOME/libexport PATH=$PATH:$JAVA_HOME/bin#source ~/.bash_profile# java -versionopenjdk version "11.0.1" 2018-10-16OpenJDK Runtime Environment 18.9 (build 11.0.1+13)OpenJDK 64-Bit Server VM 18.9 (build 11.0.1+13, mixed mode)--查询并卸载系统自带的Mariadbrpm -qa | grep mariadb[root@sutestdb01 bin]# rpm -qa | grep mariadbmariadb-libs-5.5.68-1.el7.x86_64[root@sutestdb01 bin]# rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64[root@sutestdb01 bin]# rpm -qa | grep mariadb[root@sutestdb01 bin]#--三台主机的starrocks安装用户配置互信#sutestdb01:ssh-keygen -t rsassh-copy-id startestdb02ssh-copy-id startestdb03#ssh sutestdb02 验证#startestdb02:ssh-keygen -t rsassh-copy-id startestdb01ssh-copy-id startestdb03#ssh sutestdb01 验证#startestdb03:ssh-keygen -t rsassh-copy-id startestdb02ssh-copy-id startestdb01#ssh sutestdb01 验证--禁止 Selinuxsed -i 's/SELINUX=.*/SELINUX=disabled/' etc/selinux/configsed -i 's/SELINUXTYPE/#SELINUXTYPE/' etc/selinux/configsetenforce 0--关闭透明大页echo 'madvise' | sudo tee sys/kernel/mm/transparent_hugepage/enabled--关闭Swappinessecho 0 | sudo tee proc/sys/vm/swappiness--启用Memory Overcommitecho 1 | sudo tee proc/sys/vm/overcommit_memory--设置打开的文件数量限制echo "* soft nofile 65535" >> etc/security/limits.confecho "* hard nofile 65535" >> etc/security/limits.confulimit -n 65535--时区设置cp -f usr/share/zoneinfo/Asia/Shanghai etc/localtimehwclock--网络配置echo 1 | sudo tee proc/sys/net/ipv4/tcp_abort_on_overflowecho 1024 | sudo tee proc/sys/net/core/somaxconn--安装并设置NTPrpm -qa | grep ntpsudo yum install ntp ntpdatesudo systemctl start ntpd.servicesudo systemctl enable ntpd.service--高并发配置echo 120000 > proc/sys/kernel/threads-maxecho 262144 > proc/sys/vm/max_map_countecho 200000 > proc/sys/kernel/pid_max--主节点安装mysql软件xz -d mysql-8.0.33-linux-glibc2.12-x86_64.tar.xztar -xvf mysql-8.0.33-linux-glibc2.12-x86_64.tarmv mysql-8.0.33-linux-glibc2.12-x86_64 mysql# vi etc/profileexport MYSQL_HOME=/usr/local/mysqlexport PATH=$MYSQL_HOME/bin:$PATHJAVA_HOME的环境变量要求配置到启动该节点fe的用户~/.bash_profile隐藏文件里面,我的环境使用操作系统root用户执行启动fe。
进行安装Starrocks
--解压安装包[root@sutestdb03 opt]# cd opt[root@sutestdb03 opt]# StarRocks-3.2.1.tar.gz[root@sutestdb03 opt]# mv StarRocks-3.2.1 starrocks--创建所需目录##node1mkdir -p hdisk1/starrocks/fe/metamkdir -p hdisk1/starrocks/be/storagemkdir -p var/log/starrocks/femkdir -p var/log/starrocks/be##node2mkdir -p hdisk2/starrocks/fe/metamkdir -p hdisk2/starrocks/be/storagemkdir -p var/log/starrocks/femkdir -p var/log/starrocks/be##node3mkdir -p hdisk3/starrocks/fe/metamkdir -p hdisk3/starrocks/be/storagemkdir -p var/log/starrocks/femkdir -p var/log/starrocks/be##node1 配置fe启动参数cat opt/starrocks/fe/conf/fe.confLOG_DIR = var/log/starrocks/femeta_dir = hdisk1/starrocks/fe/metaJAVA_HOME = usr/local/jdk-11.0.1priority_networks = 172.17.7.11sys_log_dir = var/log/starrocks/feaudit_log_dir = var/log/starrocks/fesys_log_level = INFOhttp_port = 8030rpc_port = 9020query_port = 9030edit_log_port = 9010mysql_service_nio_enabled = trueJAVA_OPTS_FOR_JDK_11="-Dlog4j2.formatMsgNoLookups=true -Xmx8192m -XX:+UseG1GC -Xlog:gc*:${LOG_DIR}/fe.gc.log.$DATE:time -Djava.security.policy=${STARROCKS_HOME}/conf/udf_security.policy"JAVA_OPTS="-Dlog4j2.formatMsgNoLookups=true -Xmx8192m -XX:+UseG1GC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:${LOG_DIR}/fe.gc.log.$DATE -XX:+PrintConcurrentLocks -Djava.security.policy=${STARROCKS_HOME}/conf/udf_security.policy"##node1 启动fe组件并查看进程/opt/starrocks/fe/bin/start_fe.sh --daemonps -ef |grep feroot 65 2 0 10:29 ? 00:00:00 [deferwq]root 3371 1 0 14:21 ? 00:04:41 /usr/local/jdk-11.0.1/bin/java -Dlog4j2.formatMsgNoLookups=true -Xmx8192m -XX:+UseG1GC -Xlog:gc*:/var/log/starrocks/fe/fe.gc.log.:time -Djava.security.policy=/opt/starrocks/fe/conf/udf_security.policy com.starrocks.StarRocksFE##进入数据库查看节点信息与状态#Starrocks默认采用9030端口登录管理后台,无密码登录,Join为 true并且Alive为true 则表示该节点fe启动正常。[root@startestdb01 fe]# mysql -h 127.0.0.1 -P9030 -urootEnter password:Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 5Server version: 5.1.0 3.2.1-79ee91dCopyright (c) 2000, 2023, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql>mysql> SHOW PROC '/frontends'\G*************************** 1. row ***************************Name: 172.17.7.11_9010_1710334910057IP: 172.17.7.11EditLogPort: 9010HttpPort: 8030QueryPort: 9030RpcPort: 9020Role: LEADERClusterId: 363216112Join: trueAlive: trueReplayedJournalId: 27075LastHeartbeat: 2024-03-14 22:27:29IsHelper: trueErrMsg:StartTime: 2024-03-14 14:22:03Version: 3.2.1-79ee91d#使用 MySQL 客户端连接已有 FE 节点,添加新 FE 节点的信息,包括角色、IP 地址、以及 Port#添加 Follower FE 节点 ALTER SYSTEM ADD FOLLOWER "host:port";#添加 Observer FE 节点 ALTER SYSTEM ADD OBSERVER "host:port";#删除 Follower FE 节点 ALTER SYSTEM DROP FOLLOWER "host:port";#删除 Observer FE 节点 ALTER SYSTEM drop OBSERVER "host:port";ALTER SYSTEM ADD FOLLOWER "172.17.199.35:9010";ALTER SYSTEM ADD FOLLOWER "172.17.199.36:9010";##node2 配置fe启动参数cat /opt/starrocks/fe/conf/fe.confLOG_DIR = /var/log/starrocks/femeta_dir = /hdisk2/starrocks/fe/metaJAVA_HOME = /usr/local/jdk-11.0.1priority_networks = 172.17.199.35sys_log_dir = /var/log/starrocks/feaudit_log_dir = /var/log/starrocks/fesys_log_level = INFOhttp_port = 8030rpc_port = 9020query_port = 9030edit_log_port = 9010mysql_service_nio_enabled = trueJAVA_OPTS_FOR_JDK_11="-Dlog4j2.formatMsgNoLookups=true -Xmx8192m -XX:+UseG1GC -Xlog:gc*:${LOG_DIR}/fe.gc.log.$DATE:time -Djava.security.policy=${STARROCKS_HOME}/conf/udf_security.policy"JAVA_OPTS="-Dlog4j2.formatMsgNoLookups=true -Xmx8192m -XX:+UseG1GC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:${LOG_DIR}/fe.gc.log.$DATE -XX:+PrintConcurrentLocks -Djava.security.policy=${STARROCKS_HOME}/conf/udf_security.policy"##node3 配置fe启动参数cat /opt/starrocks/fe/conf/fe.confLOG_DIR = /var/log/starrocks/femeta_dir = /hdisk3/starrocks/fe/metaJAVA_HOME = /usr/local/jdk-11.0.1priority_networks = 172.17.199.36sys_log_dir = /var/log/starrocks/feaudit_log_dir = /var/log/starrocks/fesys_log_level = INFOhttp_port = 8030rpc_port = 9020query_port = 9030edit_log_port = 9010mysql_service_nio_enabled = trueJAVA_OPTS_FOR_JDK_11="-Dlog4j2.formatMsgNoLookups=true -Xmx8192m -XX:+UseG1GC -Xlog:gc*:${LOG_DIR}/fe.gc.log.$DATE:time -Djava.security.policy=${STARROCKS_HOME}/conf/udf_security.policy"JAVA_OPTS="-Dlog4j2.formatMsgNoLookups=true -Xmx8192m -XX:+UseG1GC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:${LOG_DIR}/fe.gc.log.$DATE -XX:+PrintConcurrentLocks -Djava.security.policy=${STARROCKS_HOME}/conf/udf_security.policy"##node1 的 root用户执行启动 node2与node3 的fe第一次启动#这个在node1执行node2和node3 的fe的第一次启动动作,加上--helper参数,一个表示是从节点,同步元数据,第二个就是启动两个节点的fe组件,默认采用9010端口。/opt/starrocks/fe/bin/start_fe.sh --helper 172.17.199.35:9010 --daemon/opt/starrocks/fe/bin/start_fe.sh --helper 172.17.199.36:9010 --daemon##使用MySQL客户端登录node1再次查看各个节点fe的状态mysql> SHOW PROC '/frontends'\G*************************** 1. row ***************************Name: 172.17.7.11_9010_1710334910057IP: 172.17.7.11EditLogPort: 9010HttpPort: 8030QueryPort: 9030RpcPort: 9020Role: LEADERClusterId: 363216112Join: trueAlive: trueReplayedJournalId: 27075LastHeartbeat: 2024-03-14 22:27:29IsHelper: trueErrMsg:StartTime: 2024-03-14 14:22:03Version: 3.2.1-79ee91d*************************** 2. row ***************************Name: 172.17.199.35_9010_1710403216113IP: 172.17.199.35EditLogPort: 9010HttpPort: 8030QueryPort: 9030RpcPort: 9020Role: FOLLOWERClusterId: 363216112Join: trueAlive: trueReplayedJournalId: 27073LastHeartbeat: 2024-03-14 22:27:29IsHelper: trueErrMsg:StartTime: 2024-03-14 16:05:12Version: 3.2.1-79ee91d*************************** 3. row ***************************Name: 172.17.199.36_9010_1710403217938IP: 172.17.199.36EditLogPort: 9010HttpPort: 8030QueryPort: 9030RpcPort: 9020Role: FOLLOWERClusterId: 363216112Join: trueAlive: trueReplayedJournalId: 27073LastHeartbeat: 2024-03-14 22:27:29IsHelper: trueErrMsg:StartTime: 2024-03-14 17:57:51Version: 3.2.1-79ee91d3 rows in set (0.04 sec)到了这里,三个节点的fe基本配置完成,完成了starrocks高可用g架构的配置。fe.conf参数文件的JAVA_HOME参数要求与上一步的环境变量的JAVA_HOME参数一致。##node1 配置be参数grep -v '^#' be.confsys_log_level = INFOpriority_networks = 172.17.7.11be_port = 9060be_http_port = 8040heartbeat_service_port = 9050brpc_port = 8060starlet_port = 9070storage_root_path = /hdisk1/starrocks/be/storage##node2 配置be参数grep -v '^#' be.confsys_log_level = INFObe_port = 9060be_http_port = 8040heartbeat_service_port = 9050brpc_port = 8060starlet_port = 9070priority_networks = 172.17.199.35storage_root_path = /hdisk2/starrocks/be/storage##node3 配置be参数grep -v '^#' be.confsys_log_level = INFObe_port = 9060be_http_port = 8040heartbeat_service_port = 9050brpc_port = 8060starlet_port = 9070priority_networks = 172.17.199.36storage_root_path = /hdisk3/starrocks/be/storage##三个节点启动be并查看/opt/starrocks/be/bin/start_be.sh --daemonps -ef |grep beroot 1858 1 0 Mar14 ? 00:18:22 /opt/starrocks/be/lib/starrocks_be这样可以说明be启动成功。##MySQL客户端连接starrock1添加bemysql -h 127.0.0.1 -P9030 -uroot#使用 MySQL 客户端连接已有 FE 节点#添加BE 节点 ALTER SYSTEM ADD BACKEND "host:port";#删除BE 节点 ALTER SYSTEM decommission BACKEND "host:port";ALTER SYSTEM ADD BACKEND "172.17.7.11:9050";ALTER SYSTEM ADD BACKEND "172.17.199.35:9050";ALTER SYSTEM ADD BACKEND "172.17.199.36:9050";##查看各节点be状态mysql> SHOW PROC '/backends'\G*************************** 1. row ***************************BackendId: 24003IP: 172.17.199.35HeartbeatPort: 9050BePort: 9060HttpPort: 8040BrpcPort: 8060LastStartTime: 2024-03-14 14:10:01LastHeartbeat: 2024-03-16 20:43:03Alive: trueSystemDecommissioned: falseClusterDecommissioned: falseTabletNum: 28DataUsedCapacity: 1.431 KBAvailCapacity: 34.681 GBTotalCapacity: 49.089 GBUsedPct: 29.35 %MaxDiskUsedPct: 29.35 %ErrMsg:Version: 3.2.1-79ee91dStatus: {"lastSuccessReportTabletsTime":"2024-03-16 20:42:28"}DataTotalCapacity: 34.681 GBDataUsedPct: 0.00 %CpuCores: 2NumRunningQueries: 0MemUsedPct: 7.82 %CpuUsedPct: 0.4 %*************************** 2. row ***************************BackendId: 24004IP: 172.17.199.36HeartbeatPort: 9050BePort: 9060HttpPort: 8040BrpcPort: 8060LastStartTime: 2024-03-14 14:10:01LastHeartbeat: 2024-03-16 20:43:03Alive: trueSystemDecommissioned: falseClusterDecommissioned: falseTabletNum: 28DataUsedCapacity: 1.431 KBAvailCapacity: 34.861 GBTotalCapacity: 49.089 GBUsedPct: 28.98 %MaxDiskUsedPct: 28.98 %ErrMsg:Version: 3.2.1-79ee91dStatus: {"lastSuccessReportTabletsTime":"2024-03-16 20:42:39"}DataTotalCapacity: 34.861 GBDataUsedPct: 0.00 %CpuCores: 2NumRunningQueries: 0MemUsedPct: 7.84 %CpuUsedPct: 0.0 %*************************** 3. row ***************************BackendId: 11001IP: 172.17.7.11HeartbeatPort: 9050BePort: 9060HttpPort: 8040BrpcPort: 8060LastStartTime: 2024-03-14 10:30:42LastHeartbeat: 2024-03-16 20:43:03Alive: trueSystemDecommissioned: falseClusterDecommissioned: falseTabletNum: 32DataUsedCapacity: 6.129 KBAvailCapacity: 32.507 GBTotalCapacity: 49.089 GBUsedPct: 33.78 %MaxDiskUsedPct: 33.78 %ErrMsg:Version: 3.2.1-79ee91dStatus: {"lastSuccessReportTabletsTime":"2024-03-16 20:42:24"}DataTotalCapacity: 32.507 GBDataUsedPct: 0.00 %CpuCores: 2NumRunningQueries: 0MemUsedPct: 7.93 %CpuUsedPct: 0.4 %3 rows in set (0.01 sec)##修改MySQL客户端登录fe的密码#原来默认的是没有密码的,即空密码可登陆SET PASSWORD = PASSWORD('XXXXXXAAAAAA');到这里为止,我们已经将starrocks高可用集群搭建成功了。如果需要的话,可以添加CN。
配置好starrocks高可用集群后还可以通过web前端查看fe和be的信息和状态,如下截图所示:
##登录http://leader_IP:8030/system?path=//frontends各节点fe配置信息和状态

可以看到高可用的主从关系。
##登录http://leader_IP:8030/system?path=//backends各节点be配置信息和状态

可以看到集群每个节点的空间使用情况。
总结
从上面的整个安装部署的过程,可以看到,配置好整个Starrocks高可用高级群,大致分为以下步骤:下载安装配置文件、安装JDK、安装MySQL客户端、配置操作系统环境参数、配置FE并启动、添加FE节点创建FE高可用、配置BE并启动、添加BE节点创建BE集群,我所采用的步骤是跟Starrock提倡的部署过程是不一样的。对于Starrocks数据库来说,高可用和集群是两个概念,高可用是针对FE计算节点来说的,(分布式)集群是针对BE存储节点来说的。有了Starrocks的集群和高可用两个概念之后,就容易根据它的官方文档进行安装部署。
感想
这个感想,其实是针对Starrocks高可用分布式集群的部署过程,将遇到的一些问题进行了一些思考,表达了个人的看法。
1、安装JDK,环境变量必须明确JAVA_HOME,而且要求和fe.conf文件的JAVA_HOME要一致,不然fe就启动失败。
2、使用到的9010,9020,9030,9050,9060,9070,8030,8040,8060,8070这系列端口,要求在各个节点间相通,也即如下端口使用说明。
be_port = 9060be_http_port = 8040heartbeat_service_port = 9050brpc_port = 8060starlet_port = 9070http_port = 8030rpc_port = 9020query_port = 9030edit_log_port = 9010
3、如果安装Starrocks-3.2.1,JDK尽量安装JDK11或者更高版本。
4、配置FE高可用个,需要先在fe leader节点使用ALTER SYSTEM ADD FOLLOWER "fol_host:port";添加Follower FE 节点 ,再在leader节点操作系统使用/.../starrocks/fe/bin/start_fe.sh --helper follow_IP:9010 --daemon启动follow节点的FE。
5、Starrocks官方文档内容有点凌乱,在不了解高可用和集群两个概念的区别情况下,容易导致follow 节点的fe启动异常。
6、fe.conf和be.conf文件配置参数错误,都将导致fe或者be启动失败。




