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

0016.S StarRocks小规模集群部署最佳实践(1/2)

rundba 2022-05-22
2721

StarRocks小规模集群部署最佳实践(1/2)




在部署各种集群,尤其是规模化部署时,采用ansible方式进行批量配置安装,可极大减少安装配置工作量。下面介绍部署3台小规模StarRocks社区版集群,使用ansible进行安装前配置的详细过程。

0.ENV



0.1 基本配置

1) 硬件情况

服务器硬件:

       CPU:8C

       内存:32G

       硬盘:500G


2) 主机3台

主机名如下:

       sr01

       sr02

       sr03


3) 软件清单

       CentOS:7.8.2003

       StarRocks-2.2.0.tar.gz

       jdk-8u281-linux-x64.tar.gz

       mysql-5.7.33-el7-x86_64.tar.gz


0.2 组件清单-角色划分

       hosts ROLE

       sr01 FE Leader/BE

       sr02 FE OBSERVER/BE

       sr03 Broker/BE


sr01上部署FE FOLLOWER使其成为Leader,同时部署BE;

sr02上部署FE令其作为OBSERVERr,同时部署BE;

sr03部署一个Broker方便后面学习数据导入,同时部署BE。


有关StarRocks架构详细介绍,详见上篇文章StarRocks简介章节"3. 架构介绍"。


0.3 使用场景

      StarRocks可以满足企业级用户的多种分析需求,包括OLAP多维分析,定制报表,实时数据分析,Ad-hoc数据分析等。

具体的业务场景包括:

       数据仓库建设

       OLAP/BI分析

       用户行为分析

       广告数据分析

       系统监控分析

       探针分析 APM(Application Performance Management)



1. 主机名配置[sr01-3]


1.1 主机名设置sr0[1-3]

hostnamectl set-hostname sr01


1.2 每台主机sr0[1-3]增加hosts解析

    echo "192.168.3.1 sr01" >> /etc/hosts
    echo "192.168.3.2 sr02" >> /etc/hosts
    echo "192.168.3.3 sr03" >> /etc/hosts



    2. ansbile管理主机到其它节点等效性配置[sr01-3]


    2.1 每台主机sr0[1-3]生成密钥

      ssh-keygen -t rsa
      cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys


      2.2 拷贝sr0[2-3]密钥到ansbile管理主机sr01

        ssh-copy-id -i ~/.ssh/id_rsa.pub sr01


        2.3 从管理主机sr01传输到其他主机sr0[2-3]

          scp ~/.ssh/authorized_keys sr02:~/.ssh/
          scp ~/.ssh/authorized_keys sr03:~/.ssh/


          2.4 验证sr0[1-3]

          生成验证脚本conn_hostname.sh

            cat >> usr/local/bin/conn_hostname.sh << EOF
            ssh sr01 hostname
            ssh sr02 hostname
            ssh sr03 hostname
            EOF


            生成验证脚本conn_date.sh

              cat >> usr/local/bin/conn_date.sh << EOF
              ssh sr01 date
              ssh sr02 date
              ssh sr03 date
              EOF


              赋予执行权限

                chmod 755 usr/local/bin/conn_*.sh


                验证,确保等效性OK

                  conn_hostname.sh
                  conn_date.sh



                  3. 安装ansible[sr01]


                   现在自动化工具中,最简单、易于上手,而且最流行的当属Ansible莫属了。


                  3.1 确认python已经安装[sr01]

                    [root@sr01 ~]# python -V
                    Python 2.7.5


                    3.2 在ansible管理主机安装[sr01]

                      yum -y install epel-release
                      yum -y install ansible


                      3.3 修改主机组配置文件[sr01]

                      ansible默认配置文件/etc/ansible/ansible.cfg;

                      修改主机组默认配置文件/etc/ansible/hosts

                        vim etc/ansible/hosts
                        ...
                        [all]
                        sr0[1:3]


                        [others]
                        sr0[2:3]


                        3.4 验证ansible-OK[sr01]

                        1) 在所有主机上执行ping命令

                          ansible all -m ping


                          2) 复制本机hosts文件到主机[sr01]

                          复制文件到其它主机,目标文件默认权限为0644

                            ansible others -m copy -a "src=/etc/hosts dest=/etc/"


                            复制文件到其它主机,目标文件权限为0755,属主属组均为root,也可单独指定执行权限mode=u+x

                              ansible others -m copy -a "src=/usr/local/bin/conn_date.sh dest=/usr/local/bin/ mode=0755 owner=root group=root"
                              ansible others -m copy -a "src=/usr/local/bin/conn_hostname.sh dest=/usr/local/bin/ mode=0755 owner=root group=root"


                              3) 在所有主机上安装软件[sr01]

                                ansible all -m shell -a "yum -y install wget"



                                4. 关闭Swap分区[sr01-3]


                                      内存页(page)swap到磁盘会影SR的性能,需要关闭。

                                4.1 临时关闭[sr01]

                                  ansible all -a "free -h"
                                  ansible all -a "swapoff -a"
                                  ansible all -a "free -h"


                                  4.2 永久关闭[sr01]

                                  1) 注释掉/etc/fstab中的swap信息

                                  注释结果

                                    ...
                                    #/dev/mapper/centos-swap swap swap defaults 0 0


                                    注释所有主机

                                      sed -i 's/\/dev\/mapper\/centos-swap/#\/dev\/mapper\/centos-swap/g' /etc/fstab
                                      ansible all -a "sed -i 's/\/dev\/mapper\/centos-swap/#\/dev\/mapper\/centos-swap/g' /etc/fstab"


                                      查看注释结果

                                        ansible all -a "grep swap /etc/fstab"


                                        2) 调整swappiness参数[sr01]

                                          ansible all -a "echo vm.swappiness=0 >> /etc/sysctl.conf"


                                          3) 重启生效[sr01]

                                          当前已临时关闭,不需要要重启

                                            ansible all -a "reboot"


                                            4)验证(Swap行均为0)[sr01]

                                              ansible all -a "free -h"



                                              5. 关闭操作系统selinux  [sr01-3]


                                              查看selinux状态[sr01]

                                                ansible all -a "getenforce"


                                                临时关闭[sr01]

                                                  ansible all -a "setenforce 0"


                                                  永久关闭状态-需重启,临时关闭后不需要重启[sr1]

                                                    sed -i 's/=enforcing/=disabled/g' /etc/selinux/config


                                                    同步到其他机器[sr01]

                                                      ansible others -m copy -a "src=/etc/selinux/config dest=/etc/selinux/config"



                                                      6. 关闭操作系统防火墙[sr01-3]


                                                             安装期间避免端口不能访问而导致的异常,可以关闭防火墙,详见6.1,也可以打开SR对应防火墙端口,详见6.2。


                                                      6.1 关闭防火墙操作

                                                      firewall[CentOS7/8]

                                                        ansible all -a "systemctl status firewalld"
                                                        ansible all -a "systemctl stop firewalld"
                                                        ansible all -a "systemctl disable firewalld"


                                                        iptables[CentOS5/6]

                                                          ansible all -a "chkconfig iptables off"
                                                          ansible all -a "service iptables status"
                                                          ansible all -a "service iptables stop"


                                                          6.2 开放防火墙端口

                                                          1) StarRocks标准版端口[sr01]

                                                          8000、8030、8040、8060、9010、9020、9030、9050、9060


                                                          2) 逐个开放端口[sr01]

                                                            ansible all -a "firewall-cmd --zone=public --add-port=8000/tcp --permanent"
                                                            ansible all -a "firewall-cmd --zone=public --add-port=8030/tcp --permanent"
                                                            ansible all -a "firewall-cmd --zone=public --add-port=8040/tcp --permanent"
                                                            ansible all -a "firewall-cmd --zone=public --add-port=8060/tcp --permanent"
                                                            ansible all -a "firewall-cmd --zone=public --add-port=9010/tcp --permanent"
                                                            ansible all -a "firewall-cmd --zone=public --add-port=9020/tcp --permanent"
                                                            ansible all -a "firewall-cmd --zone=public --add-port=9030/tcp --permanent"
                                                            ansible all -a "firewall-cmd --zone=public --add-port=9050/tcp --permanent"
                                                            ansible all -a "firewall-cmd --zone=public --add-port=9060/tcp --permanent"


                                                            关闭端口参考[sr01]

                                                              firewall-cmd --zone=public --remove-port=8000/tcp --permanent


                                                              3) 配置立即生效[sr01]

                                                                ansible all -a "firewall-cmd --reload"


                                                                4) 查看所有开放端口[sr01]

                                                                  ansible all -a "firewall-cmd --zone=public --list-ports"



                                                                  7. 主机时间同步[sr01-3]


                                                                        在SR中,FE所在服务器的时钟最多允许5秒时钟偏差,需要进行时间同步。


                                                                  1) 安装ntp[sr01]

                                                                    ansible all -a "yum -y install ntp"


                                                                    2) 校准时间[sr01]

                                                                      ansible all -a "ntpdate cn.pool.ntp.org"


                                                                      3) 使用crontab定时计划任务[sr01]

                                                                        crontab -e
                                                                        00 12 * * * /sbin/ntpdate cn.pool.ntp.org

                                                                        [表示每隔12个小时同步一次。规则:分、时、日、月、星期]


                                                                        4) 传输到其它节点[sr01]

                                                                        传输前查看权限

                                                                          [root@sr01 ~]# ll /var/spool/cron/root 
                                                                          -rw------- 1 root root 42 Apr 14 16:31 /var/spool/cron/root


                                                                          传输到其它节点

                                                                            ansible others -m copy -a "src=/var/spool/cron/root dest=/var/spool/cron/root mode=0600"


                                                                            查看权限

                                                                              ansible all -a "ls -lrt /var/spool/cron/root"


                                                                              查看内容

                                                                                ansible all -a "crontab -l"


                                                                                5) 重启crontab计划任务[sr01]

                                                                                  ansible all -a "systemctl reload crond"


                                                                                  6) 查看各节点时间[sr01]

                                                                                    ansible all -a "date"



                                                                                    8. 设置文件描述符限制[sr01-3]


                                                                                          文件描述符限制过小会导致StarRocks BE启动报错,永久设置操作如下:

                                                                                    1) 修改limits.conf[sr01]

                                                                                    修改

                                                                                      echo "* soft nofile 65536" >> /etc/security/limits.conf
                                                                                      echo "* hard nofile 65536" >> /etc/security/limits.conf


                                                                                      查看

                                                                                        cat /etc/security/limits.conf


                                                                                        2) 传输到其它节点[sr01]

                                                                                          [root@sr01 ~]# ll /etc/security/limits.conf
                                                                                          -rw-r--r--. 1 root root 2462 Apr 14 17:00 /etc/security/limits.conf


                                                                                          传输到其它节点

                                                                                            ansible others -m copy -a "src=/etc/security/limits.conf dest=/etc/security/limits.conf"


                                                                                            查看所有节点内容

                                                                                              ansible all -a "tail -2 /etc/security/limits.conf"


                                                                                              3) 查看更改生效-需要重新登录会话[sr01]

                                                                                                ansible all -m shell -a "ulimit -n"



                                                                                                9. 配置GCC环境[sr01-3]


                                                                                                      SR要求GCC 4.8.2+。

                                                                                                1) 各主机安装gcc[sr01]ansible all -a "yum -y install gcc"




                                                                                                  2) 查看安装后版本[sr01]

                                                                                                    ansible all -a "gcc --version"
                                                                                                    ...
                                                                                                    sr01 | CHANGED | rc=0 >>
                                                                                                    gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44) #当前4.8.5


                                                                                                    Copyright (C) 2015 Free Software Foundation, Inc.
                                                                                                    This is free software; see the source for copying conditions. There is NO
                                                                                                    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
                                                                                                    ...



                                                                                                    10. 安装配置JDK8[sr01-3]


                                                                                                    10.1 安装包准备[sr01]

                                                                                                    jdk8官网下载链接如下:

                                                                                                    https://www.oracle.com/cn/java/technologies/javase/javase-jdk8-downloads.html

                                                                                                    下载版本:jdk-8u281-linux-x64.tar.gz


                                                                                                    10.2 检查并移除自带jdk[sr01]

                                                                                                    查看CentOS是否自带openjdk环境:

                                                                                                      ansible all -a "yum list installed |grep java"


                                                                                                      若有自带安装的JDK,卸载命令:

                                                                                                        ansible all -a "yum -y remove java-1.7.0-openjdk*"
                                                                                                        ansible all -a "yum -y remove java-1.8.0-openjdk*"


                                                                                                        10.3 安装[sr1-3]

                                                                                                        1) 创建安装目录[sr01]

                                                                                                          ansible all -a "mkdir /usr/java"


                                                                                                          2) 解压jdk安装包[sr01]

                                                                                                          为避免使用ansible操作文件权限问题,建议在将压缩包上传到每台主机上解压。

                                                                                                            ansible all -a "tar -zxvf /soft/jdk-8u281-linux-x64.tar.gz -C /usr/java/"


                                                                                                            3) 配置环境变量[sr01]

                                                                                                            配置sr01主机/etc/profile

                                                                                                              cat >> /etc/profile << RUNDBA
                                                                                                              ##### jdk enviroument #####
                                                                                                              export JAVA_HOME=/usr/java/jdk1.8.0_281
                                                                                                              export PATH=\$JAVA_HOME/bin:\$PATH
                                                                                                              export CLASSPATH=.:\$JAVA_HOME/lib/dt.jar:\$JAVA_HOME/lib/tools.jar
                                                                                                              ##############################
                                                                                                              RUNDBA


                                                                                                              传输到其它节点

                                                                                                                ansible others -m copy -a "src=/etc/profile dest=/etc/profile"


                                                                                                                4) 查看java版本

                                                                                                                当前java版本均为1.8.0_281

                                                                                                                  ansible all -a "/usr/java/jdk1.8.0_281/bin/java -version"



                                                                                                                  11. mysql安装[sr01]


                                                                                                                        StarRocks推荐使用mysql-client来连接,接下来,我们在sr01上安装稳定版的mysql 5.7。


                                                                                                                  11.1 mysql下载

                                                                                                                  MySQL5.7 General Availability(GA) Release通用发行版下载地址:

                                                                                                                  https://dev.mysql.com/downloads/mysql/5.7.html

                                                                                                                  系统选择Red Hat Enterprise Linux/Oracle Linux;

                                                                                                                  OS版本选择:Red Hat Enterprise Linux 7/Oracle Linux 7(x86,64bit)

                                                                                                                  然后选择Compressed TAR Archive进行下载。

                                                                                                                  下载后介质:mysql-5.7.33-el7-x86_64.tar.gz


                                                                                                                  11.2 mysql安装

                                                                                                                  mysql安装到sr01主机上。


                                                                                                                  1) 卸载mariadb

                                                                                                                  当前是否已安装mariadb

                                                                                                                    rpm -qa|grep mariadb


                                                                                                                    卸载mariadb,确保相关的mariadb包均已卸载

                                                                                                                      ansible all -a "rpm -e --nodeps mariadb-libs-5.5.65-1.el7.x86_64"


                                                                                                                      2) 上传

                                                                                                                      上传至/soft


                                                                                                                      3) 解压部署包

                                                                                                                        cd /soft
                                                                                                                        tar -zxvf mysql-5.7.33-el7-x86_64.tar.gz


                                                                                                                        4) 重命名为mysql,并移动至/usr/local/

                                                                                                                          mv mysql-5.7.33-el7-x86_64 /usr/local/mysql


                                                                                                                          5) 创建mysql用户

                                                                                                                          检查mysql组和用户是否存在,如果没有则创建:

                                                                                                                            cat /etc/group|grep mysql


                                                                                                                            创建:

                                                                                                                              groupadd mysql
                                                                                                                              useradd -r -g mysql mysql


                                                                                                                              useradd -r参数表示mysql用户是系统用户,不可用于登录系统。


                                                                                                                              6) 在mysql文件夹中创建data目录

                                                                                                                                cd /usr/local/mysql
                                                                                                                                mkdir data


                                                                                                                                7) 将/usr/local/mysql的所有者及所属组改为mysql

                                                                                                                                  chown -R mysql.mysql /usr/local/mysql


                                                                                                                                  8) 在/usr/local/mysql/support-files目录下创建my_default.cnf

                                                                                                                                    cd /usr/local/mysql/support-files
                                                                                                                                    vim my_default.cnf #粘贴如下配置并保存
                                                                                                                                      [mysqld]
                                                                                                                                      #设置mysql的安装目录
                                                                                                                                      basedir = /usr/local/mysql
                                                                                                                                      #设置mysql数据库的数据存放目录
                                                                                                                                      datadir = /usr/local/mysql/data
                                                                                                                                      socket = /usr/local/mysql/mysql.sock
                                                                                                                                      #设置字符集
                                                                                                                                      character-set-server = utf8
                                                                                                                                      #日志存放目录
                                                                                                                                      log-error = /usr/local/mysql/data/mysqld.log
                                                                                                                                      pid-file = /usr/local/mysql/data/mysqld.pid
                                                                                                                                      [client]
                                                                                                                                      port = 3306
                                                                                                                                      socket = /usr/local/mysql/mysql.sock


                                                                                                                                      9) 将配置文件拷贝至etc目录

                                                                                                                                        cp my_default.cnf /etc/my.cnf


                                                                                                                                        10) 环境变量配置

                                                                                                                                        打开etc目录profile文件:

                                                                                                                                          cat >> /etc/profile << EOF
                                                                                                                                          ##### mysql conf #####
                                                                                                                                          export MYSQL_HOME=/usr/local/mysql
                                                                                                                                          export PATH=\$PATH:\$MYSQL_HOME/bin
                                                                                                                                          #########################
                                                                                                                                          EOF


                                                                                                                                          使环境变量生效

                                                                                                                                            source /etc/profile


                                                                                                                                            11) 初始化mysql

                                                                                                                                              cd /usr/local/mysql
                                                                                                                                              ./bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/


                                                                                                                                              12) 在初始化日志中查看密码

                                                                                                                                                [root@sr001 mysql]# grep password /usr/local/mysql/data/mysqld.log
                                                                                                                                                2021-04-15T05:44:35.824661Z 1 [Note] A temporary password is generated for root@localhost: 6)pKw_DiPP24


                                                                                                                                                13) mysqld服务添加

                                                                                                                                                把启动脚本放到开机初始化目录

                                                                                                                                                  cp support-files/mysql.server /etc/init.d/mysqld


                                                                                                                                                  赋予可执行权限

                                                                                                                                                    chmod +x /etc/init.d/mysqld


                                                                                                                                                    添加为服务

                                                                                                                                                      chkconfig --add mysqld


                                                                                                                                                      启动服务

                                                                                                                                                        systemctl start mysqld


                                                                                                                                                        查看运行状态

                                                                                                                                                          systemctl status mysqld


                                                                                                                                                          14) 进入mysql并更改密码

                                                                                                                                                            mysql -uroot -p

                                                                                                                                                            先按回车,待提示输入密码时再输入密码,不要在-p后面直接加密码,因为随机生成的密码可能包含左括号,而Linux对左括号敏感,直接输入可能会报错。


                                                                                                                                                            修改密码为自己的密码,比如root:

                                                                                                                                                              set password=password('demo_415');


                                                                                                                                                              15) 给用户授权

                                                                                                                                                                grant all privileges on *.* to root@'%' identified by 'demo_415';
                                                                                                                                                                flush privileges;


                                                                                                                                                                16) 重启mysql服务

                                                                                                                                                                  systemctl restart mysqld
                                                                                                                                                                  mysql -uroot -p #demo_415



                                                                                                                                                                  12. 小结


                                                                                                                                                                        至此,使用ansible进行StarRocks部署前期准备工作完成,StarRocks集群安装详见下篇《StarRocks小规模集群部署最佳实践(2/2)》。


                                                                                                                                                                  —END—




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

                                                                                                                                                                  评论