journeymidnight / yig

An open source object storage server with Amazon S3 compatible API
Apache License 2.0
361 stars 86 forks source link

s3test brings out a bad result #312

Closed e21407 closed 4 years ago

e21407 commented 4 years ago

I carried out a s3test on yig and found that there is a poor compatibility of yig to s3 api. In detail, 555 tests were run, SKIP=55, errors=286, failures=69.

Here are my configurations:

yig.toml: s3domain = ["s3.test.com","s3-internal.test.com"] region = "" log_path = "/var/log/yig/yig.log" access_log_path = "/var/log/yig/access.log" access_log_format = "{combined}" panic_log_path = "/var/log/yig/panic.log" log_level = "info" pid_file = "/var/run/yig/yig.pid" api_listener = "0.0.0.0:8080" admin_listener = "0.0.0.0:9000" admin_key = "secret" ssl_key_path = "" ssl_cert_path = ""

debug_mode = false reserved_origins = "s3.test.com,s3-internal.test.com"

meta_cache_type = 2 meta_store = "tidb" tidb_info = "root:@tcp(192.168.5.106:4000)/yig" keepalive = true redis_address = "192.168.5.105:6379" redis_password = "" redis_connection_number = 10 memory_cache_max_entry_count = 100000 enable_data_cache = true redis_connect_timeout = 1 redis_read_timeout = 1 redis_write_timeout = 1 redis_keepalive = 60 redis_pool_max_idle = 3 redis_pool_idle_timeout = 30

cache_circuit_check_interval = 3 cache_circuit_close_sleep_window = 1 cache_circuit_close_required_count = 3 cache_circuit_open_threshold = 1 cache_circuit_exec_timeout = 5 cache_circuit_exec_max_concurrent = -1

download_buf_pool_size = 8388608 #8MB upload_min_chunk_size = 524288 #512KB upload_max_chunk_size = 8388608 #8MB

ceph_config_pattern = "/etc/ceph/*.conf"

[plugins.dummy_compression] path = "/etc/yig/plugins/dummy_compression_plugin.so" enable = true

[plugins.encryption_vault] path = "/etc/yig/plugins/vault_plugin.so" enable = false [plugins.encryption_vault.args] endpoint = "http://10.5.0.19:8200" kms_id = "your_id" kms_secret = "your_secret" version = 0 keyName = "yig"

[plugins.encryption_kms] path = "/etc/yig/plugins/kms_plugin.so" enable = false [plugins.encryption_kms.args] url = "https://10.0.47.24:8011" keyName = "alias/yig" accessKey = "UYqO9JUqFFejWmO2" secretAccessKey = "0TsGg4snfyWMcn7KrfyeYKPZnLEm63" debug_mode = true token = "20cd173e-9d5a-431f-a26d-cdb1ad168c84"

[plugins.dummy_encryption_kms] path = "/etc/yig/plugins/dummy_kms_plugin.so" enable = true [plugins.dummy_encryption_kms.args] url = "KMS"

[plugins.dummy_mq] path = "/etc/yig/plugins/dummy_mq_plugin.so" enable = true [plugins.dummy_mq.args] topic = "testTopic2" url = "kafka:29092"

[plugins.dummy_iam] path = "/etc/yig/plugins/dummy_iam_plugin.so" enable = true [plugins.dummy_iam.args] url="s3.test.com"

[plugins.yig_iam] path = "/etc/yig/plugins/yig_iam_plugin.so" enable = true [plugins.yig_iam.args] EndPoint="http://127.0.0.1:8888/api/v1/yig/fetchsecretkey" ManageKey="key" ManageSecret="secret"

[plugins.not_exist] path = "not_exist_so" enable = false

yig-iam conf.toml: ManageKey = "key" ManageSecret = "secret" Logpath = "/var/log/yig-iam/iam.log" Loglevel = "info" Accesslog = "/var/log/yig-iam/access.log" PidFile = "/tmp/iam.pid" BindPort = 8888 RbacDataSource = "root:@tcp(192.168.5.106:4000)/" UserDataSource = "root:@tcp(192.168.5.106:4000)/" TokenExpire = 36000


I am so happy that yig works with s3cmd and aws sdk. However, it annoys me that s3test brings out a bad result. I will be appreciated if somebody shows me the proper s3test configuration and result.

thesues commented 4 years ago

检查这2点: yig的性能主要和底层的TiDB和Ceph相关

  1. TiDB的性能, 是否把TiDB放在SSD上面, 并且单独测试TiDB的性能
  2. Ceph的性能, 可以用rados bench压一下后面ceph的性能 从你的配置看也用到了IAM, 有没有可能是IAM的瓶颈?
e21407 commented 4 years ago

我目前关心的不是性能方面的问题,而是兼容性,测试结果555 tests were run, SKIP=55, errors=286, failures=69,是不是我哪里配置出了问题呢?

thesues commented 4 years ago

S3-test主要是针对ceph radosgw设计的, 之前用s3-test跑yig的时候, 发现很多test失败是因为比如header不匹配, yig返回 的header是X-Amz-XXXX, 但是S3-test只接收X-RGW-XXX之类, 后来就再没有用s3test测试和amazon S3的兼容性了.

测试目前兼容性的方式是跑https://github.com/journeymidnight/yig/tree/master/test/go里面的test case, 包括 普通上传, multipart, lifecycle, 加密, glacier等等都是支持的.

要是不在test case里面的, 比如S3的队列功能, 即目前还不支持的

e21407 commented 4 years ago

Think you for your answer.