手动搭建openstack基础环境架构(openstack服务部署流程)

前言

搭建openstack基础环境架构来进一步熟悉了解openstack服务部署流程
如rabbitmq,数据库 memcached etcd MariaDB流程

OpenStack 部署流程

1.环境准备

1、控制节点(controller)
CPU:双核双线程-CPU虚拟化开启
内存:8G 硬盘:30G+300G(CEPH块存储)
双网卡:NAT-20.0.0.100     VM1-(局域网)192.168.100.100
操作系统:Centos 7.6(1810)-最小化安装
 
2、计算节点 (ct1)
CPU:双核双线程-CPU虚拟化开启
内存:8G 硬盘:30G+300G(CEPH块存储)
双网卡: NAT-20.0.0.101    VM1(局域网)-192.168.100.101
操作系统:Centos 7.6(1810)-最小化安装
 
3、计算节点 (ct2)
CPU:双核双线程-CPU虚拟化开启
内存:8G 硬盘:30G+300G(CEPH块存储)
双网卡: NAT-20.0.0.102  VM1(局域网)-192.168.100.102
操作系统:Centos 7.6(1810)-最小化安装
PS:最小内存6G

2.关闭防火墙

[root@controller ~]# systemctl stop firewalld
[root@controller ~]# setenforce 0    核心防护关闭
[root@controller ~]# systemctl disable firewalld
[root@controller ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
[root@controller ~]# grep -v "#" /etc/selinux/config

3.免交互
注:设置映射(内部网址)

20.0.0.100 controller
20.0.0.101 ct1
20.0.0.102 ct2

免交互

[root@controller ~]# ssh-keygen -t rsa   //生成密钥
[root@controller ~]# ssh-copy-id controller  //公钥传递
[root@controller ~]# ssh-copy-id ct1
[root@controller ~]# ssh-copy-id ct2

进行身份验证
注:ct1 ct2 一样要做免交互 保证都能登录

[root@controller ~]# ssh root@ct1
Last login: Thu Feb  4 10:06:14 2021
[root@ct1 ~]# exit
登出
Connection to ct1 closed.
[root@controller ~]# ssh root@ct2
Last login: Thu Feb  4 10:01:11 2021 from 20.0.0.1
[root@localhost ~]# exit
登出
Connection to ct2 closed.

4.安装基础环境依赖包

[root@controller ~]# yum -y install net-tools bash-completion vim gcc gcc-c++ make pcre  pcre-devel expat-devel cmake  bzip2 
[root@controller ~]# yum -y install centos-release-openstack-train python-openstackclient openstack-selinux openstack-utils

注:
net-tools :可以使用ifconfig命令

bash-completion: 自动补全

pcre: 正则 devel库

expat-devel:Apache依赖包,C语言开发,解析XML文档的开发库

centos-release-openstack-train: 保证安装更新openstack版本为最新版本t版

python-openstackclient: openstack的python客户端 注:因为openstack中的API大多数是python编写的,并且连接数据库,也需要python

openstack-selinux openstack:核心安全防护

openstack-utils: openstack其它util工具

5.设置时间同步
注:在计算节点1.2上都有设置
安装同步软件

[root@controller ~]# yum -y install chrony

置为同步源
vi /etc/chrony.conf

添加修改
server ntp.aliyun.com iburst  // 设置为时间同步源
allow 20.0.0.0/24        // 为192.168.100网段提供时间同步

[root@controller ~]# systemctl restart chronyd  //重启服务
[root@controller ~]# systemctl enable chronyd   // 自启动
[root@controller ~]# chronyc sources             // 更新 控制时间同步后台进程去搜索关联同步的时间服务器信息

在这里插入图片描述
6.设置任务计划
注:同步时间保持 ,设置任务计划, 时间间隔设置不要太小,尽量拉长,因为频次太快,导致日志量越来越大,存储空间受影响

[root@controller ~]# crontab -e
*/30 * * * * /usr/bin/chronyc sources >> /var/log/chronyc.log
  1. 安装mysql,配置MariaDB
[root@controller ~]# yum -y install mariadb mariadb-server python2-PyMySQL

注:此包用于openstack的控制端连接mysql所需要的模块,如果不安装,则无法连接数据库;此包只安装在控制端。

[root@controller ~]# yum -y install libibverbs  //底层库文件

设置mysql配置文件
注:openstack.cnf里面添加以下内容

[mysqld]
bind-address=20.0.0.100  //控制节点局域网地址(绑定内网地址)本地数据库节点ip  
default-storage-engine=innodb //默认存储引擎
innodb_file_per_table=on      //每张表独立表空间文件(文件存储空间)
max_connections=4096          //最大连接数
collation-server=utf8_general_ci  //默认字符集(不区分大小写)
character-set-server=utf8          //字符集utf8_bin区分大小写
[root@controller ~]# systemctl enable mariadb  //自启动数据库
[root@controller ~]# systemctl start mariadb   //开启数据库服务
[root@controller ~]# mysql_secure_installation   //数据库初始化设置
[root@controller ~]# mysql -uroot -p   //测试登录数据库

在这里插入图片描述
7.安装RabbitMQ(消息队列)
注:所有创建虚拟机的指令,控制端都会发送到rabbitmq,node节点监听rabbitmq

启动RabbitMQ服务,并设置其开机启动

[root@controller ~]# yum -y install rabbitmq-server   //安装软件
[root@controller ~]# systemctl start rabbitmq-server     //开启服务
[root@controller ~]# systemctl enable rabbitmq-server  // 自启动

查询端口

[root@controller ~]# netstat -anptu | grep 5672
tcp        0      0 0.0.0.0:25672           0.0.0.0:*               LISTEN      31472/beam.smp      
tcp6       0      0 :::5672                 :::*                    LISTEN      31472/beam.smp

创建消息队列用户,用于controler和node节点连接rabbitmq的认证
注:若遇到错误Error: unable to connect to node rabbit@localhost: nodedown

rabbitmqctl add_user openstack RABBIT_PASS
Creating user "openstack"

配置openstack用户的操作权限(正则,配置读写权限)

[root@controller ~]# rabbitmqctl set_permissions openstack ".*" ".*" ".*"
Setting permissions for user "openstack" in vhost "/"

注:为什么需要配置读写权限:Nova与Keystone进行通讯
1.rabbidb,把nova请求读取写入到本地内部
2.Nova把请求相关写入到Rabbitmq的内部
3.把消息传递过程中,也会进行读写操作
故授予独立的用户身份,读写权限

查看rabbitmq插件列表

[root@controller ~]# rabbitmq-plugins list
 Configured: E = explicitly enabled; e = implicitly enabled
 | Status:   * = running on rabbit@localhost
 |/
[  ] amqp_client                       3.6.16
[  ] cowboy                            1.0.4
[  ] cowlib                            1.0.2
[  ] rabbitmq_amqp1_0                  3.6.16
.........

开启rabbitmq的web管理界面的插件,端口为15672

root@controller ~]# netstat -anptu | grep 5672
tcp        0      0 0.0.0.0:25672           0.0.0.0:*               LISTEN      34251/beam.smp      
tcp        0      0 0.0.0.0:15672           0.0.0.0:*               LISTEN      34251/beam.smp      
tcp        0      0 127.0.0.1:52646         127.0.0.1:25672         TIME_WAIT   -                   
tcp        0      0 127.0.0.1:36246         127.0.0.1:25672         TIME_WAIT   -                   
tcp6       0      0 :::5672                 :::*                    LISTEN      34251/beam.smp    

验证rabbitmq的web管理界面的插件
谷歌浏览器访问 http://20.0.0.100:15672
在这里插入图片描述
在这里插入图片描述

8.安装memcached
作用介绍

安装memcached是用来存储session(会话)信息;服务身份验证机制(keystone)使用memched来缓存令牌,在登录openstack的dashboard时,会产生一些session信息,这些session信息会存放到memcached中
Memcached是一个自由开源的, 高性能,分布式内存对象缓存系统。
Memcached是以LiveJourmal旗下Danga Interactive公司的Brad Fitzpatric为首开发的一款软件。现在已成为mixi、hatena、 Facebook. Vox、 LiveJournal等众多服务中提高Web应用扩展性的重要因素
Memcached是一种基于内存的key-value存储,用来存储小块的任意数据(字符串、对象)。这些数据可以是数据库调用、API调用或者是页面渲染的结果
Memcached简洁而强大。它的简洁设计便于快速开发,减轻开发难度,解决了大数据量缓存的很多问题。它的API兼容大部分流行的开发语言。
本质上,它是一个简洁的key-value存储系统。
一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。
并且在BAT里,redis已经逐渐取代了memcached,成为分布式场景广泛使用的缓存方案

安装memcached
注:python模块在OpenStack中起到了连接数据库的作用

[root@controller ~]# yum -y install memcached python-memcached

修改memcached配置文件
vi /etc/sysconfig/memcached

PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS="-l 127.0.0.1,::1,controller"

自启 开启 查看服务

[root@controller ~]# systemctl start memcached
[root@controller ~]# systemctl enable memcached
Created symlink from /etc/systemd/system/multi-user.target.wants/memcached.service to /usr/lib/systemd/system/memcached.service.
[root@controller ~]# netstat -anptu | grep 11211
tcp        0      0 20.0.0.100:11211        0.0.0.0:*               LISTEN      36966/memcached     
tcp        0      0 127.0.0.1:11211         0.0.0.0:*               LISTEN      36966/memcached     
tcp6       0      0 ::1:11211  

9.安装etcd
etcd特点:

简单: 基于HTTP+JSON的API让你可以用CURL命令就可以轻松使用。
安全: 可以选择SSL客户认证机制。
快速: 每个实例每秒支持一千次写操作。
可信: 使用Ralf算法充分实现了分布式。

应用场景

服务发现
消息发布和订阅
负载均衡
分布式通知与协调
分布式锁
分布式队列
集群监控与Leader竞选

为什么使用etcd而不用Zookeeper?

相比较之下,Zookeeper有如下缺点:
1.复杂。 Zookeeper的部署维护复杂,管理员必须掌握一系列的知识和技能;而Paxos强一致性算法也是素来以复杂难懂
而闻名于世;另外,Zookeeper的使用也比较复杂,需要安装客户端,官方只提供Java和C的两种语言的接口。

2.Java编写。这里不是对Java有偏见,而是Java本身就偏向重型应用,它会引入大量的依赖。而运维人员则普遍希望机器
集群能尽可能的简单,维护起来也不容易出错

3.发展缓慢。 Apache基金会项目特有的“Apache Way”在开源界也饱受争议,其中一大原因就是由于基金会庞大的结构
和松散的管理导致项目发展缓慢。

etcd作为一个后起之秀,其优点也很明显:
1.简单。 使用Go编写部署简单;使用HTTP作为接口使用简单;使用Raft算法保证强一致性让用户易于理解。

2.数据持久化。 etcd默认数据一更新就进行持久化。

3.安全。 etcd支持SSL客户端安全认证。

安装etcd

[root@controller ~]# yum -y install etcd

修改etcd配置文件
vi /etc/etcd/etcd.conf

ETCD_DATA_DIR="/var/lib/etcd/default.etcd" //数据目录位置
ETCD_LISTEN_PEER_URLS="http://20.0.0.100:2380"   //监听其他etcd member的url(2380端口,集群之间通讯,域名为无效值)
ETCD_LISTEN_CLIENT_URLS="http://20.0.0.100:2379" //对外提供服务的地址(2379端口,集群内部的通讯端口)
ETCD_NAME="controller"   //集群中节点标识(名称)
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://20.0.0.100:2380" //该节点成员的URL地址,2380端口:用于集群之间通讯。
ETCD_ADVERTISE_CLIENT_URLS="http://20.0.0.100:2379"
ETCD_INITIAL_CLUSTER="controller=http://20.0.0.100:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-01" //集群唯一标识,群集名称
ETCD_INITIAL_CLUSTER_STATE="new"  //初始集群状态,new为静态,表示单个节点
若为existing,则表示此ETCD服务将尝试加入已有的集群,初始化完成后,会根据自己的集群名称自动寻找其它相同集群名称的ETCD
若为DNS,则表示此集群将作为被加入的对象,等待加入状态

在这里插入图片描述
自启动 开启服务 查看端口

[root@controller etcd]# systemctl enable etcd  自启动
[root@controller etcd]# systemctl start etcd    开启服务
[root@controller etcd]# systemctl status etcd   服务状态
[root@controller etcd]# netstat -anptu | grep 2379  查看端口
[root@controller etcd]# netstat -anptu | grep 2380

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_50344807/article/details/113617921