所有写请求都会被转发到leader节点,follower会通过单独的端向leader报告, 集群配置里面有专门指定,如下 zoo.cfg配置:
clientPort=4180 #用来接受客户端读请求的监听端口
#
server.A=B:C:D:其 中
A 是一个数字,表示这个是第几号服务器;
B 是这个服务器的 ip地址;
C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;也就是说,该端口是leader接收写请求的端口。
D 表示的是follower之间选举时通信用的端口。
server.0=127.0.0.1:8880:7770
server.1=127.0.0.1:8881:7771
server.2=127.0.0.1:8882:7772
当所有请求被转发到leader后,leader会同步的维护一个全局写事务编号 mzxid, 该序号是递增的。如下:
每条写请求都对应一个全局唯一的zxid, 同时leader会将该写请求转发至follower, follower在写的时候会拿当前的全局编号与对应写请求上的zxid进行匹配,写请求zxid-当前全局编号=1,则进行写操作。