2017年4月6日木曜日

Linux Disk追加作成

本書はCentOS7を基準にします。
ESXiのCentOSからDiskを拡張ではなく新しくDiskを追加したい時どうすればよいか判らない場合があります。Diskを拡張することはDiskをresizeしてボリュームを大きくすることです。Disk追加はDiskを新しく入れることです。Windowsで話をするとD:を追加することになります。Diksを追加作業をする場合自分がやっている作業が正しいか正しくないか迷う場合があります。
その悩みを一気に解消するためにエビデンスを見せながらDisk追加作業を説明します。
それでは始まります。

1.vSphere ClientからDisk追加

下記のように動作します。



新規ディスクを作成します。
もし、既存のDiskがある場合を既存のディスクを選択した
それのパスを選択します。既存のディスクは今度
Oracle RAC構成の記事で書くつもりです。


 新規作成ですのでシックプロビジョニングを選択します。

仮想デバイス ノードには SCSI(1:0)を選択します。
今回は拡張ではなくディスク追加ですので既存のデバイスと分けるためです。
他には同じのものを選択します。


これでDisk追加準備は完了です。
Diskサイズにより生成時間がかかります。 vSphereしたにある
最近のテスクにあるステータスを参考ください。
それが100%になるまでお待ちください。

2.OSからDisk追加作業



dfコマンドと
fdisk -l コマンドで 現状の状態を確認しました。
ここまではまだDiskを追加(1.番)をしてない状態。

ここからはDiskを追加になります。


表示されているところが新しく追加した内容になります。
これをパーティションが追加します。

①パーティションが追加

[root@test1 ~]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x999fb263.

コマンド (m でヘルプ): n  
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
パーティション番号 (1-4, default 1): 1
最初 sector (2048-20971519, 初期値 2048): 2048
Last sector, +sectors or +size{K,M,G} (2048-20971519, 初期値 20971519): 20971519
Partition 1 of type Linux and of size 10 GiB is set

コマンド (m でヘルプ): w
パーティションテーブルは変更されました!

ioctl() を呼び出してパーティションテーブルを再読込みします。
ディスクを同期しています。
[root@test1 ~]# 

確認画面です。
表示されているところが新しく追加したパーティションです。

 ②物理ボリュームの作成

[root@test1 ~]# pvcreate /dev/sdb1
  Physical volume "/dev/sdb1" successfully created.
[root@test1 ~]# 

③ボリュームグループを作成する

[root@test1 ~]# vgcreate VgPark /dev/sdb1
  Volume group "VgPark" successfully created
[root@test1 ~]# 

④Logical Volume 作成

[root@test1 ~]# lvcreate -n LvPark -l 100%FREE VgPark
  Logical volume "LvPark" created.
[root@test1 ~]# 
確認
[root@test1 ~]# lvdisplay
  --- Logical volume ---
  LV Path                /dev/VgPark/LvPark
  LV Name                LvPark
  VG Name                VgPark
  LV UUID                L4Jmqt-JrLW-ae1Y-1UpD-6EHV-pGjm-zk0czh
  LV Write Access        read/write
  LV Creation host, time test1, 2017-04-06 21:41:03 +0900
  LV Status              available
  # open                 0
  LV Size                10.00 GiB
  Current LE             2559
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:2
   
  --- Logical volume ---
  LV Path                /dev/cl/swap
  LV Name                swap
  VG Name                cl
  LV UUID                v2D5GC-oEVG-Hp4n-VrQN-CWKg-Jexv-he33ep
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2017-03-13 22:58:45 +0900
  LV Status              available
  # open                 2
  LV Size                1.00 GiB
  Current LE             256
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:1
   
  --- Logical volume ---
  LV Path                /dev/cl/root
  LV Name                root
  VG Name                cl
  LV UUID                2MLMGn-myim-eAVy-mgMf-s9iG-21Mt-RvaG25
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2017-03-13 22:58:46 +0900
  LV Status              available
  # open                 1
  LV Size                8.00 GiB
  Current LE             2047
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0
   
[root@test1 ~]# 

 ⑤Disk Format

[root@test1 ~]# mkfs.xfs /dev/VgPark/LvPark
meta-data=/dev/VgPark/LvPark     isize=512    agcount=4, agsize=655104 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=2620416, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@test1 ~]#

⑥Disk Mount

[root@test1 ~]# mount /dev/VgPark/LvPark /mnt
確認

これでDisk追加は完了です。
しかし、rebootした場合はmountがなくなりますのでfstabファイルを編集します。

⑦fstabファイル編集

最後の部分に追記します。
[root@test1 ~]# vi /etc/fstab 
/dev/mapper/VgPark-LvPark /mnt                   xfs     defaults        0 0

新しく追加したDiskをdfコマンドから見える/dev/mapper/VgPark-LvPark /mnt をそのまま書きます。


Disk追加は以上です。


2017年4月1日土曜日

Zabbix 통신의 암호화(PSK) windows용

본 내용은 Zabbix 3.0을 기준으로 하겠습니다.
암호화에 대해서 Linux관련 자료는 많이 있습니다만, windows용은 적은것 같아 여기서는 windows용을 기준으로 하겠습니다.
그러나, 특별한 차이는 없습니다. Download하는 곳이 틀릴 뿐입니다.
Zabbix Server와 Zabbix agent간의 통신을 암호화 하는 것에 대해서 설명드리겠습니다.
암호화란 Zabbix Server와 Zabbix Agent가 서로 특별한 기약으로 하는 통신을 말합니다. 암호로 통신하므로 옆에서 봐도 뭘 전송하는지를 알수 없습니다. 허가 받지 않은 호스트로 부터의 요청은 거부할 목적으로 사용합니다.
그럼 Zabbix에 설정하는 방법을 알아보도록 하겠습니다.

Zabbix에 PSK(Pre-Shared Key/사전공유키)를 사용해 보겠습니다.

1. PSK를 만들겠습니다.

# psktool -u zabbix -p zabbix.psk -s 32
만약, psktool 이 없는 경우에는
-bash: psktool : コマンドが見つかりません
# yum install gnutls-utils -y
를 인스톨 합니다.

2. zabbix.psk를 수정

vi로 zabbix.psk를 열어 앞부분에 있는 zabbix:부분을 지움니다.
zabbix:부분은 유져를 표현하므로 여기서는 사용안합니다.

3. windows용 zabbix agent를 download합니다.

https://support.zabbix.com/browse/ZBXNEXT-3047
에 있는 Zabbix-agent-3.0.1-with-OpenSSL-1.0.2c-WinAll.zip을 Download합니다.
적당한곳에 해동을 합니다.
폴더명은 zabbix로 하는 편이 편할듯 합니다.

4.windows 컴퓨터에 zabbix.psk을 배치 합니다.

적당한 폴더에 zabbix.psk를 복사해서 넣습니다.
저의 경우에는 Zabbix를 해동한 곳에 같이 넣었습니다.
C:\tmp\zabbix\conf

5.zabbix-agent.win.conf파일의 수정

TLSConnect=psk
TLSAccept=psk
TLSPSKIdentity=zabbix ##zabbix.psk을 작성한 유져명을 사용합니다.
TLSPSKFile=C:\tmp\zabbix\conf\zabbix.psk   ##zabbix.psk파일이 있는 곳입니다.


6.호스트 작성

Zabbix WEB에서
설정 → 호스트 → 호스트작성 버튼을 클릭할지 아니면 기존의 호스트명을 클릭합니다.
그리고 암호화를 클릭합니다.

 호스트에 접속에서 PSK를 선택합니다.
호스트에서 접속에서 PSK를 선택합니다.
PSK 아이덴티티에서는 zabbix.psk를 만들때 사용한 유져명을 사용합니다.
PSK에는 zabbix.psk의 내용을 적습니다.이때 유져명은 필요하지 않습니다.

그리고 갱신을 클릭하면
호스트의 메인화면으로 가서 위와 같은 설정이 보일 것입니다.


7.Zabbix Agent 실행

Windows의 서버스 에서 Zabbix를 기동합니다.
Windows용 zabbix agent실행은
https://www.zabbix.com/documentation/3.0/manual/appendix/install/windows_agent
를 참조해 주시길 바랍니다.


8.Agent의 확인

   zabbix_get을 이용해 확인을 합니다.
# zabbix_get -s 192.168.137.139 -k "agent.ping"
zabbix_get [3689]: Get value error: ZBX_TCP_READ() failed: [104] Connection reset by peer
zabbix_get [3689]: Check access restrictions in Zabbix agent configuration
이 에러는 psk를 이용하고 있는데, zabbix_get을 사용할때는 psk를 사용안하므로 일어나는 에러입니다.
다음과 같이 하면 문제가 없습니다.
# zabbix_get -s 192.168.137.139 --tls-connect psk --tls-psk-identity zabbix --tls-psk-file zabbix.psk -k "agent.ping"
1
이것으로 확인을 하였습니다.

Zabbix Agent log파일에서
active check configuration update from [192.168.137.138:10051] started to fail (TCP successful, cannot establish TLS to [[192.168.137.138]:10051]: SSL_connect() returned SSL_ERROR_SSL: file .\ssl\s3_pkt.c line 1472: error:1409445B:SSL routines:ssl3_read_bytes:reason(1115): SSL alert number 115: TLS read fatal alert "unknown PSK identity")
에러가 발생할경우에는 zabbix_agent.win.conf파일의 TLSPSKIdentity에 psk작성 틀리다는 뜻이니 확인해 보시길 바라겠습니다.

또, Zabbix Agent LOG에서
failed to accept an incoming connection: from 192.168.137.138: unencrypted connections are not allowed
이 에러의 경우에는 6.호스트 작성d에서 호스트에 접속부분에 PSK가 선택되어 있는지 확인해 보시길 바라겠습니다.

이상입니다.

Zabbix 通信の暗号化(PSK) windows用

この内容はZabbix 3.0を基準にします。
Linuxに関して多数ありますがWindows用は少ない見たいのでここではwindowsを基準にします。
しかし、Linux用とWindows用はことなるところはDownloadするところだけです。
Zabbix ServerとZabbix agent間通信の暗号化に関して説明します。
暗号化はご存知名よう、Zabbix ServerとZabbix Agentが通信することを見えないようにするし、許可されてないホストからのリクエストを拒否される目的があります。

ZabbixにPSK (Pre-Shared Key/事前共有鍵)を使用してみます。

1.PSKを作成する

# psktool -u zabbix -p zabbix.psk -s 32
もし、psktool がない場合は
-bash: psktool : コマンドが見つかりません
# yum install gnutls-utils -y
をインストールします。

2.zabbix.pskを編集する

viで中にあるzabbix:部分を削除します。
Zabbix:の意味はユーザーを表すものです。

3.windows用Zabbix Agent download

https://support.zabbix.com/browse/ZBXNEXT-3047
にあるZabbix-agent-3.0.1-with-OpenSSL-1.0.2c-WinAll.zipファイルをDownloadします。
その後適当な場所で解凍します。
フォルダ名はzabbixにした方法後見やすくなります。


4.windows マシンにzabbix.pskを配置

適当なら場所にzabbix.pskを配置します。
僕の場合はZabbixを解凍したところに起きました。
C:\tmp\zabbix\confです。

5.zabbix-agent.win.confファイルを修正

TLSConnect=psk
TLSAccept=psk
TLSPSKIdentity=zabbix ##zabbix.pskを作成する時入れたユーザー名です。
TLSPSKFile=C:\tmp\zabbix\conf\zabbix.psk   ##zabbix.pskファイルがある場所

6.ホストの作成

Zabbix WEBページから
設定 → ホスト → ホスト作成ボタンをクリックするか既存のホストをクリックします。
暗号化をクリックします。

ホストへの接続からPSKをクリックします。
ホストからの接続にはPSKをクリックします。
PSKアイデンティティにはzabbix.pskファイルを作成するときのユーザー名を書きます。
PSKにはファイルに書いている内容をそのまま書きます。
pskファイルを作成したときにはzabbix:部分は入れないようにご注意ください。

その後更新をクリックします。
ホストメイン画面を見ると
この表示が見られます。

7.Zabbix Agent起動

WindowsのサービスからZabbixを起動します。
windows用のZabbix Agent起動は
ここをご参照ください。

8.Agentの確認

   zabbix_getを利用して確認します。
# zabbix_get -s 192.168.137.139 -k "agent.ping"
zabbix_get [3689]: Get value error: ZBX_TCP_READ() failed: [104] Connection reset by peer
zabbix_get [3689]: Check access restrictions in Zabbix agent configuration
このエラーはpskを利用しているのにも関わらずpskファイルを利用してないのでエラーが起きました。
# zabbix_get -s 192.168.137.139 --tls-connect psk --tls-psk-identity zabbix --tls-psk-file zabbix.psk -k "agent.ping"
1
これで完了しました。

もし、Zabbix Agent側から
active check configuration update from [192.168.137.138:10051] started to fail (TCP successful, cannot establish TLS to [[192.168.137.138]:10051]: SSL_connect() returned SSL_ERROR_SSL: file .\ssl\s3_pkt.c line 1472: error:1409445B:SSL routines:ssl3_read_bytes:reason(1115): SSL alert number 115: TLS read fatal alert "unknown PSK identity")
エラーの場合はTLSPSKIdentityに作成ユーザーがあるか確認ください。

また、Zabbix Agent側から
failed to accept an incoming connection: from 192.168.137.138: unencrypted connections are not allowed
エラーの場合は6.ホストの作成のホストへの接続がPSKに選択できているかを確認ください。

以上です。


2017年3月30日木曜日

job arranger의 job 등록 방법

Job Arranger에 job을 등록하는 방법을 설명하겟습니다.
첨부 그림이 일본어로 된점 양해해 주시길 바랍니다.
그림과 같은 위치에 같은 내용의 글이 한글로 되어 있습니다.

1.Zabbix에 호스트를 등록합니다.

Zabbix 호스트 등록화면에 Job을 실행 하고 싶은 호스트를 등록합니다.
만약, 등록되어있다면 이등록 화면은 skip합니다.

2.Job Arranger.conf파일을 수정합니다.

# vi /etc/jobarranger/jobarg_agentd.conf
Server=192.168.137.138 ##Job Arranger Server의 호스명 또는 IP를 작성합니다.

Hostname=jobagent  ##Zabbix에 등록한 호스트명을 씁니다.
편집후 재실행을 합니다.
# systemctl restart jobarg-agentd

3.Job Manager에서 Job등록

①JOBNET작성하기 클릭하기

Private JOBNET를 선택하고 오른쪽 마우스를 클릭합니다.
그럼, 위와 같은 화면이 나오고 신기 추가를 클릭합니다.

 ②JOBNET 작성하기

JB NET ID에는 uniq ID를 사용합니다. Defualt를 사용해도 상관없습니다.
JOBNET 이름에는 한국말 또는 영어로 이름을 부여 합니다.
설명에는 JOBNET에 대해서 어떤 기능을 하는지 알기 쉽게 써놓습니다.
다름 부분에 대해서는 나중에 설명드리도록 하겠습니다.

메뉴가 있는 곳에서 필요한 아이콘을 드레그 합니다.
JOBNET에서는
START는 반듯이 1개가 필요합니다.
END는 1개 이상이 필요합니다.
JOB을 하기 위해서 JOB도 드레그를 합니다.

연결선을 그리기 위해서
START를 먼저 클릭을 하고, 다음으로 움직일 JOB을 클릭합니다.
그리고, 마우스 오른쪽을 클릭하면 위와 같은 화면이 나옴니다.
직선을 할지 곡선을 할지 정해서 클릭을 하면,
두개의 아이콘이 연결됩니다.

③JOB내용 설정
END까지 연결이 끝나면, JOB을 선택하고 마우스 오른쪽을 클릭합니다.
※참고: 먼져 JOB아이콘을 클릭해서 JOB내용을 설정해도 상관없습니다.


JOB ID에는 JOBNET에서 사용되는 uniq한 ID를 상요합니다. Default ID를 사용해도 상관없습니다.
HOST 명에는 Zabbix화면에서 등록한 host명을 선택합니다.
실행이라고 써있는 곳은 bash를 그냥 씁니다.
command라든지, 실행 파일을 써도 괜찮습니다.
저의 경우는 간단하게 ls를 썻습니다. 필요한 command를 쓰면 문제 없이 실행 됩니다.
실행 파일을 쓸때에는 cron과 같이 쓰면 됩니다.


④JOBNET 저장 

JOBNET화면 오른쪽 밑에보면 등록버튼을 클릭합니다.

⑤JOBNET 실행

ジョブネットを選択して、右クリックをして、有効をクリックします。
작성한 JOBNET를 선택하고, 마우스 오른쪽 버튼을 클릭하면, 유효라고 보입니다.
그것을 클릭합니다.


유효를 클릭한 JOBNET를 또, 마우스 오른쪽을 클릭하면, 즉시 실행을 클릭합니다.
JOBNET을 실행하시겠습니까?라고 물어보면 yes를 클릭합니다.


⑥JOBNET 실행결과
JOBNET의 실행 결과은 Job Arranger Manager의 텝중에 JOBNET 실행관리를 클릭합니다. 그러면 밑에와 같은 화면이 나옴니다.

이상입니다.



2017年3月28日火曜日

Job Arranger 1000ジョブの実行

Job Arrangerのパフォーマンス(Performance)をテストしました。
1000ジョブを同時に実行した場合はCPUがそのくらいあがるか?を確認しました。

Job Arranger Serverの環境は仮想環境です。
OS:CentOS Linux release 7.3.1611 (Core)
DB:Server version: 10.1.21-MariaDB MariaDB Server
CPU: 1vCPU(Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz)
Memory:2G

パラメタ変更:TimeoutのDefaultは5秒ですがそれを30秒に変更。
 10609:20170328:115111.499 [ERROR] [Z3005] query failed: [1205] Lock wait timeout exceeded; try restarting transaction [insert into ja_run_value_after_table (inner_job_id, inner_jobnet_id, value_name, after_value) values (31740, 1377, 'JOBARG_MESSAGE', '[JARUNICONJOB200012] Cannot send data:inner_jobid [31740], message [jobid: 31740 is not running]')]
Timeoutによるエラーが起きましたの変更しました。

それ以外はDefaultです。DBも初期値のままです。
12時~15時まで15分間隔で実行して見ました。

テストシナリオ

1.10ジョブのジョブネットを作成

このテストはジョブサーバーのテストですので
僕の場合は3つのホストにジョブの実行を分散しました。

2.1番のジョブネットを10回実行するジョブネット

1番のジョブネットを並列で10回テストしますので
計100回のジョブのテストになります。

3.2番のジョブネットを10回実行するジョブネット

2番のジョブネットを並列で10回テストしますので
計1000回のジョブのテストになります。

結論

CPUのIDLEをチェックしました。
2時間中最小値は75.76%です。
CPUを24.24%を利用することがわかりました。

Job ArrangerはCPUをたくさん使用しないので低リソースでも問題なく運用ができると思います。ジョブ関連ツールを選ぶとしてご参考しましょう。

以上です。

2017年3月25日土曜日

MaxHousekeeperDelete에 대해서

MaxHousekeeperDelete에 관해서 설명드리겠습니다.

MaxHousekeeperDelete은 Default가 5000으로 설정되어 있습니다.
이 파라미터는 HousekeepingFrequency에 설정된 시간에 삭제하는 최대치라고 생각하시면 일부는 맞고, 일부는 틀립니다.
만약, HousekeepingFrequency의 설정을 24로 했다고 예를 들겠습니다. 그럼 쌓인 데이터를 지우는데 최대 5000까지 밖에 못지운다는 이야기입니다. 그럼, 하루에 10000데이터가 쌓인다면 언젠가는 DB에 데이터가 넘쳐 멈춘다는 이야기 입니다.
그럴까요?
그래서 MaxHousekeeperDelete은 Housekeeper와 관계는 있습니다만, 위에 설명드린 것과는 관계가 없는 것입니다. 이 파라메타는, ITEM을 삭제할때 사용되는 파라메타 입니다.
삭제할 ITEM에 지금 까지 데이터가 1000만건 있다고 하겠습니다. 그럼 ITEM을 삭제하니한번에 이걸 지울까요? 그럼, DB에 부하가 엄청 걸립니다.
그때 사용되는 파라메타가 MaxHousekeeperDelete입니다.
삭제한 ITEM의 데이터를 한번에 지우지 않기 위해서, 매시간 얼마만큼의 데이터를 기울지를 결정하는 파라메타입니다.

이 작업을 확인하기 위해서는, 하나의 ITEM을 삭제 해봅니다.
그럼 housekeeper라는 테이블에 삭제한 ITEM이 Insert되어진 것이 보일것입니다.
이 ITEM은 데이터가 전부 삭제되면 테이블로 부터 지워지게 됩니다.

제가 MaxHousekeeperDelete을 설명하는 이유는
Housekeeper가 무거워져서 MaxHousekeeperDelete을 조절하는 분들이 계십니다.삭제한 ITEM이 있다면 효과적이지만, 만약에 없고 계속 무겁다면 DB 튜닝을 추천드리기 위해 이글을 썻습니다.

많은 참조 바랍니다.

MaxHousekeeperDeleteについて

MaxHousekeeperDeleteに関して説明します。

MaxHousekeeperDeleteはdefaultが5000になっています。
これはHousekeepingFrequencyに設定した時間に削除する最大値と思うと一部は正しい、一部は間違いです。
HousekeepingFrequencyを24にしてHousekeeperをすると一日削除する最大値が5000行になりそれ以上のデータは削除はできなくなります。正しいでしょうか?そしたら、データは積み重なっていつかDBが溢れます。
ですのでMaxHousekeeperDeleteはHousekeeperには関係があるですが私たちが知っている処理ではなく、ITEMが削除された場合実行されるパラメタです。
今まで、削除対象になるITEMのデータが1000万件だとすると一気に削除するならDBに大きい負荷がかかります。
そこで使われているものがMaxHousekeeperDeleteになります。
削除されたITEMのデータは一回に多くてもMaxHousekeeperDelete以上は削除しないことです。

この作業を確認するためにはITEMを削除してみてください。
そうするとhousekeeperテーブルに削除したITEMがInsertされます。
このITEMはデータが全部削除されるとテーブルからなくなります。

私がMaxHousekeeperDeleteに説明する理由は
Housekeeperが重くなっていることでMaxHousekeeperDelete調整する人がいます。そこで削除したITEMがある場合は効果的ですが、削除したITEMがなかった場合はDBのチューニングお願いいたします。
ご参考まで

以上です。