GlusterFS :Addbrick工作流程分析


1、工作流程分析


步驟說明:

1、  Cli接收到用戶的輸入後,對命令進行解析,判斷命令是否合法(命令格式,字符拼寫等檢查),然後RPC調用本機的glusterd程序的遠程函數,glusterd程序開始解析addbrick的命令行,判斷裏面的hostname所對應機器是否存在;peer內的uuid是否存在;brick所對應的路徑是否存在;檢查所對應的brick是否已經存在,日誌片段如下:

 [glusterd-op-sm.c:8544:glusterd_op_set_cli_op] 0-: Returning 0       

[glusterd-handler.c:1306:glusterd_handle_add_brick] 0-glusterd: Receiv

[glusterd-utils.c:847:glusterd_volinfo_find] 0-: Volume test found   

[glusterd-utils.c:855:glusterd_volinfo_find] 0-: Returning 0         

[glusterd-utils.c:630:glusterd_brickinfo_new] 0-: Returning 0        

[glusterd-utils.c:687:glusterd_brickinfo_from_brick] 0-: Returning 0 

[glusterd-utils.c:2755:glusterd_friend_find_by_hostname] 0-glusterd: U

[glusterd-utils.c:211:glusterd_is_local_addr] 0-glusterd: sdc0 is loca

[glusterd-utils.c:2789:glusterd_hostname_to_uuid] 0-: returning 0    

[glusterd-utils.c:642:glusterd_resolve_brick] 0-: Returning 0        

[glusterd-utils.c:760:glusterd_volume_brickinfo_get] 0-: Returning -1

[glusterd-utils.c:2927:glusterd_new_brick_validate] 0-: returning 0  

[glusterd-utils.c:760:glusterd_volume_brickinfo_get] 0-: Returning -1

[glusterd-utils.c:630:glusterd_brickinfo_new] 0-: Returning 0         

[glusterd-utils.c:687:glusterd_brickinfo_from_brick] 0-: Returning 0 

[glusterd-utils.c:2707:glusterd_friend_find_by_hostname] 0-glusterd: F

[glusterd-utils.c:2789:glusterd_hostname_to_uuid] 0-: returning 0    

[glusterd-utils.c:642:glusterd_resolve_brick] 0-: Returning 0        

[glusterd-utils.c:2666:glusterd_friend_find_by_uuid] 0-glusterd: Frien

[glusterd-utils.c:760:glusterd_volume_brickinfo_get] 0-: Returning -1

[glusterd-utils.c:2927:glusterd_new_brick_validate] 0-: returning 0  

[glusterd-utils.c:760:glusterd_volume_brickinfo_get] 0-: Returning -1

2、  對所有機器上的該捲進行加鎖,每臺機器加鎖成功纔算加鎖成功;每個主機的glusterd進程維護了一個全局變量lock,這是該主機的鎖,當加鎖的時候,會判斷lock.owner變量值,0代表沒有加鎖,沒有加鎖的時候,加鎖才能夠成功。首先是本機加鎖,加鎖成了,然後再發送信息給其他的主機進行加鎖。

glusterd-utils.c:243:glusterd_lock] 0-glusterd: Cluster lock held by f0481376-8cee-4eba-a4c2-4790b5eae856

glusterd-handler.c:420:glusterd_op_txn_begin] 0-glusterd: Acquired local lock

glusterd-op-sm.c:8393:glusterd_op_sm_inject_event] 0-glusterd: Enqueuing event: 'GD_OP_EVENT_START_LOCK'

glusterd-handler.c:424:glusterd_op_txn_begin] 0-glusterd: Returning 0

glusterd-op-sm.c:8449:glusterd_op_sm] 0-: Dequeued event of type: 'GD_OP_EVENT_START_LOCK'

glusterd-rpc-ops.c:1541:glusterd3_1_cluster_lock] 0-glusterd: Returning 0

glusterd-op-sm.c:6462:glusterd_op_ac_send_lock] 0-: Returning with 0

glusterd-utils.c:3182:glusterd_sm_tr_log_transition_add] 0-glusterd: Transitioning from 'Default' to 'Lock sent' due to event 'GD_OP_EVENT_START_LOCK'

glusterd-utils.c:3184:glusterd_sm_tr_log_transition_add] 0-: returning 0

glusterd-utils.c:577:glusterd_volume_brickinfos_delete] 0-: Returning 0

glusterd-rpc-ops.c:759:glusterd3_1_cluster_lock_cbk] 0-glusterd: Received ACC from uuid: cb2b0881-831f-4c28-8e4e-e4f1bd01e842

 3、 清除一些brick信息,刪除一些時間戳的臨時文件;

4、 啓動添加的brick進程;

5、  以執行該命令的機器作爲第一臺機器,然後第一臺機器創建卷目錄,及其相關的所有的brick文件,並且將內存裏面的卷,brick相關信息寫入到相應的文件內;第一臺機器完成這些操作後,第二臺機器重複該操作。。。。。第一臺機器收到這些節點信息修改的成功響應後纔算成功;


[glusterd-volgen.c:2342:generate_brick_volfiles] 0-: Found a brick - sdc0:/data/test0

[glusterd-volgen.c:1311:server_check_marker_off] 0-: Returning 0

[glusterd-volgen.c:2342:generate_brick_volfiles] 0-: Found a brick - sdc2:/data/test0

[glusterd-volgen.c:1311:server_check_marker_off] 0-: Returning 0

[glusterd-volgen.c:2342:generate_brick_volfiles] 0-: Found a brick - sdc0:/data/test1

[glusterd-volgen.c:1311:server_check_marker_off] 0-: Returning 0

[glusterd-volgen.c:2342:generate_brick_volfiles] 0-: Found a brick - sdc2:/data/test1

[glusterd-volgen.c:1311:server_check_marker_off] 0-: Returning 0

[glusterd-volgen.c:2342:generate_brick_volfiles] 0-: Found a brick - sdc0:/data/test2

[glusterd-volgen.c:1311:server_check_marker_off] 0-: Returning 0

[glusterd-volgen.c:2342:generate_brick_volfiles] 0-: Found a brick - sdc2:/data/test2

[glusterd-volgen.c:1311:server_check_marker_off] 0-: Returning 0

[glusterd-volgen.c:2353:generate_brick_volfiles] 0-: Returning 0

[glusterd-utils.c:778:glusterd_volume_brickinfo_get_by_brick] 0-: brick: sdc0:/data/test2

[glusterd-utils.c:2755:glusterd_friend_find_by_hostname] 0-glusterd: Unable to find friend: sdc0

[glusterd-utils.c:211:glusterd_is_local_addr] 0-glusterd: sdc0 is local

[glusterd-utils.c:2789:glusterd_hostname_to_uuid] 0-: returning 0

[glusterd-utils.c:726:glusterd_volume_brickinfo_get] 0-: Found brick

[glusterd-utils.c:760:glusterd_volume_brickinfo_get] 0-: Returning 0

[glusterd-utils.c:807:glusterd_volume_brickinfo_get_by_brick] 0-: Returning 0

[glusterd-utils.c:778:glusterd_volume_brickinfo_get_by_brick] 0-: brick: sdc2:/data/test2

[glusterd-utils.c:2707:glusterd_friend_find_by_hostname] 0-glusterd: Friend sdc2 found.. state: 3

[glusterd-utils.c:2789:glusterd_hostname_to_uuid] 0-: returning 0

[glusterd-utils.c:726:glusterd_volume_brickinfo_get] 0-: Found brick

[glusterd-utils.c:760:glusterd_volume_brickinfo_get] 0-: Returning 0

[glusterd-utils.c:807:glusterd_volume_brickinfo_get_by_brick] 0-: Returning 0

[glusterd-op-sm.c:1541:glusterd_op_perform_add_bricks] 0-: Returning 0

[glusterd-store.c:608:glusterd_store_create_volume_dir] 0-: Returning with 0

[glusterd-store.c:1089:glusterd_store_save_value] 0-: returning: 0

[glusterd-store.c:1089:glusterd_store_save_value] 0-: returning: 0

[glusterd-store.c:1089:glusterd_store_save_value] 0-: returning: 0

[glusterd-store.c:1089:glusterd_store_save_value] 0-: returning: 0

[glusterd-store.c:1089:glusterd_store_save_value] 0-: returning: 0

[glusterd-store.c:1089:glusterd_store_save_value] 0-: returning: 0

[glusterd-store.c:1089:glusterd_store_save_value] 0-: returning: 0

[glusterd-store.c:632:glusterd_store_volinfo_write] 0-: Returning 0

[glusterd-store.c:1089:glusterd_store_save_value] 0-: returning: 0

[glusterd-store.c:1089:glusterd_store_save_value] 0-: returning: 0

[glusterd-store.c:1089:glusterd_store_save_value] 0-: returning: 0

[glusterd-store.c:1089:glusterd_store_save_value] 0-: returning: 0

[glusterd-store.c:1089:glusterd_store_save_value] 0-: returning: 0

[glusterd-store.c:292:glusterd_store_brickinfo_write] 0-: Returning 0

 6、  解鎖,每臺機器解鎖成功纔算解鎖成功;

[2012-12-14 17:14:43.704757] D [glusterd-op-sm.c:6509:glusterd_op_ac_send_unlock] 0-: Returning with 0

[2012-12-14 17:14:43.704798] D [glusterd-utils.c:3182:glusterd_sm_tr_log_transition_add] 0-glusterd: Transitioning from 'Commit op sent' to 'Unlock sent' due to event 'GD_OP_EVENT_COMMIT_ACC'

[2012-12-14 17:14:43.704837] D [glusterd-utils.c:3184:glusterd_sm_tr_log_transition_add] 0-: returning 0

[2012-12-14 17:14:43.705205] I [glusterd-rpc-ops.c:818:glusterd3_1_cluster_unlock_cbk] 0-glusterd: Received ACC from uuid: cb2b0881-831f-4c28-8e4e-e4f1bd01e842


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章