On Wed, Sep 29, 2010 at 01:01:37AM +0300, Julian Anastasov wrote:
Hi Julian, Hi all,
>
> Hello,
>
> From the recent discussion about loaded backup server
> it looks like we do not properly assign forwarding method
> to connections in backup server. If backup is used in master
> as real server, eg. DR, then backup should use LOCALNODE
> for its IP. May be ip_vs_find_dest should allow real server
> with port 0 to be used as default server? And if real server
> is found its forwarding method should be used for the
> connection? So, backup should have the same IP and Port but
> it can choose to use different forwarding method? For example,
> master uses DR but backup TUN for the same real server.
>
> Because now when server is added its method can
> be converted to LOCALNODE but when such connections
> are created in backup server we should use DR or NAT
> or whatever the method is configured there. The same is
> when backup is added as DR server in master but the
> connections should be LOCALNODE when created in backup.
>
> If we still allow DR/NAT/TUN connections in backup
> to work without real server then all such xmitters should
> check RTCF_LOCAL and assume LOCALNODE if needed. This is
> needed for the case when we do not know the fwmark used
> by connection and we can not find the virtual service.
>
> Then __ip_vs_update_dest should not replace the
> configured forwarding method with IP_VS_CONN_F_LOCALNODE
> to allow backup to see this method in fwmark connections.
> If needed, we can remember that it is local in some
> new dest flag, eg. IP_VS_DEST_F_LOCAL. But better to
> show it as it was configured?
>
> So, how to fix these problems? May be:
>
> - ip_vs_find_dest to find svc and dest in more complex way
>
> - if backup has dest it should assign its forwarding method
> to the connection (ip_vs_bind_dest)
>
> - allow some transmitters to deliver traffic locally to support
> fwmark setups, eg. when no dest is assigned to connection
This seems rather tricky to say the least.
I prefer the 2nd version of struct ip_vs_sync_conn option...
> There is also an option to create 2nd version
> of struct ip_vs_sync_conn. For example, size in
> struct ip_vs_sync_mesg can be moved after new field
> version which will be in place of size. Old backups will
> think the small version number as some short size and will
> ignore the message. New backup servers can support both
> formats. The new format can add new fields for fwmark,
> IPv6 addresses, 1 byte af (AF_INET/AF_INET6), 1 byte len
> for easy skipping of messages if af or protocol are not
> supported.
It funny that you should mention that. I need to extend the synchronisation
protocol to allow the synchronisation of persistence engine data. And I
came up with more or less the same scheme for extending the protocol
without breaking old implementations - set the current size field to 0 (or
any other value that doesn't match the packet length), add a new size field
and a version field.
Lets spend a bit of time thinking out a v2 of the protocol that solves the
outstanding problems that we have.
* No version field
* Only 16 bits of flags
* No space for IPv6 addresses
* No space fwmarks
(* No space for persistence engine data)
Individually those problems don't seem to warrant a new protocol.
But when combined it seems worthwhile to me.
> Simon, may be now ip_vs_nat_xmit should see
> RTCF_LOCAL flag and we should check all NAT handlers
> to support the LOCALNODE fallback where the port can
> be changed too.
I'm not quite sure what you are describing there.
Is the idea that if the forwarding mechanism is NAT
then packets will always go via ip_vs_nat_xmit, even if
the IP is local (at config time). And that ip_vs_nat_xmit()
will use local xmit if RTCF_LOCAL is set?
--
To unsubscribe from this list: send the line "unsubscribe lvs-devel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
|