presto使用的很顺利,项目要求把presto的账号开放出去,供其他用户自己使用。因为目前的presto的jdbc链接是没有口令的,只要拿到这个链接,任何人都可以使用,且无法追踪任务提交的用户,这对presto和集群是一个大的风险,因此需要给presto加上权限控制。因为presto有两个版本,一个是目前的facebook的prestodb,更新到0.265.1,目前我们使用的prestodb0.220,另一个是创始团队重新创建的一个项目叫trino,更新到364版本。在调查了双方的官方安装包及社区活跃度的一些问题,选择了使用trino的363版本。
关于trino的权限安装,会分两篇介绍,本文介绍stand alone方式,下篇介绍trino on kubenetes
官方文档
trino官方文档https://trino.io/docs/current/security/tls.html
要使用trino的权限控制,从官方文档上看,需要开启https,因此一定需要证书的,所以先申请域名及证书
域名的申请:因为有专门的网络管理人员负责这一块,我只提供了一个名称,由他去做域名的申请,域名 wux-prestotest.seagate.com
证书申请:申请证书,网管要求有一个csr文件,关于csr文件,我是用java工具keytool生成的
首先生成keystore,有效期为2年(730天)
keytool -genkey -alias presto -keyalg RSA -keysize 2048 -validity 730 -storetype PKCS12 -keystore presto.jks
根据生成的jks生成csr
keytool -certreq -alias presto -keyalg RSA -file presto.csr -keystore presto.jks -ext "SAN=dns:wux-prestotest.seagate.com"
把csr发给网管,他做好证书会给你一个key和一个证书,我的证书是.p12的文件,可以根据.p12转换成crt文件(openssl pkcs12 -in wux-prestotest.seagate.com.p12 -nokeys -out wux-prestotest.seagate.com.crt)
这样证书和域名都做好了。
trino安装包下载
trino363安装包https://repo1.maven.org/maven2/io/trino/trino-server/363/
trino363要求jdk11以上,官方推荐去这个地址下载jdk
jdk-azul下载https://www.azul.com/downloads/?package=jdk
下载完成之后配置好jdk环境变量,解压trino安装包,解压后如下,里面是没有etc目录的,etc目录需要自己配置
我们可以先尝试使用http跑一下trino,没问题之后再准备配置https。这里介绍https的配置
config.properties
coordinator=true
node-scheduler.include-coordinator=false
http-server.authentication.type=PASSWORD //开启password验证,必须
http-server.http.port=8080
query.max-memory=80GB
query.max-memory-per-node=4.8GB
query.max-total-memory-per-node=4.8GB
discovery-server.enabled=true
discovery.uri=http://10.38.199.202:8080 //这里discover server还是使用http与其他worker节点交互
http-server.https.enabled=true //开启https验证
http-server.https.port=8443 //https设置一个端口
http-server.https.keystore.path=/root/wux-prestotest.seagate.com.p12 //证书地址
http-server.https.keystore.key=presto-seagate //生成证书时的密码
password-authenticator.properties,里面需要用到password.db,这个文件就是在登录trino的时候使用到的用户名密码,需要bcrypt加密,可以去网络上找在线加密
password-authenticator.name=file
file.password-file=/root/trino-server-363/etc/password.db
password.db,用户密码文件,一行就是一个用户名密码,用户密码用:隔开,比如我定义了一个test/test1234的用户。在使用bcrypt加密的时候,生成的密码可能是$2a$开头的,而根据trino文档内定义的password规范是需要$2y$开头的,这里需要注意,这边我刚做的时候也遇到过麻烦
test:$2y$10$zZKqBwY5bvazWKrZmp01pex4Jy4AeknJ3lLPviC9BMF0zOMEU4vXS
jvm.config,node.properties,catalog其他文件不再赘述
上面都配置完之后,启动trino,bin/launcher start,访问
https://wux-prestotest.seagate.com:8443
使用test/test1234登入
stand alone方式部署trino基本没遇到什么问题,只要按照官方文档操作,很快就能做出来。