centos7.3 go-etheruem 集群搭建(多节点)

 本章在已了解go-ethruem 单节点搭建基础之上。

 单节点集群文章请看  《centos7.3 go-etheruem 安装、搭建私有链 Hello World程序》

  集群条件

 1. 创世区块一样

2.  网络的id一致

下面通过2个节点做集群

创建2个目录 1 和2

[root@lt-test-mongodb eth]# mkdir eth_cluster
[root@lt-test-mongodb eth]# mkdir eth_
eth_cluster/     eth_output2.log  eth_output.log   
[root@lt-test-mongodb eth]# mkdir eth_cluster/1
[root@lt-test-mongodb eth]# mkdir eth_cluster/2

 创世文件复制到相应目录下

[root@lt-test-mongodb eth]# cp genesis.json eth_cluster/1/
[root@lt-test-mongodb eth]# cp genesis.json eth_cluster/2/

初始化创世区块

# geth init ./1/genesis.json --datadir "./1/chain"

进入geth客户端

# geth --identity "cluster01" --datadir "./1/chain" --networkid 9999 --port 30301  --rpc --rpcport 8551  --rpccorsdomain "*"  --rpcapi "db,eth,net,web3" console
> admin.nodeInfo
{
  enode: "enode://3401b1ef41dbb49ba18d1bb16609cd27fc996c34ba4e3a87d74cd03e14845c0593e9d078d40125b4483a5eb1854d8f12efd00cb0ffe271eb5fc6021fb2e7caa5@[::]:30301",
  id: "3401b1ef41dbb49ba18d1bb16609cd27fc996c34ba4e3a87d74cd03e14845c0593e9d078d40125b4483a5eb1854d8f12efd00cb0ffe271eb5fc6021fb2e7caa5",
  ip: "::",
  listenAddr: "[::]:30301",
  name: "Geth/cluster01/v1.7.2-stable-1db4ecdc/linux-amd64/go1.8.3",
  ports: {
    discovery: 30301,
    listener: 30301
  },
  protocols: {
    eth: {
      difficulty: 131072,
      genesis: "0x5e1fc79cb4ffa4739177b5408045cd5d51c6cf766133f23f7cd72ee1f8d790e0",
      head: "0x5e1fc79cb4ffa4739177b5408045cd5d51c6cf766133f23f7cd72ee1f8d790e0",
      network: 9999
    }
  }
}


创建第二个节点

# geth init ./2/genesis.json --datadir "./2/chain"
# geth --identity "cluster02" --datadir "./2/chain" --networkid 9999 --port 30302  --rpc --rpcport 8552  --rpccorsdomain "*"  --rpcapi "db,eth,net,web3" console

> admin.nodeInfo
{
  enode: "enode://636471ccb6ad542829f0b14d42cb69d6990954780087c5c68e31f371a406ab6aa58c580b7d25ca2142779d7ba115a84a1a97852c2998b803395b0bb43138e718@[::]:30302",
  id: "636471ccb6ad542829f0b14d42cb69d6990954780087c5c68e31f371a406ab6aa58c580b7d25ca2142779d7ba115a84a1a97852c2998b803395b0bb43138e718",
  ip: "::",
  listenAddr: "[::]:30302",
  name: "Geth/cluster02/v1.7.2-stable-1db4ecdc/linux-amd64/go1.8.3",
  ports: {
    discovery: 30302,
    listener: 30302
  },
  protocols: {
    eth: {
      difficulty: 131072,
      genesis: "0x5e1fc79cb4ffa4739177b5408045cd5d51c6cf766133f23f7cd72ee1f8d790e0",
      head: "0x5e1fc79cb4ffa4739177b5408045cd5d51c6cf766133f23f7cd72ee1f8d790e0",
      network: 9999
    }
  }
}

我们看下端口开启情况

[root@lt-test-mongodb ~]# netstat -tnlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.0.1:8551          0.0.0.0:*               LISTEN      17079/geth          
tcp        0      0 127.0.0.1:8552          0.0.0.0:*               LISTEN      17137/geth                   
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      30793/sshd                 
tcp6       0      0 :::30301                :::*                    LISTEN      17079/geth          
tcp6       0      0 :::30302                :::*                    LISTEN      17137/geth  

可以看到 第一个节点(30301、8551) 和 第二个节点 (30302、8552) 已经正常启动。

注: windows 端口比较多 可以过滤查看

C:\Users\Administrator>netstat -ano | grep 30303
  TCP    0.0.0.0:30303          0.0.0.0:0              LISTENING       39292
  TCP    192.168.0.106:30303    52.47.203.210:41542    FIN_WAIT_2      39292
  TCP    [::]:30303             [::]:0                 LISTENING       39292

C:\Users\Administrator>netstat -ano | grep 8545
  TCP    127.0.0.1:8545         0.0.0.0:0              LISTENING       39292
  TCP    127.0.0.1:48544        127.0.0.1:48545        ESTABLISHED     5224
  TCP    127.0.0.1:48545        127.0.0.1:48544        ESTABLISHED     5224


查看第一个节点的网络节点细信息 enode

> net.peerCount
0
> admin.nodeInfo.enode
"enode://3401b1ef41dbb49ba18d1bb16609cd27fc996c34ba4e3a87d74cd03e14845c0593e9d078d40125b4483a5eb1854d8f12efd00cb0ffe271eb5fc6021fb2e7caa5@[::]:30301"

在第二个节点上添加 enode

> admin.addPeer("enode://3401b1ef41dbb49ba18d1bb16609cd27fc996c34ba4e3a87d74cd03e14845c0593e9d078d40125b4483a5eb1854d8f12efd00cb0ffe271eb5fc6021fb2e7caa5@[::]:30301");   # 因为我在一台机器上测试 所以IP没有指名, 如果外网其他机器把[::]改成指定的ip即可

true

我们再执行 net.peerCount

> net.peerCount
1

第二个节点查看 连接节点信息

> admin.peers
[{
    caps: ["eth/63"],
    id: "3401b1ef41dbb49ba18d1bb16609cd27fc996c34ba4e3a87d74cd03e14845c0593e9d078d40125b4483a5eb1854d8f12efd00cb0ffe271eb5fc6021fb2e7caa5",
    name: "Geth/cluster01/v1.7.2-stable-1db4ecdc/linux-amd64/go1.8.3",
    network: {
      localAddress: "192.168.1.160:34640",
      remoteAddress: "47.100.114.xx:30301"   # 这里 ip:port就是外网的第一个节点  xx代表了 要不然暴露外网IP了 ^_^
    },
    protocols: {
      eth: {
        difficulty: 131072,
        head: "0x5e1fc79cb4ffa4739177b5408045cd5d51c6cf766133f23f7cd72ee1f8d790e0",
        version: 63
      }
    }
}]

我们还可以 把 新节点加入创建成脚本 ,一下可以保存为 gethcluster.sh

例如  只需要修改  coinbase 和 supernode 即可

  

echo "init genesis block..."
geth init "/ws/genesis.json" --datadir "/ws/chain"
echo "genesis block init completed..."



echo "geth node starting"

coinbase="0xa1d50aae10a1587638bebb9f17590bdf4bacbe06"
supernode="enode://caa89725768086ae39810dfc60c0f9f5c935f91ea0da7995407e449a154f12444980c13c1e532c7015caa72029384719ba6c653aa4f2396e38527ee4074ddeb3@47.100.170.500:30303"


# get ipaddr
ip=$(ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:")

echo ip:$ip
echo coinbase:$coinbase
echo connect supernode $supernode



nohup geth --datadir "/ws/chain" --rpc --rpcport 8545 --port 30303 --rpcaddr $ip --rpccorsdomain "*" --rpcapi "db,eth,net,web3,admin,personal" --networkid 999 --ipcdisable --etherbase $coinbase --bootnodes $supernode --mine -minerthreads 1 >> "/ws/geth.log"

集群的时候 需要注意时间一定要同步;

设置与网络时间同步

centos 语言区域设置?

    localectl status  查看当前区域配置

   locale 查看当前区域的变量配置

   localectl list-locales | grep CN  查看可用的汉语语言

  localectl set-locale LANG=zh_CN.utf-8  设置区域语言

  重启生效

centos时区设置

命令 tzselect

    最后需要把 TZ='Asia/Shanghai'; export TZ 写入到 /etc/profile

centos设置与网络时间同步?

1. 安装ntpdate工具

# yum -y install ntp ntpdate

2. 设置系统时间与网络时间同步

# ntpdate cn.pool.ntp.org

3. 将系统时间写入硬件时间

# hwclock --systohc

至此  集群搭建成功。

猜你喜欢

转载自blog.csdn.net/wuhualong1314/article/details/79217361