To provide fault tolerance, modern distributed storage systems use specialized network topologies and consensus protocols that create high overheads. The main disadvantage of existing specialized topologies is a difficulty to implement an efficient data placement that takes into account locality of the data. In scientific problems very often it is necessary to provide the semantic proximity of the data at the nodes of the distributed system. Core drawback of modern consensus protocols is that most of them use messaging through broadcasting, which is impossible for large amounts of data and storage nodes. With more stringent requirements for a fault tolerance, e.g. requirement for resistance to Byzantine errors [1], ensuring of data localization becomes nearly impossible. The purpose of this paper is to implement a distributed consensus protocol that preserves data localization and is resistant to Byzantine errors. Theoretical tasks: a) consider how to implement distributed services based on finite state machines; b) consider how to ensure Byzantine fault tolerance; c) consider methods for organizing the semantic proximity of data. Practical tasks: a) develop ways to jointly ensure the Byzantine fault tolerance and locality of data; b) study the shortcomings of the joint provision of Byzantine fault tolerance and locality of data; c) develop a protocol of Byzantine consensus using semantic links between data; d) analyze the performance of the developed protocol within the framework of applied tasks. The object of the study is a distributed data storage system with the requirement for Byzantine fault tolerance. The subject of this study is the provision of Byzantine fault tolerance in conjunction with the use of semantic links between the data. The subject of this study has never been the subject of a special scientific study. Separate scientific foundations of this problematic set in the present study were developed in separate works on Byzantine fault tolerance, local hash methods and dimensional reduction.