k8s部署安装obproxy

基于社区版4.2.1.0-11
我在k8s中安装了下obproxy,,参考https://github.com/oceanbase/ob-operator/blob/master/example/webapp/obproxy.yaml文件安装,其中的一个环境变量是PROXYRO_PASSWORD,我直接明文给了密码,但是我使用proxyro用户客户端登录报错ERROR 1045 (42000): Access denied for user ‘root’@‘xxx.xxx.xxx.xxx’ (using password: YES),这是我obproxy只读用户环境变量指定有问题吗

那链接 2881端口能访问通吗

用root用户访问或者用别的租户访问2881,2883都没有问题的,只有proxyro这个用户有问题,但是物理机部署的这个用户链接没有问题,怀疑是这个k8s部署给的这个用户env有问题

辛苦发下你的yaml

参考这个:apiVersion: apps/v1
kind: Deployment
metadata:
name: obproxy
namespace: oceanbase
spec:
selector:
matchLabels:
app: obproxy
replicas: 2
template:
metadata:
labels:
app: obproxy
spec:
containers:
- name: obproxy
image: oceanbase/obproxy-ce:4.2.1.0-11
ports:
- containerPort: 2883
name: “sql”
- containerPort: 2884
name: “prometheus”
env:
- name: APP_NAME
value: helloworld
- name: OB_CLUSTER
value: metadb
- name: CONFIG_URL
value: ‘http://svc-ob-configserver.oceanbase.svc:8080/services?Action=GetObProxyConfig
- name: PROXYRO_PASSWORD
value: xxxxxxxxxxxxxxxx
resources:
limits:
memory: 2Gi
cpu: “1”
requests:
memory: 200Mi
cpu: 200m

我看配置文件里用了 configserver,连接集群的时候用户名要把集群名拼进去,user@tenant#cluster 这种形式,如果其他用户正常能连接,只有 proxyro 账号不能连接,那应该是 proxy 的一个参数没有开启,可以看下这个文档,OceanBase分布式数据库-海量数据 笔笔算数
一般不建议用 proxyro 用户直接来连接集群,这个账号一般是给 obproxy 专用,如果有只读账号的需求,建议还是另外建一个用户

对,别的账号可以访问,只有这一个不能访问,我看物理机部署有写的这个skip_proxy_sys_private_check参数,那我k8s部署的时候这个参数怎么写呢,直接大写吗

不是这个参数,是我上面发的文档的那个参数,目前镜像没提供这个参数的环境变量,只有dockerhub上列出来的那些,如果要改的话,可以通过 root@proxysys 连上 obproxy,通过 alter proxyconfig set skip_proxyro_check = true 来修改

这个 proxyro 用户最好就只留给 obproxy 使用,OB 创建一个用户没什么成本,只读需求的话还是推荐新创建一个用户

嗯嗯,明白,那这个用户环境变量加不加都行

我进去一个pod里面干掉了/home/admin/start.sh,/home/admin/obproxy/bin/obproxy这两个进程,然后在执行/bin/bash /home/admin/start.sh命令启动一直起不来报错use config server
/home/admin/obproxy/bin/obproxy -p 2883 -l 2884 -n obproxy -o observer_sys_password=xxxxxxx,obproxy_config_server_url=xxxxxx
listen port: 2883
prometheus listen port: 2884
appname: obproxy
optstr: observer_sys_password=xxxxxx,obproxy_config_server_url=xxxxxxx
N: nodaemon
OBPROXY_ROOT is not set, set current working dir怎么回事呢

你是手动在容器里执行 start.sh 吗,正常情况进程退了容器就应该退出了

是的,但是我设置了不让容器退出测试点东西,就是再次执行start.sh没起来

有个问题,我设置读写分离只能通过proxysys用户设置,但是你说的用root@proxysys 连上 obproxy,我目前不是obproxy连不上这个用户吗,我怎么能设置proxysys用户登录呢

-u root@sys#集群名称 -P2883 如果能登录上的话 也可以设置proxy的参数

这个是针对一个obproxy设置的吗,我有两个obproxy,我只想对一个obproxy这么设置,你的意思是用想设置的那个obproxy用-u root@sys#集群名称 -P2883 如连接一下就可以设置其中一个按照弱一致性读的策略吗,这个的原理是什么呢,为什么这样设置一下就可以了呢(alter proxyconfig set obproxy_read_consistency = 1;
alter proxyconfig set proxy_idc_name=‘ti’;
alter proxyconfig set proxy_route_policy=“follower_first”;)

是的,连接哪个配置就生效哪个节点。

原理是什么呢,可以说一下或者有相关原理解释推荐下吗

可以参考 OceanBase 社区1ulpi0x_gaODQzNDgzMjU4LjE2NjM1NzU0MjE._ga_T35KTM57DZ*MTcxMDkzMDU3MC4xOTc4LjEuMTcxMDkzMjA1NC41NC4wLjA.