はじめに
こんにちは、2024年3月にJOB生としてインターンをしていた木村てるです。約1ヶ月の間、スタジオチームにてインターネットインフラの保守、運用、監視業務に携わらせていただきました。この体験記では、本インターンシップを通して自身が学んだこと、感じたことを業務内容と合わせて書いていこうと思います。
目標
私が「CA Tech JOB」に応募した理由は、実務におけるネットワークインフラの保守運用に携わってみたいという思いでした。私は、今年4月からネットワークを専攻する研究室に移動する予定です。研究を行うに先立ち、大規模なネットワークインフラに触れておくことは、現場で求められているネットワークの性質をより良く理解できるという点で、研究の一助となると考えました。
やったこと
スタジオチームでは、CAグループで管理している映像配信・撮影スタジオのインフラ整備を行っています。今回、私自身はお台場にある極AIお台場スタジオにおける監視環境の構築を担当させていただくことになりました。はじめから本番環境で構築を行うには技術的ハードルがあったので、使われていないサーバーやL2SWを用いたテスト環境下で実装を行った後、お台場のデータセンターで実際に監視サーバーの導入・セットアップを行いました。
Zabbixについて
Zabbixは、NWインフラの監視をシンプルかつ効果的に行うためのツールです。サーバーやネットワークデバイス、アプリケーションなど、あらゆる要素をリアルタイムで監視し、問題が発生した際にはすばやく対応できます。使いやすいダッシュボードと柔軟なカスタマイズ機能を備えているため、ユーザーは自分のニーズに合わせて監視を設定できます。また問題が発生した場合には、適切な通知を受け取ることができます。今回は、Zabbixを用いた監視サーバーをdockerを使ってコンテナで構築し、ICMP pingによる死活監視やSNMPトラップをトリガーとしたSlackへのアラートの通知を実装しました。
ここから実務経験を通して得られた学びを大きく3つ紹介します。
仮想化について
仮想化とは、ハードウェアリソース(CPU、メモリ、HDD、SDD等)を論理的に統合や分割することができる技術の総称です。仮想化を実現するサーバ仮想化ソフトには、ホストOS型とハイパーバイザー型の2種類があります。ホストOS型ではホストOSのミドルウェアとして仮想化ソフトが動作するのに対し、ハイパーバイザ型ではホストOSを利用せず仮想化ソフトが直接物理的なハードウェアの入出力を管理します。また、仮想化ソフトウェアを用いずOS上にインストールしたコンテナ管理ソフトウェアを用いて独立したアプリケーションの実行環境を構築するコンテナ型という仮想化技術もあります。コンテナ型は1つのホストOSで稼働することからOSに依るオーバーヘッドがかからないためリソースの消費が少なく、サーバの起動・停止が簡単に行えるという利点があります。今回のインターンシップでは、代表的なコンテナ管理ソフトウェアであるdockerを用いてコンテナ上に監視サーバーを構築しました。
永続化について
次に、永続化についてです。zabbix-dockerで立ち上げたサーバーは以下の画像のようになります。このうちmysql-serverに、MySQLをデータベースとしてホスト情報や監視データが蓄積されていきます。Dockerにおいてデータ永続化とは、コンテナの削除後もコンテナ内で作成・編集したデータを保存するようにすることを指します。私自身はとりあえずdockerを立ち上げていたため、データがどこに保存されているのか理解していませんでした。詳しく調べてみると、dockerには3種類のマウントの種類があるようで、それぞれデータの保存先が異なります(詳細はこちら)。今回のケースでは、compose_databases.yamlの中身を確認することで、以下の情報を得ました。つまり、mysql-serverが立ち上がるときに、先にホストからアタッチされた場所を用いており、データの永続化が実現されていたようです。普段意識していなかったコンテナの揮発性について理解しました。
less compose_databases.yaml version: '3.8' services: mysql-server: image: "${MYSQL_IMAGE}:${MYSQL_IMAGE_TAG}" command: - mysqld - --character-set-server=utf8mb4 - --collation-server=utf8mb4_bin # Only during upgrade from versions prior 6.4 and new installations (schema deployment) - --log_bin_trust_function_creators=1 # Use TLS encryption for connections to database # - --require-secure-transport # - --ssl-ca=/run/secrets/root-ca.pem # - --ssl-cert=/run/secrets/server-cert.pem # - --ssl-key=/run/secrets/server-key.pem restart: "${RESTART_POLICY}" volumes: - ${DATA_DIRECTORY}/var/lib/mysql:/var/lib/mysql:rw - ${ENV_VARS_DIRECTORY}/mysql_init/init_proxy_db.sql:/docker-entrypoint-initdb.d/mysql_init_proxy.sql:ro # - dbsocket:/var/run/mysqld/ env_file: - ${ENV_VARS_DIRECTORY}/.env_db_mysql less .env # Locations DATA_DIRECTORY=./zbx_env
冗長化について
最後に冗長化についてです。NWインフラ冗長化は、サービスの可用性と安定性を確保するために不可欠です。ネットワーク障害やハードウェアの故障などの予期せぬ問題が発生した場合でも、サービスの中断を最小限に抑えることは事業継続性の観点からも必要不可欠です。本インターンシップを通して実際に現場で使われている冗長化技術に触れることができました。
まず、ネットワークの冗長化技術としてリンクアグリゲーション(LAG)について紹介します。LAGは2つ以上の物理ポートを束ねることで仮想的な一本の通信線とみなす技術です。これにより、物理リンクの耐障害性だけでなく、スループットも向上させることができます。またリンクアグリゲーション制御プロトコル(LACP)は、このリンクアグリゲーション技術を管理するためのプロトコルで、IEEE802.3adで標準化されています。本インターンシップでは、LACPに対応している監視サーバーとスイッチの複数ポートを並列に接続しました。これにより、2者間の複数LANケーブルの接続を自動的に検出してLAGとして構成できます。他にも、複数の異なる経路(回線)を通じてインターネットへの接続を確保するマルチホーミングによりネットワーク回線の冗長化を計りました。実際、お台場のサーバルームでコンフィグレーションを行っている際、片方のネットワーク回線にてpingが断片的にしか飛ばなくなり障害が生じたことがありました。このような状況下でもマルチホーミングの採用により常にネットワーク接続を維持することができます。
次に、ディスク冗長化としてストレージの仮想化技術を紹介します。RAID(Redundant Arrays of Inexpensive Disks)は、複数のハードディスクを組み合わせることによりディスクを冗長化する技術です。RAIDにはいくつか種類があります。RAID0ではデータを複数のハードディスクに分散して読み書きします。そのため、アクセスは高速化されますがこのRAID構成のみでは冗長性や耐障害性がありません。一方、RAID1は複数のハードディスクに同じ内容を書き込むことで冗長化します。ただし、利用効率が低くなる点や読み出し書き込みに対する速度が遅くなる点が難点として挙げられます。またRAID1とRAID0の機能を組み合わせたRAID10では、読み書きの高速化と耐障害性の両方を実現します(最低4つのHDDが必要)。また、RAID5では、データから誤り訂正符号を生成して、3台以上のハードディスクに分散して書き込みします。メリットとして1台のHDDが故障してもデータの復元が可能となる点がある一方で、デメリットとしては2台以上の故障には対応できない点やパリティ機能による利用効率の低下が挙げられます(それぞれの構成についてもっと詳しく知りたい方はこちらをご参照ください)。本業務では、RAID5を採用して監視サーバーをセットアップしました。その他にも、無停電電源装置(UPS)や複数電源設置による電源の冗長化や、仮想IPアドレスに繋いだサーバーを2台待機させておくサーバーの冗長化も見られました。ネットワークインフラはサービス継続のためのライフラインです。いつ何時もインフラをダウンさせないための様々な工夫を体感しました。
インターンを通しての感想
本インターンは、国内有数の大規模なネットワークインフラの保守に携わることができる大変貴重な機会でした。初めて足を踏み入れたデータセンターにて実際にサーバーを設置したのはいい思い出です。技術面では、初学者の自分には日々知らないことの連続でとても充実した1ヶ月でした。特に実務の観点から冗長化技術に関する理解は就業前に比べてかなり深まったと思います。また、サイバーエージェントで働くというイメージがより鮮明にできるようになったことも本インターンシップの魅力だと思います。社員の皆さんにランチに連れて行ってもらったり、別部署との共同開催のLT会に参加したりとたくさん内部の方と話す機会がありました。挑戦的な社内カルチャーはとてもいいなと感じました。また人事の方との週次面談では自身の将来像や就活の軸について親身に相談に乗っていただき感謝しかありません。自分が目指すエンジニア像や、その職業に求められるスキルや姿勢が少しずつ明瞭になってきました。
最後に
スタジオチームの皆さん、1ヶ月間温かく迎え入れていただき本当にありがとうございました。CA Tech JOBでの経験を通じて、学生では得られない貴重な知識や経験を手に入れることができました。今後2年間学生を継続しますが、業務で求められる知識や経験の幅を広げるために、さらに努力し続けます。改めて、この1か月間、本当にお世話になりました。