20210117のLinuxに関する記事は6件です。

AWS Lightsail 入門4 基本設定(CentOS 7)

本記事の内容

  • Lightsailインスタンス(CentOS 7)に対して、OSの基本設定を行う。

前提条件

  • Lightsailインスタンス(CentOS 7)を作成済み。

※他のOS・バージョンでは、コマンドが異なる場合があります。

AWS Lightsail 入門1 インスタンス作成

作業の進め方

ブラウザ版ターミナルか、SSHクライアントでコマンドを入力していく。

次の例では、コマンドcat /etc/redhat-releaseを入力し、OSのバージョンを確認している。

$ cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)

※入力するコマンドには、プロンプト$を含めない。

管理者(root)への切替

本記事で入力するコマンドは、管理者権限が必要なものが多い。
最初にrootに切り替えておく。(末尾のハイフンを忘れずに)

$ sudo su -

管理者権限が必要なコマンドは、プロンプトを#で表記する。

スワップ領域の追加

Lightsailの最安プラン(3.5ドル)はメモリが512MBと少ない。
メモリが不足してもプログラムを実行できるよう、スワップ領域を追加する。

※SSDをメモリの代わりに使うので、速度的には遅くなる。
本設定はメモリが一時的に不足したときのためのエラー防止策で、日常的に不足するならメモリ量が十分な上位プランを選択した方が良い。

スワップ領域の確認(追加前)

$ free -h
              total        used        free      shared  buff/cache   available
Mem:           485M         98M        260M        8.4M        126M        365M
Swap:            0B          0B          0B

Swapの[total]が0Bとなっており、スワップ領域が割り当てられていない。

スワップファイルの作成・有効化

ディスク上に1GBのスワップファイルを作成し、有効化する。
※複数のコマンドを1行にまとめているので、コピー漏れに注意。

# dd if=/dev/zero of=/swapfile bs=1M count=1024 && chmod 600 /swapfile && mkswap /swapfile && swapon /swapfile

1GB以外で作成する場合はcount=nを変更する。例えばcount=2048では、2GBになる。

※スワップのサイズを増やせばメモリ不足のリスクは減るが、ファイル保存先として使えるディスク容量は少なくなる。
Lightsail最安プランのディスクは20GBなので、バランスを考えて設定する。

スワップ領域の確認(追加後)

$ free -h
              total        used        free      shared  buff/cache   available
Mem:           485M         96M        6.0M        8.4M        382M        367M
Swap:          1.0G          0B        1.0G

OS起動時の自動マウント設定

OS起動時、自動的にスワップ領域が有効化されるようにする。

# echo "/swapfile swap swap defaults 0 0" >> /etc/fstab

パッケージの更新

導入済みのパッケージを更新する。
内容を確認しながら進める場合は、オプション-yを外す。

# yum -y update

最後に「Complete!」と出力されれば更新完了。
念のため、更新可能なパッケージが残っていないか確認する。

$ yum check-update
Loaded plugins: fastestmirror
Determining fastest mirrors
 * base: d36uatko69830t.cloudfront.net
 * extras: d36uatko69830t.cloudfront.net
 * updates: d36uatko69830t.cloudfront.net

OSの再起動

パッケージの更新を確実に反映するため、Lightsail管理画面よりインスタンスを再起動する。

aws-lightsail-04-001.png

コマンドsudo rebootで再起動しても問題なかったが、EC2ではOSコマンド以外の方法が推奨されている。

インスタンスからオペレーティングシステムの再起動コマンドを実行する代わりに、Amazon EC2 コンソール、コマンドラインツール、または Amazon EC2 API を使用してインスタンスを再起動することをお勧めします。Amazon EC2 コンソール、コマンドラインツール、または Amazon EC2 API を使用してインスタンスを再起動する場合、インスタンスが数分以内に完全にシャットダウンしないと、ハードリブートが実行されます。

インスタンスの再起動 - Amazon Elastic Compute Cloud

Lightsailは管理画面での手順のみで、コマンドによる再起動については言及されていなかった。
Amazon Lightsail インスタンスの開始、停止、または再起動 | Lightsail ドキュメント

タイムゾーンの変更

デフォルトは時刻がUTCで表示されるため、日本時間に変更する。

時刻の確認(変更前)

$ date
Sun Jan 17 10:42:45 UTC 2021

日本時間に変更

# timedatectl set-timezone Asia/Tokyo

時刻の確認(変更後)

$ date
Sun Jan 17 19:42:52 JST 2021

まとめ

Lightsailの最安プランで、CentOSを使用する場合の基本設定を紹介した。
特に、メモリは512MBと少ないので、スワップ領域の追加は忘れずに行っておきたい。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Ceph(Octopus)の構築(準備編 ソフトウェア)

はじめに

この記事では、タイトルのとおり現時点(2021.01)で最新であるceph(octopus)の構築を目的としています。
また、自分で構築した手順の備忘録を兼ねているので、細かいところで間違いなどあるかもしれません。

基本的には公式のDOCUMENTATIONが必要なことを全て網羅しているので一読しておくことをお勧めします。
Linuxの知識もある程度必要になるので他サイトや書籍などで事前に基本は押さえておくとよいでしょう。

ハードウェアについては前の記事にあります。

関連記事

Ceph(Octopus)の構築(準備編 ハードウェア)
Ceph(Octopus)の構築(準備編 ソフトウェア) この記事
Ceph(Octopus)の構築(設定編 共通)

ソフトウェア(ceph)

構築するcephのバージョンを確認します。
表題にもあるとおり、今回はoctopusを使って構築しようと思います。
構築方法が説明されているブログ等はluminousやnautilusに関してのものが多く、octopusについてはあまりありませんでした。

参考までに、現時点(2021.01)での公式サイトの記述は以下のとおりなので、無理にoctopusを使う必要はないのですが、せっかくなので新しいバージョンを試してみることにしました。
スクリーンショット 2021-01-17 210719.png

ソフトウェア(OS)

業務用途でよく使われているRHELとほぼ同じであるCentOSを採用しました。
当初Releaseバージョンは8を使うつもりでいたのですが、2020.12頃にOS8が廃止されてStreamへ移行するとの発表があり、まさかのOS7よりEnd-of-lifeが早くなってしまうことが判明したため今回はCentOS7を使うことにしました。
今後、cephが公式にCentos Streamへの対応を宣言すればそちらへ移行するのもありかもしれません。

ソフトウェア(ミドルウェア)

cephクラスタを稼働させるために必要となるソフトウェアはいくつもあります。残念ながら、OSとcephのパッケージのみで動かすことはできません。
詳しくは構築編に記載するつもりなので、ここでは簡単に紹介だけしておきます。
・cephadm
  octopusではceph-deployは使えません。その代わりにこのコマンドを使います。

・podmanまたはdocker (今回はdockerを利用)
  octopusから必要になった?
  cephの役割(機能)は各ノード上でdockerのプロセスとして動きます。

・NTP (今回はchronyを利用)
  クラスタを維持するために厳密な同期処理が必要なようです。
  時間がずれていると思わぬエラーとなるようです。

・samba
  構築したcephのファイルシステムを公開するのに使います。
  ブロック/オブジェクトストレージの場合は不要です。

・ceph-common
  cephファイルシステムをマウントするのに使います。
  mount -t cephでマウントできるようになります。

・ssh
  クラスタを構成するノードが多くなると必須だと思います。

・sshpass
  シェルスクリプトで作業を自動化する場合は必要です。

おわりに

今回私が利用したソフトウェアについては以上です。
cephadmを使うあたり、あまり情報がなくて試行錯誤が多かったです。
一応公式のドキュメントに色々書いてあるのですが、日本語が欲しいですね。

cephの構築(共通)については次の記事に投稿しようと思います。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Ceph(Octopus)の構築(準備編 ハードウェア)

はじめに

この記事では、タイトルのとおり現時点(2021.01)で最新であるceph(octopus)の構築を目的としています。
また、自分で構築した手順の備忘録を兼ねているので、細かいところで間違いなどあるかもしれません。

基本的には公式のDOCUMENTATIONが必要なことを全て網羅されているので一読しておくことをお勧めします。
Linuxの知識もある程度必要になるので他サイトや書籍などで事前に基本は押さえておくとよいでしょう。

関連記事

Ceph(Octopus)の構築(準備編 ハードウェア) この記事
Ceph(Octopus)の構築(準備編 ソフトウェア)

ハードウェア(ノード)

まずは、cephクラスタを構成するためのパソコンを用意する必要があります。
組みたいcephクラスタの構成により様々になります。
今回は以下の構成で組みました。

No ホスト メモリ ストレージ
1 ceph-mon01 16GB HDD1(250GB)/HDD2(250GB)
2 ceph-mds01 16GB HDD1(250GB)/HDD2(250GB)
3 ceph-osd01 16GB HDD1(250GB)/HDD2(250GB)
4 ceph-osd02 16GB HDD1(250GB)/HDD2(250GB)
5 ceph-osd03 16GB HDD1(250GB)/HDD2(250GB)
6 ceph-mon11 16GB HDD1(250GB)/HDD2(250GB)
7 ceph-mds11 16GB HDD1(250GB)/HDD2(250GB)
8 ceph-osd11 16GB HDD1(250GB)/HDD2(250GB)
9 ceph-osd12 16GB HDD1(250GB)/HDD2(250GB)
10 ceph-osd13 16GB HDD1(250GB)/HDD2(250GB)
11 ceph-mon21 16GB HDD1(250GB)/HDD2(250GB)
12 ceph-mds21 16GB HDD1(250GB)/HDD2(250GB)
13 ceph-osd21 16GB HDD1(250GB)/HDD2(250GB)
14 ceph-osd22 16GB HDD1(250GB)/HDD2(250GB)
15 ceph-osd23 16GB HDD1(250GB)/HDD2(250GB)

合計15台の構成となっています。
ただ、(意味があるかないかは別として)物理的には最低1台あればdocker等で仮想化してしまえばcephの動作を確認することはできます。
また、原則osdは物理的に1つのデバイスであることが推奨されているので、OS用のデバイスとは別に構成しています。(HDD2が該当)

ハードウェア(ネットワーク)

レプリケーションやcrush map、PG等の設定次第で必要なものは異なってきます。
今回はホストを5台ずつで3グループ作りたかったので以下の構成としています。

No SW種別 ポート速度 用途
1 L3 1Gbps NW全体管理(デフォルトゲートウェイ)
2 L2 100Mbps グループ0用
3 L2 100Mbps グループ1用
4 L2 100Mbps グループ2用

L3はルータでもよいでしょう。L2はSWHUBでもよいでしょう。
各ネットワークの構成に合った機器を選定してください。
クラスタのトラフィックを捌くことができるスペックのものを用意しましょう。
今回調達したパソコンはクライアント向け(サーバ用途ではない)であったためNICを1つしか備えていません。
そのため、表LANと裏LANの区別なく1つのセグメントで構築しました。NICが2枚以上備わっている場合はネットワークを分けることが推奨されています。

おわりに

今回用意したハードウェアについては以上です。
私が準備したハードウェアと全く同じ数を揃える必要があるわけではありません。
最終的にクラスタの容量や冗長性が異なりはしますが、基本的にはどのようなハードウェアであってもcephを構築することはできます。
まずは手持ちのハードウェアで試してみてもいいと思います。

ソフトウェアについては次の記事に投稿しようと思います。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Linuxコマンド

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Linux カーネル 5.10 の不具合で困っている Debian ユーザーへ

Debian testing (bullseye) から5.9.?のカーネルパッケージが消えましたが、私のパナソニックラップトップとラズパイ 4B 8GB モデルではまとみに動きません。amd64 と arm64 アーキテクチャのための.debパッケージを http://153.240.174.134:64193/kernel-deb-5.9/ に置いたので使えるようなら使って下さい。arm64 は Debian が配っている .deb ファイルが手元に無かったので自分でコンパイルしたものが置いてあります。buster-backports のほうには5.9.15のパッケージがあります。

消えてしまった .deb ファイルの置き場を教えて貰いました。以下のところから漁ると所望のファイルがあります。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Macのgrepでgrep: empty (sub)expressionと出る場合の対処法

  • Macを利用して業務や趣味でgrepをかけて検索や集計等を行うことが多い。
  • その際に表題の通りのエラーに遭遇する場合がある。
  • そのため今回は、このエラーが出た時の対処法を2点記録する。

結論

  • 方法としては以下の2点。※先をお急ぎの方はGNU版導入を推奨。

    • brew install grepでGNU版のgrepを導入。
      • ※Mac標準のgrepはBSD版。
    • BSDでも動作するようなgrepの書き方に修正する。
  • ※詳細内容は以下の内容蘭で説明。

環境

  • Mac OS X 10.15.6
  • Darwin 19.6.0

内容

エラー元

  • エラーは以下のような例で起きます。
# 文字列の中から、Hello or World or 空 かを検索する。
echo -e "Hello\nWorld" | grep -E '(Hello|World|)'

# エラー出力
grep: empty (sub)expression

原因

  • 原因として、以下が考えられます。
    • 正規表現での検索で、候補に空を加えている。
    • GNUとBSD版で細かな挙動が違うと耳に入ったことがある。
  • 検証のため、Dockerで用意したGNU grep環境で検証したところ、上記の書き方でも問題は無かった。
  • このことから空選択時の処理で、細かな挙動の違いが原因であるとわかった。

解消

  • 原因特定のため、以下の2点の方法で解消する。
    • GNU版grepをインストールする。
    • BSDでも動作するようなgrepの書き方に修正する
  • 1つ目のGNU版は以下のコマンドをうつだけで完了。
    • brew install grep
  • 2つ目は、以下のように空選択時の処理を変更する。
# 行頭・行末の記号で認識させる。
echo -e "Hello\World" | grep -E '(^|Hello|World)'

# 空選択処理自体を削除。
echo -e "Hello\nWorld" | grep -E '(Hello|World)'
  • ※空選択は、両方のやり方に一長一短があるため、無難の方を選択

まとめ

  • 上記のことから、各OS・ライブラリによっての細かな挙動の違いを認識。
  • そのため可搬性の高い記述を意識。

参考

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む