systemctl って何よ?
CentOS 7から自動起動や解除を設定する際に「systemctl」コマンドを使う。
この仕組を利用すればサービスの自動起動だけでなく、プロセスの監視を行い停止したら再起動を行うこともできます。
デーモンって何よ?
iphone のバックグランドで動いているアプリのようなもん。
参考
https://www.ritolab.com/entry/74
https://yomon.hatenablog.com/entry/2016/02/20/162648
では、redis4 で 試してみよう。
・redisのインストール
・サーバー再起動時に自動起動
・redisが落ちてたら10秒後に自動起動
firewall を開ける
大切なのは "使うサーバーに向けてのみFirewallを開ける" ということ。
redisのbind は ローカルIPを指すもので、グローバルIPから直接作業する場合はFirewallで制御する。
firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="グローバルIP" port protocol="tcp" port="6379" accept"
firewall-cmd --reload
success
//ポートが空いたかチェック
firewall-cmd --list-all
ソースからインストール
yum install cpan
yum install gettext
yum grouplist
yum groupinstall 'Development Tools'
yum は古いので
wget http://download.redis.io/releases/redis-4.0.14.tar.gz
# ダウンロードしたソースを解凍する
tar xzf redis-4.0.14.tar.gz
cd redis-4.0.14/
make install
sudo mkdir /etc/redis
sudo cp redis.conf /etc/redis/6379.conf
ln -s /home/hideki/redis-4.0.14/src/redis-server /usr/local/bin/redis-server
ln -s /home/hideki/redis-4.0.14/src/redis-cli /usr/local/bin/redis-cli
フォルダ作成とパーミッション変更
useradd redis
mkdir -p /var/lib/redis/6379
mkdir -p /var/log/redis
mkdir -p /etc/redis
chown -R redis:redis /var/log/redis /var/lib/redis
logfile と dir はパーミッションがおかしいと redisの起動すらしないので、とりあえず起動することを確認してから設定しても良い。
logfile /var/log/redis.log
bind 0.0.0.0 # 全サーバーから接続許可グローバルIPは指定できない。ローカルIPアドレスのみ。
dir /var/lib/redis/6379/
supervised systemd
//パスワードを設定
//ここで設定してうまく動かない場合がある.
//requirepass yourpass
//接続ユーザー数を限定
maxclients 5000
//メモリいっぱいになったら古いデータから消す。期限が設定されていないキーは永遠残るみたいなので。
maxmemory-policy allkeys-lru
//サーバー落ちたらデータ諦める(永続化オフ)
save ""
パスワードを設定する際は、インストール完了後に
/usr/local/bin/redis-cli
redis-cli> CONFIG SET REQUIREPASS ''
をすると良い。じゃないと
NOAUTH Authentication required ってなる場合がある。
[Unit]
Description=Redis
[Service]
Type=notify
ExecStart=/usr/local/bin/redis-server /etc/redis/6379.conf
ExecStop=/usr/local/bin/redis-cli -p 6379 [先程指定しておいたrequirepass]
User=redis
Group=redis
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
Restart は 停止してたら再起動せよ
RestartSec は 10秒後に。
デーモンをリロード
うまく動かない場合は logファイルのパーミッションを疑う。
また、rebootも試してみる。
systemctl daemon-reload
systemctl start redis
systemctl status redis
systemctl enable redis
再起動するか、テスト
1 redis を kill して停止
systemctl stop redis すると自動開始されないので注意。
ちゃんとkill。
ps -ef | grep redis #プロセス番号を調べ
# redis 1531 1 0 15:55 ? 00:00:00
kill -9 1531 #強制停止
2 サーバー再起動
reboot
でサーバーを再起動して自動的に redis が始まるか。
設定がうまくいっていれば両方とも自動で起動する。
ただし、それだけではエラーが出るので
ログファイル /var/log/redis.log
を見ながら修正していく。
https://www.denet.ad.jp/technology/2017/11/redis-centos7.html
https://blog.megunlabo.net/2018/04/03/redis-install/