amegonの雑なブログ

日常的なものから技術的なものまでメモの雑記

grafana の導入

Zabbix のダッシュボードを変更、もしくは置き換えられないかと思い立ち、grafana を導入。

インストールについては、先人の方々の情報とおりにインストールすれば、難しいところはなかった。

(nginxやapacheを使用したリバースプロキシについては使っていません。。。)

グラフは Zabbix と遜色ない気がする。 見た目もクール。 なんとなくいい感じ。

f:id:amegon:20190710144455p:plain

仮想環境をVirtualBox から Hyper-V に変えた話

こんばんは。amegon です。 雑記です。

背景

Windows 10 上に VirtualBox をインストールして仮想マシンをごりごり動かしていました。

でも、よく考えてみたら Windows 10 Pro はHyper-V が使える。

Hyper-V を使えば、Windows Update で OS が再起動しても自動で復旧できるやん、ということで移行してみました。

(VirtualBoxでも設定すればできますが、Windows にオートログインするとか面倒だったので。。、)

移行顛末

Hyper-V のサービスをインストール

安易にインストール、有効化したが、VirtualBox仮想マシンが起動しなくなって焦る。

クラスタ組んだりネットワーク経由で iSCSI でボリュームマウントしたりしていたので、VirtualBox <-> Hyper-V 間でつなげたら面白いな、とか思っていたのですが、早くも絶望。

VirtualBox仮想マシンvhd に変換

この際、VirtualBox でスナップショット運用し、スナップショットを大事にとっておく運用をしていたので、フォルダ配下にある vdi を vhd に単純に変換、インポートしてもだめでした。

(まっさらなCentOS が立ち上がった。)

VirtualBox で移行したいスナップショットを選択し、クローンを実行。

クローンで作成された vdi を vhd に変換した。

Hyper-V にインポート

仮想マシンを新規作成し、その後仮想ハードディスクの設定で先ほど作成した vdi を選択。

CPU や メモリ、ネットワークはぽちぽち設定。

仮想マシン起動

仮想マシンを起動してみる。

しかし起動しない。

ググってみたら以下のページを発見。

参考にさせていただきました。

https://qiita.com/sankaku/items/26d72c1cf794fc1a3eb3

(このページほぼ全部手順ありですね。。。)

レスキューモード起動 -> 初期RAM 再作成 -> 再起動で無事起動しました。

ネットワークインターフェースの設定変更

VirtualBox の時は enp0s だったのが、Hyper-V では eth になってた。

/etc/sysconfig/network-scripts のファイル名、内容を修正。

移行後

計6つの仮想マシンを移行しましたが、上手くいきました。

ですが1点気になる点が。

仮想マシンに対して、別の物理PCから Ping を打って、冗長的な死活確認を行っているのですが、VirtualBox 時代に比べてどうも Ping 落ちが目立ちます。

仮想スイッチの出来は Oracle の方が良い??

残作業

Excelでテーブルを使用していてリストの最下行の枠線が破線から変更できなかったら。。。

  • Excel 内でテーブルのセルをどれか選択する。
  • リボンに表示された テーブルツール:デザイン を選択する。
  • テーブルスタイルで選択されているスタイルを右クリックして "適用(書式をクリア)" を選択する。
  • テーブルの見栄えが変わるので、ヘッダとか好みの形式に変更する
  • テーブル内の罫線を設定する。設定が反映できる。

分かる人が分かればとりあえずオッケー。

pacemaker + corosync + mariadb 構築メモ

今回の目標は、仮想マシンdb-p と仮想マシンdb-s をクラスタ組んで、仮想マシンstorage の mariadbiscsi で接続する、というところまで想定です。

だいぶ殴り書きなので、分かる人だけ分かればというのと、コマンドメモくらいになればです。

(折を見てまとめなおしたい。。。)

pcs 関連のインストール実施

■ モジュールインストール (db両方)

yum install corosync pacemaker pcs mysql-server

■ 設定ファイルの準備 (db両方)

# vi /etc/corosync/corosync.conf

totem {
    version: 2

    crypto_cipher: none
    crypto_hash: none

    interface{
        ringnumber:0

        bindnetaddr: 192.168.1.0 # ネットワークアドレス
        mcastport: 5405
        ttl: 1
    }
    transport: udpu
}

nodelist {
    node{
        ring0_addr: db-primary # ホスト名1
        nodeid: 1
    }

    node{
        ring0_addr: db-secondary # ホスト名2
        nodeid: 2
    }
}

logging {
    fileline: off
    to_syslog: yes
    to_logfile: yes
        logfile: /var/log/cluster/corosync.log
    debug: off
    timestamp: on
    logger_subsys {
        subsys: QUORUM
        debug: off
    }
}

quorum {
    provider: corosync_votequorum
    expected_votes: 2
}

※ 上の日本語のコメントは削除しないといけない。

# firewall-cmd --add-port=5405/udp --permanent
# firewall-cmd --add-port=2224/tcp --permanent
# systemctl enable corosync
# systemctl enable pacemaker
# systemctl enable pcsd

■ hosts に登録 (db両方)

# vi /etc/hosts

192.168.1.105 db-primary
192.168.1.106 db-secondary

dns があったら便利だねー。

■ hacluster のパスワード変更 (db両方)

# passwd hacluster

hapassword

クラスタの認証

# pcs cluster auth db-primary db-secondary -u hacluster -p hapassword --force

■ ここでスナップショット作成

mariadb インストール (db両方)

yum -y install mariadb-server

■ mriadb の設定

  • db-primary
# vi /etc/my.cnf

[mysqld]
log-bin=mariadb-bin
server-id=1
  • db-secondary
# vi /etc/my.cnf

[mysqld]
log-bin=mariadb-bin
server-id=2

レプリケーションユーザーの作成 (db-primary)

※ db-primary のみ

# systemctl start mariadb.service
# mysql
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%' IDENTIFIED BY 'slavepass';
mysql> GRANT SUPER,REPLICATION SLAVE,REPLICATION CLIENT,PROCESS ON *.* TO 'repl'@'localhost' IDENTIFIED BY 'slavepass';
mysql> FLUSH PRIVILEGES;
mysql> quit;

■ DBを停止してデータベースファイル一式をホスト2にコピーします。 (db-primary)

# systemctl stop mariadb.service
# ssh db-secondary rm -rf /var/lib/mysql
# tar cf - -C /var/lib mysql | ssh db-secondary tar xpvf - -C /var/lib/

※ db-secondary のログインパスワードは都度入力

クラスターリソースの設定 (db-primary)

# pcs cluster standby db-secondary
# pcs cluster cib mysql_repl
# pcs -f mysql_repl resource create mysql ocf:heartbeat:mysql
# pcs -f mysql_repl resource update mysql binary=/usr/bin/mysqld_safe
# pcs -f mysql_repl resource update mysql datadir=/var/lib/mysql
# pcs -f mysql_repl resource update mysql log=/var/log/mariadb/mariadb.log
# pcs -f mysql_repl resource update mysql pid=/run/mariadb/mariadb.pid
# pcs -f mysql_repl resource update mysql replication_user=repl
# pcs -f mysql_repl resource update mysql replication_passwd=slavepass

# pcs -f mysql_repl resource op add mysql start interval=0 timeout=120s
# pcs -f mysql_repl resource op add mysql stop interval=0 timeout=120s
# pcs -f mysql_repl resource op add mysql monitor interval=20s timeout=30s
# pcs -f mysql_repl resource op add mysql monitor interval=10s role=Master timeout=30s
# pcs -f mysql_repl resource op add mysql monitor interval=30s role=Slave timeout=30s
# pcs -f mysql_repl resource op add mysql promote interval=0 timeout=120s
# pcs -f mysql_repl resource op add mysql demote interval=0 timeout=120s
# pcs -f mysql_repl resource op add mysql notify interval=0 timeout=90s
# pcs cluster cib-push mysql_repl

クラスタリソース作成 & 開始 (db-primary)

# pcs resource master mysql-clone mysql master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=true
# pcs property set stonith-enabled=false
# pcs resource enable mysql
# pcs resource start mysql-clone   ← いらない??? きっといらない。

ホスト1の起動確認後ホスト2を起動します。

# pcs cluster unstandby db-secondary

クラスタ切り替えテスト

  • db-primary をスタンバイにして Master を切り替える
# pcs cluster standby db-primary
  • db-primary をアンスタンバイにして Slave として復活する
# pcs cluster unstandby db-primary

※ Msater/Slave のどちらかがシャットダウンしてしまうと、クラスタが切れてしまう。 → どちらか単体での動作継続ができない。

■ 起動メモ

※ pacemaker でコントロールしているけど、systemctl で mariadb を実行できる。はて。

db-primary OS 起動
db-secondary OS 起動
db-primary で systemctl start mariadb
db-secondary で systemctl start mariadb
db-primary で pcs cluster standby db-secondary
db-primary で pcs cluster unstandby db-secondary
db-primary で pcs resource cleanup

※ standby 状態になっていると、db-primary、db-secondary 共に mariadb は起動している状態となっている。

■ 仮想IP の追加

http://kan3aa.hatenablog.com/entry/2015/06/05/135150

pcs resource create VIP ocf:heartbeat:IPaddr2 \
 ip=192.168.1.107 cidr_netmask=24 op monitor interval=10s

とりあえず、上の操作だけでVIPは設定できたみたい。 先に iSCSI ターゲットの設定を進める。

iSCSI ターゲットの設定

※ まず、storage となる仮想マシンに /dev/sdb 用のディスクを追加。

↑ 大きめにサイズとっとく。

[root@storage ~]# cat /proc/partitions
major minor  #blocks  name

   8        0   52428800 sda
   8        1    1048576 sda1
   8        2   51379200 sda2
   8       16   52428800 sdb
  11        0    1048575 sr0
253        0   49274880 dm-0
253        1    2097152 dm-1
[root@storage ~]#
[root@storage ~]#
[root@storage ~]#

以降は以下のページにしたがって設定開始。

http://ossfan.net/setup/linux-28.html

※ iqn の設定 ルールがあるので従おうと思ったが、適当。

=== ルール ===

iqn.yyyy-mm.naming-authority:unique-name

iqn : 先頭は iqn の3文字で固定です
yyyy-mm : ドメインを取得した年月です。ossfan.netを取得したのは2011年2月なので、2011-02 となります。
naming-authority : 取得したドメインを逆にした形です。ossfan.net は net.ossfan となります。
unique-name : ドメイン内で一意になる名前です。今回は storage1 としました。

=== ここまで ===

今回は、以下とします。 iqn.2019-01.jp.ne.sample.amegon:storage

以下は db-primary、db-secondary 用の iqn 設定。 iqn.2019-01.jp.ne.sample.amegon:db-primary iqn.2019-01.jp.ne.sample.amegon:db-secondary

以下で、iSCSIのログイン → ディスクマウント → フォーマットを実施

[root@db-primary ~]# cat /proc/partitions
major minor  #blocks  name

  11        0    1048575 sr0
   8        0    8388608 sda
   8        1    1048576 sda1
   8        2    7339008 sda2
253        0    6496256 dm-0
253        1     839680 dm-1
[root@db-primary ~]#
[root@db-primary ~]#
[root@db-primary ~]#
[root@db-primary ~]# iscsiadm -m discovery -t st -p 192.168.1.110:3260
192.168.1.110:3260,1 iqn.2019-01.jp.ne.sample.amegon:storage
[root@db-primary ~]#
[root@db-primary ~]#
[root@db-primary ~]# iscsiadm -m node -T iqn.2019-01.jp.ne.sample.amegon:storage -p 192.168.1.110:3260 -l
Logging in to [iface: default, target: iqn.2019-01.jp.ne.sample.amegon:storage, portal: 192.168.1.110,3260] (multiple)
Login to [iface: default, target: iqn.2019-01.jp.ne.sample.amegon:storage, portal: 192.168.1.110,3260] successful.
[root@db-primary ~]#
[root@db-primary ~]#
[root@db-primary ~]# cat /proc/partitions
major minor  #blocks  name

  11        0    1048575 sr0
   8        0    8388608 sda
   8        1    1048576 sda1
   8        2    7339008 sda2
253        0    6496256 dm-0
253        1     839680 dm-1
   8       16   52424704 sdb
[root@db-primary ~]#
[root@db-primary ~]#
[root@db-primary ~]#
[root@db-primary ~]# fdisk -l

Disk /dev/sda: 8589 MB, 8589934592 bytes, 16777216 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
Disk label type: dos
ディスク識別子: 0x000be007

デバイス ブート      始点        終点     ブロック   Id  システム
/dev/sda1   *        2048     2099199     1048576   83  Linux
/dev/sda2         2099200    16777215     7339008   8e  Linux LVM

Disk /dev/mapper/centos-root: 6652 MB, 6652166144 bytes, 12992512 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト


Disk /dev/mapper/centos-swap: 859 MB, 859832320 bytes, 1679360 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト


Disk /dev/sdb: 53.7 GB, 53682896896 bytes, 104849408 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 33550336 バイト

[root@db-primary ~]#
[root@db-primary ~]#
[root@db-primary ~]# parted --script /dev/sdb "mklabel msdos"
[root@db-primary ~]#
[root@db-primary ~]# parted --script /dev/sdb "mkpart primary 0% 100%"
[root@db-primary ~]#
[root@db-primary ~]#
[root@db-primary ~]# mkfs -t xfs /dev/sdb
mkfs.xfs: /dev/sdb appears to contain a partition table (dos).
mkfs.xfs: Use the -f option to force overwrite.
[root@db-primary ~]#
[root@db-primary ~]#
[root@db-primary ~]# mkfs.xfs -s size=4096 /dev/sdb1
meta-data=/dev/sdb1              isize=512    agcount=4, agsize=3274353 blks
         =                       sectsz=4096  attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=13097409, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=6395, version=2
         =                       sectsz=4096  sunit=1 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@db-primary ~]#
[root@db-primary ~]#
[root@db-primary ~]#
[root@db-primary ~]# cat /proc/partitions
major minor  #blocks  name

  11        0    1048575 sr0
   8        0    8388608 sda
   8        1    1048576 sda1
   8        2    7339008 sda2
253        0    6496256 dm-0
253        1     839680 dm-1
   8       16   52424704 sdb
   8       17   52389636 sdb1
[root@db-primary ~]#

メモ ■ ディスクのフォーマット (db-primary のみ)

fdisk -l
parted --script /dev/sdb "mklabel msdos"
parted --script /dev/sdb "mkpart primary 0% 100%"
mkfs -t xfs /dev/sdb
mkfs.xfs -s size=4096 /dev/sdb1

■ マウント

mount /dev/sdb1 /mnt/test/
  • アンマウント
umount /mnt/test/
iscsiadm --mode node --targetname iqn.2019-01.jp.ne.sample.amegon:storage --logout
  • iSCSI 登録ノードの削除
iscsiadm --mode node --op delete --targetname iqn.2019-01.jp.ne.sample.amegon:storage
  • iSCSI 接続サーバーの削除
iscsiadm --mode discovery --op delete --portal 192.168.1.110

■ pacemaker 用のファイル設定 (db-primary、db-secondary ともに)

yum -y install wget
cd /usr/lib/ocf/resource.d/heartbeat/
wget https://raw.githubusercontent.com/ClusterLabs/resource-agents/master/heartbeat/iscsi --no-check-certificate
chmod +x iscsi

■ pacemaker 設定 (db-primary のみ)

pcs resource delete VIP
pcs resource delete mysql-clone

pcs resource create db-vip ocf:heartbeat:IPaddr2 \
    ip=192.168.1.107 cidr_netmask=24 op monitor interval=10s \
--group resource-group

pcs resource create db-shared_device ocf:heartbeat:iscsi \
   portal="192.168.1.110:3260" \
   target="iqn.2019-01.jp.ne.sample.amegon:storage" \
op start on-fail=block \
op stop on-fail=block \
op monitor on-fail=restart \
--group resource-group


pcs resource create db-shared_mount ocf:heartbeat:Filesystem \
device="/dev/sdb1" \
directory="/var/lib/mysql" \
fstype="xfs" \
op start on-fail=block \
op stop on-fail=block \
op monitor on-fail=restart \
--group resource-group


pcs resource create mariadb ocf:heartbeat:mysql
pcs resource update mariadb log=/var/lib/mysql/error.log


pcs resource group add db-cluster db-vip
pcs resource group add db-cluster db-shared_device
pcs resource group add db-cluster db-shared_mount
pcs resource group add db-cluster mariadb

構成

環境構成

いろいろとありまして、以下のような構成で動かしています。

パソコン

Lenovo Thinkpad L470 (Windows 10 Pro)

仮想環境

Oracle VirtualBox (Hyper-V あったけど、なぜか使用しませんでした。)

構成イメージ図

f:id:amegon:20190620231541j:plain

(あとでもう少していねいに書こう。。。)

仮想マシンは以下のような感じ

zabbix

  • CentOS 7 で構築しています。
  • 構築時点では Zabbix Ver4.0 にしています。

db-p, db-s

  • zabbix と mariadb をコネクトする役割を持たせています。
  • db-p は db-connector-primary 的な意味にしたかったのですが、長いのでdb-p としています。 (s は secondary)
  • db-p と db-s は pacemaker & corosync でクラスタ構成試してます。
  • db-p とdb-s は vip を持っており、zabbix はその vip に接続しています。
  • db-p, db-s の OS と mariadb の OS は iSCSI で接続しています。
  • それぞれ CentOS 7 です。

storage

備考

  • db-connector-primary が不意に落ちたりすれば、secondary に切り替わり、監視は継続されます。
  • ただ、いまいまそんなことはなく、落ちるときは ThinkPadWindows UpdateVirtualBox ごとシャットダウン、みたいなことばかりです。
  • Hyper-V にしておけばよかったかな?そのうち変えるかもです。

ブログはじめました。

ブログという名のメモ

はじめに

こんにちは。 横浜でサラリーマンをしています。

ブログという名のメモ書きをただつらつらとしていきたいと思います。

特に、会社で必要になりそうな技術的なネタ中心のメモや自分用のメモ書きになると思います。

インターネットって基本どこからでも見れるし書けるしで便利ですね。

最初のネタは Zabbix

会社で使用しています。 会社で必要な知識を織り交ぜながら、自宅に環境を構築していきたいと思います。 。。。いや、作るところは一旦終わっているので、構成やら作り方やらメモを残していきたいと思っています。

では、ぼちぼちで。