[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Cassandra Upgrade with Different Protocol Version

> On Jul 5, 2018, at 12:45 PM, Anuj Wadehra <anujw_2003@xxxxxxxxxxx.INVALID> wrote:
> Hi,
> I woud like to know how people are doing rolling upgrade of Casandra clustes when there is a change in native protocol version say from 2.1 to 3.11. During rolling upgrade, if client application is restarted on nodes, the client driver may first contact an upgraded Cassandra node with v4 and permanently mark all old Casandra nodes on v3 as down. This may lead to request failures. Datastax recommends two ways to deal with this:
> 1. Before upgrade, set protocol version to lower protocol version. And move to higher version once entire cluster is upgraded.
> 2. Make sure driver only contacts upraded Cassandra nodes during rolling upgrade.

3. Make sure driver only contacts nonupgraded nodes during upgrade 

> Second workaround will lead to failures as you may not be able to meet required consistency for some time.

That definitely shouldn’t be true. Querying a 3.x node will internally query the 2.1 nodes and translate it. The 3.0 node will talk to the 2.1 instances using the 2.1 internode messaging protocol. 

> Lets consider first workaround. Now imagine an application where protocol version is not configurable and code uses default protocol version. You can not apply first workaroud because you have to upgrade your application on all nodes to first make the protocol version configurable. How would you upgrade such a cluster without downtime? Thoughts?

You could try turning off native protocol on the upgraded hosts until you had enough to serve the load, then switch on native on the 3.0 hosts, let connections move, and then native off for 2.1

Alternatively, depending on your driver (and it’s discovery mechanism), you may be able to start some instances that only listen on the v3 protocol without owning any data (-Dcassandra.join_ring=false) and let clients connect there - then bounce through the cluster as needed.
To unsubscribe, e-mail: user-unsubscribe@xxxxxxxxxxxxxxxxxxxx
For additional commands, e-mail: user-help@xxxxxxxxxxxxxxxxxxxx