文档章节

CTDB main loop

banwh
 banwh
发布于 2017/07/19 10:44
字数 570
阅读 5
收藏 0
点赞 0
评论 0

main_loop

kill -o daemon is still running
ping local daemon
if election_timeout out
get debug_level
get relevant tunables
get runstate
get recovery lock file from the server
get nodemap
flags
if self_ban
if stop banned frozen
Retrieve capabilities from all connected nodes
validate_recovery_master --> force_election
verify ip public ip {

ips.pnn == self && dont have ip
ips.pnn != self && have ip
} tell recmaster takeover_run


down here only run with recmaster
flags right
active nodes agree we are recmaster --> force_election get vnnmap
need recovery --> do_recovery
verify all active nodes not in recover mode --> do_recovery
hold recovery lock --> do_recovery
get remote_nodemaps --> do_recovery
num_lmasters
vnnmap->size != num_lmasters --> do_recovery
nodemap node also in vnnmap --> do_recovery
all nodes have same vnnmap
if need_takeover_run do_takeover_run


<span id="force_election"></span>

force_election

election_handler

rec = self ctdb = rec->ctdb
pnn == self out

ctdb_election_win

states
longest running
biggest pnn

release recover lock file
let recmaster = that


<h1 id="do_recovery"></h1> # do_recovery > we are rec > need_recovery = true > begin > self_ban > recover_lock_file F_SETLK 为 F_WRLCK > get list of all databases dbmap > create missing local db > create missing remote db > update use same lock files > [db_recovery_parallel](#db_recovery_parallel) > [do_takeover_run](#do_takeover_run) > send message reconfigured > need_recovery = false > end > wait rerecovery_timeout


<span id='db_recovery_parallel'></span>

db_recovery_parallel

envvar CTDB_RECOVERY_HELPER
dir CTDB_HELPER_BINDIR == /usr/libexec/ctdb/
file ctdb_recovery_helper
pipe libsocket
args[0] = fd[1]
args[1] = daemon.name = CTDB_SOCKET = /var/run/ctdb/ctdb.socket
args[2] = random !=1
exec /usr/libexec/ctdb/ctdb_recovery_helper
<log-fd> <output-fd> <ctdb-socket-path> <generation>
1 1 /var/run/ctdb/ctdbd.socket 2


<span id='do_takeover_run'></span>

do_takeover_run

is_in_progress done
begin
srvid = 0 pnn = -1
list_of_connected_nodes
disable takeover_runs 60s
ctdb_takeover_run
reenable takeover_runs
ok
end

<span id='ctdb_takeover_run'></span>

ctdb_takeover_run

  • 分配 ipalloc_state的内存,包括每个节点数组
  • 填充 ipalloc_state的ip分配算法
  • 本地填充 ipalloc_state NoIPFailback 参数--这是一个真正的集群范围的配置,只有master使用此值
  • 取所有连接的节点的 NoIPTakeover 和 NoIPHostOnAllDisabled --这各动作是分开执行的,所以在单元测试过程中可以伪造
  • 填充 ipalloc_state 的 NoIPTakover
  • 填充 ipalloc_state 的 NoIPHost ,衍生出节点 flags 和 NoIPHostOnAllDisabled
  • 检索和填充 ipalloc_state 已知和可用的IP列表
  • 如果没有可用IP地址,则提前退出
  • 构建列表(已知的IPs,当前指定的节点)
  • 填充节点列表以强制重新平衡 - 内部结构,目前没有办法获取,只有使用LCP2算法 增加了新的IP地址的节点
  • 运行IP分配算法
  • 发送 RELEASE_IP 到所有节点的 取消不应有的ips
  • 发送 TAKE_IP 到所有节点的 配置应有ips
  • 发送 IPREALLOCATED 所有节点(向后兼容的 hack )

ipalloc_state_init

三种算法 ipalloc_lcp2 ==> 默认
ipalloc_deterministic ==> pnn = i % numnodes ipalloc_nondeterministic ==> min以pnn=0为基准,轮询 已有ip<min的则可收ip

<span id='ipalloc_lcp2'></span>

ipalloc_lcp2

unassign_unsuitable_ips 不匹配的ip的pnn = -1
lcp2_init
lcp2_allocate_unassigned

^运算 计算出从高到低不同=distance ipv4 32 + 32 + dis + 32 = 0 ~ 128 sum = ip 到其他每个ip distance平方和 minnode || mindstdsum rebalance_candidates
lcp2_failback
均衡所有lcp2_imbalances

© 著作权归作者所有

共有 人打赏支持
banwh
粉丝 1
博文 52
码字总数 78166
作品 0
海淀
程序员
CTDB与LVS搭建集群

CTDB与LVS搭建集群 搭建一个采用lvs进行负载均衡的CTDB集群,整个集群的架构是采用如图所示 在上图所示的架构图中,后端采用的集群是我们的bsdocfs集群存储,三个samba服务器的node在作为CTD...

zphj1987 ⋅ 2012/09/11 ⋅ 0

Samba 4.2.2 发布,最新稳定版本

Samba 4.2.2 发布,该版本是目前最新稳定版本,现已提供下载。 更新内容: o Michael Adam BUG 11182: s3:smbXsrv: refactor duplicate code into smbXsrvsessionclearandlogoff(). BUG 112......

sikkx ⋅ 2015/05/28 ⋅ 2

Ubuntu下安装配置ctdb Samba ,遇到ctdb的各个节点显示UNHEALTHY是不健康的

3台服务器安装Ubuntu-server 14.04,先搭建ceph集群,然后搭建Samba和ctdb服务,ceph集群与Samba显示都是健康的,遇到ctdb的各个节点显示UNHEALTHY是不健康的,如下所示: root@node77:~# c...

易阳天 ⋅ 2016/01/27 ⋅ 2

Debian下搭建Samba CTDB集群。

在使用Samba CTDB搭建群集时,推荐使用如下图所示的结构,在Samba CTDB的节点后面使用GPFS、GFS2、GlusterFS、Lustre之类的集群存储系统。在本文中假设后端的集群存储系统已搭建完成,现在开...

onlyzq ⋅ 2011/06/22 ⋅ 0

ctdb+samba+cephfs高可用

环境:两台ubuntu16.04主机或虚拟机,samba:4.3.11,ctdb:4.3.11,ceph客户端:10.2.9 ,ceph集群:10.2.3 配置前准备: 可用的ceph集群,配置了cephfs文件系统。 ceph集群mon节点ip:10.33...

zrz11 ⋅ 01/25 ⋅ 0

在Gluster上使用CTDB和Samba

单独的使用Samba挂载gluster volume并不能实现High Availability,有了CTDB就可以解决这个问题了. 1 准备环境 我已经提前准备好了一个gluster环境,创建好了一个volume repvol,并且此volume已...

jia_xiaolei ⋅ 2017/07/28 ⋅ 0

Ajenti 1.0 发布,服务器管理系统

Ajenti 1.0 几乎完全重写了 Ajenti 面板! Ajenti 是强大的服务器管理系统,采用Python实现,秒杀PHP的一切主机面板。 包含Apache, BIND9, Cron, CTDB, DHCPD, NFSD, Iptables, Munin, MySQ...

oschina ⋅ 2013/08/31 ⋅ 1

服务器管理系统--Ajenti

强大的服务器管理系统,采用Python实现,秒杀PHP的一切主机面板。 包含Apache, BIND9, Cron, CTDB, DHCPD, NFSD, Iptables, Munin, MySQL, Netatalk, NGINX, PostgreSQL, Samba, lm-sensors,......

李昱 ⋅ 2013/08/26 ⋅ 1

Ajenti 1.2.11.2 发布,服务器管理系统

Ajenti 1.2.11.2 发布,此版本更新内容如下: File Manager: archive unpacker. Firefox: behaviour with AdBlock enabled has been fixed. Tasks: displays timestamp and duration. User s......

oschina ⋅ 2013/12/21 ⋅ 1

Ajenti 1.2.10 发布,服务器管理系统

Ajenti 1.2.10 降低了内存占用,修复内存泄漏问题;修复 Samba 模块的密码设置bug;修复了任务参数重复的问题。 强大的服务器管理系统,采用Python实现,秒杀PHP的一切主机面板。 包含Apach...

oschina ⋅ 2013/12/07 ⋅ 2

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Gitee 生成并部署SSH key

1.如何生成ssh公钥 你可以按如下命令来生成 sshkey: ssh-keygen -t rsa -C "xxxxx@xxxxx.com" # Generating public/private rsa key pair...# 三次回车即可生成 ssh key 查看你的 ...

晨猫 ⋅ 49分钟前 ⋅ 0

zblog2.3版本的asp系统是否可以超越卢松松博客的流量[图]

最近访问zblog官网,发现zlbog-asp2.3版本已经进入测试阶段了,虽然正式版还没有发布,想必也不久了。那么作为aps纵横江湖十多年的今天,blog2.2版本应该已经成熟了,为什么还要发布这个2.3...

原创小博客 ⋅ 今天 ⋅ 0

聊聊spring cloud的HystrixCircuitBreakerConfiguration

序 本文主要研究一下spring cloud的HystrixCircuitBreakerConfiguration HystrixCircuitBreakerConfiguration spring-cloud-netflix-core-2.0.0.RELEASE-sources.jar!/org/springframework/......

go4it ⋅ 今天 ⋅ 0

二分查找

二分查找,也称折半查找、二分搜索,是一种在有序数组中查找某一特定元素的搜索算法。搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;如果某一特定元素大于...

人觉非常君 ⋅ 今天 ⋅ 0

VS中使用X64汇编

需要注意的是,在X86项目中,可以使用__asm{}来嵌入汇编代码,但是在X64项目中,再也不能使用__asm{}来编写嵌入式汇编程序了,必须使用专门的.asm汇编文件来编写相应的汇编代码,然后在其它地...

simpower ⋅ 今天 ⋅ 0

ThreadPoolExecutor

ThreadPoolExecutor public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, ......

4rnold ⋅ 昨天 ⋅ 0

Java正无穷大、负无穷大以及NaN

问题来源:用Java代码写了一个计算公式,包含除法和对数和取反,在页面上出现了-infinity,不知道这是什么问题,网上找答案才明白意思是负的无穷大。 思考:为什么会出现这种情况呢?这是哪里...

young_chen ⋅ 昨天 ⋅ 0

前台对中文编码,后台解码

前台:encodeURI(sbzt) 后台:String param = URLDecoder.decode(sbzt,"UTF-8");

west_coast ⋅ 昨天 ⋅ 0

实验楼—MySQL基础课程-挑战3实验报告

按照文档要求创建数据库 sudo sercice mysql startwget http://labfile.oss.aliyuncs.com/courses/9/createdb2.sqlvim /home/shiyanlou/createdb2.sql#查看下数据库代码 代码创建了grade......

zhangjin7 ⋅ 昨天 ⋅ 0

一起读书《深入浅出nodejs》-node模块机制

node 模块机制 前言 说到node,就不免得提到JavaScript。JavaScript自诞生以来,经历了工具类库、组件库、前端框架、前端应用的变迁。通过无数开发人员的努力,JavaScript不断被类聚和抽象,...

小草先森 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部