构建Openstack&分布式日志查询器

简介

一个小项目，使用 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-> 点击完成
修改虚拟机配置
配置内存和处理器，然后添加网络适配器，选择刚刚设置好的两个网卡

初步配置第一台虚拟机

开机后设置安装位置，选择 40G 硬盘，done
配置用户名和密码，重启
重启完成后，输入用户名 root，输入密码（注意 linux 中输入密码是不显示的），输入完成按回车
接下来编辑网卡设置

Copy
vi /etc/sysconfig/network-scripts/ifcfg-ens33
#按i进入编辑模式
BOOTPROTO=static
ONBOTT=yes
IPADDR=192.168.10.10
NETMASK=255.255.255.0
#修改完上面的内容后，按esc->冒号:wq退出即可

重启一下

Copy
systemctl restart network

再修改一下另一个网卡

Copy
vi /etc/sysconfig/network-scripts/ifcfg-ens34
IPADDR=192.168.20.10
NETMASK=255.255.255.0

关闭防火墙

Copy
systemctl stop firewalld
systemctl disable firewalld

关闭安全策略

Copy
setenforce 0
vi /etc/selinux/config
SELINUX=disable

设置 hosts

Copy
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

到这里基础步骤就完成啦！

初步配置其他虚拟机

将第一台机器关机，右击克隆
一路下一步即可
我建议先克隆一台机器，当 compute 一个节点配置完毕后，再克隆配置好的 compute

配置 compute 节点

同样也是先改好 ip 地址然后通过 ssh 连接

Copy
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

配置源

Copy
#controller中
hostnamectl set-hostname controller
#compute
hostnamectl set-hostname compute

上传两个 ISO

Copy
#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

Copy
#controller&compute
yum install openstack-iaas -y

安装完成刷新一下终端
接下来我们要配置 openstack 文件
在 controller 中

Copy
vi /etc/openstack/openrc.sh
ctrl+v+G+d
:%s/PASS=/PASS=000000/g
HOST_IP=192.168.10.10
#Controller Server hostname. example:controller
HOST_NAME=controller
#Compute Node Manager IP. example:x.x.x.x
HOST_IP_NODE=192.168.10.20,192.168.10.30,192.168.10.40,192.168.10.50
#Compute Node hostname. example:compute
HOST_NAME_NODE=compute
#--------------------Chrony Config-------------------##
#Controller network segment IP. example:x.x.0.0/16(x.x.x.0/24)
network_segment_IP=192.168.0.0/16
#External Network Interface. example:eth1
INTERFACE_NAME=ens34

#External Network The Physical Adapter. example:provider
Physical_NAME=provider

#First Vlan ID in VLAN RANGE for VLAN Network. exmaple:101
minvlan=1

#Last Vlan ID in VLAN RANGE for VLAN Network. example:200
maxvlan=400

#需要填disk可以随便填
#Cinder Block Disk. example:md126p3
BLOCK_DISK=sdb
#The NODE Object Disk for Swift. example:md126p4.
OBJECT_DISK=sdc
#The NODE IP for Swift Storage Network. example:x.x.x.x.
STORAGE_LOCAL_NET_IP=192.168.10.20

其他地方按照提示样例写就可以
然后将这份配置文件也传到 compute 节点中

Copy
scp /etc/openstack/openrc.sh root@192.168.10.20:/etc/openstack/
输入密码

安装主要组件

Copy
#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

分布式日志查询

在两台机器上安装 go

Copy
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
将代码上传到两台机器
到这里所有的配置工作就完成啦
可以将机器关闭，然后克隆 compute 节点，再复制 3 台机器，安装上文讲过的配置一下 ip 地址，ssh 连接上

Test

Copy
#在所有compute节点中
go run server.go
#在controller中
go build client.go
./client [query] [log file name]
example: ./client name

单元测试

Copy
#生成测试的log文件
go run generate_testfiles.go
#在所有compute节点中
go run server.go
#在controller中
go test -v client_test.go

参考结果