ビッグデータ分散式クラスタの組立
本記事は分散式クラスタを組み立てる時にどんな準備が必要かと詳しく説明するんです。仮想マシンのインストールから分散式クラスタの組立、整備まで完全に紹介します。
第1節 仮想マシンのインストール
VMwareの選びは普通の完全版を使用していい。仮想マシンのインストールを紹介します。
- 新しい仮想マシンを作成し、カスタマイズ選択肢を選び
- Workstation 15.x互換性の選択肢
- 仮想マシンを作成した後でLinuxをインストール
- 仮想マシンを格納する目録を添加
- コンピュータ資源の設定
実際の状況に応じて変数を設定できるけれど、ビッグデータには高いプロセッサ性能が必要ため、できるだけ十分の資源を分配してあげます。特別に後のストレージ大小の設定には20Gを勧め、事後ストレージを再追加したら面倒になります。 - 元のままで「Next」を押し
- ストレージ大小が20GB
ここで仮想マシンの作成が終わりました。
第2節 CentosOSのマウント
Linux01仮想マシンの設定画面に入って、イメージファイルを選択する。OSのバージョンはCentOS-7-x86_64-DVD-1810.iso
を選択し、互換性を考えてHadoop、HBase、Zoookeeperなどソフトウェアがそのバージョン下に順調に運行できることが確認しました。このバージョンを使用して不明のエラーを避けられます。
ダウンロードURL:https://ftp.iij.ad.jp/pub/linux/centos-vault/7.6.1810/isos/x86_64/
Liunⅹ01仮想マシンを起動し、「Install CentOS 7」を選択してOSに入って、Centosのインストールを始めます。
- 自らの情況に応じて選択
- INSTALLATION DESTINATIONに入って
- 自分で手動的にディスクを分配すると選択し
図の表れのようにディスク仕切りを作成します。三つ部分で組み合わせ、根目録/
にはbootやswapを除いて残りの全て空間を分配し、特にストレージ大小を入力のが必要ない。
- 図のように完成したら「Done」を押して変更一覧が表れ、「Accept Changes」ボタンを押し
- OSのインストール開始
- rootのパスワードを設定
rootユーザーが十分で他の新ユーザーが必要ない。後は、boot分配されたの大小が足りないなら、このインストール画面に止まて進められないという情況に遭います。
- OSを起動流れに入り
- rootユーザー名とパスワードを入力し
全て問題ないなら、ここでCentosOSのインストールが全部終わりました。
第3節 OSの環境整備
3.1 ネットワーク設定
ネットワーク設定する前にちょっとVMwareのネットワーク変数を確認しておき、仮想マシンには任意のIPアドレスに書き込むのが駄目です。
- 特別の変更点がない
- IPアドレスはGateway IP前の6位の値「192.168. 31」と一致にし
- 最後の3位の数値が「128~254」範囲内に指定
固定IPアドレスの設定
OSシステムのコマンド画面に入ってip addr
を入力してIPアドレスに関する情報が欠けることが見えます。従って、目下の任務は手動でシステム設定ファイルを修正してサーバを外部のネットに接続させます。
VI編集ツールを使って「ifcfg-ens33」ファイルを開きます。
vi /etc/sysconfig/network-scripts/ifcfg-ens33
以下のように自分のネットワーク変数に応じて改修をします。
#改修の部分
BOOTPROTO=static
ONBOOT=yes
#添加の部分
#最後の3行の変数がVMwareネットワーク変数に一致を確保
IPADDR=192.168.31.135
NETMASK=255.255.255.0
GATEWAY=192.168.31.2
DNS1=192.168.31.2
#ネットワークを再起動
service network restart
#ネットワークが通じるかどうか検査
ping yahoo.com
- 新たなIPアドレス
3.2 基本環境設定
ネットワークを設定してIPアドレスが決またから、外部からOSシステムに通信することができます。ここでSecureCRTツールを使用してVMwareに代わってOSに訪問します。リモート訪問、ファイル転送、コーヒーなど操作がSecureCRTに実行しては便利になります。以下の図がSecureCRTツールでサーバに登録の流れを示します。
- 常用ツールのインストール
#vim編集器
yum install vim
firewall/selinux停止
ビッグデータシステムは一般的に企業内部に使用されるの存在で、クラスタ間に通信の安全性を考えることが少ない、firewallとselinuxなど安全保障を停止にして必要ないエラーを避けられます。
#firewall停止
systemctl stop firewalld
#システムの起動時にfirewalldが自動的に起動しないようにする
systemctl disable firewalld
#firewall状態を検査
systemctl status firewalld
vim /etc/selinux/config
#「SELINUX=enforcing」を註釈になって、「SELINUX=disabled」を追加
SELINUX=disabled
仮想マシン名称やhostname
その部分目的は仮想マシン名称、hostname、IPアドレスを統一になります。
- 仮想マシン名称の改修
- hostname改修
vim /etc/sysconfig/network
#以下内容を添加
NETWORKING=yes
hostname=centos1
#ネットワークを再起動
service network restart
- hostnameやIPアドレスのマッピング添加
vim /etc/hosts
#以下の内容ように添加し、再起動は必要ない
192.168.31.135 centos1
192.168.31.136 centos2
192.168.31.137 centos3
192.168.31.138 centos4
JDKインストール
ビッグデータはJavaの基準パッケージを引用することがあり、特別Hadoopシステムが元にJava言語で構成されるものです。
JAVA8のダウンロードURL:Java Archive Downloads - Java SE 8 (oracle.com)
- OS自分のJDKを検査
rpm -qa | grep java
- あるなら下のコマンドに入力して消除し、複数のパッケージ存在のが並べて書き込み
rpm -e java-1.6.0-openjdk-1.6.0.41-1.13.13.1.el6_8.x86_64 tzdata-java-2016j-1.el6.noarch --nodeps
- 新しい目録を作成して、JDKパッケージをアップロードする
#目録を作成
mkdir -p /opt/bigdata/servers
#JDKパッケージをアップロード
rz
#パッケージ解凍
tar -zxvf jdk-8u231-linux-x64.tar.gz
#元のパッケージを消除
rm jdk-8u231-linux-x64.tar.gz
#環境変量ファイルを開く
vim /etc/profile
#「$PWD」命令は当のファイルアドレスを表せる
#最後に以下の内容を書き込み
export JAVA_HOME=/opt/bigdata/servers/jdk1.8.0_231
export PATH=:$JAVA_HOME/bin:$PATH
#環境変量ファイルを有効にする
source /etc/profile
#インストールしたか検査
java -version
単数のサービスの設定がここで終わり、次は複数のサービスのクラスタを作成や設定であります。
第4節 クラスタの環境整備
4.1 クラスタの組立
VMwareツールを使って当のCentos1仮想マシンをクローンして、別の3つの仮想マシンを作成し、全て4つの仮想マシンを共にクラスタに組み立てます。
- 独立、完全のクローン仮想マシンを作成
- 仮想マシンの名称やアドレスを添加
- 大体の説明が終わり、上記のように残りの2つ仮想マシンを作成
クラスタの節点数を奇数にすることがお勧め、3つ又は5つでいい。
4.2 ネットワーク設定
残りの3つ仮想マシンを起動してネットワーク設定を変更します。
- 固定IPアドレスを136に変更
vim /etc/sysconfig/network-scripts/ifcfg-ens33
#この変更点だけ
IPADDR=192.168.31.136
- 対応のサービスのhostnameを改修
vim /etc/sysconfig/network
hostname=centos02
#ネットワークを再起動
service network restart
#IPアドレスを検査
ip addr
#ネットワークが正常に働くかどうか確認
ping yahoo.com
他のCentos3、Centos4は次第に上記のように変更を行います。
4.3 パスワード不要の登録
SSHの説明
この部分は、SSH知識にかかわってあるが、深く了解しては必要ない。一言で言えば、SSH(Secure Shell)はサーバー間の通信の認証や暗号化など働きを提供し、安全性を保証できるの転送手段です。
SSHの通信方式は二つに分けて、パスワード認証や公開鍵認証であります。
前者に主な使い場合はリモートサーバのアクセスです。例えば、SecureCRTツールがSSH方式によってリモートサーバへ接続する選択肢があります。又は、コマンドライン画面にssh root@192.168.31.136
を入力して他のサーバに登録するのもそういうことです。
このパスワードはCentOSのマウント流れにrootユーザーに繋がるもので、SSHに関係ないと「パスワード不要の登録」効果に至りません。
次、後者の認証方式はSSH作成しての公開鍵や秘密鍵を一つの鍵ペアに組み合わせられるかどうかと判断する過程です。例えば、Centos1の鍵ペアが公開鍵や秘密鍵二つの部分に作成され、公開鍵を目標リモートシステムのあるファイルに書き込み、Centos1サーバからコマンド入力又はファイルを転送する時に自分の秘密鍵と格納しておく公開鍵が一組にできるかどうかに応じてCentos1がそのサーバーにアクセスの許可有無があるかと判断してくれます。
その鍵ペアは身元証明書みたい、来訪者の身元証明書を示してサーバーに預かった情報に一致なってアクセスを許可し、その内にユーザーやパスワードの入力などが必要ない。アクセスの流れを減るによってクラスタの間に通信が効率や利便性を向上られ、特に自動化の処理にとって不可欠です。では、公開鍵認証の設定を始めます。
パスワード不要登録の配置
- 全てのサーバに目録を作成し、権限を分配
mkdir /root/.ssh chmod 700 /root/.ssh
- 全てのサーバに鍵ペアを作成
cd ~
#-P変数後ろは""空文字列
ssh-keygen -t rsa -P ""
二度と操作するため、画面の表れがちょっと不同です。
SSH鍵ペアを生成するコマンドで-t
引数は鍵ペアのアルゴリズムを示し、rsaとdsaの二種類があります。-P
引数は鍵ペアを認証の時にパスワードが必要かどうかを決めます。""(空文字列)を書き込むとはパスワードなしの意味です。
今回は特にSSHパスワードを付加してみて、パスワードの入力が必要なので下の図のようにパスワード不要の効果が実現できません。
- 残りの三つサーバが同じに扱い
- ある一つのサーバ(centos1)に以下操作を行い
#.sshに入って
cd ~/.ssh
#id_rsa.pub内容をauthorized_keysファイルに書き込み
cat id_rsa.pub >> authorized_keys
#検査
vim authorized_keys
authorized_keys内容を検査して一段落の文字列が書き込まれたことがあります。それはcentos1サーバの公開鍵です。
- authorized_keysファイルをcentos2サーバに転送して元のファイルを上書き
scp authorized_keys centos2:/root/.ssh
scp authorized_keys centos2:$PWD
centos2へ伝送するファイルが成功かどうか確認し、理論的にcentos1からcentos2までにのアクセスがパスワード認証不要の効果もう実現しました。
- centos2のid_rsa.pub公開鍵をauthorized_keysファイルに書き込み
cat id_rsa.pub >> authorized_keys
centos2のauthorized_keysファイルに2つの公開鍵が保留しました。ここまで一つの完全の流れであり、次のサーバに伝送して同様の操作を行います。
全て終わりなら最後のauthorized_keysが理論的に4つの公開鍵段落が保留されます。そのauthorized_keysファイルを他のサーバに発送してサーバ毎にのauthorized_keysファイルは4つの公開鍵が保留されることが保証します。
結果の検証
任意のテストファイルを作成して他のサーバに伝送し、最初にパスワード、メッセージを確認などが必要かもしれない、後でパスワード不要の接続ができます。
scp test centos2:$PWD
4.4 クラスタの時刻が同期化
時刻同期化の紹介
時間の同期はクラスタ内の全ての節点の時刻が同じにすることを保証します。基本の仕方が一つの節点を時刻サーバにして基準として確実の時刻を取得できて同期します。
その機能が備わり外部の時刻サービスがあり、例えば、Amazon Time Sync ServiceとGoogle Public NTP。その公開時間サーバがネットワークインフラストラクチャ(network infrastructure )と呼ばれ、誰も公開NTPサーバから永久、確実の時刻を取得できます。
NTP(Network Time Protocol)については、ネットワークを通じて目標の時刻情報を取得しての通信規約と理解していい。もちろん、その規約を実現してソフトウェアによって支持するのが必要です。
ただ、クラスタの使い場所が内部ネットワークだと考えて外部のNTPが要らないと、クラスタのある節点を選んでNTPサーバとして全てのクラスタをこのNTPサーバ時刻に一致すると保証できるなら十分です。
NTPサーバのインストール
若し外部の標準時刻に比較して校正するつもり、以下の操作が実現できます。
#AmzaonのNTP:time.aws.com
#日本標準時NTP:ntp.nict.jp
ntpdate time.aws.com
#ntpdateなしなら、インストールし
yum -y install ntpdate
- 一つの節点を選べ、NTPサーバを組み立て
#ntpdサービス存在を確認
rpm -qa | grep ntpd
#ntpインストール
yum -y install ntp
#サービスを起動
service ntpd start
#OS起動する時に自動的に立つ上げる設定
chkconfig ntpd on
- 当の節点に/etc/ntp.confの編集
vim /etc/ntp.conf
#以下の内容を添加、自分のIPアドレスを使う
restrict 192.168.31.0 mask 255.255.255.0 nomodify notrap
#以下の4行を註釈になる
#server 0.centos.pool.ntp.org
#server 1.centos.pool.ntp.org
#server 2.centos.pool.ntp.org
#server 3.centos.pool.ntp.org
#以下の2行を添加
server 127.127.1.0
fudge 127.127.1.0 stratum 10
restrict 192.168.31.0 mask 255.255.255.0 nomodify notrap
その設定の意味は最後の位数1~254
のIPアドレスからNTPのサービスに訪問する請求が許可します。一定のIPアドレス範囲内のサーバが目標のNTPサーバから時間情報を取得できるとも言えます。
server 127.127.1.0
意味は本サーバの物理時計から読み取ってNTPの時間としてきます。
fudge 127.127.1.0 stratum 10
は順位10の前のサーバが全部失効になれば、IP127.127.1.0
のサーバをNTPの時間源とします。
- BIOSとOSの時刻を一致にするの保証
vim /etc/sysconfig/ntpd
#この内容を添加
SYNC_HWLOCK=yes
#再起動サービス
service ntpd restart
#状態検査
service ntpd status
#自動的に立ち上げ
chkconfig ntpd on
- 他のサーバーの設定
crontab -e
#以下の内容を書き込み、10分で一回同期をする
*/10 * * * * /usr/sbin/ntpdate 192.168.31.135
#再起動サービス
service ntpd restart
時刻同期化の検査
#OSシステム時刻を改修
date -s "2024-02-22 11:11:11"
#10分後で検査
date
NTPサーバ(centos1)に対して本サーバ時刻を変更したら自動的に回復できません。NTPサービスを再起動して元の時間に戻れます。
まとめ
文章の前半紹介が一般の操作と異なるところがない、要所が以下の3点:
- firewall/selinuxの停止
- クラスタの間に通信してパスワード不要の設定
- クラスタの各節点が時刻を一致にして時間の同期化
この3点がクラスタに無障害に情報を交換できると保証する準備で、せめてその3点が持ったのはクラスタの組み立てが完成だと言えます。
Discussion