StarRocks运维篇:Nginx反向代理之StarRocks负载均衡(一)

一、前言

  • 从所周知,负载均衡是将负载分摊到不同的服务单元,既保证服务的可用性,又保证响应足够快,给用户很好的体验;本篇文章讲解如何利用Nginx通过在多个 FE 节点之上部署负载均衡层以实现 StarRocks 的高可用。

一、部署架构

  • Nginx作为流量统一访问入口,后端绑定多个FE节点,既可以实现负载均衡,又能实现故障自动切换。

以下示例4台机器(四台 FE,四台 BE,其中FE和BE混部,一个 Observer FE 提供元数据备份),通过二进制安装包跨节点部署 StarRocks。

在这里插入图片描述

架构分析:

①用户访问请求Nginx负载均衡服务器

②Nginx负载均衡服务器再分发请求转发到后端 FE_Server 服务器

二、安装Nginx

1、Ng分为源码编译安装,还有yum安装方式(两种安装方式都可以)这里可以自行选择,下面简单介绍两种安装方式如何操作

a、源码安装

# 安装扩展工具包yum源
yum -y install epel-release
# 下载nginx源码包
wget http://nginx.org/download/nginx-1.22.1.tar.gz -P /app
# 安装编译工具及依赖库
yum -y install gcc pcre-devel zlib-devel openssl-devel libxml2-devel \
libxslt-devel gd-devel GeoIP-devel jemalloc-devel libatomic_ops-devel \
perl-devel  perl-ExtUtils-Embed
# 解压
tar -zxvf nginx-1.22.1.tar.gz 
# 编译安装
cd /app/nginx-1.22.1/ 

./configure --prefix=/app/nginx --with-stream --with-http_ssl_module --with-http_gzip_static_module --with-http_stub_status_module

make && make install

编译完成后会在 --prefix= 指定的路径生产nginx编译好的文件,我这里是:/app/nginx,里面包含了nginx的配置文件,还有nginx编译好的二进制包:/app/nginx/sbin/nginx

b、Yum源安装

  • 如果觉得源码编译太麻烦,这里也可以选择用yum安装方式,安装方式比较简单,日常生产环境使用nginx,编译模块按照nginx官方yum安装的模块,基本能满足95%以上的生产需求。
# 添加nginx包镜像地址:
rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

# 查看包信息:
yum info nginx

# 安装包:
yum install nginx

Yum安装完nginx配置文件的地址为:/etc/nginx/ ,子配置文件在 /etc/nginx/conf.d/,主配置文件就是/etc/nginx/nginx.conf

c、查看是否安装成功

1、yum安装已经配置好了环境变量,直接可以使用nginx命令查看

# 查看版本号
nginx -v

# 查看版本和配置选项
nginx -V
  • 查看是否包含有 --with-stream 模块,有这个模块才可以
    在这里插入图片描述
    2、源码编译安装的需要去前面说的 prefix 指定的路径去看,我这里是 /app/nginx ;由于是源码编译,没有配置环境变量,需要写绝对路径
# 查看版本号
/app/nginx/sbin/nginx -v

# 查看版本和配置选项
/app/nginx/sbin/nginx -V

在这里插入图片描述

这里源码编译的模块就很少,因为主要是用到 --with-stream 这个模块来做,其它模块也用不到;

三、配置反向代理

这里已源码编译的为例子,yum安装的方式只是nginx.conf 文件不同而已,上面有介绍

cat /app/nginx/conf/nginx.conf

user nginx;
#worker_processes auto;
worker_processes 8;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
include /app/nginx/modules/*.conf;
events
{
    worker_connections 1024;
}

stream
{
    log_format proxy '$remote_addr [$time_local] '
    '$protocol $status $bytes_sent $bytes_received '
    '$session_time "$upstream_addr" '
    '"$upstream_bytes_sent" "$upstream_bytes_received" "$upstream_connect_time"';
    
    # 代理access_log访问日志,可自行修改
    access_log /var/log/nginx/stream.log proxy;

    upstream starrocks-tcp1
    {
        # 轮询(默认); 
        server 192.168.100.120:9030 weight=1 max_fails=2 fail_timeout=60s; #Follower
        server 192.168.100.121:9030 weight=1 max_fails=2 fail_timeout=60s; #Follower
        server 192.168.100.122:9030 weight=1 max_fails=2 fail_timeout=60s; #Follower
        server 192.168.100.123:9030 weight=2 max_fails=2 fail_timeout=60s; #Observer
    }
    server
    {
        # proxy 代理的nginx监听端口,可自行修改
        listen 9030;
        proxy_pass starrocks-tcp1;
        proxy_timeout 60s;
        proxy_connect_timeout 30s;
    }
}
http
{
    log_format main '$remote_addr - $remote_user [$time_local] "$request" '
    '$status $body_bytes_sent "$http_referer" '
    '"$http_user_agent" "$http_x_forwarded_for"';
    access_log /var/log/nginx/access.log main;
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 4096;
    include /etc/nginx/mime.types;
    default_type application/octet-stream;
    include /etc/nginx/conf.d/*.conf;
}

weight 代表权重默认为 1,权重越高被分配的客户端越多。指定轮询几率,由于 starrocks fe分为 Followe 和 Observer。Followe为复制协议的可投票成员,参与选主和提交日志;Observer属于非投票成员,用于异步订阅复制日志,Observer 的状态落后于 Follower;和zookeeper类似,Observer 只是参与客户端连接。我们就可以加大 weight 权重,来减轻 Follower 节点的压力。

四、启动Nginx

1、源码方式启动

# 检查配置文件是否正常
/app/nginx/sbin/nginx -t

# 指定配置文件并启动
/app/nginx/sbin/nginx -c /app/nginx/conf/nginx.conf

# 停止
/app/nginx/sbin/nginx -s stop

# 查看端口是否启动成功
netstat -nltp|grep 9030

2、Yum方式启动

# 检查配置文件是否正常
nginx -t

# 由于Yum下载自带了systemctl管理脚本,直接systemctl启停方式就可以
 systemctl start nginx

# 停止
systemctl stop nginx

# 查看端口是否启动成功
netstat -nltp|grep 9030

五、验证

mysql -h 192.168.100.125 -P 9030 -u root  -p'xxxxxxxx' -D example_db

参数解释:
-u 指定StarRocks用户名
-p 指定StarRocks密码
-h 指定Nginx代理服务器IP
-P 指定端口
-D 指定数据库名

六、总结

  • 本篇文章带大家了解了用nginx来做 proxy 负载均衡,除此之外,其它的开源工具也做很多,列如:lvs、haproxy等
  • 目前官方推荐 负载均衡策略
  • Nginx 除了做starrocks负载均衡,而且也可以做clickhouse的负载均衡,方案也是类似。
  • 使用代理方式上需注意,如果是Flink实时写入starrocks ,需要注意不要写nginx地址,直接写后端的FE地址;proxy server 只是应用于临时客户端回话查询
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值