BitShares Forum
Main => 中文 (Chinese) => Topic started by: alt on July 30, 2014, 05:39:54 am
-
hi, delegates. we have a solution for hot standby.
set up delegate wallet in 2 machines. one is master, and the other is slave.
master run delegate_loop task at seconds 0,10,20 ....
slave run the task with 5 seconds delay, at 5, 15, 25 .....
Normally master will generate block in time, slave will receive the block less than 5 seconds, than slave will not generate block.
If for some reason, master missed generation, slave didn't receive block from master in 5 seconds, slave will generate.
here is the patch for slave program:
--- a/libraries/client/client.cpp
+++ b/libraries/client/client.cpp
@@ -729,6 +729,7 @@ config load_config( const fc::path& datadir )
uint32_t slot_number = blockchain::get_slot_number( now );
time_point_sec next_slot_time = blockchain::get_slot_start_time( slot_number + 1 );
+ next_slot_time += 5;
ilog( "Rescheduling delegate loop for time: ${t}", ("t",next_slot_time) );
time_point scheduled_time = next_slot_time;
-
+5% +5%
悟空你又来显摆了,二师兄快来接招 :D
-
编程的人是不是记忆力都比较好? :-X
-
alt老弟,这个slave客户端只要加“ next_slot_time += 5;”这行代码后编译,是吗?
slave可以和master同时开机而不会相互影响吗?一个代表运行在2个不同的结点是否是BM所允许的。
你做过多少测试?
hi, delegates. we have a solution for hot standby.
set up delegate wallet in 2 machines. one is master, and the other is slave.
master run delegate_loop task at seconds 0,10,20 ....
slave run the task with 5 seconds delay, at 5, 15, 25 .....
Normally master will generate block in time, slave will receive the block less than 5 seconds, than slave will not generate block.
If for some reason, master missed generation, slave didn't receive block from master in 5 seconds, slave will generate.
here is the patch for slave program:
--- a/libraries/client/client.cpp
+++ b/libraries/client/client.cpp
@@ -729,6 +729,7 @@ config load_config( const fc::path& datadir )
uint32_t slot_number = blockchain::get_slot_number( now );
time_point_sec next_slot_time = blockchain::get_slot_start_time( slot_number + 1 );
+ next_slot_time += 5;
ilog( "Rescheduling delegate loop for time: ${t}", ("t",next_slot_time) );
time_point scheduled_time = next_slot_time;
-
alt老弟,这个slave客户端只要加“ next_slot_time += 5;”这行代码后编译,是吗?
slave可以和master同时开机而不会相互影响吗?一个代表运行在2个不同的结点是否是BM所允许的。
你做过多少测试?
对,加一行编译就可以了。
我昨天开始已经这样部署了,是在同一台VPS上运行了master和slave两个进程,因为现在丢包主要是程序BUG,用两台机器暂时没必要。
测试到现在只丢了一个包,这个丢包是因为我后面的代理时间不准,插队到我前面出块了,两个进程都无法出块
delegate (unlocked) >>> blockchain_list_blocks 94684 3
HEIGHT TIMESTAMP SIGNING DELEGATE # TXS SIZE TOTAL FEES LATENCY PROCESSING TIME
===================================================================================================================
94684 2014-07-30T14:05:20 clout-delegate2 0 166 0.00000 BTSX 0 0.005236
MISSED 2014-07-30T14:05:30 delegate-baozi N/A N/A N/A N/A N/A
94685 2014-07-30T14:05:40 btsx.chinesecommunity 0 166 0.00000 BTSX -10 0.000112
94686 2014-07-30T14:05:50 init73 0 166 0.00000 BTSX 0 0.007378
block 91330 master错过了,是 slave 产生的,可以看到它的 latency 是 5s
[delegate (unlocked) >>> blockchain_list_blocks 91330 3
HEIGHT TIMESTAMP SIGNING DELEGATE # TXS SIZE TOTAL FEES LATENCY PROCESSING TIME
===================================================================================================================
91330 2014-07-30T04:44:20 init72 0 166 0.00000 BTSX 0 0.004282
91331 2014-07-30T04:44:30 delegate-alt 0 166 0.00000 BTSX 5 0.004205
91332 2014-07-30T04:44:40 init43 0 166 0.00000 BTSX 0 0.006424
-
还要补充一点,昨天晚上我的 slave 由于长时间运行,又遇到老问题,连接数降到很低,导致收包出问题,出现了不少误判,生成了好几个 orphan block
所以 slave 上可以让程序定期自动重启,我刚增加了每12小时重启一次
-
还要补充一点,昨天晚上我的 slave 由于长时间运行,又遇到老问题,连接数降到很低,导致收包出问题,出现了不少误判,生成了好几个 orphan block
所以 slave 上可以让程序定期自动重启,我刚增加了每12小时重启一次
你的重启script好像要expert??支持。 具体要如何操作。
ALT你的documentation没有达到北美软件业的水平 :'( :'( :'( :'(。还是中国的方式
-
还要补充一点,昨天晚上我的 slave 由于长时间运行,又遇到老问题,连接数降到很低,导致收包出问题,出现了不少误判,生成了好几个 orphan block
所以 slave 上可以让程序定期自动重启,我刚增加了每12小时重启一次
你的重启script好像要expert??支持。 具体要如何操作。
ALT你的documentation没有达到北美软件业的水平 :'( :'( :'( :'(。还是中国的方式
确实啊,工作基本没有写document的习惯,以后尽量写清楚一点,英文写的也不知道对不对
run_wallet.exp 是 expect 脚本,需要安装 expect,运行之前记住修改里面的 "wallet_name" 和 "command line" ,按自己的实际修改
sudo aptitude install expect
./run_wallet.exp
对 slave 来说,编译完后,把程序改个名字,比如 bitshares_client_slave,这样直接运行 killall -9 bitshares_client_slave 就可以重启 slave了
-
建议用keepalive方案,两台服务器互相监控,其中一台运行,发现挂了,自动启动另一台(或者定时重启服务)。这样不用编译,用sh脚本就可以实现。没有两个同时运行的问题。
还要补充一点,昨天晚上我的 slave 由于长时间运行,又遇到老问题,连接数降到很低,导致收包出问题,出现了不少误判,生成了好几个 orphan block
所以 slave 上可以让程序定期自动重启,我刚增加了每12小时重启一次
-
alt 是我们的华人骄傲! 你的bts钱包多少, 我请你喝beer
-
alt 是我们的华人骄傲! 你的bts钱包多少, 我请你喝beer
baozi 是alt的!
-
alt 是我们的华人骄傲! 你的bts钱包多少, 我请你喝beer
baozi 是alt的!
是的,谢谢小李:D
来自我的 HUAWEI P7-L00 上的 Tapatalk
-
太给力了,顶起!
-
请教 alt,,你说的 run_wallet.exp 有地方下载吗?