【kafka】 kafkaの中身が見たいとき

trifectaを使います。

バイナリがあるので、ビルドは必要ありません。

wget https://github.com/ldaniels528/trifecta/releases/download/v0.22.0rc8-0.9.0.1/trifecta-cli-0.22.0rc8b-0.9.0.1.bin.jar
wget https://github.com/ldaniels528/trifecta/releases/download/v0.22.0rc8-0.9.0.1/trifecta-ui-0.22.0rc8b-0.9.0.1.zip
unzip trifecta-ui-0.22.0rc8b-0.9.0.1.zip
cd trifecta-ui-0.22.0rc8b-0.9.0.1/bin/
./trifecta-ui &

設定が必要なら、$HOME/.trifecta/config.properties を適当に編集して./trifecta-ui &を起動し直します。

ブラウザで hostname:9000 にアクセスします。

“Observe”のタブからkafkaの中身を見れます。

【debezium/kafka】 kafkaに外部から繋ぎたいとき

デフォルトだとkafka:9092に外から繋げません(たぶん)。

docker-compose.yamlに

kafka:
    (snip)
    environment:
        ADVERTISED_LISTENERS: "PLAINTEXT://xxx.xxx.xxx.xxx:9092"

xxx.xxx.xxx.xxxに外部から接続したい、ホストのアドレスを入れるとつながるようになります。

上記のようにした場合は、SECURITY_PROTOCOL_CONFIGをPLAINTEXTにして繋ぐのをお忘れなく。

【CentOS7】 ESXiでrootパーティションの容量を増やす

CentOS 7.6-1810 での例

この方法では、拡張したいパーティションの末尾を変更して拡張するため、fdisk -l とし、当該パーティションが当該ディスクの一番後ろのパーティションであることを確認しておきます。私の環境の場合、/dev/sda2 でした。

確認したら、ESXi側でディスクの容量を増やしておきます。

vmをリブートして、 fdisk /dev/sda とし、拡張したいパーティションを削除し、同じ番号でディスクの最後まで使い切ったパーティションを作成します。pで確認、wで保存するのを忘れずに。

vmをリブートします。

pvresize /dev/sda2
lvextend -l +100%FREE /dev/centos/root
xfs_growfs /dev/mapper/centos-root

と続けて実行します。

以上。

【CentOS7】 MongoDBを2.6から3系にアップデートする

いろいろと面倒なことはせず、サクッとダンプ&リストアでやっつけます。

バックアップ&古いの削除

service mongod stop
mkdir mddump
mongodump --dbpath /var/lib/mongo ./mddump
mkdir mdbackup
mv /var/lib/mongo ./mdbackup/
yum remove mongo*     

3.2インストール

vi /etc/yum.repos.d/mongodb-org-3.2.repo とし、内容を

[mongodb-org-3.2]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.2/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.2.asc

とします。
もっと新しいバージョンにしたい方は https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat/ をご参照ください。

yum install mongodb-org mongodb-org-server を実行します。

vi /etc/mongod.conf とし、17行目のコメントを外した上で

engine: wiredTiger

とします。engineという文字列の前に行頭から半角空白が二個入っているようにします。コロンの後ろのスペースも必要です。

リストア

service mongod start
mongorestore ./mddump

以上~

【CentOS7】 firewalldを利用しているサーバで、特定のポートを公開する / 公開ポートを閉める

80番ポートを空ける

# firewall-cmd --zone=public --add-port=80/tcp --permanent
# firewall-cmd --reload

80番/443番ポートを空ける

# firewall-cmd --zone=public --add-port=80/tcp --permanent
# firewall-cmd --zone=public --add-port=443/tcp --permanent
# firewall-cmd --reload

連続したポートを空ける(例:45000-45300番ポートを空ける)

# firewall-cmd --zone=public --add-port=45000-45300/tcp --permanent
# firewall-cmd --reload

80番ポートを非公開にする

# firewall-cmd --zone=public --remove-port=80/tcp --permanent
# firewall-cmd --reload

80番/443番ポートを非公開にする

# firewall-cmd --zone=public --remove-port=80/tcp --permanent
# firewall-cmd --zone=public --remove-port=443/tcp --permanent
# firewall-cmd --reload

連続したポートを非公開にする(例:45000-45300番ポートを閉める)

# firewall-cmd --zone=public --remove-port=45000-45300/tcp --permanent
# firewall-cmd --reload

【CentOS7】 MySQL InnoDB Cluster の構築

詳しくは https://dev.mysql.com/doc/refman/5.7/en/mysql-innodb-cluster-production-deployment.html をご確認ください。


はじめに

CentOS7サーバを3から4台くらい起動します。
最低3台のDBサーバと一台のルーターサーバが必要です。
ルーターサーバはDBサーバと同居できますが、できれば分離した方が良いでしょう。
そうすると4台が最小構成となります(DBサーバx3台+ルーターサーバx1台)


初期設定

全台ともに
#vi /etc/selinux/config とし

SELINUX=disabled

としてから reboot し、

# yum install -y http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
# yum remove -y mysql-libs

を実行しておきます。


dbサーバの設定

下記の設定を3台かそれ以上のdbサーバに適用してください。

# yum install -y mysql-server mysql-shell
# service mysqld start

$ cat /var/log/mysqld.log | grep temporary とし、出てきたパスワードで mysql -u root -p とします。

SET PASSWORD = "MySQL_5.7";
UNINSTALL PLUGIN validate_password;
SET PASSWORD = "なにがしかのパスワード";
\q

$ mysqlsh とし、

    >dba.configureLocalInstance('root@localhost:3306')

    Please provide the password for 'root@localhost:3306':

    Detecting the configuration file...
    Found configuration file at standard location: /etc/my.cnf
    Do you want to modify this file? [Y|n]:  [Y|n]: Y

    MySQL user 'root' cannot be verified to have access to other hosts in the network.

    1) Create root@% with necessary grants
    2) Create account with different name
    3) Continue without creating account
    4) Cancel
    Please select an option [1]: 2

    account name= clusteradmin
    >\q

# service mysqld restart します。


クラスタの作成

クラスタのうちのどれかから以下を実行します。

$ mysqlsh

    dba.checkInstanceConfiguration('clusteradmin@クラスタ内dbサーバ1のIPアドレス:3306')
    dba.checkInstanceConfiguration('clusteradmin@クラスタ内dbサーバ2のIPアドレス:3306')
    dba.checkInstanceConfiguration('clusteradmin@クラスタ内dbサーバ3のIPアドレス:3306')
    shell.connect('clusteradmin@クラスタ内dbサーバ1のIPアドレス:3306')
    var cluster = dba.createCluster('Cluster001(←クラスタ名、任意の名前でokです)')
    cluster.addInstance('clusteradmin@クラスタ内dbサーバ2のIPアドレス:3306');
    cluster.addInstance('clusteradmin@クラスタ内dbサーバ3のIPアドレス:3306');

クラスタ化されたコンフィグの保存

各dbサーバで修正されたコンフィグをセーブします。
三台かそれ以上のdbサーバすべてで実行してください。

$ mysqlsh

    >dba.configureLocalInstance('clusteradmin@localhost:3306')

スレーブサーバの場合、以下のようになります

    Do you want to disable super_read_only and continue? [y|N]:y

routerサーバの設定

通常、dbサーバではないサーバでrouterを実行します。

# yum install -y mysql-router mysql-shell
$ mysqlrouter --bootstrap clusteradmin@クラスタ1のIPアドレス:3306 --user=mysqlrouter --conf-base-port 3306
# service mysqlrouter start

おまけ

ちゃんと動いてるかどうかテスト

# クラスタ内dbサーバ1が r/w serverになっていると思うので、 rootでログインし、以下のようにします。 本番環境ではadminの接続元を制限し、パスワードを設定してください。
create user admin@'%' identified by 'admin';
grant all on *.* to admin@'%';

# ルーターサーバで以下を実行し、sqlがクラスタ内dbサーバすべてに反映されているか確認します。
$ mysql-shell
mysql-sql> \connect admin@10.10.16.209   //ルーターサーバ自身のアドレス
create database testbase;
use testbase;
CREATE TABLE item (
  id INT PRIMARY KEY AUTO_INCREMENT,
  name VARCHAR(10),
  description VARCHAR(30),
  price INT UNSIGNED,
  created_at DATETIME
);

【CentOS7】 acme-tinyをyumでインストールし、let’s encryptでSSL証明書を取得する

acme-tinyはapacheの再起動とか余計なことをしないので、certbotより使いやすいと思います。
詳しくは https://github.com/diafygi/acme-tiny をご参照ください。

認証したいドメイン名が 171220.0x0c.info で、httpサーバに apache 2.4.8以降を用いる場合で説明します。


Step 1

このへんは環境に合わせてください↓

yum install httpd mod_ssl
yum install epel-release 
yum install acme-tiny

Step 2

acme-tinyをインストールすると /etc/httpd/conf.d/acme.conf/var/www/challenges/ ができるので、apacheをリロードするなりここから起動するなりします。

service httpd start

Step 3

アカウントキー作成

openssl genrsa 4096 > /var/lib/acme/private/account.key

Step 4

ドメイン用の秘密キー作成

openssl genrsa 4096 > /var/lib/acme/private/171220.0x0c.info.key

Step 5

リクエスト作成

openssl req -new -sha256 -key /var/lib/acme/private/171220.0x0c.info.key -subj "/CN=171220.0x0c.info" > /var/lib/acme/csr/171220.0x0c.info.csr

Step 6

let’s encryptにリクエストする

/usr/sbin/acme_tiny --chain --account-key /var/lib/acme/private/account.key --csr /var/lib/acme/csr/171220.0x0c.info.csr --acme-dir /var/www/challenges/ > /var/lib/acme/certs/171220.0x0c.info.crt

Step 7

できあがった証明書と秘密鍵をコピーしてapacheをリロード。
このあたりも環境に合わせてください。

cp /var/lib/acme/private/171220.0x0c.info.key /etc/pki/tls/private/localhost.key
cp /var/lib/acme/certs/171220.0x0c.info.crt /etc/pki/tls/certs/localhost.crt
service httpd reload

Step 8

以下のようなスクリプトを作り、一ヶ月に一回cronで回す。

#!/bin/sh
/usr/sbin/acme_tiny --chain --account-key /var/lib/acme/private/account.key --csr /var/lib/acme/csr/171220.0x0c.info.csr --acme-dir /var/www/challenges/ > /var/lib/acme/certs/171220.0x0c.info.crt || exit
cp /var/lib/acme/certs/171220.0x0c.info.crt /etc/pki/tls/certs/localhost.crt
/usr/sbin/service httpd reload

おまけ:nginxの場合

上記Step 5とStep 6の間に、以下のようにnginxを設定し、リロードしておきます。

server {
        listen 80 default_server;

の下に以下のように設定します。

        #for acme-tiny
        location /.well-known/acme-challenge/ {
            alias /var/www/challenges/;
            try_files $uri =404;
        }

【CentOS7】 ipv6を無効にする

Step 1

/etc/sysctl.conf に

net.ipv6.conf.all.disable_ipv6=1
net.ipv6.conf.default.disable_ipv6=1

の二行を追加する。

Step 2

/etc/sysconfig/network-scripts/ifcfg-*IPV6INIT=yes の記述があれば、 IPV6INIT=no に変更する。

Step 3

/etc/hosts にipv6ローカルアドレスの記述(::1から始まる行)があればコメントアウトする。

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
#::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

Step 4

再起動する。
# reboot