-
Notifications
You must be signed in to change notification settings - Fork 397
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
polaris-server leader 选举功能模块 #789
Comments
leaderelection 或许应该是要默认只能开启? |
同时还有另外一个问题,这个 LeaderElection 需要支持不同的功能组之间,leader各自选举吗?比如一组功能的leader和另一组功能的leader可以各自进行 election |
这可能取决于leader的任务的数量,如果有很多的任务,分一下组比较合适;如果像kafka的controller那样,那么一个就够了,并且默认开启。 |
也是,目前先不过度考虑了 |
LeaderElection 仅作为内部能力,相关参数不对外用户暴露。 |
* Fix k8s deploy (#819) * fix issue #629 (#693) * docs:优化错误信息描述 * Update zh.toml * fix:修复eureka心跳协议错误码不兼容问题 * fix:修复eureka心跳协议错误码不兼容问题 * unit:添加单元测试 * test:调整测试配置文件位置 * fix:issue #692 * fix:issue #692 * fix:issue #692 * fix:issue #692 * docs:add error code desc * fix:调整license-checker的触发 * fix:调整license-checker的触发 * fix:k8s standalone deploy * [ISSUE #789] Leader Election (#817) * Add leader election * fix test * add sql delta * feat:优化eureka插件大小写敏感,默认大小写不敏感 (#820) (#821) * feat: 支持eureka双向数据同步 * fix:golintci warnings * feat: 调整import顺序 * fix:修复golint格式化问题 * fix:修复导入问题 * fix: 修复导入顺序问题 * Fix k8s deploy (#819) * fix issue #629 (#693) * docs:优化错误信息描述 * Update zh.toml * fix:修复eureka心跳协议错误码不兼容问题 * fix:修复eureka心跳协议错误码不兼容问题 * unit:添加单元测试 * test:调整测试配置文件位置 * fix:issue #692 * fix:issue #692 * fix:issue #692 * fix:issue #692 * docs:add error code desc * fix:调整license-checker的触发 * fix:调整license-checker的触发 * fix:k8s standalone deploy * feat:优化大小写问题,eureka插件默认大小写不敏感,无需配置 * feat:读取的时候进行大写转换 * feat:修改读取时候大小写 * feat:处理replication大小写 * fix:修复用例失败问题 * fix:修复用例失败问题 Co-authored-by: liaochuntao <[email protected]> Co-authored-by: liaochuntao <[email protected]> * fix: 解决eureka同步时,出现存量服务同步失败的问题 (#823) * feat: 支持eureka双向数据同步 * fix:golintci warnings * feat: 调整import顺序 * fix:修复golint格式化问题 * fix:修复导入问题 * fix: 修复导入顺序问题 * feat:优化大小写问题,eureka插件默认大小写不敏感,无需配置 * feat:读取的时候进行大写转换 * feat:修改读取时候大小写 * feat:处理replication大小写 * fix:修复用例失败问题 * fix:修复用例失败问题 * fix:修复eureka心跳复制失败的问题 * fix:解决自注册时候,服务不存在需要动态创建的问题 * fix:修复服务不存在,创建报错问题 * feat:修复polaris之间走eureka同步接口出现报错的问题 (#830) * fix: eureka同步时,实例不存在没有返回404,导致eureka触发不了重注册 (#833) * 增强batchDeleteInstanceMeta方法的场景兼容性 解决以下sql delete from instance_metadata where id in (,?) Co-authored-by: liaochuntao <[email protected]> Co-authored-by: Shichao <[email protected]> Co-authored-by: andrew shan <[email protected]>
背景
由 #775 引出 polaris-server 需要一个 leader 选举模块,选出一个 leader 执行一些协调性的任务
问题 issue 中 polaris.checker 存在脏实例,所以复用现有的自注册机制选择 id 最小的实例并不能解决问题,这里的选主模块需要独立于 polaris 的自注册机制。
方案
基于 store 层实现选举,对上层提供接口
基于 mysql 的实现:
update leader_election set leader_id = ?, version = version + 1 where service_id = ? and version = ?
,只会有一个实例更新成功获得 leader 身份;UNIX_TIMESTAMP(SYSDATE()) - update_time
超过了设定的“租约(lease)”,尝试第1步竞争 leader 身份。配置
限制
其他sql数据库都支持类似的操作,如果之后扩容 raft 协议的内嵌数据库也很容易支持。
The text was updated successfully, but these errors were encountered: