<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>heketi | 伪架构师</title>
    <link>/tags/heketi/</link>
      <atom:link href="/tags/heketi/index.xml" rel="self" type="application/rss+xml" />
    <description>heketi</description>
    <generator>Source Themes Academic (https://sourcethemes.com/academic/)</generator><language>zh</language><lastBuildDate>Wed, 19 Apr 2017 19:05:50 +0800</lastBuildDate>
    <image>
      <url>/img/logo-wide.png</url>
      <title>heketi</title>
      <link>/tags/heketi/</link>
    </image>
    
    <item>
      <title>GlusterFS &#43; Heketi 入门（非容器）</title>
      <link>/post/glusterfs-and-heketi-on-physical-server/</link>
      <pubDate>Wed, 19 Apr 2017 19:05:50 +0800</pubDate>
      <guid>/post/glusterfs-and-heketi-on-physical-server/</guid>
      <description>

&lt;p&gt;GlusterFS 是个开源的分布式文件系统，而 Heketi 在其上提供了 REST 形式的 API，二者协同为 Kubernetes 提供了存储卷的自动供给能力。&lt;/p&gt;

&lt;p&gt;一般对这个系统的介绍，都是基于 Docker 的容器内完成的，个人爱好原因，还不太习惯把这个事情放到集群里面，所以介绍一下用 Yum 方式的安装过程。&lt;/p&gt;

&lt;p&gt;我们使用三台服务器作为存储集群，操作系统为 CentOS 7。另外假设每台 Gluster FS 服务器挂在有名为 /dev/sdc 的裸设备，安装过程需要有互联网连接。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Heketi 服务器：10.211.55.31&lt;/li&gt;
&lt;li&gt;Gluster 服务器：

&lt;ul&gt;
&lt;li&gt;10.211.55.31&lt;/li&gt;
&lt;li&gt;10.211.55.32&lt;/li&gt;
&lt;li&gt;10.211.55.33&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;heketi-的安装和初始设置&#34;&gt;Heketi 的安装和初始设置&lt;/h2&gt;

&lt;p&gt;这个很简单，CentOS 的 EPEL Repository 中就提供了他的安装包。&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;yum install -y heketi heketi-client
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;安装之后，会生成 Heketi 的 Service，建立 /etc/heketi，并在其中生成一个叫 heketi.json 的配置文件。这里提供一个样本：&lt;/p&gt;

&lt;pre&gt;&lt;code class=&#34;language-yaml&#34;&gt;{
  &amp;quot;port&amp;quot;: &amp;quot;7070&amp;quot;,
  &amp;quot;use_auth&amp;quot;: false,
  &amp;quot;jwt&amp;quot;: {
    &amp;quot;admin&amp;quot;: {
      &amp;quot;key&amp;quot;: &amp;quot;My Secret&amp;quot;
    },
    &amp;quot;user&amp;quot;: {
      &amp;quot;key&amp;quot;: &amp;quot;My Secret&amp;quot;
    }
  },
  &amp;quot;glusterfs&amp;quot;: {
    &amp;quot;executor&amp;quot;: &amp;quot;ssh&amp;quot;,
    &amp;quot;sshexec&amp;quot;: {
      &amp;quot;keyfile&amp;quot;: &amp;quot;/etc/heketi/heketi_key&amp;quot;,
      &amp;quot;user&amp;quot;: &amp;quot;root&amp;quot;,
      &amp;quot;port&amp;quot;: &amp;quot;22&amp;quot;,
      &amp;quot;fstab&amp;quot;: &amp;quot;/etc/fstab&amp;quot;
    },
    &amp;quot;executor&amp;quot;: &amp;quot;ssh&amp;quot;,
    &amp;quot;db&amp;quot;: &amp;quot;/var/lib/heketi/heketi.db&amp;quot;,
    &amp;quot;loglevel&amp;quot;: &amp;quot;debug&amp;quot;
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;这个简单的配置文件说明：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;在 7070 提供服务。&lt;/li&gt;
&lt;li&gt;数据库保存在 &lt;code&gt;/var/lib/heketi/heketi.db&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;关闭认证&lt;/li&gt;
&lt;li&gt;利用 ssh 和 GlusterFS 集群成员进行通信&lt;/li&gt;
&lt;li&gt;ssh 证书保存在 /etc/heketi/heketi_key&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;既然提到证书，就用 ssh-keygen 来生成一套：&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ssh-keygen -t rsa -q -f /etc/heketi/heketi_key -N &#39;&#39;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;后面将会使用这套证书来完成对 GlusterFS 的控制。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;注意，这里要保证上面提到的&lt;strong&gt;数据库、配置以及证书文件&lt;/strong&gt;，一定要确认 Heketi 用户有权进行访问。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id=&#34;glusterfs-安装&#34;&gt;GlusterFS 安装&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;启用仓库：&lt;code&gt;yum install -y centos-release-gluster&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;安装软件：&lt;code&gt;yum install -y glusterfs-server&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;启用服务：&lt;code&gt;systemctl enable glusterfs-server&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;启动服务：&lt;code&gt;systemctl start glusterfs-server&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;注意这里要把上个步骤生成的公钥（heketi_key.pub）加入到本机的信任列表中，例如&lt;/p&gt;

&lt;p&gt;&lt;code&gt;cat /tmp/heketi_key.pub &amp;gt;&amp;gt; /root/.ssh/authorized_key&lt;/code&gt;&lt;/p&gt;

&lt;h2 id=&#34;集群初始化&#34;&gt;集群初始化&lt;/h2&gt;

&lt;p&gt;Heketi 对存储的拓扑结构是这样的：&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;- Topology
    - Cluster a
        - Node a1
            - Device a11
            - Device a12
        - Node a2
    - Cluster b
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;所以初始化过程就按照从上到下的方式来进行：&lt;/p&gt;

&lt;h3 id=&#34;建立集群&#34;&gt;建立集群&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;heketi-cli create cluster&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;创建成功后，会显示一个集群 ID。&lt;/p&gt;

&lt;h3 id=&#34;加入-node&#34;&gt;加入 Node&lt;/h3&gt;

&lt;pre&gt;&lt;code&gt;heketi-cli node add --cluster=[clusterid] \
--management-host-name=[node-host] \
--storage-host-name=[node-host] \
--zone=1
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;运行成功会显示新加入的 Node 的 Node ID。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Add Node 过程失败可能需要查看一下防火墙&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3 id=&#34;加入-device&#34;&gt;加入 Device&lt;/h3&gt;

&lt;pre&gt;&lt;code&gt;heketi device add \
--name=/dev/sdc
--host=[host-id]
&lt;/code&gt;&lt;/pre&gt;

&lt;h3 id=&#34;自动一点&#34;&gt;自动一点&lt;/h3&gt;

&lt;p&gt;下面的脚本会把运行参数中指定的第一参数作为主机地址，第二参数作为设备名称加入第一个集群&lt;/p&gt;

&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;#!/bin/sh
export HEKETI_CLI_SERVER=http://127.0.0.1:7070
CLUSTER_ID=`heketi-cli cluster list | tail -n 1 | xargs `
CLUSTER=&amp;quot;--cluster=$CLUSTER_ID&amp;quot;
HOST=&amp;quot;--management-host-name=$1 --storage-host-name=$1&amp;quot;
ZONE=&amp;quot;--zone=1&amp;quot;
NODE_ID=`heketi-cli node add $CLUSTER $HOST $ZONE | grep -v -i &amp;quot;Cluster&amp;quot; | grep -i &amp;quot;id&amp;quot; | cut -d : -f 2 | xargs`
heketi-cli device add --name=$2 --node=$NODE_ID
&lt;/code&gt;&lt;/pre&gt;

&lt;blockquote&gt;
&lt;p&gt;命令需要用 &amp;lsquo;-s&amp;rsquo; 开关指定操作的 Heketi 服务地址。
可以用环境变量来简化一下： export HEKETI_CLI_SERVER=&amp;ldquo;&lt;a href=&#34;http://127.0.0.1:7070&amp;quot;。&#34; target=&#34;_blank&#34;&gt;http://127.0.0.1:7070&amp;quot;。&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id=&#34;topology&#34;&gt;Topology&lt;/h2&gt;

&lt;p&gt;利用 &lt;code&gt;heketi-cli topology info&lt;/code&gt;，会输出当前的集群结构。而且也可以用 JSON 格式导入和导出整个 Topology。下面的例子供参考：&lt;/p&gt;

&lt;pre&gt;&lt;code class=&#34;language-json&#34;&gt;{
    &amp;quot;volumes&amp;quot;: [],
    &amp;quot;nodes&amp;quot;: [{
      &amp;quot;zone&amp;quot;: 1,
      &amp;quot;hostnames&amp;quot;: {
        &amp;quot;manage&amp;quot;: [&amp;quot;10.211.55.19&amp;quot;],
        &amp;quot;storage&amp;quot;: [&amp;quot;10.211.55.19&amp;quot;]
      },
      &amp;quot;cluster&amp;quot;: &amp;quot;f6e6de7dc99ca3ed627e2ab3ae68f9ac&amp;quot;,
      &amp;quot;id&amp;quot;: &amp;quot;95d3d4fec82be4d2a55ae0aa17344af5&amp;quot;,
      &amp;quot;state&amp;quot;: &amp;quot;online&amp;quot;,
      &amp;quot;devices&amp;quot;: [{
        &amp;quot;name&amp;quot;: &amp;quot;/dev/sdc&amp;quot;,
        &amp;quot;storage&amp;quot;: {
          &amp;quot;total&amp;quot;: 33419264,
          &amp;quot;free&amp;quot;: 33419264,
          &amp;quot;used&amp;quot;: 0
        },
        &amp;quot;id&amp;quot;: &amp;quot;e4e1b97d38ed5ae70323458c1b8e57b5&amp;quot;,
        &amp;quot;state&amp;quot;: &amp;quot;online&amp;quot;,
        &amp;quot;bricks&amp;quot;: []
      }]
    }, {
      &amp;quot;zone&amp;quot;: 1,
      &amp;quot;hostnames&amp;quot;: {
        &amp;quot;manage&amp;quot;: [&amp;quot;10.211.55.21&amp;quot;],
        &amp;quot;storage&amp;quot;: [&amp;quot;10.211.55.21&amp;quot;]
      },
      &amp;quot;cluster&amp;quot;: &amp;quot;f6e6de7dc99ca3ed627e2ab3ae68f9ac&amp;quot;,
      &amp;quot;id&amp;quot;: &amp;quot;ab36d04dbface40904a05c33f3fd9800&amp;quot;,
      &amp;quot;state&amp;quot;: &amp;quot;online&amp;quot;,
      &amp;quot;devices&amp;quot;: [{
        &amp;quot;name&amp;quot;: &amp;quot;/dev/sdc&amp;quot;,
        &amp;quot;storage&amp;quot;: {
          &amp;quot;total&amp;quot;: 33419264,
          &amp;quot;free&amp;quot;: 33419264,
          &amp;quot;used&amp;quot;: 0
        },
        &amp;quot;id&amp;quot;: &amp;quot;a33dee6fd8355c6aa9ff5e2783ecef49&amp;quot;,
        &amp;quot;state&amp;quot;: &amp;quot;online&amp;quot;,
        &amp;quot;bricks&amp;quot;: []
      }]
    }, {
      &amp;quot;zone&amp;quot;: 1,
      &amp;quot;hostnames&amp;quot;: {
        &amp;quot;manage&amp;quot;: [&amp;quot;10.211.55.20&amp;quot;],
        &amp;quot;storage&amp;quot;: [&amp;quot;10.211.55.20&amp;quot;]
      },
      &amp;quot;cluster&amp;quot;: &amp;quot;f6e6de7dc99ca3ed627e2ab3ae68f9ac&amp;quot;,
      &amp;quot;id&amp;quot;: &amp;quot;bfd478cb0a0a562386c06967fb2b31bc&amp;quot;,
      &amp;quot;state&amp;quot;: &amp;quot;online&amp;quot;,
      &amp;quot;devices&amp;quot;: [{
        &amp;quot;name&amp;quot;: &amp;quot;/dev/sdc&amp;quot;,
        &amp;quot;storage&amp;quot;: {
          &amp;quot;total&amp;quot;: 33419264,
          &amp;quot;free&amp;quot;: 33419264,
          &amp;quot;used&amp;quot;: 0
        },
        &amp;quot;id&amp;quot;: &amp;quot;24c5a97ccad5b3fc35977bc7419c27ee&amp;quot;,
        &amp;quot;state&amp;quot;: &amp;quot;online&amp;quot;,
        &amp;quot;bricks&amp;quot;: []
      }]
    }],
    &amp;quot;id&amp;quot;: &amp;quot;f6e6de7dc99ca3ed627e2ab3ae68f9ac&amp;quot;
  }]
}
&lt;/code&gt;&lt;/pre&gt;
</description>
    </item>
    
  </channel>
</rss>
