暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Starrocks三节点高可用分布式集群数据库安装部署-2024

skylines 2024-03-16
558

这是我第一次安装部署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_profile
    export JAVA_HOME=/usr/local/jdk-11.0.1
    export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib
    export PATH=$PATH:$JAVA_HOME/bin




    #source ~/.bash_profile


    # java -version
    openjdk version "11.0.1" 2018-10-16
    OpenJDK Runtime Environment 18.9 (build 11.0.1+13)
    OpenJDK 64-Bit Server VM 18.9 (build 11.0.1+13, mixed mode)




    --查询并卸载系统自带的Mariadb
    rpm -qa | grep mariadb


    [root@sutestdb01 bin]# rpm -qa | grep mariadb
    mariadb-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 rsa
    ssh-copy-id startestdb02
    ssh-copy-id startestdb03


    #ssh sutestdb02 验证


    #startestdb02:
    ssh-keygen -t rsa
    ssh-copy-id startestdb01
    ssh-copy-id startestdb03


    #ssh sutestdb01 验证


    #startestdb03:
    ssh-keygen -t rsa
    ssh-copy-id startestdb02
    ssh-copy-id startestdb01


    #ssh sutestdb01 验证
    --禁止 Selinux
    sed -i 's/SELINUX=.*/SELINUX=disabled/' etc/selinux/config
    sed -i 's/SELINUXTYPE/#SELINUXTYPE/' etc/selinux/config


    setenforce 0


    --关闭透明大页
    echo 'madvise' | sudo tee sys/kernel/mm/transparent_hugepage/enabled


    --关闭Swappiness
    echo 0 | sudo tee proc/sys/vm/swappiness


    --启用Memory Overcommit
    echo 1 | sudo tee proc/sys/vm/overcommit_memory




    --设置打开的文件数量限制
    echo "* soft nofile 65535" >> etc/security/limits.conf
    echo "* hard nofile 65535" >> etc/security/limits.conf
    ulimit -n 65535




    --时区设置
    cp -f usr/share/zoneinfo/Asia/Shanghai etc/localtime
    hwclock




    --网络配置
    echo 1 | sudo tee proc/sys/net/ipv4/tcp_abort_on_overflow
    echo 1024 | sudo tee proc/sys/net/core/somaxconn




    --安装并设置NTP
    rpm -qa | grep ntp


    sudo yum install ntp ntpdate
    sudo systemctl start ntpd.service
    sudo systemctl enable ntpd.service




    --高并发配置
    echo 120000 > proc/sys/kernel/threads-max
    echo 262144 > proc/sys/vm/max_map_count
    echo 200000 > proc/sys/kernel/pid_max




    --主节点安装mysql软件
    xz -d mysql-8.0.33-linux-glibc2.12-x86_64.tar.xz
    tar -xvf mysql-8.0.33-linux-glibc2.12-x86_64.tar
    mv mysql-8.0.33-linux-glibc2.12-x86_64 mysql


    # vi etc/profile
    export MYSQL_HOME=/usr/local/mysql
    export PATH=$MYSQL_HOME/bin:$PATH


    JAVA_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


      --创建所需目录
      ##node1
      mkdir -p hdisk1/starrocks/fe/meta
      mkdir -p hdisk1/starrocks/be/storage
      mkdir -p var/log/starrocks/fe
      mkdir -p var/log/starrocks/be


      ##node2
      mkdir -p hdisk2/starrocks/fe/meta
      mkdir -p hdisk2/starrocks/be/storage
      mkdir -p var/log/starrocks/fe
      mkdir -p var/log/starrocks/be


      ##node3
      mkdir -p hdisk3/starrocks/fe/meta
      mkdir -p hdisk3/starrocks/be/storage
      mkdir -p var/log/starrocks/fe
      mkdir -p var/log/starrocks/be


      ##node1 配置fe启动参数
      cat opt/starrocks/fe/conf/fe.conf
      LOG_DIR = var/log/starrocks/fe
      meta_dir = hdisk1/starrocks/fe/meta
      JAVA_HOME = usr/local/jdk-11.0.1
      priority_networks = 172.17.7.11
      sys_log_dir = var/log/starrocks/fe
      audit_log_dir = var/log/starrocks/fe
      sys_log_level = INFO
      http_port = 8030
      rpc_port = 9020
      query_port = 9030
      edit_log_port = 9010
      mysql_service_nio_enabled = true
      JAVA_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 --daemon


      ps -ef |grep fe
      root 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 -uroot
      Enter password:
      Welcome to the MySQL monitor. Commands end with ; or \g.
      Your MySQL connection id is 5
      Server version: 5.1.0 3.2.1-79ee91d


      Copyright (c) 2000, 2023, Oracle and/or its affiliates.


      Oracle is a registered trademark of Oracle Corporation and/or its
      affiliates. Other names may be trademarks of their respective
      owners.


      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_1710334910057
      IP: 172.17.7.11
      EditLogPort: 9010
      HttpPort: 8030
      QueryPort: 9030
      RpcPort: 9020
      Role: LEADER
      ClusterId: 363216112
      Join: true
      Alive: true
      ReplayedJournalId: 27075
      LastHeartbeat: 2024-03-14 22:27:29
      IsHelper: true
      ErrMsg:
      StartTime: 2024-03-14 14:22:03
      Version: 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.conf
      LOG_DIR = /var/log/starrocks/fe
      meta_dir = /hdisk2/starrocks/fe/meta
      JAVA_HOME = /usr/local/jdk-11.0.1
      priority_networks = 172.17.199.35
      sys_log_dir = /var/log/starrocks/fe
      audit_log_dir = /var/log/starrocks/fe
      sys_log_level = INFO
      http_port = 8030
      rpc_port = 9020
      query_port = 9030
      edit_log_port = 9010
      mysql_service_nio_enabled = true
      JAVA_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.conf
      LOG_DIR = /var/log/starrocks/fe
      meta_dir = /hdisk3/starrocks/fe/meta
      JAVA_HOME = /usr/local/jdk-11.0.1
      priority_networks = 172.17.199.36
      sys_log_dir = /var/log/starrocks/fe
      audit_log_dir = /var/log/starrocks/fe
      sys_log_level = INFO
      http_port = 8030
      rpc_port = 9020
      query_port = 9030
      edit_log_port = 9010
      mysql_service_nio_enabled = true
      JAVA_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_1710334910057
      IP: 172.17.7.11
      EditLogPort: 9010
      HttpPort: 8030
      QueryPort: 9030
      RpcPort: 9020
      Role: LEADER
      ClusterId: 363216112
      Join: true
      Alive: true
      ReplayedJournalId: 27075
      LastHeartbeat: 2024-03-14 22:27:29
      IsHelper: true
      ErrMsg:
      StartTime: 2024-03-14 14:22:03
      Version: 3.2.1-79ee91d
      *************************** 2. row ***************************
      Name: 172.17.199.35_9010_1710403216113
      IP: 172.17.199.35
      EditLogPort: 9010
      HttpPort: 8030
      QueryPort: 9030
      RpcPort: 9020
      Role: FOLLOWER
      ClusterId: 363216112
      Join: true
      Alive: true
      ReplayedJournalId: 27073
      LastHeartbeat: 2024-03-14 22:27:29
      IsHelper: true
      ErrMsg:
      StartTime: 2024-03-14 16:05:12
      Version: 3.2.1-79ee91d
      *************************** 3. row ***************************
      Name: 172.17.199.36_9010_1710403217938
      IP: 172.17.199.36
      EditLogPort: 9010
      HttpPort: 8030
      QueryPort: 9030
      RpcPort: 9020
      Role: FOLLOWER
      ClusterId: 363216112
      Join: true
      Alive: true
      ReplayedJournalId: 27073
      LastHeartbeat: 2024-03-14 22:27:29
      IsHelper: true
      ErrMsg:
      StartTime: 2024-03-14 17:57:51
      Version: 3.2.1-79ee91d
      3 rows in set (0.04 sec)


      到了这里,三个节点的fe基本配置完成,完成了starrocks高可用g架构的配置。
      fe.conf参数文件的JAVA_HOME参数要求与上一步的环境变量的JAVA_HOME参数一致。


      ##node1 配置be参数
      grep -v '^#' be.conf


      sys_log_level = INFO
      priority_networks = 172.17.7.11
      be_port = 9060
      be_http_port = 8040
      heartbeat_service_port = 9050
      brpc_port = 8060
      starlet_port = 9070
      storage_root_path = /hdisk1/starrocks/be/storage




      ##node2 配置be参数
      grep -v '^#' be.conf


      sys_log_level = INFO
      be_port = 9060
      be_http_port = 8040
      heartbeat_service_port = 9050
      brpc_port = 8060
      starlet_port = 9070
      priority_networks = 172.17.199.35
      storage_root_path = /hdisk2/starrocks/be/storage




      ##node3 配置be参数
      grep -v '^#' be.conf


      sys_log_level = INFO
      be_port = 9060
      be_http_port = 8040
      heartbeat_service_port = 9050
      brpc_port = 8060
      starlet_port = 9070


      priority_networks = 172.17.199.36
      storage_root_path = /hdisk3/starrocks/be/storage


      ##三个节点启动be并查看
      /opt/starrocks/be/bin/start_be.sh --daemon


      ps -ef |grep be
      root 1858 1 0 Mar14 ? 00:18:22 /opt/starrocks/be/lib/starrocks_be
      这样可以说明be启动成功。


      ##MySQL客户端连接starrock1添加be
      mysql -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: 24003
      IP: 172.17.199.35
      HeartbeatPort: 9050
      BePort: 9060
      HttpPort: 8040
      BrpcPort: 8060
      LastStartTime: 2024-03-14 14:10:01
      LastHeartbeat: 2024-03-16 20:43:03
      Alive: true
      SystemDecommissioned: false
      ClusterDecommissioned: false
      TabletNum: 28
      DataUsedCapacity: 1.431 KB
      AvailCapacity: 34.681 GB
      TotalCapacity: 49.089 GB
      UsedPct: 29.35 %
      MaxDiskUsedPct: 29.35 %
      ErrMsg:
      Version: 3.2.1-79ee91d
      Status: {"lastSuccessReportTabletsTime":"2024-03-16 20:42:28"}
      DataTotalCapacity: 34.681 GB
      DataUsedPct: 0.00 %
      CpuCores: 2
      NumRunningQueries: 0
      MemUsedPct: 7.82 %
      CpuUsedPct: 0.4 %
      *************************** 2. row ***************************
      BackendId: 24004
      IP: 172.17.199.36
      HeartbeatPort: 9050
      BePort: 9060
      HttpPort: 8040
      BrpcPort: 8060
      LastStartTime: 2024-03-14 14:10:01
      LastHeartbeat: 2024-03-16 20:43:03
      Alive: true
      SystemDecommissioned: false
      ClusterDecommissioned: false
      TabletNum: 28
      DataUsedCapacity: 1.431 KB
      AvailCapacity: 34.861 GB
      TotalCapacity: 49.089 GB
      UsedPct: 28.98 %
      MaxDiskUsedPct: 28.98 %
      ErrMsg:
      Version: 3.2.1-79ee91d
      Status: {"lastSuccessReportTabletsTime":"2024-03-16 20:42:39"}
      DataTotalCapacity: 34.861 GB
      DataUsedPct: 0.00 %
      CpuCores: 2
      NumRunningQueries: 0
      MemUsedPct: 7.84 %
      CpuUsedPct: 0.0 %
      *************************** 3. row ***************************
      BackendId: 11001
      IP: 172.17.7.11
      HeartbeatPort: 9050
      BePort: 9060
      HttpPort: 8040
      BrpcPort: 8060
      LastStartTime: 2024-03-14 10:30:42
      LastHeartbeat: 2024-03-16 20:43:03
      Alive: true
      SystemDecommissioned: false
      ClusterDecommissioned: false
      TabletNum: 32
      DataUsedCapacity: 6.129 KB
      AvailCapacity: 32.507 GB
      TotalCapacity: 49.089 GB
      UsedPct: 33.78 %
      MaxDiskUsedPct: 33.78 %
      ErrMsg:
      Version: 3.2.1-79ee91d
      Status: {"lastSuccessReportTabletsTime":"2024-03-16 20:42:24"}
      DataTotalCapacity: 32.507 GB
      DataUsedPct: 0.00 %
      CpuCores: 2
      NumRunningQueries: 0
      MemUsedPct: 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 = 9060
        be_http_port = 8040
        heartbeat_service_port = 9050
        brpc_port = 8060
        starlet_port = 9070


        http_port = 8030
        rpc_port = 9020
        query_port = 9030
        edit_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启动失败。

        文章转载自skylines,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

        评论