20210908のLinuxに関する記事は10件です。

Windows10でLinuxを使用する

はじめに Linuxの資格(LPIC1)を取得するにあたり、Linuxを触りながら勉強したい。 LinuxはOSS(オープンソースソフトウェア)なので無料入手可能だ。 しかし、ハードを買うお金がないため、現在使用しているWindows10にインストールする。 今回はVirtual Boxを使用してLinuxを導入していく。 手順は「■ LPI Linux Essentials (エッセンシャル) 資格取得コース (LPI公認)」を参考にします。 詳しく知りたい方は「Linux OS インストール」をぜひ見てください。 無料でプレビュー可!! 手順がややこしかったので、備忘録的に載せていく。 Virtual Boxとは Virtualbox(バーチャルボックス)は、使用しているPCに仮想環境を構築して、他のOSをインストールすることができる仮想化ソフトです。 Virtualboxを導入することにより、たとえばMac環境でWindowsやLinuxなど複数のOSを切り替えて使用することが可能になります。 参考より。 しかもディスクいらず 必要なものはPCだけ 環境 エディション Windows 10 Pro バージョン 21H1 インストール日 ‎2021/‎07/‎24 OS ビルド 19043.1165 エクスペリエンス Windows Feature Experience Pack 120.2212.3530.0 手順の概要 Virtual Boxをダウンロード、インストール Cent OS をダウンロード Virtual Box内のハードを設定 Cent OS をVirtual Boxにインストール 1.Virtual Boxのダウンロード、インストール Virtual Boxのページに行きwindows hostを押す デフォルト設定のままで「next」を押し続ける 2.Cent OSのダウンロード Cent OSダウンロードページでDVDがついているものをダウンロード(ここでbootをダウンロードして一敗泣) 注意 インストールはしないでください。 3. Verual Boxのハードを設定 新規をクリック 名前を入力(今回はCentOS) メモリーサイズ指定(僕は1GB) 仮想ハードディスクを作成。ダウンロードしたCentOSより大きく(僕は16GB) VDIを選択 固定サイズを選択、ダウンロードしたCentOSより大きく(僕は16GB) PCのスペックやLinuxの使用用途によってご自由調整してください 4.CentOSのインストール 作成したモノ(僕の場合CentOS)の設定をクリック ストレージタブ>コントローラ:IDE>光学ドライブの追加>ダウンロードしたCentOSを選択 ネットワークタブ>割り当て>ブリッジアダプターをクリック 最初の画面に戻り、起動をクリック。下記のいつもの画面がでたら、インストール完了 5.CentOSの各種設定 上記画像におけるインストール先(なぞに右に、見切れる)、「ネットワーク」、「ソフトウェアの選択」、「時刻と日付」、「rootユーザー」と「パスワード設定」を行う インストール先はDiskを選択して完了 ネットワークはホスト名を変更して完了(僕の場合はyokohama) ソフトウェアの選択はすべてチェックをいれる 時刻と日付は東京 rootユーザーとパスワードを設定して完了 右下のCentOSのインストールをクリック 5.で設定したログインユーザーとパスワードを入力して完了!!! 意外と長かった~~~ ※Vertual Boxを抜けるためには右のctrlを押したら抜けれます
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

パケットの気持ちになってみよう PART2

PART2 Ethernetパケットを送ってみよう なにやらネットワークを理解するためにパケットの気持ちになって考えるのが流行っているらしいので、実際にやってみたいと思います。PART2ではRAW Etherソケットを使って任意のパケットを送信し、それがネットワーク上に流れていることを確認することでパケットの操作のしかた学んでいきます。    日経XTECH 『“パケットの気持ち”になってネットワークを理解する』    AWS 『ネットワークの勉強方法を聞いてみた。』 1 ツールの概要 機能概要: 2本のNICが同一LANに接続されているかどうかを確認するためパケットを送受信します 動作環境: Linux CentOS8 開発言語: C言語 関連技術: RAW Etherソケット 2 処理概要 サンプルコード sndrcvpkt を用いて処理概要を説明します。 2.1 ソケットの初期化 socket関数で送信用および受信用のRAWソケットを取得し、各々bind関数を用いて指定したNICに接続します。    sndrcvpkt.c: main() 2.2 パケットの送信 パケットを作成してwrite関数で送信用NICからパケットを送信します。 Ethenetの場合、ethhdr 構造体を送信バッファの0バイト目にマッピングし、宛先MACアドレス[6Byte]、送信元MACアドレス[6Byte]、フレームタイプ[2Byte]を設定することで送信パケットのヘッダ部分が生成されます。    sndrcvpkt.c: sndrcv_pkt() 2.3 パケットの受信 recvfrom関数で受信用NICでパケットを受信します。 受信したパケットは送信したパケットと内容が同じになっているはずです。    sndrcvpkt.c: sndrcv_pkt() 3 ツールの実行 3.1 事前準備 2本の同一LANに接続されたNICが用意できない場合は、検証用の veth pair を作成します。 $ sudo ip link add veth0-send type veth peer name veth0-recv $ ip link show veth0-send 25: veth0-send@veth0-recv: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000 link/ether 86:03:bb:2c:15:59 brd ff:ff:ff:ff:ff:ff $ sudo ip link set veth0-recv up $ sudo ip link set veth0-send up 3.2 ツールの起動 以下の書式でツールをルート権限で実行します。 $ ./sndrcvpkt {送信NIC名} {受信NIC名} 3.3 実行結果 パケットの送信と受信が成功すること、送信データと受信データが同じであることを確認します。 $ sudo ./sndrcvpkt veth0-send veth0-recv write(3, 64) = 64 b612a50a5a46 8603bb2c1559 2020 0101 recvmsg(4) = 64 86:3:bb:2c:15:59 -> b6:12:a5:a:5a:46 type = 2020 b612a50a5a46 8603bb2c1559 2020 0101 write(3, 64) = 64 b612a50a5a46 8603bb2c1559 2020 0101 recvmsg(4) = 64 86:3:bb:2c:15:59 -> b6:12:a5:a:5a:46 type = 2020 b612a50a5a46 8603bb2c1559 2020 0101 write(3, 64) = 64 b612a50a5a46 8603bb2c1559 2020 0101 recvmsg(4) = 64 86:3:bb:2c:15:59 -> b6:12:a5:a:5a:46 type = 2020 b612a50a5a46 8603bb2c1559 2020 0101 ^C 4 ツールのカスタマイズ サンプルではでたらめなダミーパケットを送信していますが、ちゃんとしたIPパケットを作成して送信してみる、宛先をブロードキャストにしてみるなどして色々と試してみましょう。自分で手を動かして様々なパケットを作り出せるようになれば、自ずとパケットの気持ちもわかるようになるというものです。(PART3に続く)
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

パケットの気持ちになってみよう PART1

PART1 パケットの中身をのぞいてみよう なにやらネットワークを理解するためにパケットの気持ちになって考えるのが流行っているらしいので、実際にやってみたいと思います。PART1ではパケットキャプチャを行うツールを自作し、サーバ上を流れるパケットをのぞいてみることでパケットの中身や解析方法をマスターするところから始めたいと思います。    日経XTECH 『“パケットの気持ち”になってネットワークを理解する』    AWS 『ネットワークの勉強方法を聞いてみた。』 1 ツールの概要  機能概要: 指定したNICで送受信されるパケットを補足してパケットの概要を表示します  動作環境: Linux CentOS8  開発言語: C言語  関連技術: RAW Etherソケット 2 処理概要 サンプルコード simple_pcap を用いて処理概要を説明します。 2.1 ソケットの初期化  socket関数でRAWソケットを取得し、bind関数を用いて指定したNICに接続します。    pcap.c: init_socket() 2.2 パケットの受信  NICで受信したパケットをrecvmsg関数で一個ずつ読み取ります。   pcap.c: receive_packet() 2.3 パケットの解析  受信したパケットをイーサネット、IP、TCP/UDPといった順にヘッダを解析していきます。  OSのヘッダファイルには各種プロトコルのヘッダ情報に対応する構造体が定義されています。  それらと受信データを対応付けることでヘッダ情報の内容を読み取っていきます。   pcap.c: print_packet()  例えば、TCPでは以下のように受信データを対応付けることで内容の読み取りが容易になります。   受信データの 0~13バイト → ethhdr構造体にマッピング   受信データの14~33バイト → iphdr構造体にマッピング   受信データの34~53バイト → tcphdr構造体にマッピング 3 ツールの実行 3.1 ツールの起動 以下の書式でツールをルート権限で実行します。 ./pcap {NIC名} 3.2 実行結果 ping等で通信を行います。 $ ping 192.168.10.1 PING 192.168.10.1 (192.168.10.1) 56(84) bytes of data. 64 bytes from 192.168.10.1: icmp_seq=1 ttl=64 time=1.17 ms 64 bytes from 192.168.10.1: icmp_seq=2 ttl=64 time=0.699 ms 64 bytes from 192.168.10.1: icmp_seq=3 ttl=64 time=0.723 ms 64 bytes from 192.168.10.1: icmp_seq=4 ttl=64 time=0.676 ms ^C --- 192.168.10.1 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3086ms rtt min/avg/max/mdev = 0.676/0.816/1.166/0.202 ms 受信したパケットの概要が表示されることを確認します。 $ sudo ./pcap enp0s25 ARP REQ(1) b8:ae:ed:72:34:c8/192.168.10.61 -> 0:0:0:0:0:0/192.168.10.1 ARP REP(2) 10:66:82:39:1a:30/192.168.10.1 -> b8:ae:ed:72:34:c8/192.168.10.61 192.168.10.61 -> 192.168.10.1 type = 0001 192.168.10.1 -> 192.168.10.61 type = 0001 192.168.10.61 -> 192.168.10.1 type = 0001 192.168.10.1 -> 192.168.10.61 type = 0001 192.168.10.61 -> 192.168.10.1 type = 0001 192.168.10.1 -> 192.168.10.61 type = 0001 192.168.10.61 -> 192.168.10.1 type = 0001 192.168.10.1 -> 192.168.10.61 type = 0001 ARP REQ(1) 10:66:82:39:1a:30/192.168.10.1 -> 0:0:0:0:0:0/192.168.10.61 ARP REP(2) b8:ae:ed:72:34:c8/192.168.10.61 -> 10:66:82:39:1a:30/192.168.10.1 ^C 4 ツールのカスタマイズ パケットキャプチャができることが確認できたら、表示内容をカスタマイズしたり対応するパケットの種類を増やしたりして、いろいろ試してみましょう。そうすれば、パケットの気持ちが少しはわかるようになるかもしれません。(PART2に続く)
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【備忘録】パーミッションとは?

はじめに  ITの勉強をしていると、知らない単語が次から次へと出てきます。今回はそのうちの一つ、パーミッションについて勉強してきましたのでそれについてまとめていきたいと思います。  それでは初めていきます! パーミッションとは  パーミッションとは、ファイルやディレクトリに対するアクセス権のことです。ファイル単位で与えられており、主に3つの権限に分けられます。 ①read(読み込み) ②write(書き込み) ③execute(実行する) この3つになります。順番に見ていきましょう。 read  なんとなく分かると思いますが、ファイルの中身を見るために必要な権限がreadになります。これが設定されていると読み込み可能、されていないと不可ということになります。 write  こちらもなんとなく分かるかと思いますが、writeはファイルの中身を書き換えるのに必要な権限になります。変更だけでなく、削除や保存(これらも厳密には変更と呼べますが)といった操作を行えるようになります。 execute  executeは実行権限のことを言います。ファイルを実行するのに必要な権限のことを言います。スクリプトが書かれたファイルを指定し、プログラムを実行させることが出来ます。 表記方法  これらの権限は下記のように表記されています。  -rwxr--r--  呪文のようですね。これは実は4つに区切ることが出来ます。区切ってみると下記のようになります。  ①- | ②rwx | ③r-- | ④r--  一つずつ順に見ていくと、①はファイルorディレクトリを表しています。このパーミッションが与えられてるのがファイルであれば-、ディレクトリであればdと表記されます。  次に②の部分ですが、こちらはファイル・ディレクトリの所有者の権限となります。③は所有者と同じグループに属しているユーザーの権限、④はそれ以外の他人の権限を表しています。  こういった表記は、「744」といった数字で表されます。権限を2進数で表すとき、許可されているものは1、されていないものは0で表されます。つまり上記のパーミッションは111 100 100と表されます。これを8進数で表したものが「744」といった数字になります。  逆に言うと、「このファイルの権限は755にしよう」と言われると、-rwxr-xr-xとなります。とはいえ、いちいち2進数を8進数に直すのは結構大変だと思います。その場合は、読み:書き:実行=4:2:1というふうに覚えましょう。例えばrwxであれば4+2+1で7、r-xであれば4+1で5、という感じで、簡単に導き出すことが出来ます。 まとめ  パーミッションとは、ファイルやディレクトリの、読み・書き・実行という3つの権限を表したものでした。それぞれrwxというアルファベットで表され、ユーザー・グループ・その他の3つに分けて表記されます。また、これらを8進数で表すこともあります。なかなか馴染みのない表現が多く難しいですが、慣れるまで頑張りましょう!
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

読み物としてのロケールの設定

ロケール関連のファイルは、/var/lib/locales/supported.dに保存されています。ls -l /var/lib/locales/supported.dコマンドで、現在の状況を確認してみよう。 デフォルトでは、enファイルが1個あるだけ。enはEnglishのこと。日本語のロケールファイルが存在していないため、ロケールの日本語パッケージを別途インストールする必要がある。 日本語パッケージはこのコマンドでインストールする。apt-get update && sudo apt install language-pack-ja-base language-pack-ja。インストールした後、再度、/var/lib/locales/supported.dの中身をみると、jaファイルが作成されていることが確認できる。 catで/var/lib/locales/supported.d/jaファイルの中身をみてみると、ja_JP.UTF-8 UTF-8が記載されている。 設定可能なロケールの一覧を表示するコマンドがlocale -a。設定可能なとは、インストール済になっているロケール関連のパッケージ一覧のこと。一覧の中には、大きく、C、en、jaの3種類が表示される。enの中にはたくさんの種類がある。en_USがアメリカ英語で、en_INがイングランド英語で、en_CAがカナダ英語という具合なのだろう。日本語を話す国は日本1国しかないので、ja_JP1種類しか存在しないということになる。 lacale -aでja_JPが表示されるのは、先ほど、日本語パッケージをインストールしたから表示されるようになったということだろう。 そして、現在有効になっているロケールを表示するコマンドがlocaleコマンド。環境変数で設定されている内容がそのまま表示されるのだが、デフォルトでは殆どが、en_US.UTF-8になっている。これを日本語に設定し直す。 Ubuntuを管理しているChef社はイギリスの会社なので、en_INがデフォルトとなっていても不思議ではないのだが、アメリカ英語が世界の標準ということなのだろう。 ロケートを変更するには、LANGの環境変数を日本語にすればいいだけ。export LANG=ja_JP.UTF-8コマンドをうつ。その後、localeコマンドをうつと、すべての変数が、ja_JP.UTF-8に変換されている。LANGと似た環境変数に、LANGUAGEというのがあるが、これだけはen_USのままになっている。日本語では利用されるケースはないらしく、無視しておいていいでしょう。 これで日本語表示ができるようになりました。試しに、dateコマンドをうつと、日本語表示の確認ができます。localeコマンドはロケートの変数一覧を表示するだけのコマンドのようです。ロケールの確認をするには、locateコマンドを使わずに、echo $LANGとやっても同じことではある。 そして最後に、export LANG=ja_JP.UTF-8を~/.profileに追加しておこう。 localeコマンドとよく似たコマンドにlocalectlコマンドがある。localeコマンドが画面表示だけの設定なのに対し、localectlコマンドは、システムロケールやキーボードのロケールを設定するためのコマンドになる。設定する箇所が別のようです。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

ubuntu20.04 ISOファイルの取得 DVD焼き付け

ubuntu20.04(server) 推奨スペックを確認する Canonical Ubuntu URL Doc https://www.ubuntulinux.jp/home PDFs and Previous Releases Below are links to the previous Ubuntu Server release server guides as well as an offline copy of the current version of this site: Ubuntu 20.04 LTS (Focal Fossa): PDF f-ubuntu-server-guide.pdf URL PDF https://assets.ubuntu.com/v1/f954307f-ubuntu-server-guide.pdf System requirements (中略) The recommended system requirements are: • CPU: 1 gigahertz or better • RAM: 1 gigabyte or more • Disk: a minimum of 2.5 gigabytes Server and Desktop Difference ISOファイル ダウンロード UbuntuJapanの公式サイトからISOファイルをダウンロードする。 UbuntuJapan URL ホーム画面 https://www.ubuntulinux.jp/home ISOダウンロード画面 https://jp.ubuntu.com/download DVDへライティング ダウンロードしたISOファイルを右クリック 「ディスクに書き込む」がない場合は、適当なフォルダにファイルを入れツールバーから「共有」>「ディスクに書き込む」を押下する。 「ディスクのタイトル」を入力 「CD/DVDプレーヤーで使用する」を選択し「次へ」を押下する。 ツールバーの「ドライブツール」>「書き込みを完了する」を押下する。 「ディスクのタイトル」を確認し、「次へ」を押下すると、書き込みが開始される。 書き込みが完了したら「完了」ボタンを押下して終了。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Linux ubuntu20.04 ISOファイルをDVD焼き付け

推奨スペックを確認 ISOファイルをダウンロードしてDVDに書き込む。 ライブUSB/DVDの準備 VirtualBoxにインストールするならダウンロードしたISOファイルがそのまま使えますが、PCにインストールする場合はISOイメージファイルをUSBメモリなどに書き込む必要があります。 ISOイメージを書き込んだUSBは「ライブUSB」、DVDは「ライブDVD」と呼ばれます。これらをPCにセットして電源を入れることで、インストールすることなくUbuntu 20.04 LTSのデスクトップを試したり、内蔵ストレージにインストールしたりできます。 https://linuxfan.info/ubuntu-20-04-install-guide 【注意点】 DVDに焼くとき、ISO方式にしないと正常に動作しない ubuntu20.04(server) 推奨スペックを確認する Canonical Ubuntu URL Doc https://www.ubuntulinux.jp/home PDFs and Previous Releases Below are links to the previous Ubuntu Server release server guides as well as an offline copy of the current version of this site: Ubuntu 20.04 LTS (Focal Fossa): PDF f-ubuntu-server-guide.pdf URL PDF https://assets.ubuntu.com/v1/f954307f-ubuntu-server-guide.pdf System requirements (中略) The recommended system requirements are: • CPU: 1 gigahertz or better • RAM: 1 gigabyte or more • Disk: a minimum of 2.5 gigabytes Server and Desktop Difference ISOファイル ダウンロード UbuntuJapanの公式サイトからISOファイルをダウンロードする。 UbuntuJapan URL ホーム画面 https://www.ubuntulinux.jp/home ISOダウンロード画面 https://jp.ubuntu.com/download DVDへの間違った書き込み方法【非ISO方式】 以下の方法で書き込みを行っても「ファイル名.iso」ファイルをDVDに単純コピーするだけになってしまい、ISOの中身がディスク内に正しく展開されない。 正しい書き込み方【ISO方式】 ISOファイルを右クリックし、「ディスクイメージの書き込み」を押下する。 「ディスクイメージの書き込み」が表示されていない場合は以下の手順で「isoburn.exe」を実行する。 「書き込み」を押下する。 .isoファイルの実行先をisoburn.exeに変更する 対象のファイルを右クリックする。 表示されたメニューの中から「プロパティ」を選択する。 「xxxxのプロパティ」の画面が表示されるので、「変更」をクリックする。 「推奨されたプログラム」に「Windows ディスクイメージ書き込みツール」がある場合は、それを選択し「OK」をクリックする。「Windows ディスクイメージ書き込みツール」の表示がない場合は、「参照」をクリックし、「C:\Windows\System32」にある「isoburn.exe」を選択する。「Windows ディスクイメージ書き込みツール」が表示されることを確認し、それをクリックする。 「xxxxのプロパティ 」 画面に戻ります。「 OK 」 ボタンをクリックします。 ISO方式で書き込んだ場合とそうでない場合のディスク内部比較 ISO方式 必要なデータファルダやファイルがディスク内にきちんと展開されている。 非ISO方式(.isoファイルの単純コピー) エクスプローラーに「ファイル名.iso」というファイルが表示されている。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

起動時のbashファイルの読み込み順

起動時のbashファイルの読み込み順 Ubuntu起動時に、~/.bashrcが読み込まれるため、カスタマイズしたい場合は、基本的に、~/.bashrcを触ればいいことになる。 環境変数を追加したい場合は、~/.bashrcに書いてもいのだが、~/.profileに書くのが慣例となっているので、~/.profileに書くことになる。個人の環境であれば、どこに書いてもいいだろうが。 ~/.profileの中身を見ると分かるのだが、~/.bashrcは、~/.profileの中から読み込まれている。 そして~/.profileは、/etc/profileから読み込まれる。これのファイルが存在している場所は、ホームディレクトリではないので、ログインした全ユーザーに対して、共通で実行されることになる。一番最初に、読み込まれるファイルがこれになる。 /etc/profileから読み込まれるファイルは、~/.profileだけでなく、読み込まれる順番がある。その順番が、 ~/.bash_profile ~/.bash_login ~/.profile 上記3ファイルのうち、1つしか存在してはいけないことになる。Debian系には、~/.profileしか存在していないが、RedHat系には、~/.bash_profileが存在している。~/.bash_loginはどうでもいいだろう。 /etc/profileのどこから、~/.profileを読み込んでいるのか、確認が取れないの。ファイルの中身を見ると、/etc/bash.bashrcを読み込んでいのは分かる。これも全ユーザー共通で実行される。 そして、次に、/etc/profile.d配下にある、拡張子がshになっているファイルをfor文で回して全て読んでいる。ls -l /etc/profile.dで中身を見ると、複雑な名前のスクリプトファイルが、6個程存在している。このファイルの中で何をやっているかはぱっと見は複雑だ。この6ファイル全て実行されていることになる。流したいスクリプトファイルを追加したい場合は、/etc/profileを触らなくても、このディレクトリ配下に新規ファイルをおくだけで、自動で流してくれることになる。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【実践!Pacemaker + Corosync】Pacemaker + Corosyncを構築してZabbixを冗長化させる

1. 概要 PacemakerとCorosyncを用いたZabbix Serverの冗長化に成功しました。 エンジニアになりたての頃に一度挑戦失敗して諦めていたのですが、この度リベンジに成功したので備忘録を書きます。 今時Pacemakerを採用しているプロジェクトなんて見たことないですし、これから出会うこともないと思います。 完全に趣味の範囲です。 ▼ Pacemaker HAクラスタ構成を形成し、リソース制御(ノード切り離し+待機系ノードへのリソース引継ぎ)を行うOSS。 ▼ Corosync HAクラスタ構成において、各ノードの死活監視を行うOSS。 ▼ Zabbix 統合監視を行うOSS。 2. 前提 2-1. 論理構成 以下、構築するサーバの論理構成図。 <正常稼働時> <フェイルオーバー時> 2-2. 前提条件 ・ノードはCent OS7で、VMware Workstation上に構成された2台。 ・NICは各ノードに一つ。 ・ZabbixはActive-Standby構成。 ・MariaDBはMaster-Slave構成。 ・Virtual IPにて切り替えを行なう。 ・Firewall及びSELinuxは無効。 3. 初期設定 ※仮想マシン及びOSの初期構築はできているものとします。 hostsファイルにホスト名を追記します。 【SV01/SV02で実施】 # vi /etc/hosts ---------------------------------------------------------------- 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.11.13 SV01 #ノード1のホスト名 192.168.11.14 SV02 #ノード2のホスト名 Pacemaker、Corosync、pcsをインストールします。 加えて、pcsサービスを起動させ、自動起動設定にしておきます。 【SV01/SV02で実施】 # yum -y install pacemaker corosync pcs # systemctl start pcsd # systemctl enable pcsd クラスタ認証用ユーザのパスワードを変更します。 haclusterはCorosyncをインストールした際に自動で追加されるユーザです。 【SV01/SV02で実施】 # passwd hacluster ユーザー hacluster のパスワードを変更。 新しいパスワード: [任意のパスワード] 新しいパスワードを再入力してください: [任意のパスワード] passwd: すべての認証トークンが正しく更新できました。 4. Zabbixのセットアップ 【SV01/SV02で実施】 Zabbixはログイン画面の表示まで初期構築が完了しているものとします。 ※バージョンはZabbix 4.0、DBはmariaDBとする 5. mariaDBのレプリケーション用DBユーザ設定 mariaDBのレプリケーション用ユーザを作成します。 【SV01/SV02で実施】 # systemctl start mariadb # mysql -uroot > create user 'repl'@'%' identified by '[任意のパスワード]'; > create user 'repl'@'localhost' identified by '[任意のパスワード]'; > grant replication slave on *.* to 'repl'@'%'; > grant process, super, replication slave, replication client, reload on *.* to 'repl'@'localhost'; > flush privileges; > quit; mariaDBのレプリケーション機能を利用するための設定を実施します。 【SV01で実施】 my.cnf # vi /etc/my.cnf ---------------------------------------------------------------- [mysqld] log-bin=mariadb-bin #追記 server-id=1 #追記 log-basename=SV01 #追記 【SV02で実施】 my.cnf # vi /etc/my.cnf ---------------------------------------------------------------- [mysqld] log-bin=mariadb-bin #追記 server-id=2 #追記 log-basename=SV02 #追記 Master(SV01)のDBデータをSlave(SV02)に移行します。 初めに、Slave(SV02)のDBデータを削除しておきます。 【SV02で実施】 # systemctl stop mariadb # rm -rf /var/lib/mysql 続いて、Master(SV01)のDBデータをSlave(SV02)にSSH接続でファイル転送します。 【SV01で実施】 # systemctl stop mariadb # tar cf - -C /var/lib mysql | ssh 192.168.11.14 tar xpf - -C /var/lib Are you sure you want to continue connectiong (yes/no)? yes root@192.168.11.14's password:[SV02のrootユーザのパスワード] 6.クラスタのセットアップ 6-1. サービスの停止・自動起動無効化 クラスタのセットアップ前にリソースとして追加するサービスを停止・自動起動無効にしておきます。 【SV01/SV02で実施】 # systemctl stop zabbix-server # systemctl stop mariadb # systemctl stop httpd # systemctl disable zabbix-server # systemctl disable mariadb # systemctl disable httpd 6-2. ホスト認証 クラスタに各ホストを認証させます。 【SV01で実施】 # pcs cluster auth SV01 SV02 Username: hacluster Password: [haclusterのパスワード] SV01: Authorized SV02: Authorized 6-3. クラスタの作成 Zabbix用クラスタを作成します。「zabbix_cluster」の箇所は任意です。 【SV01で実施】 # pcs cluster setup --name zabbix_cluster SV01 SV02 クラスタを起動し、自動起動も設定しておきます。 【SV01で実施】 # pcs cluster start --all # pcs cluster enable --all 6-4. クラスタのプロパティ設定 STONITHを無効化します。 【SV01で実施】 # pcs property set stonith-enabled=false クォーラム動作の変更。 【SV01で実施】 # pcs property set no-quorum-policy=ignore 自動フェールバックを無効とします。(Warningは無視します) 【SV01で実施】 # pcs resource defaults resource-stickiness=INFINITY Warning: Defaults do not apply to resources which override them with their own defined values エラー発生時、即時にフェールオーバするようにします。(Warningは無視します) 【SV01で実施】 # pcs resource defaults migration-threshold=1 Warning: Defaults do not apply to resources which override them with their own defined values 7. リソースの設定 7-1. SV02のStandby移行 SV02のクラスタノード状態を強制的にStandby状態にしておきます。 【SV01で実施】 # pcs cluster standby SV02 7-2. mariaDB mariaDBをリソースに追加します。 【SV01で実施】 # pcs resource create mariadb \ > ocf:heartbeat:mysql \ > binary=/usr/bin/mysqld_safe \ > datadir=/var/lib/mysql \ > log=/var/log/mariadb/mariadb.log \ > pid=/run/mariadb/mariadb.pid \ > replication_user=repl \ > replication_passwd=[replユーザのパスワード] \ > op monitor interval=10s timeout=10s 追加したmariaDBのリソースをMaster-Slaveで構成します。 【SV01で実施】 # pcs resource master mariadb-clone mariadb \ > master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=true 優先的にSV01がMasterとして起動するようにしておきます。 スコア値が高いほど優先的に起動する模様です。 -INFINITY<-100<0<100<INFINITY 【SV01で実施】 # pcs constraint location mariadb-clone prefers SV01=100 7-3. Zabbix-server Zabbix-serverをリソースに追加します。 【SV01で実施】 # pcs resource create zabbix-server \ > systemd:zabbix-server \ > op monitor interval=10s timeout=10s 7.4. Apache Apacheのstatus.confファイルを作成します。 【SV01/SV02で実施】 status.conf # vi /etc/httpd/conf.d/status.conf ---------------------------------------------------------------- ExtendedStatus On <Location /server-status> SetHandler server-status Require local </Location> Apacheをリソースに追加します。 【SV01で実施】 # pcs resource create apache \ > ocf:heartbeat:apache \ > configfile=/etc/httpd/conf/httpd.conf \ > statusurl="http://localhost/server-status" \ > op monitor interval=10s timeout=10s 7-5. Virtual IP Virtual IPをリソースに追加します。 【SV01で実施】 # pcs resource create vip \ > ocf:heartbeat:IPaddr2 \ > ip=192.168.11.200 \ > cidr_netmask=24 \ > nic=eno16777736 \ > op monitor interval=10s timeout=10s 7-6. 起動制約設定 初めに、設定をし易いようにリソースをグループとしてまとめておきます。 【SV01で実施】 # pcs resource group add zabbix_group vip apache zabbix-server 続いて、各リソースの起動制約を設定します。 【SV01で実施】 # pcs constraint order start zabbix_group then promote mariadb-clone # pcs constraint colocation add zabbix_group with master mariadb-clone INFINITY # pcs constraint colocation add master mariadb-clone with zabbix_group INFINITY # pcs constraint colocation add zabbix-server apache INFINITY # pcs constraint colocation add zabbix-server vip INFINITY この時点で、statusコマンドを実行し、下記結果が出力されていることを確認します。 Faild Resource Action等のエラーが出ていれば、各コンフィグファイルや、設定値の見直しをして下さい。 # pcs status Cluster name: zabbix_cluster Stack: corosync Current DC: SV01 (version 1.1.23-1.el7-9acf116022) - partition with quorum Last updated: Wed Nov 25 18:46:14 2020 Last change: Wed Nov 25 18:35:46 2020 by root via cibadmin on SV01 2 nodes configured 5 resource instances configured Online: [ SV01 SV02 ] Full list of resources: Master/Slave Set: mariadb-clone [mariadb] Masters: [ SV01 ] Slaves: [ SV02 ] Resource Group: zabbix_group vip (ocf::heartbeat:IPaddr2): Started SV01 apache (ocf::heartbeat:apache): Started SV01 zabbix-server (systemd:zabbix-server): Started SV01 Daemon Status: corosync: active/enabled pacemaker: active/enabled pcsd: active/enabled 8. Zabbix Agentのconfファイル編集 zabbix_agentd.confファイルを、下記のように書き換えます。 その後、Zabbix Agentサービスを再起動します。 【SV01/SV02で実施】 zabbix_agentd.conf # vi /etc/zabbix/zabbix_agentd.conf ---------------------------------------------------------------- No.| 98 | Server=192.168.11.13, 192.168.11.14, 192.168.11.200 114| ListenIP=0.0.0.0 139| ServerActive=192.168.11.13, 192.168.11.14, 192.168.11.200 150| # Hostname=Zabbix server ---------------------------------------------------------------- # systemctl restart zabbix-agent 9. 疎通確認(Zabbix-Server ⇔ Zabbix-Agent) Zabbix ServerのWebUIへアクセスします。 ブラウザに「192.168.11.200/zabbix」と入力し、【Sign in】を押下します。 【設定】→【ホスト】→【ホストの作成】の順に押下します。 「ホスト名」、「表示名」(任意)、「グループ」(任意)、「IPアドレス」の欄に、SV01の情報を入力後、【追加】を押下します。 同様の操作で、SV02も追加しておきます。 この時点では、テンプレートがホストに割り当てられていないため、エージェントの状態はグレーアウトです。 適当にテンプレートを作ってあげます。 【設定】→【テンプレート】→【テンプレートの作成】の順に押下します。 今回は、CPU使用率の監視をしてみることにします。 「テンプレート名」、「表示名」、「グループ名」を埋めた後、【追加】を押下します。 「CPU監視」のテンプレートが作成されていることを確認し、【アプリケーション】を押下します。 【アプリケーションの作成】を押下します。 「名前」の欄を埋めた後、【追加】を押下します。 「アイテム」タブへ移動し、【アイテムの作成】を押下します。 次の表のように設定後、【追加】を押下します。 項目 設定値 名前 CPU使用率 タイプ Zabbixエージェント キー system.cpu.util[,idle,avg1] データ型 数値(浮動小数) アプリケーション CPU 「トリガー」タブに移動し、【トリガーの作成】を押下します。 次の表のように設定後、【追加】を押下します。 項目 設定値 名前 CPU使用率80%超過,{HOST.NAME} 深刻度 重度の障害 条件式 {Template_CPU:system.cpu.util[,idle,avg1].last()}<20 【設定】→【ホスト】→【SV01】の順に押下します。 「テンプレート」タブに移動します。作成した「CPU監視」を追加した後、【追加】→【更新】の順に押下します。 ホスト一覧に戻り、エージェント状態の「ZBX」が緑色で表示されていることが確認できます。 以上で、PacemakerとCorosyncを用いた冗長化Zabbix Serverの構築が完了です。 久しぶりにゴリゴリにLinuxを触れたのでとても満足しました。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【必須】grepコマンドを使いこなす

grepコマンドとは、linuxのコマンドです。 基本はファイルの中の「文字列(パターン)」が含まれている行を表示するコマンドです。 grepコマンドを使う場面 ・ファイルの中に特定の文字が含まれている行を抽出する時 ・文字列がどのファイルにあるかを探す時 基本の使い方 $grep [オプション] 文字列 ファイル名 よく使う方法 例1  errorという文字がある全ファイルを抽出する $ grep error ./* ※複数のファイルから検索するためにワイルドカード(*)を利用します。 例2 postディレクトリの中にある全てのerrorという文字列を抽出する grep error post/* 例3 現在いるディレクトリは以下の全ファイルからerrorがあるファイルを検索する。なお、 grep -rl error . ※最後のドットは現在いるディレクトリ配下の全ファイルが検索対象という意味 ※-rlオプションはディレクトリの中も検索し、結果はファイル名のみ表示します。 複数の文字列を探す方法 ①②ともに含まれているファイルを探す grep ①検索文字列 ファイル名 | grep ②検索文字列 よく使うgrepコマンドのオプション -C 検索結果に一致した箇所から前後に指定した行数表示する -i 大文字と小文字を区別せず検索する -e 一致処理に指定した正規表現を使う $ grep –e p –e e post/* 【補足】-eオプションは一致処理に指定した正規表現を行うオプションだが、実際には、または(or)の検索を行うときに使われる。 ちなみに上記コマンドは、-eオプションを利用し、postディレクトリ内のファイルすべての中から小文字のp、またはeのいずれかを検索できるようにするコマンドです。 -v 一致しないものを検索する -l 検索結果にファイル名のみ表示する 【使用用途】ファイルのリストを作りたい時 -r ディレクトリ内も検索対象とする 例 postディレクトリ内のさらに下層のディレクトリ内のファイルすべての中からaの文字を検索するコマンド $ grep -r a post/* grepコマンドは使いこなせないと厳しいです。 少しでもご参考になれば幸いです。 参考記事 https://qiita.com/YASU_ojisan/items/8225c87acb4e1468dc90
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む