收款专用地址:0x0Dd81eC85CFBdE22cAcd0642BBef35aDA7794303
准备
- 购买一台 8C16G200GB 的服务器
- 操作系统:Ubuntu18.04
- 架构:AMD
- 地区:海外
开始
sudo apt-get update
sudo apt-get install git -y
git clone https://github.com/datumtechs/datum-network-deploy.git
cd datum-network-deploy
git checkout ansible_v0.4.0
mkdir log
sudo apt install -y python python-pip python3 python3-pip
pip install --upgrade setuptools && python -m pip install --upgrade pip
pip install -r ./requirements.txt
ansible-playbook --ask-sudo-pass local_prepare.yml
# 输入sudo密码
sudo adduser datum
# 输入你想要的密码
# 再次输入
chmod u+w /etc/sudoers
vi /etc/sudoers
# i
# 在root下面一行添加 datum ALL=(ALL)ALL
# esc
# :wq
chmod u-w /etc/sudoers
# 数据库安装(新服务器没有数据库)
sudo apt-get install mysql-server mysql-client
mysql -uroot -p
# 无密码,直接回车
grant all privileges on *.* to root@"%"identified by"datum_root"with grant option;
grant all privileges on *.* to datum_admin@"%"identified by"admin_123456"with grant option;
flush privileges;
exit;
service mysql restart
# 修改 inventory.ini 并保存,模板见底部
ansible-playbook --ask-sudo-pass local_prepare.yml
ansible-playbook -i inventory.ini bootstrap.yml
sudo apt-get install unzip
sudo apt-get install libffi-dev
sudo apt-get install python3.6-dev
sudo apt-get install build-essential
ansible-playbook -i inventory.ini deploy.yml
ansible-playbook -i inventory.ini start.yml
- 访问管理后台:xxx.xxx.xxx.xxx:80
- 访问 consul :xxx.xxx.xxx.xxx:8500
inventory.ini 模板【一机多服务】
# 库存文件,主要用来配置主机列表和主机组 (注: 下列IP均需为内网IP)
# 内网IP:xxx.xxx.xxx.xxx
# 外网IP:yyy.yyy.yyy.yyy
# ICE微服务:一个组织有一个Glacier2/IceGrid的via服务
[ice_via]
xxx.xxx.xxx.xxx ansible_ssh_user="${userName}" ansible_ssh_pass="${userPwd}" ansible_sudo_pass="${userPwd}"
# 调度,一个组织有一个调度服务
[carrier]
xxx.xxx.xxx.xxx ansible_ssh_user="${userName}" ansible_ssh_pass="${userPwd}" ansible_sudo_pass="${userPwd}"
# 管理台,一个组织有一个管理台服务
[admin]
xxx.xxx.xxx.xxx ansible_ssh_user="${userName}" ansible_ssh_pass="${userPwd}" ansible_sudo_pass="${userPwd}"
# 资源节点,一个组织可以配置多个资源服务
[data]
xxx.xxx.xxx.xxx ansible_ssh_user="${userName}" ansible_ssh_pass="${userPwd}" ansible_sudo_pass="${userPwd}"
# 计算节点,一个组织可以配置多个计算服务
[compute]
xxx.xxx.xxx.xxx ansible_ssh_user="${userName}" ansible_ssh_pass="${userPwd}" ansible_sudo_pass="${userPwd}"
# 注册中心,一个组织要配置奇数个(1,3,5,等)注册中心,方便 raft 选择leader
[consul]
xxx.xxx.xxx.xxx ansible_ssh_user="${userName}" ansible_ssh_pass="${userPwd}" ansible_sudo_pass="${userPwd}"
## Global variables
[all:vars]
# 集群的名称,自定义即可
cluster_name = demo-cluster
# 部署服务开关
enable_deploy_ice_via = True
enable_deploy_carrier = True
enable_deploy_admin = True
enable_deploy_data = True
enable_deploy_compute = True
enable_deploy_consul = True
# consul 服务的端口,根据自己的部署情况进行设置,数量要和 consul 组里面的 ip 数量一致。
consul_server_port = [8200]
consul_serf_lan_port = [8300]
consul_serf_wan_port = [8400]
consul_http_port = [8500]
consul_dns_port = [8600]
# admin web 服务证书相关配置信息
enable_tls = False # 是否启用 https,启用设置为 True,需要配置证书和相应的域名,证书里面的密码套件等,不启用设置为 False,忽略下面的配置。
admin_server_name = datum-admin.demo.network
admin_ssl_protocols = "TLSv1 TLSv1.1 TLSv1.2"
admin_ssl_ciphers = ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4
# admin web 的 mysql 相关用户名密码
mysql_root_password = datum_root
amin_user = datum_admin
admin_password = admin_123456
# admin web 服务端口号
admin_web_port = 9090
# carrier 外网 ip 地址
carrier_external_ip = yyy.yyy.yyy.yyy
# carrier 服务端口号
carrier_pprof_port = 10032
carrier_rpc_port = 10033
carrier_grpc_gateway_port = 10034
carrier_p2p_udp_port = 10035
carrier_p2p_tcp_port = 10036
# via 外网 ip 地址
ice_via_external_ip = yyy.yyy.yyy.yyy
# via 服务端口号
ice_glacier2_port = 10037 # Glacier2服务端口号
ice_grid_port = 10038 # IceGrid 服务端口号
# ice传输协议:tcp(默认)/ssl
ice_protocol = tcp
# data 端口号,根据自己的部署情况进行设置,数量要和 data 组里面的 ip 数量一致。
data_port = [8700]
# compute 端口号,根据自己的部署情况进行设置,数量要和 compute 组里面的 ip 数量一致。
compute_port = [8800]
# whl文件
latticex_rosetta = latticex_rosetta-1.0.0-cp37-cp37m-linux_x86_64.whl
latticex_psi = latticex_psi-1.0.0-cp37-cp37m-linux_x86_64.whl
fighter_dcv = fighter_dcv-0.9.1-py3-none-any.whl
channel_sdk = datum_network_channel_sdk-2.0.4-cp37-cp37m-linux_x86_64.whl
# python proxy ,the purpose of this proxy is to speed up the download of third-party packages
python_proxy = -i https://pypi.douban.com/simple/
玄学问题之 FQA
\color{green}{问题已解决!}
-
@浅浅 提问:我是一台机器多个服务,然后只注册一个consul,因为内网不会访问支持Javascript的consul网页,所以inventory.ini变更到外部IP的时候,执行bootstrap.yml会报错
如果所有的ip都使用内网,或者都使用外网,则不会报错。
-
@工作人员 解答:
1.执行bootstrap.yml的时候,如果各个服务都是部署在同一台机器,则需要IP统一,不能公内网混用
2.然后deploy.yml的时候,公内网可混用
3.执行start.yml的时候,公内网可混用
可以指定公网IP的大前提是公网IP必须是绑定在对应云主机的网卡上,否则不能将服务直接绑定到公网IP @浅浅
\color{green}{问题已解决!}
-
@浅浅 提问:执行任务,它说我 task was executed failed EOF, cannot call token20Pay to prepay datatoken on beginConsumeByDataToken(), failed to call Token20Pay.Prepay() with sender1
-
@工作人员 解答:sender1组织的钱包里面没充钱。
-
思考:氪金使我变强=。=
\color{green}{问题已解决!}
-
@浅浅 提问:机构头像获取不到
-
@工作人员 解答:我们https 访问http 内容会自动升级成https访问,前面你提供的那张图片不支持https协议不显示,所以加载失败。建议换一张图片试试。
\color{green}{问题已解决!}
-
@浅浅 提问:admin端出现 “内部错误” 怎么办?
-
@工作人员 解答:请先备份admin 日志,我们晚点查看。
-
@工作人员 追答:网络环境可能有问题,清除浏览器缓存后再次尝试。
\color{green}{问题已解决!}
-
@浅浅 提问:0209006 create channel failed. Create the client node:compute2 failed, reason:src/Ice/Network.cpp:2714: ::Ice::ConnectionRefusedException: connection refused: Connection refused, create io channel failed! 怎么解决?
-
@工作人员 解答:请先备份fighter 日志,我们晚点查看。
-
@工作人员 追答:请确认10037端口可以ping通,这是因为ice_via端口拒绝连接导致的。
在 @工作人员 的热心帮助下,这个邪门问题解决了。
解决方案:修改 inventory.ini 文件,将所有内网IP更换为公网IP
# 库存文件,主要用来配置主机列表和主机组 (注: 下列IP均需为内网IP)
# 内网IP:xxx.xxx.xxx.xxx
# 外网IP:yyy.yyy.yyy.yyy
# ICE微服务:一个组织有一个Glacier2/IceGrid的via服务
[ice_via]
yyy.yyy.yyy.yyy ansible_ssh_user="${userName}" ansible_ssh_pass="${userPwd}" ansible_sudo_pass="${userPwd}"
# 调度,一个组织有一个调度服务
[carrier]
yyy.yyy.yyy.yyy ansible_ssh_user="${userName}" ansible_ssh_pass="${userPwd}" ansible_sudo_pass="${userPwd}"
# 管理台,一个组织有一个管理台服务
[admin]
yyy.yyy.yyy.yyy ansible_ssh_user="${userName}" ansible_ssh_pass="${userPwd}" ansible_sudo_pass="${userPwd}"
# 资源节点,一个组织可以配置多个资源服务
[data]
yyy.yyy.yyy.yyy ansible_ssh_user="${userName}" ansible_ssh_pass="${userPwd}" ansible_sudo_pass="${userPwd}"
# 计算节点,一个组织可以配置多个计算服务
[compute]
yyy.yyy.yyy.yyy ansible_ssh_user="${userName}" ansible_ssh_pass="${userPwd}" ansible_sudo_pass="${userPwd}"
# 注册中心,一个组织要配置奇数个(1,3,5,等)注册中心,方便 raft 选择leader
[consul]
yyy.yyy.yyy.yyy ansible_ssh_user="${userName}" ansible_ssh_pass="${userPwd}" ansible_sudo_pass="${userPwd}"
## Global variables
[all:vars]
# 集群的名称,自定义即可
cluster_name = demo-cluster
# 部署服务开关
enable_deploy_ice_via = True
enable_deploy_carrier = True
enable_deploy_admin = True
enable_deploy_data = True
enable_deploy_compute = True
enable_deploy_consul = True
# consul 服务的端口,根据自己的部署情况进行设置,数量要和 consul 组里面的 ip 数量一致。
consul_server_port = [8200]
consul_serf_lan_port = [8300]
consul_serf_wan_port = [8400]
consul_http_port = [8500]
consul_dns_port = [8600]
# admin web 服务证书相关配置信息
enable_tls = False # 是否启用 https,启用设置为 True,需要配置证书和相应的域名,证书里面的密码套件等,不启用设置为 False,忽略下面的配置。
admin_server_name = datum-admin.demo.network
admin_ssl_protocols = "TLSv1 TLSv1.1 TLSv1.2"
admin_ssl_ciphers = ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4
# admin web 的 mysql 相关用户名密码
mysql_root_password = datum_root
amin_user = datum_admin
admin_password = admin_123456
# admin web 服务端口号
admin_web_port = 9090
# carrier 外网 ip 地址
carrier_external_ip = yyy.yyy.yyy.yyy
# carrier 服务端口号
carrier_pprof_port = 10032
carrier_rpc_port = 10033
carrier_grpc_gateway_port = 10034
carrier_p2p_udp_port = 10035
carrier_p2p_tcp_port = 10036
# via 外网 ip 地址
ice_via_external_ip = yyy.yyy.yyy.yyy
# via 服务端口号
ice_glacier2_port = 10037 # Glacier2服务端口号
ice_grid_port = 10038 # IceGrid 服务端口号
# ice传输协议:tcp(默认)/ssl
ice_protocol = tcp
# data 端口号,根据自己的部署情况进行设置,数量要和 data 组里面的 ip 数量一致。
data_port = [8700]
# compute 端口号,根据自己的部署情况进行设置,数量要和 compute 组里面的 ip 数量一致。
compute_port = [8800]
# whl文件
latticex_rosetta = latticex_rosetta-1.0.0-cp37-cp37m-linux_x86_64.whl
latticex_psi = latticex_psi-1.0.0-cp37-cp37m-linux_x86_64.whl
fighter_dcv = fighter_dcv-0.9.1-py3-none-any.whl
channel_sdk = datum_network_channel_sdk-2.0.4-cp37-cp37m-linux_x86_64.whl
# python proxy ,the purpose of this proxy is to speed up the download of third-party packages
python_proxy = -i https://pypi.douban.com/simple/
建议
管理员端能够对 \color{orange}{计算中} 的任务且该任务的执行时长超出预期,并在其他参与方的详情中处于 \color{red}{失败} 状态,执行强制关闭以保证其他功能的有效使用。
例如任务26号已经计算超过12个小时,且该任务的运行阈值并没有设置超过120分钟,因此这个任务早就因为运行超时失败了,但是在这一方中显示 \color{orange}{计算中} 。这就导致该管理员想要注销网络身份,但却被限制的情况发生。
如果强制注销:
ansible-playbook -i inventory.ini stop.yml
ansible-playbook -i inventory.ini cleanup.yml
就会导致官网出现明明这个节点已经嗝屁,却又分外靠前的情况,下图框选的两个节点已经 cleanup
但没有注销网络身份,于是永久地留在节点行列。