OpenStatck虚拟机环境准备-CentOS7.2安装
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
不得不吐槽一下CentOS7.5和7.6对OpenStack的支持并不友好,虽然可以正常安装OpenStack服务但无法创建虚拟机,没办法只能选择版本较低的“CentOS-7-x86_64-Minimal-1511.iso”镜像来安装OpenStack,本教程是记录一下创建虚拟机的注意事项。
一.使用"VMware Workstation"创建虚拟机
1>.下载ISO(下载地址:"http://archive.kernel.org/centos-vault/7.2.1511/isos/x86_64/")
2>.选择下载的iso
3>.自定义虚拟机名称及安装路径
4>.自定义磁盘空间
5>.CPU配置
6>.内存配置
二.基于"VMware Workstation"创建的虚拟机安装"CentOS 7.2"版本的操作系统
1>.开启虚拟机
2>.按"tab"键,追加"net.ifnames=0 biosdevname=0"内核参数,如下图所示。
3>.安装时语言选择默认的英语即可
4>.添加中文支持并选择时区
5>.自定义分区(不建议对swap进行分区)
6>.点击安装
7>.为管理员设置密码
9>.安装完毕后重启虚拟机
三.Linux操作系统初始化调优参数
1>.最小化安装操作系统必备命令行工具(别安装epel源哟,因为它会和openstack的源冲突)
[root@openstack.yinzhengjie.org.cn ~]# yum -y install vim net-tools bridge-utils firewalld bc iotop bc gcc gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssl-devel zip unzip zlib-devel lrzsz tree ntpdate telnet lsof tcpdump wget libevent libevent-devel systemd-devel bash-completion traceroute psmisc
2>.禁用"NetworkManager"服务
[root@centos72.yinzhengjie.org.cn ~]# systemctl status NetworkManager ● NetworkManager.service - Network Manager Loaded: loaded (/usr/lib/systemd/system/NetworkManager.service; enabled; vendor preset: enabled) Active: active (running) since Sat 2020-01-11 16:42:52 CST; 1min 32s ago Main PID: 871 (NetworkManager) CGroup: /system.slice/NetworkManager.service └─871 /usr/sbin/NetworkManager --no-daemon Jan 11 16:42:52 centos72.yinzhengjie.org.cn NetworkManager[871]: <info> (eth0): device state change: config -> ip-config (reason 'none') [50 70 0] Jan 11 16:42:52 centos72.yinzhengjie.org.cn NetworkManager[871]: <info> (eth0): device state change: ip-config -> ip-check (reason 'none') [70 80 0] Jan 11 16:42:52 centos72.yinzhengjie.org.cn NetworkManager[871]: <info> (eth0): device state change: ip-check -> secondaries (reason 'none') [80 90 0] Jan 11 16:42:52 centos72.yinzhengjie.org.cn NetworkManager[871]: <info> (eth0): device state change: secondaries -> activated (reason 'none') [90 100 0] Jan 11 16:42:52 centos72.yinzhengjie.org.cn NetworkManager[871]: <info> NetworkManager state is now CONNECTED_LOCAL Jan 11 16:42:52 centos72.yinzhengjie.org.cn NetworkManager[871]: <info> NetworkManager state is now CONNECTED_GLOBAL Jan 11 16:42:52 centos72.yinzhengjie.org.cn NetworkManager[871]: <info> Policy set 'eth0' (eth0) as default for IPv4 routing and DNS. Jan 11 16:42:52 centos72.yinzhengjie.org.cn NetworkManager[871]: <info> (eth0): Activation: successful, device activated. Jan 11 16:42:52 centos72.yinzhengjie.org.cn NetworkManager[871]: <info> wpa_supplicant running Jan 11 16:42:57 centos72.yinzhengjie.org.cn NetworkManager[871]: <info> startup complete [root@centos72.yinzhengjie.org.cn ~]#
[root@centos72.yinzhengjie.org.cn ~]# systemctl stop NetworkManager [root@centos72.yinzhengjie.org.cn ~]# [root@centos72.yinzhengjie.org.cn ~]# systemctl disable NetworkManager Removed symlink /etc/systemd/system/multi-user.target.wants/NetworkManager.service. Removed symlink /etc/systemd/system/dbus-org.freedesktop.NetworkManager.service. Removed symlink /etc/systemd/system/dbus-org.freedesktop.nm-dispatcher.service. [root@centos72.yinzhengjie.org.cn ~]#
[root@centos72.yinzhengjie.org.cn ~]# systemctl status NetworkManager ● NetworkManager.service - Network Manager Loaded: loaded (/usr/lib/systemd/system/NetworkManager.service; disabled; vendor preset: enabled) Active: inactive (dead) since Sat 2020-01-11 16:44:31 CST; 1min 25s ago Main PID: 871 (code=exited, status=0/SUCCESS) Jan 11 16:42:52 centos72.yinzhengjie.org.cn NetworkManager[871]: <info> NetworkManager state is now CONNECTED_LOCAL Jan 11 16:42:52 centos72.yinzhengjie.org.cn NetworkManager[871]: <info> NetworkManager state is now CONNECTED_GLOBAL Jan 11 16:42:52 centos72.yinzhengjie.org.cn NetworkManager[871]: <info> Policy set 'eth0' (eth0) as default for IPv4 routing and DNS. Jan 11 16:42:52 centos72.yinzhengjie.org.cn NetworkManager[871]: <info> (eth0): Activation: successful, device activated. Jan 11 16:42:52 centos72.yinzhengjie.org.cn NetworkManager[871]: <info> wpa_supplicant running Jan 11 16:42:57 centos72.yinzhengjie.org.cn NetworkManager[871]: <info> startup complete Jan 11 16:44:31 centos72.yinzhengjie.org.cn NetworkManager[871]: <info> caught SIGTERM, shutting down normally. Jan 11 16:44:31 centos72.yinzhengjie.org.cn NetworkManager[871]: <info> exiting (success) Jan 11 16:44:31 centos72.yinzhengjie.org.cn systemd[1]: Stopping Network Manager... Jan 11 16:44:31 centos72.yinzhengjie.org.cn systemd[1]: Stopped Network Manager. [root@centos72.yinzhengjie.org.cn ~]#
3>.禁用"firewalld"服务
[root@centos72.yinzhengjie.org.cn ~]# systemctl disable firewalld Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service. Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service. [root@centos72.yinzhengjie.org.cn ~]#
3>.禁用"selinux"服务
[root@centos72.yinzhengjie.org.cn ~]# cat /etc/selinux/config # This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=enforcing # SELINUXTYPE= can take one of three two values: # targeted - Targeted processes are protected, # minimum - Modification of targeted policy. Only selected processes are protected. # mls - Multi Level Security protection. SELINUXTYPE=targeted [root@centos72.yinzhengjie.org.cn ~]# [root@centos72.yinzhengjie.org.cn ~]# sed -r -i 's/(SELINUX=)enforcing/1disabled/' /etc/selinux/config [root@centos72.yinzhengjie.org.cn ~]# [root@centos72.yinzhengjie.org.cn ~]# cat /etc/selinux/config # This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=disabled # SELINUXTYPE= can take one of three two values: # targeted - Targeted processes are protected, # minimum - Modification of targeted policy. Only selected processes are protected. # mls - Multi Level Security protection. SELINUXTYPE=targeted [root@centos72.yinzhengjie.org.cn ~]# [root@centos72.yinzhengjie.org.cn ~]#
4>.修改Linux内核参数
[root@yinzhengjie ~]# cat /etc/sysctl.conf #减少DDoS攻击,校验数据包的反向路径,如果反向路径不合适,则直接丢弃数据包,避免过多的无效连接消耗系统资源。 #防止IP Spoofing,校验数据包的反向路径,如果客户端伪造的源IP地址对应的反向路径不在路由表中,或者反向路径不是最佳路径,则直接丢弃数据包,不会向伪造IP的客户端回复响应。 net.ipv4.conf.default.rp_filter = 1 #启动haproxy的时候,允许忽视VIP的存在 net.ipv4.ip_nonlocal_bind = 1 #使用haproxy代理服务器同时也要打开内核的转发功能 net.ipv4.ip_forward = 1 #控制路由验证 net.ipv4.conf.default.accept_source_route = 0 #控制内核的系统请求调试功能 kernel.sysrq = 0 #控制核心转储是否将PID附加到核心文件名,用于调试多线程应用程序。 kernel.core_uses_pid = 1 #控制TCP同步器的使用,即在服务器资源(并非单指端口资源,拒绝服务有很多种资源不足的情况)不足的情况下,尽量不要拒绝TCP的syn(连接)请求,尽量把syn请求缓存起来,留着过会儿有能力的时候处理这些TCP的连接请求 net.ipv4.tcp_syncookies = 1 #禁用网桥上的netfilter。 net.bridge.bridge-nf-call-ip6tables = 0 net.bridge.bridge-nf-call-iptables = 0 net.bridge.bridge-nf-call-arptables = 0 #控制消息队列的默认最大大小 kernel.msgmnb = 65536 #以字节为单位控制消息的最大大小 kernel.msgmax = 65536 #以字节为单位控制最大共享段大小 kernel.shmmax = 68719476736 #在页中控制共享内存段的最大数量 kernel.shmall = 4294967296 #内核分配给TCP连接的内存,单位是Page,1 Page = 4096 Bytes,可用命令查看"getconf PAGESIZE" # 第一个数字表示,当tcp使用的Page少于786432(786432*4096/1024/1024/1024=3)时,kernel不对其进行任何的干预 # 第二个数字表示,当tcp使用了超过1048576(1048576*4096/1024/1024/1024=4)的Pages时,kernel会进入("memory pressure")压力模式 # 第三个数字表示,当 tcp 使用的pages超过1572864时(1572864*4096/1024/1024/1024=6,即相当于6GB内存),就会报:Out of socket memory net.ipv4.tcp_mem = 786432 1048576 1572864 #为每个TCP连接分配的读、写缓冲区内存大小,单位是Byte, # 第一个数字表示,为TCP连接分配的最小内存,即4096/1024=4k # 第二个数字表示,为TCP连接分配的缺省内存,即8192/1024=80k # 第三个数字表示,为TCP连接分配的最大内存 # #以咱们的配置为例,我们就以缺省值进行计算读是87380(87380/1024=80k),写是16384(16384/1024)=16k),共计96K #那么我们上面通过"net.ipv4.tcp_mem = 786432 1048576 1572864"分配的TCP内存就可以算出大致的连接数: # 786432*4096/1024/96=32768 # 1048576*4096/1024/96=43690 # 1572864*4096/1024/96=65536 # net.ipv4.tcp_rmem = 4096 81920 4194304 net.ipv4.tcp_wmem = 4096 16384 4194304 #设置tcp/ip会话的滑动窗口大小是否可变,参数值为布尔值,为1时表示可变,为0时表示不可变. #tcp/ip通常使用的窗口最大可达到65535字节,对于高速网络,该值可能太小,这时候如果启用了该功能,可以使tcp/ip滑动窗口大小增大数个数量级,从而提高数据传输的能力 net.ipv4.tcp_window_scaling = 1 #用来查找特定的遗失的数据包,有助于快速恢复状态 net.ipv4.tcp_sack = 1 #默认的TCP数据发送窗口大小(字节)。8388608/1024/1024=8M net.core.wmem_default = 8388608 #默认的TCP数据接收窗口大小(字节). net.core.rmem_default = 8388608 #接收套接字缓冲区大小的最大值(以字节为单位). net.core.rmem_max = 16777216 #发送套接字缓冲区大小的默认值(以字节为单位). net.core.wmem_max = 16777216 #当网卡接收数据包的速度大于内核处理的速度时,会有一个队列保存这些数据包。这个参数表示该队列的最大值。 net.core.netdev_max_backlog = 262144 #用来限制监听(LISTEN)队列最大数据包的数量,超过这个数量就会导致链接超时或者触发重传机制。 net.core.somaxconn = 20480 #该参数指定了每个套接字所允许的最大缓冲区的大小 net.core.optmem_max = 81920 #表示SYN队列长度,默认1024,改成262144,可以容纳更多等待连接的网络连接数。 net.ipv4.tcp_max_syn_backlog = 262144 #在内核放弃建立连接之前发送SYN包的数量 net.ipv4.tcp_syn_retries = 3 # 该变量设置放弃回应一个tcp连接请求前,需要进行多少次重试 net.ipv4.tcp_retries1 = 3 #控制内核向已经建立连接的远程主机重新发送数据的次数,低值可以更早的检测到与远程主机失效的连接,因此服务器可以更快的释放该连接 net.ipv4.tcp_retries2 = 15 # 该参数设置TIME_WAIT重用,可以让处于TIME_WAIT的连接用于新的tcp连接 net.ipv4.tcp_tw_reuse = 1 #该参数设置tcp连接中TIME_WAIT的快速回收 net.ipv4.tcp_tw_recycle = 1 #对于本端断开的socket连接,TCP保持在FIN-WAIT-2状态的时间(秒)。对方可能会断开连接或一直不结束连接或不可预料的进程死亡。 net.ipv4.tcp_fin_timeout = 1 #该参数设置系统的TIME_WAIT的数量,如果超过默认值则会被立即清除 net.ipv4.tcp_max_tw_buckets = 20000 #最大孤儿套接字(orphan sockets)数,单位是个 net.ipv4.tcp_max_orphans = 3276800 #禁用时间戳 net.ipv4.tcp_timestamps = 0 #tcp_synack_retries 显示或设定 Linux 核心在回应 SYN 要求时会尝试多少次重新发送初始 SYN,ACK 封包后才决定放弃。 #tcp_synack_retries 的值必须为正整数,并不能超过 255。因为每一次重新发送封包都会耗费约 30 至 40 秒去等待才决定尝试下一次重新发送或决定放弃。 net.ipv4.tcp_synack_retries = 1 #开启SYN洪水攻击保护 net.ipv4.tcp_syncookies = 1 #表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间 net.ipv4.tcp_keepalive_time = 300 #TCP发送keepalive探测以确定该连接已经断开的次数。(注意:保持连接仅在SO_KEEPALIVE套接字选项被打开是才发送.次数默认不需要修改,当然根据情形也可以适当地缩短此值.设置为5比较合适) net.ipv4.tcp_keepalive_intvl = 30 #表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时。 net.ipv4.tcp_keepalive_probes = 3 #定义网络连接可用作其源(本地)端口的最小和最大端口的限制,同时适用于TCP和UDP连接。 net.ipv4.ip_local_port_range = 10001 65000 #定义内存分配策略,可选值:0,1,2 # "0"表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。 # "1"表示内核允许分配所有的物理内存,而不管当前的内存状态如何。 # "2"表示内核允许分配超过所有物理内存和交换空间总和的内存。 vm.overcommit_memory = 0 #swappiness=0的时候表示最大限度使用物理内存,然后才是 swap空间,swappiness=100的时候表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。linux的基本默认设置为60 #Cloudera公司对于大数据集群推荐该值设置为1,其实在生产环境中我更推荐大家不要设置swap分区,而是将其设置为0,或者在安装操作系统时不指定swap分区,对于内存的使用有咱们程序员和运维人员来控制. vm.swappiness = 1 [root@yinzhengjie ~]# [root@yinzhengjie ~]#
5>.增加文件限制
[root@centos72.yinzhengjie.org.cn ~]# egrep -v "^#|^$" /etc/security/limits.conf * soft core unlimited * hard core unlimited * soft nproc 1000000 * hard nproc 1000000 * soft nofile 1000000 * hard nofile 1000000 * soft memlock 32000 * hard memlock 32000 * soft msgqueue 8192000 * hard msgqueue 8192000 [root@centos72.yinzhengjie.org.cn ~]#
6>.修改主机名,自定义即可
[root@centos72.yinzhengjie.org.cn ~]# vim /etc/hostname [root@centos72.yinzhengjie.org.cn ~]# [root@centos72.yinzhengjie.org.cn ~]# cat /etc/hostname openstack.yinzhengjie.org.cn [root@centos72.yinzhengjie.org.cn ~]# [root@centos72.yinzhengjie.org.cn ~]# reboot #重启以后验证上述配置是否生效,确认无误后关机并作快照,如下图所示。