コピペコードで快適生活

明日使えるソースを自分のために

chefのsearch

コマンドでsearch

# dbを名前に含むnodeを検索する
bundle exec knife search node "name:*db*"

recipe内でsearch

# nameがserver01のnode情報を取得
info = search(:node, 'name:server01')

node以外にもclient、DATA_BAG_NAME、environment、roleから検索可能。 DATA_BAGにusersがある場合、以下のようにしてdatabagの情報を取得できる。

search(:users, 'id:app_user')

参考

https://makotan.hatenadiary.jp/entry/20130410/p1

Linuxグループ

/etc/group

cat /etc/group
root:x:0:root
...
my_group:x:501:user01,user02
  • my_group: グループ名
  • x: シャドウパスワードを使用
  • 501: グループID(GID)
  • user01,user02: セカンダリグループとして所属しているユーザーアカウントのリスト。カンマ区切り。

プライマリグループ/サブグループ

  • ユーザーは、複数のグループに所属する事が可。
  • ユーザーの基本のグループの事をプライマリグループという。( /etc/passwd に指定してあるGIDがそれ)
  • それ以外で所属しているグループの事をセカンダリグループという。
  • ユーザがファイル等を作成した場合、ファイルのグループは、プライマリグループに設定される。

グループの操作

# my_groupグループの作成
groupadd my_group

# GID指定で作成
groupadd -g 520 my_group

# my_groupのGIDを530に変更
groupmod -g 530 my_group

# my_groupの名前をself_groupに変更
groupmod -n self_group my_group

# self_groupの削除
groupdel self_group

セカンダリグループへのユーザ追加/削除

# 追加
gpasswd -a user01 my_group

# 削除
gpasswd -d user01 my_group

参考

sudoers

sudoersはユーザにどんなsudo権限があるかを決定する。

設定ファイル

# /etc/sudoers
# /etc/sudoers.d/*

# 誰が どのホストで=(誰として) 何をできる

# rootユーザは、誰にでもなれて、なんでもできる
root ALL=(ALL:ALL) ALL

# wheelグループは、誰にでもなれて、パスワードなしでなんでもできる
%wheel ALL=(ALL:ALL) NOPASSWD: ALL

# app_userは、rootになれて、sbin/ifconfig を実行できる
app_user ALL=(root) NOPASSWD:/sbin/ifconfig

参考

仮想IPの設定メモ

# eth0に仮想IPアドレス(192.168.1.200)を割り当てる
# ifconfigによる変更はサーバ再起動で無効化。
sudo ifconfig eth0:0 192.168.1.200 netmask 255.255.255.0 up

# 仮想IPアドレスの割当を無効化
sudo ifconfig eth0:0 down

# arpリクエストを投げて、同セグメント内のサーバのarpキャッシュを強制更新する
# -c 3 は3回リクエスト
sudo arping -U 192.168.1.200 -I eth0 -c 3

# arpキャッシュの確認
arp

# IPアドレスを指定してarpキャッシュを削除
arp -d 192.168.1.200

トラブルシュート時に使うコマンドメモ

カーネルのパラメータ確認

すべてのパラメータ(-a)から、パターンマッチしたものを表示
sysctl -a --pattern ***

インターフェース設定ファイル(CentOSのみ)

cat etc/sysconfig/network-scripts/ifcfg-eth0

# 修正後にrestartで反映
systemctl restart network

https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/6/html/deployment_guide/s1-networkscripts-interfaces

DNSサーバの設定

cat /etc/resolv.conf
nameserver 192.168.1.1

ネットワークの通信経路を調べる

traceroute example.com
traceroute 192.168.0.1

ホストのネットワーク統計や状態を確認する

# -n 出力をIPアドレスなど数値のみに抑制する(DNS逆引きを行わないなど)。ほかのオプション内容へ影響する

# ルーティングテーブルの表示
netstat -rn

# 現在のすべての接続を表示する
netstat -an

デフォルトゲートウェイの設定

# 宛先(0.0.0.0/0=全部)アクセス時のGWを追加
route add -net 0.0.0.0/0 gw 192.168.1.1 eth0

# GWを削除
route del -net 0.0.0.0/0 gw 192.168.1.10 eth0

consulことはじめ

全然わかってなかったのでメモ。

概要

  • 何やってくれるの
    • サービスディスカバリやってくれる
    • ヘルスチェック等
  • リーダーについて
    • クラスタとして動作するためにリーダーが必要。
    • リーダーはサーバモードとして立ち上げているノードから自動選出される。
      • 非サーバモードとして立ち上げている場合は選出対象外
    • リーダーはサービスの更新情報を受取り、他のnodeへ情報を伝播させる。
  • consul-template
    • consul-templateは、Consulと連携できるツールの一つで、クラスタのサービスの状態変更を検知して、動的に設定を書き換えたり、コマンドを発行するためのデーモン。
    • たとえば、appサーバの状態を検知して、nginxのupstreamの向き先の更新&reloadを行ったりできる。

コマンド

# consul入っているサーバで実行

# ノードリストの取得
curl -s localhost:8500/v1/catalog/nodes

# nodeを確認できる
consul members (nodeを確認できる)

# メンテモードの切り替え
consul maint # 確認
consul maint -disable # 無効化
consul maint -enable # 有効化

# リーダーの確認
consul info | grep leader

リンク