《OpenStack高可用集群(下册):部署与运维》—11.1.2 制作OpenStack离线安装yum源
704
2022-05-29
11.3OpenStack集群高可用部署实验环境准备
在正式部署OpenStack相关集群软件之前,应该事先初始化操作系统,使得其满足运行OpenStack集群所需的系统环境,如离线yum源、NFS服务器、NTP时钟同步、SELinux和Firewall设置等,同时还需根据用户自己的网络环境规划好IP网段和IP地址,以及每块物理网卡承载何种网络等。由于推荐采用操作系统最小化安装,因此对于需要创建KVM虚拟机的操作系统,还需安装相应的虚拟化支持安装包。在本实验环境中,操作系统准备分为控制节点系统准备和计算节点系统准备。下面分别对这两种角色的操作系统进行初始化准备。
11.3.1 控制节点VMware宿主机准备
1. VMware虚拟机创建
在本实验中,为了实现控制节点的Fencing功能,控制节点由三个位于VMware虚拟机中的KVM虚拟机构成,VMware虚拟机安装Centos7.2操作系统,作为控制节点的KVM虚拟机同样安装Centos7.2操作系统。为了实现控制节点高可用,实验环境中OpenStack高可用集群控制节点由独立的三台VMware虚拟机提供,如图11-13所示,每台VMware虚拟机分别命名为controller1、controller2和controller3。
OpenStack高可用集群的三台控制节点将分别由图11-13中所示的三台VMware虚拟机各自创建的KVM虚拟机承担,并将控制节点KVM虚拟机分别命名为controller1-vm、controller2-vm和controller3-vm。
三台VMware虚拟机的资源配置是相同的,为了保证VMwrae虚拟机可以与外部和内部网络通信,同时为了实现KVM虚拟机能与外部网络和内部网络通信,需要为VMware虚拟机创建四块网卡,如图11-14所示,
其中两块网卡能够与外部网络(如Internet)通信(网路连接为NAT模式),另外两块用于管理内部网络(网络连接为仅主机模式),并且为了保证KVM虚拟机与外部和内部网络的正常通信,VMware虚拟机中的两块网卡后续将会被配置为网桥。
VMware虚拟机网卡IP配置方式可以采用DHCP形式。对于NAT连接模式,VMware在Windows系统中的网络名称为VMnet8;对于仅主机模式,在Windows系统中对应的网络名称为VMnet1。因此,对于NAT和仅主机模式的网卡,用户只需在VMwareWorkstaion中的“编辑”菜单中选择“虚拟网络编辑器”功能选项,即可对VMnet1和VMnet8进行编辑,如图11-15所示。为了实现NAT和仅主机模式的DHCP功能,只需分别为VMnet1和VMnet8开启DHCP功能,并设置对应的DHCP网段即可。
图11-15 开启VMware仅主机和NAT模式的DHCP功能
需要再次强调的是,为了最大限度使用服务器资源,VMware虚拟机建议采用最小化安装方式安装Centos 7/RHEL 7系统。最小化方式安装速度非常快,但是很多针对特定场景的功能模块均没有被安装,为了满足特定功能场景需求,后续用户需要自己手动安装所需的软件包。
2.网卡重命名
在Centos 7/RHEL 7中,网卡命名不再遵从原来的命名规则,而是启用了最新的命名方式。Centos 7/RHEL 7中systemd和udevd支持不同的命名方案,默认是根据固件、拓扑及位置信息分配固定名称。这种命名方法的优点是完全自动且可预测后续新增设备的名称,即使添加或者删除硬件名称也不会发生改变,而且可以在不产生任何影响的情况下替换故障硬件。这种命名方式的缺点是,名称比以前使用的更难读写,如以前的网卡名称eth0在Centos 7/RHEL 7中被命名为eno16777736,在读写引用时非常不便。图11-16所示是最小化安装后,controller1这台VMware虚拟机中Centos7.2操作系统中的网卡名称。
图11-16 VMware虚拟机controller1中的网卡命名情况
为了便于记忆和使用,建议在正式使用系统之前将Centos 7/RHEL 7这种网卡命名方式改为之前的ethx形式。对于大规模集群节点而言,手工更改显然不现实,读者可以参考如下代码对集群节点进行批量更改。运行如下代码之后,节点中全部用户网卡都会被重新命名,即由原来的enoxxxx现实变为ethx形式。
#/usr/bin/bash
#this script will change default ifcfg-enoxxxx to ifcfg-ethx
ls -l /etc/sysconfig/network-scripts|awk '/ifcfg-eno[0-9]*/ {print $9}' > default_nic_name.txt
i=0
cat default_nic_name.txt| while read line
do
cd /etc/sysconfig/network-scripts
name=$(echo $line|cut -b 7-)
cp $line ${line}.bak
sed -i "s/$name/eth${i}/g" $line
sed -i 's/ONBOOT=no/ONBOOT=yes/g' $line
mv $line ifcfg-eth${i}
i=$(expr $i + 1)
done
sed -i '/GRUB_CMDLINE_LINUX=/d' /etc/default/grub
echo 'GRUB_CMDLINE_LINUX="rd.lvm.lv=centos/root rd.lvm.lv=\
centos/swap crashkernel=auto net.ifnames=0 biosdevname=0 rhgb \
quiet"' >> /etc/default/grub
grub2-mkconfig -o /boot/grub2/grub.cfg
reboot
上述代码在系统重启后生效,并且重启系统或network服务之后,对应的网卡将会从VMware的VMnet1和VMnet8中自动获取IP地址。图11-17所示为controller1这台VMware虚拟机中的Centos7.2系统在运行上述代码后的网卡信息。对比图11-16可以看到,运行上述代码重命名网卡之后,controller1中对应的四块网卡被分别命名为eth0、eth1、eth2和eth3,同时对应NAT连接模式的eth0和eth1从VMnet8中获取到了192.168.115.0网段的IP地址,对应仅主机模式的eth2和eth3从VMnet1中获取到了192.168.142.0网段的IP地址。
图11-17 VMware虚拟机controller1中的网卡重命名结果
3.设置主机名
主机名称设置很简单,对于三台VMware虚拟机,主机名称分别设置为controller1、controller2和controller3。主机名需要一个对应的主机IP以便进行地址解析,设置主机名之后,将对应的主机名和IP写入/etc/hosts配置文件中,具体如下:
hostnamectl set-hostname ${NAMEHOST}
echo "${host_ip} ${NAMEHOST}" >>/etc/hosts
4.设置防火墙
对于公有云而言,安全设置是非常重要的环节,尤其是防火墙的设置,需要细化到各个服务和端口。对于私有云环境而言,防火墙显得不是很重要,在启用防火墙的情况下,如果对防火墙规则不是很熟悉,反而会影响很多服务的正常启动和运行。因此在本节中,建议直接关闭防火墙,具体如下:
systemctl stop firewalld.service
systemctl disable firewalld.service
5.设置SELinux
SELinux是一种通过上下文标签来严格设置访问权限的安全机制。SELinux提供了一种灵活的强访问控制(MAC)系统,且内嵌于Linux Kernel中。SELinux定义了系统中每个用户、进程、应用和文件的访问和转变的权限,然后它使用一个安全策略来控制用户、进程、应用和文件这些实体之间的交互,安全策略指定如何严格或宽松地进行检查。SELinux对系统用户是透明的,系统管理员需要考虑在他的服务器中如何制定严格的策略。策略可以根据需要设置为严格或宽松策略。在启用SELinux后,只有同时满足了标准Linux访问控制和SELinux访问控制时,主体才能访问客体。在Centos 7/RHEL 7中,SELinux配置文件为/etc/sysconfig/selinux或/etc/selinux/config,其默认状态为enforcing,同时还有permissive和disable两个状态。通过getenforce命令可以获取SELinux当前状态;通过setenforce 0命令可以将SELinux由enforcing设置为permissive;通过setenforce 1命令可以将SELinux由permissive设置为enforcing。在本节中,建议将SELinux设置为disable以避免不必要的麻烦。永久性的设置需要更改SELinux配置文件并且重启系统,具体如下:
[root@controller1 ~]#sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g"\
/etc/selinux/config
[root@controller1 ~]#reboot
6.设置NTP
对集群而言,很多莫名其妙的问题都可以追溯至节点时间不同步这种低级错误上,因此在正式使用部署集群应用之前,首先需要将集群各个节点的时间进行同步。对于私有云环境而言,集群节点可能没法同步到互联网上的时钟源,因此可以将集群中某个节点的时钟作为集群时钟源来同步,使得集群全部节点时钟相对该时钟源节点的时钟是同步的。本节中,将controller1作为NTP时钟源,controller2、controller3、compute1、compute2、controller1-vm、controller2-vm和controller3-vm均与controller1保持时钟同步。NTP客户端节点只需将controller1配置为时钟源即可,为了保证NTP时钟同步,可以设置一个crontab任务,每10分钟主动发起一次时钟同步,如下:
[root@controller2~]#echo "*/10 * * * * /usr/sbin/ntpdate ${NTP_SERVER}\
2>&1> /tmp/ntp.log;hwclock -w"
在NTP时钟同步之后,controller1、controller2和controller3之间应该具有相同的日期和时间,如果同时对三个节点运行date命令,则可以看到如下所示相同的日期和时间:
[root@controller1 ~ ]# date
Mon Nov 28 22:46:36 CST 2016
[root@controller3 ~]# date
Mon Nov 28 22:46:36 CST 2016
[root@controller2 ~]# date
Mon Nov 28 22:46:36 CST 2016
7.配置本地yum源
对于离线安装,yum源的配置至关重要。在配置本地yum源之前,用户需要事先根据11.1节中的介绍将RedHat发行版本RDO的RPM包同步到本地。在本节中,controller1同时充当管理节点和NFS服务器,因此在配置yum源之前,务必将Centos7.2操作系统镜像以及OpenStack相关RPM包及其依赖包全部上传到controller1中指定的目录下。在本节环境中,默认将Centos7.2 ISO镜像安装包上传到/data/ISO目录中,将RDO OpenStack安装包分别上传到/data/rdo-openstack-kilo/openstack-common、/data/rdo-openstack-kilo/openstack-kilo和/data/rdo-openstack-epel目录中,之后运行位于Github中的Master控制节点初始化脚本(脚本名称为openstack_master_ctr-nodes_prepare.sh)。脚本将会自动创建本地yum仓库,并自动配置指向本地yum仓库的yum源文件。脚本运行完成之后,用户即可离线安装OpenStack及其依赖包。
对于其他节点,只需将controller1节点通过NFS导出的/data目录和/etc/yum.repos.d目录挂载到本地即可,即其他节点通过NFS共享controller1节点的本地yum源。在controller1节点上配置完成本地yum源后,将会出现如下的yum源配置文件,在后续的软件安装过程中,全部通过如下yum本地源进行离线安装,而不会去访问Internet。
[root@controller1 ~]# cd /etc/yum.repos.d
[root@controller1 yum.repos.d]# ls -l
total 16
-rw-r--r--. 1 root root 77 Nov 28 22:02 centos7-iso.repo
-rw-r--r--. 1 root root 128 Nov 28 22:05 openstack-common.repo
-rw-r--r--. 1 root root 122 Nov 28 22:05 openstack-kilo.repo
-rw-r--r--. 1 root root 109 Nov 28 22:05 rdo-epel.repo
对于其他节点,将通过NFS的形式共享controller1的yum本地源,即集群中全部节点均共享controller1的yum源,因此集群全部节点均可实现离线安装。
8.配置NFS
NFS是集群管理中不可缺少的配置,尤其是在静态共享资源方面,NFS有着得天独厚的优势。在本节的OpenStack集群部署中,controller1被配置为NFS服务器,并将其/data和/etc/yum.repos.d目录共享出去,以便其他集群节点可以通过mount形式挂载共享controller1的本地yum源。对于其他节点,为了实现关机重启后自动挂载/data和/etc/yum.repos.d目录,需要将挂载条目写入/etc/fstab文件中。NFS配置完成后,在controller1上将会看到NFS导出的目标目录:
[root@controller1 ~]# showmount -e
Export list for controller1:
/etc/yum.repos.d *
/data *
在任意一个NFS客户端,NFS配置完成后,可以看到controller1的/data和/etc/yum.repos.d目录已经被挂载到本地:
root@controller2 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
controller1:/etc/yum.repos.d 36G 17G 19G 48% /etc/yum.repos.d
controller1:/data 36G 17G 19G 48% /data
9.配置libvirt
由于系统采用最小化安装,虚拟化相关功能不被支持,为了后续创建KVM虚拟机,需要手动安装Libvirt相关软件包并启动Libvirtd服务。在启用Libvirtd服务后,系统主机中会自动生成virbr0虚拟交换机,默认情况下主机中的KVM虚拟机均通过该虚拟交换机以NAT形式(即IP伪装,IP Masquerade)与外界通信。由于本节实验中采用桥接形式(Bridge)直接将KVM虚拟机与外界进行通信,因此不会用到virbr0,故将其关闭。对于Intel处理器,支持虚拟化的Linux系统内核中需要加载KVM和KVM_intel模块。如果系统没有自动加载,则需进行手动加载。
10.配置网桥
本节实验环境中的KVM虚拟机将利用VMware宿主机中的网桥直接与外界通信。因此在创建KVM虚拟机之前,需要在VMware宿主机中创建对应的网桥。KVM虚拟机有一个外部网络和一个内部管理网络,因此在VMware宿主机中创建一个外网网桥和一个内网网桥。外网网桥绑定能与外界通信的eth0物理网卡,内网网桥绑定能与内网通信的eth3物理网卡。网桥名称用户可自定义,当网桥设置成功之后,与网桥绑定的eth0和eth3物理网卡将不会被配置IP地址,IP地址被配置到网桥上。
外网和内网网桥创建完成后,系统中将会对应新增两个网络接口,通过brctl命令可以查看到网桥对应的物理网络接口,如下所示:
[root@controller1 ~]# brctl show
bridge name bridge id STP enabled interfaces
ext_br0 8000.000c29b9a285 no eth0
inter_br0 8000.000c29b9a2a3 no eth3
[root@controller1 ~]# ip a
......
8: ext_br0:
link/ether 00:0c:29:b9:a2:85 brd ff:ff:ff:ff:ff:ff
inet 192.168.115.100/24 brd 192.168.115.255 scope global ext_br0
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:feb9:a285/64 scope link
valid_lft forever preferred_lft forever
9: inter_br0:
link/ether 00:0c:29:b9:a2:a3 brd ff:ff:ff:ff:ff:ff
inet 192.168.142.100/24 brd 192.168.142.255 scope global inter_br0
valid_lft forever preferred_lft forever
inet6 fe80::f099:90ff:fe1d:9a55/64 scope link
valid_lft forever preferred_lft forever
......
11.常用工具软件包安装
最小化安装时,很多常用的系统工具均不能使用,如网络配置查看命令行工具ifconfig、网络诊断命令tcpdump、网络文件共享NFS和SMB等服务均无法使用。为了便于日常维护和快速操作,可以适当补充安装常用工具包:
[root@controller1 ~]#yum install fence* bind-utils tcpdump expect \
sos nfs-utils cifs-utils net-tools -y
在实际部署中,上述全部配置过程可以通过脚本自动完成。具体脚本可以参考Github上的开源代码,地址为https://github.com/ynwssjx/Openstack-HA-Deployment,对应的配置脚本为openstack_master_ctr-nodes_prepare.sh,用户只需在controller1节点上运行openstack_master_ctr-nodes_prepare.sh脚本。该脚本将会自动完成上述介绍的集群节点初始化过程。
OpenStack 云计算
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。