- 内容:借鉴raft算法思路,使用epoll框架,实现了多台服务器反馈客户端访问信息,和各个服务器之间的条目一致性
- 语言和环境:C/C++ Ubuntu18(64-bit)
- 框架+运行操作介绍:
-
-
三个服务器结点,
IP
地址和端口号port
程序内部默认为0.0.0.0和8000、8001、8002。编号为A、B、C,启用时,输入一个参数A or B or C。编译命令:
make
运行命令为:
./a A
-
-
-
一个服务器程序
client.cpp
,IP
地址默认为0.0.0.0。启用时输入参数port,表示想要连接的服务器结点。编译命令为:
g++ client.cpp -o b
运行命令为:
./b 8000
(或者8001、8002)
-
-
- 数据:每个服务器维护自己编号的数据库,如果您修改了程序和文件的相对路径,请在代码对应位置进行修改。
- 实现的功能:
-
- 启动/杀死/加入任意一个服务器,均能实现raft算法里正常的选举新的leader的操作。
- 当客户端访问的服务器不是leader时,该follower服务器会返回leader结点端口号,客户端程序自动重新连接到leader,并告知用户请重新输入命令。
- 客户端进行访问操作时,服务器能正常反馈访问操作(进行了中文字符串乱码处理、大数据套接字发送接收处理)
- 客户端进行写操作:
-
-
- 如果仅有一个服务器结点,拒绝该请求
- 如果有半数服务器结点,接收该请求,并保证将该条目更新到所有“活着”的服务器条目记录中(不论是在该请求前加还是后加,还是中途推出后,重新加入。也不论崩溃的是leader还是follower服务器)
-
视频平台:b站
视频链接: 【参考raft算法、使用epoll框架实现的服务器集群】 https://www.bilibili.com/video/BV1Kk4y1j7mY/?share_source=copy_web&vd_source=7fb158c1c9968b27afe059ffbcf496c5