Постоянно переподключаться к Кассандре

Я читал в Интернете, что при использовании Cassandra лучше всего иметь 1 Cluster и 1 Session на весь срок службы.

Мои вопросы:

  1. В случае, если наш сервер Cassandra выйдет из строя, как мне убедиться, что мой кластер и/или сеанс будут продолжать попытки повторного подключения до тех пор, пока наш сервер Cassandra не вернется в оперативный режим?

  2. Должен ли только кластер пытаться переподключиться, или только сеанс, или и то, и другое?

Мы используем Go и github.com/gocql/gocql для нашего сервиса.

Я видел следующий фрагмент в документации gocql, но похоже, что он имеет только ограниченное количество повторных попыток:

cluster.ReconnectionPolicy = &gocql.ConstantReconnectionPolicy{MaxRetries: 10, Interval: 8 * time.Second}

Я также нашел приведенный ниже фрагмент в Интернете, но похоже, что он не предназначен для обработки этого сценария:

var cluster *gocql.ClusterConfig
var session *gocql.Session

func getCassandraSession() *gocql.Session {
    if session == nil || session.Closed() {
        if cluster == nil {
            cluster = gocql.NewCluster("127.0.0.1:9042")
            cluster.Keyspace = "demodb"
            cluster.Consistency = gocql.One
            cluster.ProtoVersion = 4
        }
        var err error
        if session, err = cluster.CreateSession(); err != nil {
            panic(err)
        }
    }
    return session
}

Достаточно ли какого-либо из вышеперечисленных методов, чтобы гарантировать повторные подключения до тех пор, пока наш сервер Cassandra не вернется в оперативный режим? И если нет, то какая лучшая практика для этого сценария?


person Floating Sunfish    schedule 06.05.2019    source источник
comment
Не уверен насчет go, но я проверил это с помощью java, и программа автоматически переподключилась к узлу, как только он снова стал доступен. Нечего делать. Это просто сработало.   -  person Jim Wartnick    schedule 06.05.2019


Ответы (1)


Особая благодарность за это @Jim Wartnick. Я просто попытался отключить Cassandra на своем локальном компьютере, а затем снова включить его, и gocql мгновенно переподключился, не используя ни один из приведенных выше фрагментов в моем вопросе.

Если ваши Cluster и Session подключились к Cassandra хотя бы один раз, даже если Cassandra выйдет из строя, они мгновенно восстановят подключение, как только Cassandra вернется в сеть.

Большое спасибо всем, кто помог!

person Floating Sunfish    schedule 07.05.2019