Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add subcommands #912

Open
wants to merge 2 commits into
base: v4
Choose a base branch
from
Open

Conversation

carlvine500
Copy link
Contributor

@carlvine500 carlvine500 commented Dec 26, 2024

fix issue: #911

usage example:
./redis-shake rdb_reader -f /tmp/dump.rdb redis_writer -a 172.38.100.68:6379 advanced --ncpu=1
run result:
3961735439366_ pic

image

all help tips:
3901735187320_ pic
3911735187336_ pic
3921735187339_ pic
3931735187351_ pic
3941735187660_ pic

@CLAassistant
Copy link

CLAassistant commented Dec 26, 2024

CLA assistant check
All committers have signed the CLA.

@suxb201
Copy link
Member

suxb201 commented Dec 26, 2024

或许你可以使用环境变量来实现。
配置文件:

[scan_reader]
address = "${SHAKE_SRC_ADDRESS}" # export SHAKE_SRC_ADDRESS=127.0.0.1:6379

...

执行:

SHAKE_SRC_ADDRESS=127.0.0.1:6379 ./redis-shake shake.toml

@EquentR
Copy link
Collaborator

EquentR commented Dec 26, 2024

感觉这样搞,命令比命还长🤣,主要是配置本身比较多,线上环境基本上设置了密码这些,不是两三个参数就能开始同步的,确实不如设置通用配置文件替换环境变量

@suxb201 话说之前viper自动根据结构体读取环境变量是因为啥删掉了,改成手动解析来着?

@carlvine500
Copy link
Contributor Author

carlvine500 commented Dec 26, 2024

@suxb201 @EquentR

建议命令作为简易用途吧, 我们公司经常使用rdb文件迁移产品数据, 通常一台机器部署20个redis, 一堆配置文件不太好操作, 命令无论是书写还是使用shell编排都比较方便, 从aws迁移到国内云厂商的实战命令如下:

./redis-shake rdb_reader -f /usr/local/src/10.53.0.10/8310/dump.rdb redis_writer -a 172.38.100.60:8310 advanced --ncpu 1
./redis-shake rdb_reader -f /usr/local/src/10.53.0.10/8311/dump.rdb redis_writer -a 172.38.100.60:8311 advanced --ncpu 1
./redis-shake rdb_reader -f /usr/local/src/10.53.0.10/8312/dump.rdb redis_writer -a 172.38.100.60:8312 advanced --ncpu 1
./redis-shake rdb_reader -f /usr/local/src/10.53.0.10/8313/dump.rdb redis_writer -a 172.38.100.60:8313 advanced --ncpu 1
./redis-shake rdb_reader -f /usr/local/src/10.53.0.10/8314/dump.rdb redis_writer -a 172.38.100.60:8314 advanced --ncpu 1
./redis-shake rdb_reader -f /usr/local/src/10.53.0.10/8315/dump.rdb redis_writer -a 172.38.100.60:8315 advanced --ncpu 1
./redis-shake rdb_reader -f /usr/local/src/10.53.0.10/8316/dump.rdb redis_writer -a 172.38.100.60:8316 advanced --ncpu 1
./redis-shake rdb_reader -f /usr/local/src/10.53.0.10/8317/dump.rdb redis_writer -a 172.38.100.60:8317 advanced --ncpu 1
./redis-shake rdb_reader -f /usr/local/src/10.53.0.10/8318/dump.rdb redis_writer -a 172.38.100.60:8318 advanced --ncpu 1
./redis-shake rdb_reader -f /usr/local/src/10.53.0.10/8319/dump.rdb redis_writer -a 172.38.100.60:8319 advanced --ncpu 1

./redis-shake rdb_reader -f /usr/local/src/10.53.0.10/8320/dump.rdb redis_writer -a 172.38.100.60:8320 advanced --ncpu 1
./redis-shake rdb_reader -f /usr/local/src/10.53.0.10/8321/dump.rdb redis_writer -a 172.38.100.60:8321 advanced --ncpu 1
./redis-shake rdb_reader -f /usr/local/src/10.53.0.10/8322/dump.rdb redis_writer -a 172.38.100.60:8322 advanced --ncpu 1
./redis-shake rdb_reader -f /usr/local/src/10.53.0.10/8323/dump.rdb redis_writer -a 172.38.100.60:8323 advanced --ncpu 1
./redis-shake rdb_reader -f /usr/local/src/10.53.0.10/8324/dump.rdb redis_writer -a 172.38.100.60:8324 advanced --ncpu 1
./redis-shake rdb_reader -f /usr/local/src/10.53.0.10/8325/dump.rdb redis_writer -a 172.38.100.60:8325 advanced --ncpu 1
./redis-shake rdb_reader -f /usr/local/src/10.53.0.10/8326/dump.rdb redis_writer -a 172.38.100.60:8326 advanced --ncpu 1
./redis-shake rdb_reader -f /usr/local/src/10.53.0.10/8327/dump.rdb redis_writer -a 172.38.100.60:8327 advanced --ncpu 1
./redis-shake rdb_reader -f /usr/local/src/10.53.0.10/8328/dump.rdb redis_writer -a 172.38.100.60:8328 advanced --ncpu 1
./redis-shake rdb_reader -f /usr/local/src/10.53.0.10/8329/dump.rdb redis_writer -a 172.38.100.60:8329 advanced --ncpu 1

  • 老师们的担心有道理, 我们可以参照k8s提丰富供命令的同时, 提供了yaml编排, 也有helm加变量编排, 我们可以做个参照:

k8s命令创建部署:

kubectl run nginx --image=nginx --port=80 --expose=true --expose-type=NodePort
k8s

k8s yaml创建部署

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80

k8s helm创建部署

apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ include "my-nginx.fullname" . }}
  labels:
    {{- include "my-nginx.labels" . | nindent 4 }}
spec:
  replicas: {{ .Values.replicaCount }}
  selector:
    matchLabels:
      {{- include "my-nginx.selectorLabels" . | nindent 6 }}
  template:
    metadata:
      labels:
        {{- include "my-nginx.selectorLabels" . | nindent 8 }}
    spec:
      containers:
        - name: {{ .Chart.Name }}
          image: "nginx:{{ .Values.image.tag }}"
          ports:
            - containerPort: 80
              protocol: TCP
          livenessProbe:
            httpGet:
              path: /
              port: 80
            initialDelaySeconds: 30
            timeoutSeconds: 1
          resources:
{{ toYaml .Values.resources | indent 12 }}

@carlvine500
Copy link
Contributor Author

后面我再把default配置文件+命令的代码合过来, 这样公共的配置在文件, 可变的写在命令行, 就方便一些了 .

@suxb201
Copy link
Member

suxb201 commented Dec 30, 2024

@EquentR

话说之前viper自动根据结构体读取环境变量是因为啥删掉了,改成手动解析来着?

我没有印象了,好像没有从最初就是要指定哪些字段从环境变量中读取没有用 viper 的自动解析。“Explicit is better than implicit.”

@carlvine500 PR 的完成度很高,但是我个人还是不太想再引入一种配置方式。目前从环境变量解析部分配置文件的方式足够灵活也适合在你的场景下使用,“解决问题的最优方法应该有且只有一个”

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants