stop one of them, upgrade it and restart it. below is discovery log and it seems the server can connected to all of other nodes.
[2015-12-25 10:57:00,313][TRACE][discovery.zen.ping.unicast] [192.168.200.190] [119] received response from {#zen_unicast_3#}{192.168.200.196}{192.168.200.196:9390}: [ping_response{node [{192.168.200.190}{QDVnI6x7RQ2u3T3zBsKQgw}{192.168.200.190}{192.168.200.190:9390}{max_local_storage_nodes=20, master=false}], id[351], master [null], hasJoinedOnce [false], cluster_name[21test]}, ping_response{node [{192.168.200.190}{QDVnI6x7RQ2u3T3zBsKQgw}{192.168.200.190}{192.168.200.190:9390}{max_local_storage_nodes=20, master=false}], id[352], master [null], hasJoinedOnce [false], cluster_name[21test]}, ping_response{node [{192.168.200.190}{QDVnI6x7RQ2u3T3zBsKQgw}{192.168.200.190}{192.168.200.190:9390}{max_local_storage_nodes=20, master=false}], id[353], master [null], hasJoinedOnce [false], cluster_name[21test]}, ping_response{node [{192.168.200.190}{QDVnI6x7RQ2u3T3zBsKQgw}{192.168.200.190}{192.168.200.190:9390}{max_local_storage_nodes=20, master=false}], id[354], master [null], hasJoinedOnce [false], cluster_name[21test]}, ping_response{node [{192.168.200.190}{QDVnI6x7RQ2u3T3zBsKQgw}{192.168.200.190}{192.168.200.190:9390}{max_local_storage_nodes=20, master=false}], id[355], master [null], hasJoinedOnce [false], cluster_name[21test]}, ping_response{node [{192.168.200.190}{QDVnI6x7RQ2u3T3zBsKQgw}{192.168.200.190}{192.168.200.190:9390}{max_local_storage_nodes=20, master=false}], id[356], master [null], hasJoinedOnce [false], cluster_name[21test]}, ping_response{node [{192.168.200.196}{FzxGsQclQ22izuwoi-wTpQ}{192.168.200.196}{192.168.200.196:9390}], id[1081], master [{192.168.200.196}{FzxGsQclQ22izuwoi-wTpQ}{192.168.200.196}{192.168.200.196:9390}], hasJoinedOnce [true], cluster_name[21test]}]
but it keep logging: [DEBUG][action.admin.indices.create] [192.168.200.190] no known master node, scheduling a retry