当时方位: 主页 > Linux学院 > 企业运用 > 运用 > Chef一款主动化配备办理东西的装置与运用

Chef一款主动化配备办理东西的装置与运用

2014-08-01 09:30 来历:IBM 作者:操牡丹 人气指数: 我要谈论
本文将结合实践经历介绍 Chef 环境的装置进程,尤其是在无网络连接情况下的装置;接着描绘 Chef 怎样运用,包含 Chef 自身的运用,和在一个运用中怎样调用 Chef;最终会要点介绍一下 Chef 的反常处理机制。经过本文,读者将了解到 Chef 的作业机制,和怎样运用 Chef 来主动化完结的配备办理作业。Chef 是一款主动化配备办理东西,能够对所办理的方针实施主动化配备,如体系办理,装置软件等。Chef 由三大组件组成:Chef Server、Chef Workstation 和 Chef Node。

Chef Server 是中心,保护了一套配备脚本(Cookbook),与每个被管节点(Chef Node)交互并给出配备指令。

Chef Workstation 供给了咱们与 Chef Server 交互的接口:咱们在 Workstation 上创立界说 Cookbook,并将 Cookbook 上传到 Chef Server 上以保证被管机器能从 Chef Server 上获得最新的配备指令。

Chef Node 是装置了 chef-client 并注册了的被办理节点,可所以物理机或许虚拟机或许其他方针。Chef Node 每次运转 chef-client 时都会从 Chef Server 端获得最新的配备指令(Cookbook)并依照指令配备自己。

一套 Chef 环境包含一个 Chef Server,至少一个 Chef Workstation,以及一到多个 Chef Node。

Chef 环境的装置

Chef 环境的装置进程一般是:先装置 Chef Server,然后配备 Chef Workstation, 最终依据需求在客户端机器上装置 Chef Client 并将其注册成 Chef Node。Chef Server 和 Chef Workstation 能够配在一台机器上,也能够分隔配备。由 Chef Server、Chef Workstation 和多个 Chef Node 组成整个 Chef 环境。

在 Chef 的官网上有具体的 Chef 装置进程阐明,官网供给的是在有外部网络环境的条件下运用网络主动下载和装置软件。本文将依据实践供给一个无外部网络环境下的 Chef 环境装置进程。

介质预备

由于是无外部网络环境的,事先将所需的软件包下载到本地预备好。

从 Chef 官网(http://www.opscode.com/chef/install)下载 Chef Server 和 Chef Client 的装置包以及 Chef Repository 包。

  1. Chef Server 装置包

    翻开http://www.opscode.com/chef/install, 点击"Chef Server"页,挑选适宜的操作体系,版别等,挑选最新的 Chef Server 版别下载。

  2. Chef Client 装置包

    翻开http://www.opscode.com/chef/install, 点击"Chef Client"页,挑选适宜的操作体系,版别等,挑选最新的 Chef Client 版别下载。

  3. 从https://github.com/opscode/chef-repo下载 Chef Repository (chef-repo-master.zip )

由于咱们的操作体系是 64 位的 Redhat 6.4,所以在下载的时分挑选 Enterprise Linux 版别 6,下载下来的 Chef Server 和 Chef Client 装置包都是 RPM 格局,下面的装置就以咱们的环境为例: Chef Server 装置包为 chef-server-11.0.11-1.el6.x86_64.rpm, Chef Client 装置包为 chef-11.10.4-1.el6.x86_64.rpm。

装置 Chef Server

将 Chef Server 的装置包上传到 Chef Server 上。登陆到 Chef Server 上,依照如下进程配备 Chef Server:

  1. 装置 Chef Server 装置包:

    $ rpm -ihv chef-server-11.0.11-1.el6.x86_64.rpm

  2. 配备 Chef Server 11.x: (保证防火墙已封闭)

    $ sudo chef-server-ctl reconfigure

    此指令会创立 Chef Server11.x 的一切必需组件,包含 Erchef、RabbitMQ,、PostgreSQL 等。

  3. 验证的 hostname 是合法的带域名的全称号。

    可运转以下指令将 hostname 加到/etc/hosts 文件中:

    $ echo -e "Chef_Server_IP `hostname` `hostname -s`" | sudo tee -a /etc/hosts

  4. 验证 Chef Server 11.x 是否装置成功。

    可经过两种办法验证:一是在 Chef Server 上运转"$ sudo chef-server-ctl test"指令,此指令会运转 chef-pedant 的测验组件并陈述一切组件正常作业,装置正确。二是直接在浏览器中翻开 Chef Server 的页面: https://Chef_Server_IP,若能呈现登录界面,阐明 Chef Server 现已正确发动。

装置 Chef Workstation

将 Chef Client 装置包和 Chef Repository 上传到 Chef Workstation 上。登陆到 Chef Workstation 上,依照如下进程配备 Chef Workstation:

  1. 装置 Chef Client 装置包:

    # rpm -ihv chef-11.10.4-1.el6.x86_64.rpm

  2. 验证 chef-client 现已装置成功:

    # chef-client -v

    Chef: 11.10.4

  3. 确认一个作为 Chef Repository 的目录,如创立/home/chef 目录(后边将以此为例)。将 Chef Repository 包(chef-repo-master.zip)解压并拷贝到/home/chef 目录,重命名为 chef-repo。
  4. 在/home/chef 下创立.chef 目录。
  5. 将 Chef Server 上的 admin.pem 和 chef-validator.pem 文件(坐落/etc/chef-server) 拷贝到 Chef Repository 的.chef 目录中。
  6. 运转"knife configure --initial" 指令配备 Chef Workstation,示例如下:

    清单 1.配备 Chef Workstation

    [root@chefwst .chef]# knife configure --initial
    Where should I put the config file? (/root/.chef/knife.rb) /home/chef/chef-repo/.chef/knife.rb
    Please enter the chef server URL: [https://localhost:443] https://Chef_Server_IP:443
    Please enter a name for the new user: [root]
    Please enter the existing admin name: [admin]
    Please enter the location of the existing admin's private key: [/etc/chef-server/admin.pem] 
    /home/chef/chef-repo/.chef/admin.pem
    Please enter the validation clientname: [chef-validator]
    Please enter the location of the validation key: [/etc/chef-server/chef-validator.pem] 
    /home/chef/chef-repo/.chef/chef-validator.pem
    Please enter the path to a chef repository (or leave blank): /home/chef/chef-repo
    Creating initial API user...
    Please enter a password for the new user:
    Created user[root]
    Configuration file written to /home/chef/chef-repo/.chef/knife.rb
    [root@chefwst .chef]# ls
    admin.pem  chef-validator.pem  knife.rb  root.pem
  7. 添加环境变量:

    # echo 'export PATH="/opt/chef/embedded/bin:$PATH"' >> ~/.bash_profile && source ~/.bash_profile

  8. 验证 Chef Workstation 是否配备成功:

    一个 Workstation 装置成功的标志是能够运用"Knife"指令与 Server 端进行通讯。运转"knife client list"和"knife user list"进行验证,如清单 2 所示。

    清单 2. 验证 Chef Workstation

    [root@chefwst ~]# cd /home/chef/chef-repo
    [root@chefwst chef-repo]# knife client list
    chef-validator
    chef-webui
    [root@chefwst chef-repo]# knife user list
    admin
    root

装置 Chef Client

将 Chef Client 装置包上传到方针机器上,登陆到此机器上,依照如下进程配备 Chef Client:

  1. 装置 Chef Client 装置包:

    # rpm -ihv chef-11.10.4-1.el6.x86_64.rpm

  2. 验证 chef-client 现已装置成功:

    # chef-client -v

    Chef: 11.10.4

  3. 保证 Chef Client 机器时钟与 Server 的时钟是同步的 (相差少于 15 分钟)
  4. 将装置了 Chef Client 的此机器注册成一个 Chef Node。

在 Chef Workstation 上运转 bootstrap 指令:

# knife bootstrap Chef_Client_IP -x username -P password

bootstrap 指令会查看客户端有没有装置 chef-client 软件,假如没有装置,会从网络上直接下载装置包去装置然后注册;假如现已装置了,则会直接将这个客户端注册成一个 Chef Node。能够接着在 workstation 上履行 node list 指令查看是否多了一个 node:

# knife node list

Chef 的运用

Chef 环境装置完结今后,咱们来看看怎样运用这套环境来进行配备办理。整体来说,Chef 的配备进程是:

  • 在 Workstation 上界说各个 Chef Client 应该怎样配备自己,然后将这些信息上传到 Server 端。
  • 每个 Chef Client 连到 Server 查看怎样配备自己,然后进行自我配备。

在 Workstation 上运用 Cookbook 来界说配备办法。Cookbook 运用 Ruby 脚本界说对 Chef Client 的各种操作,具体 Cookbook 的写法本文不做叙说。一旦 Cookbook 写好之后,就能够重复运用,能够对多个 Chef Client 进行批量配备。一般从创立 Cookbook 到运用 Cookbook 会包含以下几个进程。

  1. 在 Workstation 上创立 Cookbook

    运用 knife 指令能够快速创立一个 Cookbook,如:

    # knife cookbook create db2

  2. 修正 Cookbook

    依据实践需求,修正 Cookbook 里的 Recipe,能够界说各种对的配备操作,如体系办理,装置软件等。

  3. 同步 Cookbook

    将在 Workstation 上写的 Cookbook 同步上传到 Server 上,能够经过 upload 指令完结:

    # knife cookbook upload db2

    此指令将最新的 db2 Cookbook 上传到 Server 端,这样 Client 端就能从 Server 端得到最新的配备指令。

    也能够将一切的 Cookbook 都一同上传到 Server 端:

    # knife cookbook upload --all

  4. 将 Cookbook 添加到要配备的 Node 的 Run List 中,如:

    # knife node run_list add chef-node2 recipe[db2]

    此指令将名为 db2 的 Cookbook 下的默许 Recipe(default.rb)添加到名为 chef-node2 的 Node 的 run_list 中。

    也能够指定 Cookbook 里的某个特定 Recipe 添加,如:

    # knife node run_list add chef-node2 recipe[db2::createdb]

    此指令就将特定的 Recipe(created.rb)添加到 Node 的 Run List 里。能够经过 knife 的 node show 指令查看某个 Node 的具体信息:

    # knife node show chef-node2

    此指令能够看到 Node 的 Run List。

    查看更具体的 Node 信息能够加上-l 参数:

    # knife node show –l chef-node2

  5. 运转 Cookboo

    在 Chef Node 上直接运转chef-client指令,Chef Client 就会从 Server 端下载最新的配备脚本,然后依照配备脚本配备自己(即脚本运转的进程)。

    除掉在 Client 端直接运转chef-client指令,也能够在 Workstation 上运转 knife ssh 指令来到达相同的作用。不同的是,在 Client 端运转 chef-client 指令仅仅对自己一个 Node 进行配备,而在 Workstation 上运转的 knife ssh 指令能够一同对多个 Client 端进行批量配备。

    k

Chef 的 API 调用

在实践运用中,咱们常常需求将 Chef 集成到已有的体系中,这个时分就需求调用 Chef 的 API 来完结。Chef 自身供给了 REST API,能够便利的被调用。仅仅有少量特别功用 REST API 不能完结(如注册 Chef Node),还需求调用 Chef 的指令行。本节先介绍 Chef 的 REST API,然后谈论 Chef 的指令调用。

调用 Chef REST API

Chef 的 REST API 供给了对 Chef 内方针的增修正查操作,如添加、删去一个节点、修正节点特点;查询一个 Cookbook 等。具体的每个 API 能够在 Chef 官网中找到,本章节咱们首要对调用一个 REST API 的具体进程做出阐明。

首要,调用 Chef 的 REST API 之前需求与 Chef Server 端树立认证。

Chef 的认证是依据公私钥的非对称加密机制对用户进行认证。Chef Server 为每个客户端(Workstation,Node 或是其他向 Chef Server 发送恳求的运用)生成一对独立的公钥和私钥,将私钥回来给客户端而自己持有一切客户端的公钥。当持有私钥的客户端发送恳求时,有必要用自己的私钥对恳求内容制造数字签名,并伴随恳求一同发送。Chef Server 用该客户端的公钥对恳求中的数字签名进行验证,假如成功,则以为恳求发送方能够信赖。

这儿的一个特别情况是,当客户端第一次向 Chef Server 发送恳求,即恳求为自己生成公钥私钥对时,没有持有自己的私钥。此刻客户端有必要经过某种办法获取 Chef Server 的默许私钥,一般命名为 Chef-validator.pem。客户端有必要用这一私钥履行上述签名进程,否则将无法树立与 Chef Server 的信赖。

认证进程如下图所示,

图 1 Chef 认证流程

点击这儿给我发音讯

在上图的第四步,数字签名的有必要包含如清单 3 所示的内容。签名的值被放到一个特定的 HTTP Header 'X-Ops-Authorization-N'里发送。这儿 N 表明这个 header 能够呈现屡次,每次呈现时它的值不能超过 60 个字符。一个典型的带有签名的客户端恳求如清单 4 所示。

这儿咱们能够看到,被用作数字签名的特点,在恳求中再次呈现了,包含 HTTP Method,X-Ops-Content-Hash,X-Ops-Timestamp,X-Ops-UserId。而 Hash Path 能够经过核算恳求途径直接得到。这样 Chef Server 就能够用 X-Ops-Sign 中指定的算法,这儿为 SHA1,从头履行哈希进程以验证恳求内容是否被第三方篡改正。

清单 3.Chef 所要求的数字签名内容

Method:HTTP_METHOD
Hashed Path:HASHED_PATH
X-Ops-Content-Hash:HASHED_BODY
X-Ops-Timestamp:TIME
X-Ops-UserId:USERID

清单 4.带有数字签名的恳求典范

GET /organizations/organization_name/nodes HTTP/1.1
  Accept: application/json
  Accept-Encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3
  X-Ops-Sign: algorithm=sha1;version=1.0;
  X-Ops-Userid: user_id
  X-Ops-Timestamp: 2013-03-12T17:13:28Z
  X-Ops-Content-Hash: 2jmj7l5rfasfgSw0ygaVb/vlWAghYkK/YBwk=
  X-Ops-Authorization-1: BE3NnHeh5yFTiT3ifuwLSPCCYasdfXaRN5oZb4c6hbW0aefI
  X-Ops-Authorization-2: sL4j1qtEZzi/2WeF67UuytdsdfgbOc5CjgECQwqrym9gCUON
  X-Ops-Authorization-3: yf0p7PrLRCNasdfaHhQ2LWoE/+kTcu0dkasdfvaTghfCDC57
  X-Ops-Authorization-4: 155i+ZlthfasfhbfrtukusbIUGBKUYFjhbvcds3k0i0gqs+V
  X-Ops-Authorization-5: /sLcR7JjQky7sdafIHNEEBQrISktNCDGfFI9o6hbFIayFBx3
  X-Ops-Authorization-6: nodilAGMb166@haC/fttwlWQ2N1LasdqqGomRedtyhSqXA==
  Host: api.opscode.com:443
  X-Chef-Version: 11.4.0
User-Agent: Chef Knife/11.4.0 (ruby-1.9.2-p320; ohai-6.16.0; x86_64-darwin11.3.0; +http://opscode.com)

这一认证进程相同发作在用户运用 Knife 指令行或许 Chef 办理页面的时分,仅仅这些情况下用户无需关怀认证的细节。

认证完结后,客户端就能够向 Chef Server 恳求对各种 Chef 资源的拜访和办理权。以 Node 这一资源为例,Chef Server 供给了如下 API,别离用于获取一切 Nodes,以及对单个 Node 的创立、获取、修正和删去操作,如表 1 所示。

表 1 Chef Server 供给的 Node 资源 REST API

HTTP METHOD URL REQUEST BODY RESPONSE BODY
GET /nodes   {
"latte": "http://localhost:4000/nodes/latte"
}
POST /nodes {
"name": "latte",
"chef_type": "node",
"json_class": "Chef::Node",
"attributes": {
"hardware_type": "laptop"
},
"overrides": {},
"defaults": {},
"run_list": [ "recipe[unicorn]" ]
}
{
"uri": "http://localhost:4000/nodes/latte"
}
DELETE /nodes/NAME   {
"overrides": {},
"name": "latte",
"chef_type": "node",
"json_class": "Chef::Node",
"attributes": {
"hardware_type": "laptop"
},
"run_list": [
"recipe[apache2]"
],
"defaults": {}
}
GET /nodes/NAME   {
"name": "node_name",
"chef_environment": "_default",
"run_list": [
"recipe[recipe_name]"
]
"json_class": "Chef::Node",
"chef_type": "node",
"automatic": { ... },
"normal": { "tags": [ ] },
"default": { },
"override": { }
}
PUT /nodes/NAME {
"overrides": {},
"name": "latte",
"chef_type": "node",
"json_class": "Chef::Node",
"attributes": {
"hardware_type": "laptop"
},
"run_list": [
'recipe[cookbook_name::recipe_name],
role[role_name]'
],
"defaults": {}
}
Response codes:

200 OK
401 Unauthorized
403 Forbidden
404 Not Found
413 Request entity too large

经过调用 Chef 的 REST API,就能够完结对 Chef 资源的办理。

调用 Chef 指令

为了完结上层体系调用 Chef 的彻底主动化,有时分需求主动化 Chef Client 的配备。将一个非 Chef Client 的一般机器主动注册成 Chef Client,能进步整个体系的主动化程度。Chef 的 REST API 没有供给注册 Chef Client 的功用,而 Chef 的 bootstrap 指令是用来完结这个作业的。所以上层体系需求运用某些机制(如运用 JSch)来在 Chef Workstation 上运转 bootstrap 指令。

一般咱们用如下指令来将一个一般机器注册成 Chef Node:

knife bootstrap client_IP -x username -P password

假如客户端现已装置了 chef-client 软件,此指令会直接将这个客户端注册成一个 Chef Node;假如客户端没有装置 chef-client 软件,此指令会企图从网络上直接下载装置包去装置 chef-client 然后注册。关于没有外部网络连接的客户端,又没有装置 chef-client 软件,咱们能够自界说 bootstrap 所用的模板,让其不从网络下载 chef-client,而直接从本地下载 chef-client 进行装置(条件是配备一个本地如 HTTP ,将 chef-client 软件预先放到上)。假如是默许装置,bootstrap 所用的模板坐落 Workstation 的/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.10.4/lib/chef/knife/bootstrap/目录下。咱们能够在此目录下新建一个模板,命名为 ubuntu12.04-gems-mine,在原有的 ubuntu12.04-gems 模板根底上进行修正,如将装置 chef-client 软件的部分自界说为清单 5 所示。

清单 5.自界说 bootstrap 模板

if [ ! -f /usr/bin/chef-client ]; then
  mkdir -p /tmp/chef-installer
  cd /tmp/chef-installer
  #Copy chef client rpm from HTTP file server
  wget http://http_server_ip/chef/chef-11.12.2-1.el6.x86_64.rpm
  rpm -ivh chef-*.rpm
  rm -rf /tmp/chef-installer
fi

然后咱们运用自界说的模板来运转 bootstrap 指令:

# knife bootstrap client_ip -x username -P password –d ubuntu12.04-gems-mine

这样在 bootstrap 一个一般的没有装置 chef-client 的机器时,Chef 就会从本地的上下载 chef-client 软件(无需外部网络连接),装置在客户机上,然后注册成 Chef Node。

可见,关于没有供给 Chef REST API 的一些特别 Chef 功用,能够经过调用 Chef 的指令行来完结。

Chef 的反常处理机制

Chef Client 运转完相关配备后,运转成果是成功仍是失利,成功或许失利之后怎样处理,这些在集成 Chef 的体系中非常重要。一方面,上层体系需求监控 Chef 的运转状况;别的一方面,关于 Chef 的运转成果,上层体系一般需求做一些处理。为此,Chef 供给了两种类型的 Handler 来别离处理失利和成功的运转成果:Exception Handler 和 Report Handler。Chef 供给一个根底的 chef_handler 资源,咱们能够自界说自己的 Handler 来支撑事务需求。自界说 Handler 需求承继 Chef 供给的根底 Handler 类。下面咱们自界说一个调用某事务 REST API 的 Handler 名为"CallRestAPI":

清单 6.自界说 Chef Handler require 'chef/handler'

require 'net/http'

class CallRestAPI < Chef::Handler
  def initialize(config = {})
    @uri = config[:_uri]
    @username = config[:_username]
    @password = config[:_password]
    @ossreqid = config[:_ossrequestid]
  end  

  def report
    if run_status.success?
      status = "Success"
      extra = ""
    else
      status = "Failed"
      extra = "#{run_status.exception}"
    end
	
uri = @uri
username = @username
password = @password
ossreqid = @ossreqid
	
    begin
	uri = URI(uri)
	http = Net::HTTP.new(uri.host, uri.port)
	url = "/api/auth"
	data = "{\"username\":\"#{username}\",\"password\":\"#{password}\"}"
	header = {'Content-Type' => 'application/json'}
	resp = http.post(url, data, header)
	mytoken = resp.body
	url = "/api/requests?requestId=#{ossreqid}&status=#{status}&message=#{extra}"
	header = {'Cookie' => " mytoken =#{mytoken}"}
	resp = http.send_request('PUT', url, nil, header)		
    rescue => e
      Chef::Log.error("Error call rest api: #{e}")
end

  end

end

在这个自界说的 Handler 中,首要初始化传来的参数。然后依据 Chef 内置的变量(run_status)来判别运转成果是成功仍是失利,假如失利,还能够得到失利的反常音讯。接着就是调用具体事务的 REST API 将此成果回来。关于这样一个自界说的 Handler,咱们能够将其作为一个文件放到一个 Cookbook 的 files 的 default 目录下(假定命名为 chef-handler-mine.rb),然后在此 Cookbook 的 Recipe 中发动这个 Handler。发动示例如下:

清单 7.发动(调用)自界说 Chef Handler include_recipe "chef_handler"

cookbook_file "#{node['chef_handler']['handler_path']}/chef-handler-mine.rb" do
  source "chef-handler-mine.rb"
  mode "0755"
end.run_action(:create)

chef_handler "CallRestAPI " do
  source "#{node['chef_handler']['handler_path']}/chef-handler-mine.rb"
  arguments [
		:_uri	 		=> node['uri'],
		:_username		=> node['username'],
		:_password 		=> node['password'],
		:_ossrequestid		=> node['ossrequest_requestid'],
            ]  
  supports :report => true, :exception => true
  action :enable
end.run_action(:enable)

在清单 7 中,首要将自界说的 Handler 传到 Chef Client 端,然后发动这个 Handler。发动之后,当此 Recipe 运转完结之后,不管成功失利(由于将 report 和 exception 两者都设置成了 true),都会主动调用这个自界说 Handler,将成果回来给上层事务体系。

假如多个 Cookbook 需求相同的 Handler 机制,咱们能够将这样的 Handler 抽取出来写成一个独自的 Cookbook,比方,创立一个名为 myhandler 的 Cookbook,然后将自界说的"CallRestAPI"Hander 放到 files 的 default 目录下,再将清单 7 中的代码写到 myhandler 的 default 的 Recipe 中。在其他需求调用这个 Handler 的 Cookbook 里,只需求加上 include_recipe "myhandler"就能够了。

完毕语

本文介绍了 Chef 环境的装置与运用办法,首要是依据实践经历来介绍的,文中更多的是举例和成功实践。假如要全面具体的了解 Chef 的各个组件怎样合作作业,Chef 供给了哪些内置的资源便利运用者开发 Cookbook,能够参阅 Chef 的官网。在当时大势所趋的云环境中,主动化布置也是其间一个重要作业,关于虚机的布置能够调用相关的虚拟化渠道接口,而关于虚机的配备,以及软件和运用的主动化布置,就能用到 Chef 这个主动化东西了,而现实也证明,Chef 在当下正变得越来越盛行,已被许多企业级云渠道选用,信任它会越来越广泛地运用到主动化领域中。

咱们感兴趣的内容
小同伴独爱的新闻
小同伴还重视了以下信息
小同伴重视的焦点

小同伴都在重视的抢手词

新服 缤纷活动 帆海世纪 芈月传 暗黑道具 萌乐网 苹果发布会 最新谍照 三国令 剑雨江湖 怎样修炼战骑 页游 怎样修炼同伴 木甲国际 仙侠道2 推黑科技 页游形式 武圣试炼场 街机玩法 蓝月传奇 个人BOSS玩法 哥们网 九阴绝学 仗剑出鞘 全新形式 范伟打天下 全新元神玩法 七大神兵简介 新手攻略 跑腿使命 门派五行 城战礼包 页游界 泥石流 傅园慧 经典网页游戏 耐玩 盘点 玉石攻略 提高人物 大黑 实装特点 神兵攻略 闻名莽荒 莽荒纪 手持神兵 土豪梦 万世 开学清单 财富赚不断 天书国际 大黑游戏 资源战场 ppwan 天问 激战 全国大战 雄霸一方 新增宠物技术 肯定小能手 花千骨 三尾章鱼 风色轨道 双枪手 弑之神 缤纷好礼 惊喜六重连 帮会 中秋福利 克己月饼 九阴真经 玩家 五周年留念 留念银币 名动三界 新服资料片 画江山 勇战妖魔 邪恶势力 上古降魔 老司机玩法 坐骑揭秘 黑科技 竞技场攻略 铁血皇城 披风玩法 书剑恩仇录 配备强化攻略 户外BOSS玩法 全网曝光 赤壁传说 半回合制国 ACT 奇珍商城 热血战歌 传奇瑰宝抽奖 翻开办法 门徒 门徒获取玩法 三大萌宠简介