代码之家  ›  专栏  ›  技术社区  ›  Big_Boulard

无法从主机连接到ScyllaDB容器

  •  0
  • Big_Boulard  · 技术社区  · 1 年前

    我刚刚尝试用Golang从本地机器连接到Docker Desktop上的一个3节点“锡拉”集群,但没有成功(在Mac M2上)

    我试着按照这里的步骤: https://university.scylladb.com/courses/using-scylla-drivers/lessons/golang-and-scylla-part-1/

    例外的是,我没有为测试应用程序创建docker容器,因为我不想在修改代码时重新创建容器。我现在想在本地运行测试。

    码头工人组成部分

    services:
      scylla-node1:
        image: scylladb/scylla:latest
        restart: always
        container_name: scylla-node1
        command: --seeds=scylla-node1,scylla-node2 --smp 1 --memory 750M --overprovisioned 1 --api-address 0.0.0.0
        volumes:
          - './scylla/scylla.yaml:/etc/scylla/scylla.yaml'
          - './scylla/cassandra-rackdc.properties.dc1:/etc/scylla/cassandra-rackdc.properties'
          - './scylla/mutant-data.txt:/mutant-data.txt'
        networks:
          - myappnetwork
    
      scylla-node2:
        image: scylladb/scylla:latest
        restart: always
        container_name: scylla-node2
        command: --seeds=scylla-node1,scylla-node2 --smp 1 --memory 750M --overprovisioned 1 --api-address 0.0.0.0
        volumes:
          - './scylla/scylla.yaml:/etc/scylla/scylla.yaml'
          - './scylla/cassandra-rackdc.properties.dc1:/etc/scylla/cassandra-rackdc.properties'
        networks:
          - myappnetwork
    
      scylla-node3:
        image: scylladb/scylla:latest
        restart: always
        container_name: scylla-node3
        command: --seeds=scylla-node1,scylla-node2 --smp 1 --memory 750M --overprovisioned 1 --api-address 0.0.0.0
        volumes:
          - './scylla/scylla.yaml:/etc/scylla/scylla.yaml'
          - './scylla/cassandra-rackdc.properties.dc1:/etc/scylla/cassandra-rackdc.properties'
        networks:
          - myappnetwork
    
    networks:
      myappnetwork:
        driver: bridge
    

    然后 I created the keyspace and data as explained in the tutorial

    并尝试与gocql联系:

    // go.mod
    
    go 1.21.0
    
    replace github.com/gocql/gocql => github.com/scylladb/gocql v1.11.1
    
    
    import (
      ...
      "github.com/gocql/gocql"
    )
    
    func Start(log logger.Logger) {
        config := CreateCluster(gocql.Quorum, "catalog", "scylla-node1", "scylla-node2", "scylla-node3")
        // config := CreateCluster(gocql.Quorum, "catalog", "172.29.0.5", "172.29.0.4", "172.29.0.3")
        // >>> doesn't work either cause I can't even ping containers IPs
        session, err := gocql.NewSession(*config)
        if err != nil {
            log.Fatal(err, "db", "Start", "unable to connect to scylla")
        }
        defer session.Close()
    }
    
    func CreateCluster(consistency gocql.Consistency, keyspace string, hosts ...string) *gocql.ClusterConfig {
        retryPolicy := &gocql.ExponentialBackoffRetryPolicy{
            Min:        time.Second,
            Max:        10 * time.Second,
            NumRetries: 5,
        }
        config := gocql.NewCluster(hosts...)
        config.PoolConfig.HostSelectionPolicy = gocql.TokenAwareHostPolicy(gocql.RoundRobinHostPolicy())
        config.Compressor = &gocql.SnappyCompressor{}
        config.RetryPolicy = retryPolicy
        config.Timeout = 5 * time.Second
    
        config.Keyspace = keyspace
        config.Consistency = consistency
    
        return config
    }
    

    错误 gocql:无法创建会话:无法发现协议版本:拨号tcp:0->172.29.0.3:9042:i/o超时

    0 回复  |  直到 1 年前