【proxy】踏み台経由でデータを同期する【rsync】

こんにちは。
踏み台を経由して rsync でデータ同期する方法を、自分用の備忘録として残しておきます。

↓ 前提として同期先、及び、踏み台に root ユーザで接続できる必要があります。

【AWS】EC2 に root ユーザで接続する【サーバ移設】


# SSH 接続設定
vi ~/.ssh/config
============================================================
# 踏み台サーバ
Host mng-bastion01
    # IP アドレス ( 踏み台サーバ )
    HostName      111.111.111.111
    # 接続ユーザ ( 踏み台サーバ )
    User          root
    # 秘密鍵 ( 踏み台サーバ )
    IdentityFile  ~/.ssh/root_secretkey

# ステージングサーバ
Host stg-web01
    ProxyCommand  ssh -W %h:%p mng-bastion01
    # IP アドレス ( ステージングサーバ )
    HostName      222.222.222.222
    # 接続ユーザ ( ステージングサーバ )
    User          root
    # 秘密鍵 ( ステージングサーバ )
    IdentityFile  ~/.ssh/root_secretkey

# 本番サーバ
Host prod-web01
    ProxyCommand  ssh -W %h:%p mng-bastion01
    # IP アドレス ( 本番サーバ )
    HostName      333.333.333.333
    # 接続ユーザ ( 本番サーバ )
    User          root
    # 秘密鍵 ( 本番サーバ )
    IdentityFile  ~/.ssh/root_secretkey
============================================================
    
# パーミッションを調整
chmod 600 ~/.ssh/config

# 接続確認
ssh mng-bastion01
ssh stg-web01
ssh prod-web01

# /path/to/sync_dir を同期先の /path/to/ 配下に同期 ( ドライラン )
rsync -avzn --bwlimit=6400 -e 'ssh -i ~/.ssh/root_secretkey' /path/to/sync_dir stg-web01:/path/to/
rsync -avzn --bwlimit=6400 -e 'ssh -i ~/.ssh/root_secretkey' /path/to/sync_dir prod-web01:/path/to/

# /path/to/sync_dir を同期先の /path/to/ 配下に同期
rsync -avz --bwlimit=6400 -e 'ssh -i ~/.ssh/root_secretkey' /path/to/sync_dir stg-web01:/path/to/
rsync -avz --bwlimit=6400 -e 'ssh -i ~/.ssh/root_secretkey' /path/to/sync_dir prod-web01:/path/to/


# 同期元の /path/to/sync_dir を /path/to/ 配下に同期 ( ドライラン )
rsync -avzn --bwlimit=6400 -e 'ssh -i ~/.ssh/root_secretkey' stg-web01:/path/to/sync_dir /path/to/
rsync -avzn --bwlimit=6400 -e 'ssh -i ~/.ssh/root_secretkey' prod-web01:/path/to/sync_dir /path/to/

# 同期元の /path/to/sync_dir を/path/to/ 配下に同期
rsync -avz --bwlimit=6400 -e 'ssh -i ~/.ssh/root_secretkey' stg-web01:/path/to/sync_dir /path/to/
rsync -avz --bwlimit=6400 -e 'ssh -i ~/.ssh/root_secretkey' prod-web01:/path/to/sync_dir /path/to/

【AWS】EC2 に root ユーザで接続する【サーバ移設】

こんにちは。
rsync でデータ同期を行う際、一般ユーザを用いてしまうと owner と group が適切に設定されないケースがあるようです。
AWS EC2 ( AmazonLinux ) のデフォルト設定では root ユーザでの接続ができないので、後述のように設定を調整します。

# 設定ファイルをバックアップ
cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config.org
diff /etc/ssh/sshd_config /etc/ssh/sshd_config.org

# sshd 設定ファイルの調整
vi /etc/ssh/sshd_config
======================================
#PermitRootLogin forced-commands-only
PermitRootLogin without-password
======================================
# sshd 設定ファイルの syntax チェック
sshd -t

# sshd 再読み込み
/etc/init.d/sshd reload

# sshd の起動を確認
netstat -lntp | grep sshd

# root ユーザの公開鍵追記
vi /root/.ssh/authorized_keys
=======================================
ssh-rsa xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
=======================================

※ 秘密鍵、公開鍵のキーペアは下記コマンドで作成できます。
ssh-keygen -b 2048 -t rsa -f ./key_name

【サーバ移設】Linux の OS ユーザ移設【Tips】

こんにちは。
Linux サーバを移設する際に OS ユーザを移設先サーバにも作成する必要があるんですが、大量に OS ユーザが存在すると面倒くさいですよね。
そんなときは /etc/passwd 関連ファイルをコピーするといいらしいです。
※ 普通に実施すると権限がないので下記の手順が必要です。

# /etc/passwdを編集
vipw
=======================================
user1:x:515:515::/home/user1:/bin/bash
user2:x:504:504::/home/user2:/bin/bash
=======================================
:wq!

# /etc/shadowを編集
vipw -s
=======================================================================================================================
user1:$6$43wzBE4t$XVEOEQpipC9FRocISuPMZ47qPIPwG70sjm2S7ADy4scuwtuBBSlA70q/w0nduW1A2dHUkpVqEW8KW8Ro0:17387:0:99999:7:::
user2:$6$G8m9jYDT$X53N71JCVXbbJnDLrvBED67ZrrwtL.hfJa.9sosksjwnaUtlLF/K0F2l9KvmsgrULgFQ/KahH6C.:17220:0:99999:7:::
=======================================================================================================================
# 保存できないので無理やり保存する
:w !sudo tee %
:q!

# /etc/groupを編集
vigr
=============
user1:x:515:
user2:x:504:
=============

# /etc/gshadowの編集
vigr -s
===========
user1:!::
user2:!::
===========
# 保存できないので無理やり保存する
:w !sudo tee %
:q!

【redash】dumpファイルからの復旧/データ移行【Docker】

【redash】Dockerコンテナ内部からdumpデータを取得【シェルスクリプト】


↑dumpデータの取得はこちらで。

dumpデータから redash のレストア/データ移行手順になります。

# コンテナ停止
docker-compose -f docker-compose-redash.yml down --remove-orphans

# PostgreSQLのコンテナのみ起動
docker container run -d -v /path/to/postgres-data:/var/lib/postgresql/data -p 5432:5432 postgres:9.5.6-alpine

# PostgreSQLのコンテナIDを確認
docker ps | grep postgres | awk '{print $1}'

# dumpファイルをコンテナに転送
docker container cp /path/to/redash-backup_$(date +"%Y%m%d").gz [コンテナID]:/usr/local/redash-backup_$(date +"%Y%m%d").gz

# DBの削除
docker container exec [コンテナID] /bin/bash -c 'psql -c "drop database if exists postgres" -U postgres template1'

# DBの作成
docker container exec [コンテナID] /bin/bash -c 'psql -c "create database postgres" -U postgres template1'

# dumpデータのインポート
docker container exec [コンテナID] /bin/bash -c 'zcat /usr/local/redash-backup_$(date +"%Y%m%d").gz | psql -U postgres -d postgres'

# PostgreSQLのコンテナ停止
docker container stop [コンテナID]

# PostgreSQLのコンテナ削除
docker container rm [コンテナID]

# コンテナ起動
docker-compose -f docker-compose-redash.yml up -d

↓redash の構築方法はこちら

【Docker】redashの構築【CentOS7】

【redash】Dockerコンテナ内部からdumpデータを取得【シェルスクリプト】

そういえば redash のバックアップを取得していなかったなと気づきまして。
どうやらコンテナ内部の PostgreSQL の dumpデータを取得するればいいようです。

↓こんな感じのシェルスクリプトをcronで定期実行すればいいですね!

#!/bin/sh

# バックアップディレクトリを定義
BACKUP_DIR=/var/backup
# バックアップファイルを保持する期間を定義
TIME=3

# DBのコンテナIDを取得
CID=$(docker container ls | grep postgres | awk '{print $1}')

# dumpを取得
docker container exec ${CID} /bin/bash -c 'pg_dump -U postgres postgres | gzip > /usr/local/redash-backup.gz'

# ホストにdumpを転送
docker container cp ${CID}:/usr/local/redash-backup.gz ${BACKUP_DIR}/redash-backup_$(date +"%Y%m%d").gz

# dumpのローテート設定
find ${BACKUP_DIR}/ -daystart -name '*.gz' -mtime +${TIME} -delete

↓redashの構築方法はこちら

【Docker】redashの構築【CentOS7】

【AWS】ダウンタイムなくルートパーティションを拡張してみる【ディスク拡張】

AWS の EC2 にアタッチしている EBS のボリュームサイズを変更してから、ファイルシステムの拡張を行う手順になります。
ダウンタイムなく実施してみます。

ボリュームサイズ変更

[root@ip-172-31-35-200 ~]# lsblk
NAME    MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda    202:0    0  16G  0 disk
mqxvda1 202:1    0   8G  0 part /

ディスクが拡張された状態で認識されてますね。

パーティション拡張

[root@ip-172-31-35-200 ~]# growpart /dev/xvda 1
CHANGED: partition=1 start=4096 old: size=16773087 end=16777183 new: size=33550303 end=33554399

[root@ip-172-31-35-200 ~]# lsblk
NAME    MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda    202:0    0  16G  0 disk
mqxvda1 202:1    0  16G  0 part /

[root@ip-172-31-35-200 ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        475M     0  475M   0% /dev
tmpfs           492M     0  492M   0% /dev/shm
tmpfs           492M  400K  492M   1% /run
tmpfs           492M     0  492M   0% /sys/fs/cgroup
/dev/xvda1      8.0G  1.3G  6.8G  16% /
tmpfs            99M     0   99M   0% /run/user/1000

まだファイルシステム上では認識されてないですね。

ファイルシステム拡張

[root@ip-172-31-35-200 ~]# xfs_growfs /dev/xvda1
meta-data=/dev/xvda1             isize=512    agcount=4, agsize=524159 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1 spinodes=0
data     =                       bsize=4096   blocks=2096635, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 2096635 to 4193787


[root@ip-172-31-35-200 ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        475M     0  475M   0% /dev
tmpfs           492M     0  492M   0% /dev/shm
tmpfs           492M  400K  492M   1% /run
tmpfs           492M     0  492M   0% /sys/fs/cgroup
/dev/xvda1       16G  1.3G   15G   8% /
tmpfs            99M     0   99M   0% /run/user/1000

拡張できましたね。
※ ファイルシステムが ext4 の時は resize2fs を使う。

【bash】アクセスログ集計【チラ裏】

完全にチラ裏ですね。よく忘れるので…

# アクセスの多いIPアドレスの上位10件を表示
tail -n 10000 fingerease.work_access.log | awk '{print $1}' | cut -f2 | cut -d: -f2 | sort -n | uniq -c | sort -rn | head

# 分単位のアクセス数を表示
tail -n 10000 fingerease.work_access.log | awk '{print $4}' | awk -F":" '{print $1" "$2":"$3}' | sort | uniq -c

【Docker】redashの構築【CentOS7】

担当した案件で CentOS7 に redash を導入したんでその時の備忘録になります。
なんか色々と嵌った気がします。

# 必要なパッケージの導入
yum install epel-release -y
yum install docker docker-compose -y

# docker操作用の権限を一般ユーザに追加
sudo groupadd docker
sudo gpasswd -a $USER docker
sudo systemctl restart docker


# docker-compose.ymlファイルを用意
cat <<EOF > docker-compose-redash.yml
version: '2'
services:
  redis:
    image: redis:3.0-alpine
    restart: always

  server:
    image: redash/redash:latest
    command: server
    depends_on:
      - postgres
      - redis
    ports:
      - "5000:5000"
    environment:
      PYTHONUNBUFFERED: 0
      REDASH_LOG_LEVEL: "INFO"
      REDASH_REDIS_URL: "redis://redis:6379/0"
      REDASH_DATABASE_URL: "postgresql://postgres@postgres/postgres"
      REDASH_COOKIE_SECRET: veryverysecret
      REDASH_WEB_WORKERS: 4
    restart: always

  worker:
    image: redash/redash:latest
    command: scheduler
    environment:
      PYTHONUNBUFFERED: 0
      REDASH_LOG_LEVEL: "INFO"
      REDASH_REDIS_URL: "redis://redis:6379/0"
      REDASH_DATABASE_URL: "postgresql://postgres@postgres/postgres"
      QUEUES: "queries,scheduled_queries,celery"
      WORKERS_COUNT: 2
    restart: always

  postgres:
    image: postgres:9.5.6-alpine
    volumes:
      - ~/postgres-data:/var/lib/postgresql/data
    restart: always
EOF

# docker上に環境構築
docker-compose -f docker-compose-redash.yml run --rm server create_db

# docker上のredash起動
docker-compose -f docker-compose-redash.yml up -d

5000ポートで listen するんで、フロントに Nginx を置いてリバプロするのがいいですね。

【rbenv】rubyの導入、操作方法【チラ裏】

よく忘れちゃうんで纏めておきます。

# 必要なパッケージ導入
yum install -y git gcc gcc-c++ openssl-devel readline-devel

# rbenvのインストール
cd /usr/local
git clone git://github.com/sstephenson/rbenv.git rbenv
git clone git://github.com/sstephenson/ruby-build.git rbenv/plugins/ruby-build

# 環境変数の設定
vi /etc/profile.d/rbenv.sh
=====================================
export RBENV_ROOT="/usr/local/rbenv"
export PATH="${RBENV_ROOT}/bin:${PATH}"
eval "$(rbenv init --no-rehash -)"
=====================================
# 設定の反映
source /etc/profile.d/rbenv.sh

# 導入できるバージョンを確認
rbenv install --list

# rubyのインストール
rbenv install 2.2.2
rbenv global 2.2.2
rbenv rehash

# インストールしているrubyの確認
rbenv versions

# rubyの切り替え
rbenv global 2.7.0

# bundlerのインストール(-vでバージョン指定)
gem install bundler -v 1.16.5

【JDK】Remote host closed connection during handshakeのエラー【apache】

Remote host closed connection during handshake ってエラーがでて四苦八苦した備忘録です。

背景

サーバにて表題のエラーがでて困ったの。

結論

IBM JDK は TLSv1.0 で通信するそうな。
根本的な要因は Apache の設定で TLSv1.1 / TLSv1.2 以外のプロトコルを許可していなかったため。

↓ Apache のパラメータを下記のように書き換え

# TLSv1.0 含め許可
====================================
SSLProtocol ALL -SSLv2 -SSLv3
====================================

# Apache リロード
systemctl reload httpd

下記サイトで許可している SSLProtocol を確認できます。
https://www.cman.jp/network/support/ssl.html