我刚刚尝试用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超时