概要#
小さなプロジェクトで、OpenStack を使用して 1 つのコントロールノードと 4 つの計算ノードを構築し、分散ログクエリツールを使用してログを照会します。
ネットワーク構成#
controller | compute | compute02 | compute03 | compute04 | |
---|---|---|---|---|---|
ens33 | 192.168.10.10 | 192.168.10.20 | 192.168.10.30 | 192.168.10.40 | 192.168.10.50 |
ens34 | 192.168.20.10 | 192.168.20.20 | 192.168.20.30 | 192.168.20.40 | 192.168.20.50 |
ens33 と 34 はネットワークインターフェース |
OpenStack の構築#
前準備#
リソースの準備#
リソースパッケージをダウンロードする
クラウドストレージ
仮想マシンの設定#
私が使用しているのは Vmware 16 Pro バージョンです。
設定を変更するを選択します。
新しいネットワークカードを追加し、両方ともホスト専用モードを選択し、対応する IP アドレスを入力します。
- ネットワーク 1 ホスト専用 192.168.10.0
- ネットワーク 2 ホスト専用 192.168.20.0
新しい仮想マシンの作成#
新しい仮想マシンを作成 ->centos7 iso を選択 -> ディスクサイズを 40G に割り当て -> 完了をクリック
仮想マシンの設定を変更します。
メモリとプロセッサを設定し、ネットワークアダプタを追加し、先ほど設定した 2 つのネットワークカードを選択します。
最初の仮想マシンの初期設定#
起動後、インストール位置を設定し、40G のハードディスクを選択し、完了をクリックします。
ユーザー名とパスワードを設定し、再起動します。
再起動が完了したら、ユーザー名 root を入力し、パスワードを入力します(Linux ではパスワードが表示されないことに注意してください)、入力が完了したら Enter を押します。
次に、ネットワークカードの設定を編集します。
vi /etc/sysconfig/network-scripts/ifcfg-ens33
#iを押して編集モードに入ります
BOOTPROTO=static
ONBOTT=yes
IPADDR=192.168.10.10
NETMASK=255.255.255.0
#上記の内容を修正したら、esc->コロン:wqで終了します
再起動します。
systemctl restart network
もう一つのネットワークカードを修正します。
vi /etc/sysconfig/network-scripts/ifcfg-ens34
IPADDR=192.168.20.10
NETMASK=255.255.255.0
ファイアウォールを停止します。
systemctl stop firewalld
systemctl disable firewalld
セキュリティポリシーを無効にします。
setenforce 0
vi /etc/selinux/config
SELINUX=disable
hosts を設定します。
vi /etc/hosts
192.168.10.10 controller
192.168.10.20 compute
192.168.10.30 compute02
192.168.10.40 compute03
192.168.10.50 compute04
ここまでで基本的なステップは完了です!
他の仮想マシンの初期設定#
最初のマシンをシャットダウンし、右クリックしてクローンします。
そのまま次へ進みます。
最初に 1 台のマシンをクローンし、compute ノードの設定が完了したら、設定済みの compute をクローンすることをお勧めします。
compute ノードの設定#
同様に、最初に IP アドレスを変更し、SSH で接続します。
vi /etc/sysconfig/network-scripts/ifcfg-ens33
BOOTPROTO=static
ONBOTT=yes
IPADDR=192.168.10.20
NETMASK=255.255.255.0
systemctl restart network
vi /etc/sysconfig/network-scripts/ifcfg-ens34
IPADDR=192.168.20.20
NETMASK=255.255.255.0
リポジトリの設定#
#controllerで
hostnamectl set-hostname controller
#computeで
hostnamectl set-hostname compute
2 つの ISO をアップロードします。
#controllerで
yumリポジトリの設定
vi /etc/yum.repos.d/local.repo
[centos]
name=centos
enabled=1
gpgcheck=0
baseurl=file:///opt/centos
[iaas]
name=iaas
enabled=1
gpgcheck=0
baseurl=file:///opt/iaas/iaas-repo
mkdir /opt/centos
mkdir /opt/iaas
----------------------------------------------------
#computeで
yumリポジトリの設定
rm -rf /etc/yum.repos.d/*
vi /etc/yum.repos.d/ftp.repo
[centos]
name=centos
enabled=1
gpgcheck=0
baseurl=ftp://192.168.10.10/centos
[iaas]
name=iaas
enabled=1
gpgcheck=0
baseurl=ftp://192.168.10.10/iaas/iaas-repo
#controllerで
mount -o loop CentOS-7-x86_64-DVD-2009.iso /mnt/
cp -rvf /mnt/* /opt/centos
umount /mnt/
mount -o loop openstack.iso /mnt/
cp -rvf /mnt/* /opt/iaas/
umount /mnt/
yum repolist
rm -rf /etc/yum.repos.d/C*
yum install vsftpd -y
vi /etc/vsftpd/vsftpd.conf
anon_root=/opt
systemctl restart vsftpd
systemctl enable vsftpd
OpenStack のインストール#
#controller&compute
yum install openstack-iaas -y
インストールが完了したら、ターミナルをリフレッシュします。
次に、OpenStack の設定ファイルを構成します。
controller で
vi /etc/openstack/openrc.sh
ctrl+v+G+d
:%s/PASS=/PASS=000000/g
HOST_IP=192.168.10.10
#コントローラーサーバーのホスト名。例:controller
HOST_NAME=controller
#計算ノードマネージャーのIP。例:x.x.x.x
HOST_IP_NODE=192.168.10.20,192.168.10.30,192.168.10.40,192.168.10.50
#計算ノードのホスト名。例:compute
HOST_NAME_NODE=compute
#--------------------Chrony設定-------------------##
#コントローラーのネットワークセグメントIP。例:x.x.0.0/16(x.x.x.0/24)
network_segment_IP=192.168.0.0/16
#外部ネットワークインターフェース。例:eth1
INTERFACE_NAME=ens34
#外部ネットワークの物理アダプター。例:provider
Physical_NAME=provider
#VLANネットワークのVLAN範囲内の最初のVLAN ID。例:101
minvlan=1
#VLANネットワークのVLAN範囲内の最後のVLAN ID。例:200
maxvlan=400
#diskに必要な値を自由に入力できます
#Cinderブロックディスク。例:md126p3
BLOCK_DISK=sdb
#SwiftのNODEオブジェクトディスク。例:md126p4。
OBJECT_DISK=sdc
#SwiftストレージネットワークのNODE IP。例:x.x.x.x。
STORAGE_LOCAL_NET_IP=192.168.10.20
他の場所は指示に従って記入すれば大丈夫です。
この設定ファイルを compute ノードにも転送します。
scp /etc/openstack/openrc.sh [email protected]:/etc/openstack/
パスワードを入力します
主要コンポーネントのインストール#
#controller&compute
iaas-pre-host.sh
再度SSHで接続します
#controller
iaas-install-mysql.sh
iaas-install-keystone.sh
iaas-install-glance.sh
iaas-install-placement.sh
iaas-install-nova-controller.sh
iaas-install-neutron-controller.sh
iaas-install-dashboard.sh
#compute
iaas-install-nova-compute.sh
iaas-install-neutron-compute.sh
分散ログクエリ#
2 台のマシンに Go をインストールします。
tar -zxf go1.17.2.linux-amd64.tar.gz -C /usr/local
vi /etc/profile
#Go環境変数
export GO111MODULE=on
export GOROOT=/usr/local/go
export GOPATH=/home/gopath
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
source /etc/profile
コードリンク
https://github.com/44maker/DistributedLogQuerier
コードを 2 台のマシンにアップロードします。
これで全ての設定作業が完了しました。
マシンをシャットダウンし、compute ノードをクローンし、3 台のマシンをコピーして、前述の設定を行い、IP アドレスを設定し、SSH で接続します。
テスト#
#すべてのcomputeノードで
go run server.go
#controllerで
go build client.go
./client [query] [log file name]
例: ./client name
ユニットテスト#
#テスト用のlogファイルを生成
go run generate_testfiles.go
#すべてのcomputeノードで
go run server.go
#controllerで
go test -v client_test.go
参考結果