備忘録 Zabbix用にもうひとつPostgreSQLのインスタンスを立ち上げたい！

昨日は、[備忘録 CentOS 7にZabbix 3.2を導入する（すでにApache、PostgreSQLも入っている環境に）](http://qiita.com/brighton0725/items/e976927a30a92464fdfd)では、既存のPostgreSQLの中に、Zabbix用のDBを作成すればいいや・・・と軽い気持ちで作業していました。

が、目が覚めた本日、やっぱりZabbix用のインスタンスを作成し、Zabbixはそちらへ接続したいと思いまして。

![index2.png](https://qiita-image-store.s3.amazonaws.com/0/170871/714497f2-18f3-d0e1-a202-269e387e193c.png)


ということで、本日の作業内容です。

今回は、CentOS上のzabbixユーザーを、2つめのPostgreSQLのスーパーユーザーとします。


## 1. 事前作業
### 1.1 zabbixユーザーにpostgresグループを追加
chefで実行したので結果のみ。

```ruby:
[root@test01 zabbix]# id zabbix
uid=9500(zabbix) gid=9500(zabbix) groups=9500(zabbix),9100(postgres)
[root@test01 zabbix]#
```

### 1.2 zabbix用のファイルシステムを作成
これもchefでLV、FS作成、/etc/fstab記入まで実行しているので結果のみ。

```ruby:
[zabbix@test01 ~]$ df -m /zabbix
Filesystem                        1M-blocks  Used Available Use% Mounted on
/dev/mapper/vgdata01-lvvgdata0110      4912    20      4620   1% /zabbix
[zabbix@test01 ~]$
```

### 1.3 Zabbix用のDBディレクトリを作成
今回は、/zabbix/dataディレクトリとします。

```ruby:
[root@test01 /]# mkdir /zabbix/data
[root@test01 /]# cd /zabbix
```

また、postgresグループが、このファイルシステムおよびディレクトリに書き込みができるようにオーナーを変更します。

```ruby:
[root@test01 /]# chown zabbix.postgres /zabbix
[root@test01 /]# cd /zabbix
[root@test01 zabbix]# chown zabbix.postgres data
[root@test01 zabbix]# ls -l
total 20
drwxr-xr-x 2 zabbix postgres  4096 May  9 16:54 data
drwx------ 2 root   root     16384 May  9 16:53 lost+found
[root@test01 zabbix]# ls -ld
drwxr-xr-x 4 zabbix postgres 4096 May  9 16:54 .
[root@test01 zabbix]#
```

### 1.4 zabbixユーザーの.bashrcファイルの変更
zabbixユーザーの.bashrcファイルへ、PostgreSQLのコマンドパス、データエリアやポート番号などを設定します。
PostgreSQLはすでに稼動しているため、ここでは、Zabbix用のポート番号は、デフォルトの5432番の次の **5433番**ポートを使用します。

```ruby:.bashrcに以下追加（zabbixユーザーで編集）
export PATH=$PATH:/usr/pgsql-9.6/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/pgsql-9.6/lib
export PGDATA=/zabbix/data
export PGPORT=5433
```
```ruby:ファイルを反映
[zabbix@test01 zabbix\]$ source .bashrc
```

## 2.PostgreSQL作業
### 2.1 初期データベース作成
zabbixユーザーが、PostgreSQLコマンドを使用することができるようになったため、初期データベースを作成します。

```ruby:
[zabbix@test01 ~]$ initdb --encoding=UTF8 --no-local --pgdata=/zabbix/data --username=zabbix --noclean
Running in noclean mode.  Mistakes will not be cleaned up.
The files belonging to this database system will be owned by user "zabbix".
This user must also own the server process.

The database cluster will be initialized with locale "C".
The default text search configuration will be set to "english".

Data page checksums are disabled.

fixing permissions on existing directory /zabbix/data ... ok
creating subdirectories ... ok
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
selecting dynamic shared memory implementation ... posix
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... ok
syncing data to disk ... ok

WARNING: enabling "trust" authentication for local connections
You can change this by editing pg_hba.conf or using the option -A, or
--auth-local and --auth-host, the next time you run initdb.

Success. You can now start the database server using:

    pg_ctl -D /zabbix/data -l logfile start

[zabbix@test01 ~]$
```

### 2.2 /var/run/postgresqlディレクトリのパーミッションを変更
PostgreSQLが起動時に、このディレクトリに以下のようなファイルを作成します。

```ruby:
[zabbix@test01 postgresql]$ ls -ld
drwxrwxr-x 2 postgres postgres 40 May  9 16:38 ./postgresql/
[zabbix@test01 postgresql]$ ls -la
total 8
drwxrwxr-x  2 postgres postgres 120 May  9 16:38 .
drwxr-xr-x 25 root     root     740 May  9 16:38 ..
srwxrwxrwx  1 postgres postgres   0 May  9 16:38 .s.PGSQL.5432
-rw-------  1 postgres postgres  52 May  9 16:38 .s.PGSQL.5432.lock
```

zabbixユーザーがこのディレクトリにアクセスできるようにするため、パーミッションを 775に変更します。

```ruby:
[zabbix@test01 postgresql]$ ls -ld
drwxrwxr-x 2 postgres postgres 120 May  9 19:49 .
```

**リブート後も反映させるため、/usr/lib/tmpfiles.d/postgresql-9.6.confも編集します。** 
※0755を0775に変更

```ruby:/usr/lib/tmpfiles.d/postgresql-9.6.conf
d /var/run/postgresql 0775 postgres postgres -
```

### 2.3 zabbixユーザーで、PostgreSQLを起動
zabbixユーザーでPostgreSQLが見事起動しました。

```ruby:
[zabbix@test01 ~]$ pg_ctl -w start
waiting for server to start....< 2017-05-09 17:27:47.983 JST > LOG:  redirecting log output to logging collector process
< 2017-05-09 17:27:47.983 JST > HINT:  Future log output will appear in directory "/prdlog/zabbix".
 done
server started
```
### 2.4 zabbixadmユーザーを作成
スーパーユーザー以外で、DBをアクセスするため、ここではzabbixadmユーザーを作成します。

```ruby:
[zabbix@test01 ~]$ createuser zabbixadm -P -S -R -D
Enter password for new role:
Enter it again:
```

### 2.5 ZabbixのDBを作成
Zabbix用DB作成します。ここでは zabbixという名前にします。

```ruby:
[zabbix@test01 ~]$ createdb zabbix -O zabbixadm
[zabbix@test01 ~]$ psql -l
                           List of databases
   Name    |   Owner   | Encoding | Collate | Ctype | Access privileges
-----------+-----------+----------+---------+-------+-------------------
 postgres  | zabbix    | UTF8     | C       | C     |
 template0 | zabbix    | UTF8     | C       | C     | =c/zabbix        +
           |           |          |         |       | zabbix=CTc/zabbix
 template1 | zabbix    | UTF8     | C       | C     | =c/zabbix        +
           |           |          |         |       | zabbix=CTc/zabbix
 zabbix    | zabbixadm | UTF8     | C       | C     |
(4 rows)
```

### 2.6 初期DBの作成
初期DB作成用のSQL文（圧縮ファイル）から初期DBを作成します。

```ruby:
[zabbix@sistest01 ~]$ zcat /usr/share/doc/zabbix-server-pgsql-3.2.*/create.sql.gz | psql -U zabbixadm zabbix
～省略～
INSERT 0 1
INSERT 0 1
COMMIT
```

## 3.接続ファイルの編集
PostgreSQLへ接続するための、ユーザー名や、ポート番号が変わったため、関連するファイルを編集します。
### 3.1 zabbix.conf.phpファイルの編集
以下の内容を編集します。

$DB['PORT']     = '**5432**';   ⇒　**5433** 
$DB['USER']     = '**zabbix**';　⇒　**zabbixadm**

```ruby:/etc/zabbix/web/zabbix.conf.php
$DB['PORT']     = '5433';
$DB['USER']     = 'zabbixadm';
```

### 3.2 zabbix_server.confの編集
以下の内容を編集します。

DBUser=**zabbix**　　⇒　**zabbixadm**
\#DBPort=            ⇒　 **DBPort=5433**

```ruby:/etc/zabbix/zabbix_server.conf
DBUser=zabixadm
DBPort=5433
```

## 4.プロセスを再起動
Zabbix-Server,Zabbix-Agentを再起動します。

```ruby:
[root@sistest01 ~]# systemctl restart zabbix-server
[root@sistest01 ~]# systemctl restart zabbix-agent
```

## 5.ログイン画面
ブラウザを起動し、接続します。
※昨日個人的に作成したユーザーはいない。
※画面の色もデフォルトにもどっている。

![2017050901JPG.JPG](https://qiita-image-store.s3.amazonaws.com/0/170871/3c1a94a7-9c9e-ec58-9412-a7da404bfcf8.jpeg)

**うまくいきましたね！！**
※このあと、画面の色を変更したりなんだかんだしたことは割愛。

## 6.もともとのDBをドロップ
昨日作成したDB、ユーザーを削除します。

まずはDBを削除。
コマンドは、`drop database データベース名;`

```ruby:
[root@test01 zabbix]# su - postgres
[postgres@test01 ~]$ psql -U postgres
psql (9.6.2)
Type "help" for help.

postgres=# drop database zabbix;
DROP DATABASE
```

次に、ユーザーを削除。
コマンドは、`drop role ユーザー名;`

```ruby:
postgres=# drop role zabbix;
DROP ROLE
```

確認すると、どちらもいません。

```ruby:
[postgres@test01 ~]$ psql -l
                              List of databases
   Name    |   Owner   | Encoding | Collate | Ctype |    Access privileges
-----------+-----------+----------+---------+-------+-------------------------
 dvdrental | zz01adm01 | UTF8     | C       | C     | zz01adm01=CTc/zz01adm01
 postgres  | postgres  | UTF8     | C       | C     |
 template0 | postgres  | UTF8     | C       | C     | =c/postgres            +
           |           |          |         |       | postgres=CTc/postgres
 template1 | postgres  | UTF8     | C       | C     | =c/postgres            +
           |           |          |         |       | postgres=CTc/postgres
 zipcode   | zz01adm01 | UTF8     | C       | C     |
(5 rows)
[postgres@test01 ~]$ psql -c "\du"
                                   List of roles
 Role name |                         Attributes                         | Member of
-----------+------------------------------------------------------------+-----------
 postgres  | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
 zz01adm01 | Create role, Create DB                                     | {}
```

## 7.PostgreSQLも含め、すべて再起動
ほんとうに大丈夫かを確認するため、すべて再起動します。

```ruby:
[root@test01 ~]# systemctl stop zabbix-agent
[root@test01 ~]# systemctl stop zabbix-server
[root@test01 ~]# su - zabbix
[zabbix@test01 ~]$ pg_ctl stop
waiting for server to shut down.... done
server stopped
[zabbix@test01 ~]$ pg_ctl -w start
waiting for server to start....< 2017-05-09 20:18:25.721 JST > LOG:  redirecting log output to logging collector process
< 2017-05-09 20:18:25.721 JST > HINT:  Future log output will appear in directory "/prdlog/zabbix".
 done
server started
[zabbix@test01 ~]$ exit
logout
[root@test01 ~]# systemctl start zabbix-server
[root@test01 ~]# systemctl start zabbix-agent
[root@test01 ~]#
```

**OKでした！**

![2017050902JPG.JPG](https://qiita-image-store.s3.amazonaws.com/0/170871/d063feb5-0105-a5fd-b8d5-c8351793443e.jpeg)


勢いだけで作業するのは危険ですね。
最初から考えてやればこんなことしなくてもよかったのですが、いろいろ勉強になりました。