OpenStack---环境搭建详解(T版)
OpenStack环境搭建部署环境准备虚拟机资源信息部署思路基础环境配置重新命名防火墙、核心防护免交互基础环境依赖包时间同步+周期性计划任务系统环境配置安装、配置MariaDB安装RabbitMQ安装memcached安装etcd为什么需要 Etcd ?Etcd 提供什么能力?ETCD-应用场景环境准备虚拟机资源信息1、控制节点ct(controller)CPU:双核双线程-CPU虚拟化开启内存:
OpenStack环境搭建部署
环境准备
虚拟机资源信息
1、控制节点ct(controller)
CPU:双核双线程-CPU虚拟化开启
内存:8G 硬盘:40G+300G(CEPH块存储)
双网卡:VM1-(局域网)192.168.100.80 NAT-192.168.188.80
操作系统:Centos 7.6(1810)-最小化安装
2、计算节点c1(compute01)
CPU:双核双线程-CPU虚拟化开启
内存:8G 硬盘:40G+300G(CEPH块存储)
双网卡:VM1(局域网)-192.168.100.90 NAT-192.168.188.90
操作系统:Centos 7.6(1810)-最小化安装
3、计算节点c2(compute02)
CPU:双核双线程-CPU虚拟化开启
内存:8G 硬盘:40G+300G(CEPH块存储)
双网卡:VM1(局域网)-192.168.100.100 NAT-192.168.188.100
操作系统:Centos 7.6(1810)-最小化安装
PS:最小内存6G
部署思路
一、配置操作系统+OpenStack运行环境
二、配置OpenStack平台基础服务(rabbitmq、mariadb、memcache、Apache)
三、配置OpenStack keystone组件
四、配置OpenStack Glance组件
五、配置placement服务
六、配置OpenStack Nova组件
七、配置OpenStack Neutron组件
八、配置OpenStack dashboard组件
九、配置OpenStack Cinder组件
十、常用云主机操作
基础环境配置
重新命名
[root@localhost ~]# hostnamectl set-hostname controller
[root@localhost ~]# su
[root@localhost ~]# hostnamectl set-hostname compute01
[root@localhost ~]# su
[root@localhost ~]# hostnamectl set-hostname compute02
[root@localhost ~]# su
防火墙、核心防护
[root@controller ~]# systemctl stop firewalld //关闭防火墙
[root@controller ~]# setenforce 0 //关闭核心防护
[root@controller ~]# 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@controller ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
[root@controller ~]# grep -v "#" /etc/selinux/config
SELINUX=disabled
SELINUXTYPE=targeted
免交互
设置映射(内部网址)
在所有节点上
[root@controller ~]# vi /etc/hosts
末尾添加
192.168.100.80 controller
192.168.100.90 compute01
192.168.100.100 compute02
在所有节点上
[root@controller ~]# ssh-keygen -t rsa //生成密钥
[root@controller ~]# ssh-copy-id controller //传递公钥
[root@controller ~]# ssh-copy-id compute01
[root@controller ~]# ssh-copy-id compute02
验证
在控制节点上
[root@controller ~]# ssh root@compute01
Last login: Thu Jan 28 17:46:42 2021
[root@compute01 ~]# exit
登出
Connection to compute01 closed.
[root@controller ~]# ssh root@compute02
Last login: Thu Jan 28 17:46:50 2021
[root@compute02 ~]# exit
登出
Connection to compute02 closed.
在计算节点01上
[root@compute01 ~]# ssh root@controller
Last login: Thu Jan 28 17:46:34 2021
[root@controller ~]# exit
登出
Connection to controller closed.
[root@compute01 ~]# ssh root@compute02
Last login: Thu Jan 28 17:58:19 2021 from 192.168.100.80
[root@compute02 ~]# exit
登出
Connection to compute02 closed.
在计算节点02上
[root@compute02 ~]# ssh root@controller
Last login: Thu Jan 28 18:04:50 2021 from compute01
[root@controller ~]# exit
登出
Connection to controller closed.
[root@compute02 ~]# ssh root@compute01
Last login: Thu Jan 28 17:58:11 2021 from 192.168.100.80
[root@compute01 ~]# exit
登出
Connection to compute01 closed.
基础环境依赖包
面向所有节点
[root@controller ~]# yum -y install net-tools bash-completion vim gcc gcc-c++ make pcre pcre-devel expat-devel cmake bzip2 lrzsz
net-tools 可以使用ifconfig命令
bash-completion 自动补全
pcre 正则 devel库
expat-devel:Apache依赖包,C语言开发,解析XML文档的开发库
[root@controller ~]# yum -y install centos-release-openstack-train python-openstackclient openstack-selinux openstack-utils
centos-release-openstack-train 保证安装更新openstack版本为最新版本t版
python-openstackclient openstack的python客户端
因为openstack中的API大多数是python编写的,并且连接数据库,也需要python
openstack-selinux openstack核心安全防护
openstack-utils openstack其它util工具
时间同步+周期性计划任务
安装时间同步软件
[root@controller ~]# yum -y install chrony
在控制节点上设置为同步源
[root@controller ~]# vi /etc/chrony.conf
3 #server 0.centos.pool.ntp.org iburst //注释掉
4 #server 1.centos.pool.ntp.org iburst
5 #server 2.centos.pool.ntp.org iburst
6 #server 3.centos.pool.ntp.org iburst
7 server ntp.aliyun.com iburst //设置时间同步源
27 allow 192.168.100.0/24 //为100网段提供时间同步
[root@controller ~]# systemctl restart chronyd //重启时间同步服务
[root@controller ~]# systemctl enable chronyd //开机自启动
[root@controller ~]# chronyc sources //更新
210 Number of sources = 1
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* 203.107.6.88 2 6 17 14 +583us[+1282us] +/- 24ms
[root@controller ~]#
在计算节点1.2上
[root@compute01 ~]# vi /etc/chrony.conf
注释/添加/修改
3 #server 0.centos.pool.ntp.org iburst
4 #server 1.centos.pool.ntp.org iburst
5 #server 2.centos.pool.ntp.org iburst
6 #server 3.centos.pool.ntp.org iburst
7 server controller iburst //设置时间同步源为控制节点
27 allow 192.168.100.0/24
[root@compute01 ~]# systemctl restart chronyd
[root@compute01 ~]# systemctl enable chronyd
[root@compute01 ~]# chronyc sources
210 Number of sources = 1
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* controller 3 6 17 3 -12us[ -144us] +/- 27ms
[root@compute01 ~]#
设置任务计划
面向所有节点
[root@controller ~]# crontab -e //配置计划任务
*/30 * * * * /usr/bin/chronyc sources >> /var/log/chronyc.log
每隔30分钟同步一次
[root@controller ~]# crontab -l //设置周期性任务
*/30 * * * * /usr/bin/chronyc sources >> /var/log/chronyc.log
[root@controller ~]# date
2021年 01月 28日 星期四 18:32:42 CST
系统环境配置
安装、配置MariaDB
配置服务(控制节点):
[root@controller ~]# yum -y install mariadb mariadb-server python2-PyMySQL
#此包用于openstack的控制端连接mysql所需要的模块,如果不安装,则无法连接数据库;此包只安装在控制端
[root@controller ~]# yum -y install libibverbs //底层库文件
添加MySQL子配置文件,增加如下内容
[root@controller ~]# vi /etc/my.cnf.d/openstack.cnf
[mysqld]
bind-address = 192.168.100.80 //控制节点局域网地址(绑定内网地址)本地数据库节点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
Created symlink from /etc/systemd/system/mysql.service to /usr/lib/systemd/system/mariadb.service.
Created symlink from /etc/systemd/system/mysqld.service to /usr/lib/systemd/system/mariadb.service.
Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service.
[root@controller ~]# systemctl start mariadb
数据库初始化设置
[root@controller ~]# mysql_secure_installation
Change the root password? [Y/n] y //是否设置密码
Remove anonymous users? [Y/n] y //是否移除匿名用户
Disallow root login remotely? [Y/n] n //不允许root用户远程登陆
Remove test database and access to it? [Y/n] y //是否移除test数据库
Reload privilege tables now? [Y/n] y //是否重置权限列表
[root@controller ~]# mysql -uroot -p123456 //登陆数据库
安装RabbitMQ
所有创建虚拟机的指令,控制端都会发送到rabbitmq,node节点监听rabbitmq
[root@controller ~]# yum -y install rabbitmq-server
配置服务,启动RabbitMQ服务,并设置其开机启动。
[root@controller ~]# systemctl enable rabbitmq-server.service
Created symlink from /etc/systemd/system/multi-user.target.wants/rabbitmq-server.service to /usr/lib/systemd/system/rabbitmq-server.service.
[root@controller ~]# systemctl start rabbitmq-server.service
创建消息队列用户,用于controler和node节点连接rabbitmq的认证(关联)
[root@controller ~]# 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.把消息传递过程中,也会进行读写操作
授予独立的用户身份,读写权限
可查看25672和5672 两个端口(5672是Rabbitmq默认端口,25672是Rabbit的测试工具CLI的端口)
[root@controller ~]# netstat -anptu | grep 5672
tcp 0 0 0.0.0.0:25672 0.0.0.0:* LISTEN 9292/beam.smp
tcp 0 0 192.168.100.80:60299 192.168.100.80:25672 TIME_WAIT -
tcp6 0 0 :::5672 :::* LISTEN 9292/beam.smp
[root@controller ~]#
查看rabbitmq插件列表
[root@controller ~]# rabbitmq-plugins list
Configured: E = explicitly enabled; e = implicitly enabled
| Status: * = running on rabbit@controller
|/
[ ] amqp_client 3.6.16
[ ] cowboy 1.0.4
[ ] cowlib 1.0.2
[ ] rabbitmq_amqp1_0 3.6.16
[ ] rabbitmq_auth_backend_ldap 3.6.16
[ ] rabbitmq_auth_mechanism_ssl 3.6.16
[ ] rabbitmq_consistent_hash_exchange 3.6.16
[ ] rabbitmq_event_exchange 3.6.16
[ ] rabbitmq_federation 3.6.16
[ ] rabbitmq_federation_management 3.6.16
[ ] rabbitmq_jms_topic_exchange 3.6.16
[ ] rabbitmq_management 3.6.16
[ ] rabbitmq_management_agent 3.6.16
[ ] rabbitmq_management_visualiser 3.6.16
[ ] rabbitmq_mqtt 3.6.16
[ ] rabbitmq_random_exchange 3.6.16
[ ] rabbitmq_recent_history_exchange 3.6.16
[ ] rabbitmq_sharding 3.6.16
[ ] rabbitmq_shovel 3.6.16
[ ] rabbitmq_shovel_management 3.6.16
[ ] rabbitmq_stomp 3.6.16
[ ] rabbitmq_top 3.6.16
[ ] rabbitmq_tracing 3.6.16
[ ] rabbitmq_trust_store 3.6.16
[ ] rabbitmq_web_dispatch 3.6.16
[ ] rabbitmq_web_mqtt 3.6.16
[ ] rabbitmq_web_mqtt_examples 3.6.16
[ ] rabbitmq_web_stomp 3.6.16
[ ] rabbitmq_web_stomp_examples 3.6.16
[ ] sockjs 0.3.4
开启rabbitmq的web管理界面的插件,端口为15672
[root@controller ~]# rabbitmq-plugins enable rabbitmq_management
The following plugins have been enabled:
amqp_client
cowlib
cowboy
rabbitmq_web_dispatch
rabbitmq_management_agent
rabbitmq_management
Applying plugin configuration to rabbit@controller... started 6 plugins.
[root@controller ~]# netstat -anptu | grep 5672
tcp 0 0 0.0.0.0:25672 0.0.0.0:* LISTEN 9292/beam.smp
tcp 0 0 0.0.0.0:15672 0.0.0.0:* LISTEN 9292/beam.smp
tcp 0 0 192.168.100.80:39115 192.168.100.80:25672 TIME_WAIT -
tcp6 0 0 :::5672
浏览器
http://192.168.100.80:15672/
用户名和密码:guest
安装memcached
作用:
安装memcached是用来存储session(会话)信息;服务身份验证机制(keystone)使用memched来缓存令牌,在登录openstack的dashboard时,会产生一些session信息,这些session信息会存放到memcached中
概念
memcached是一套分布式的高速缓存系统,由LiveJournal的Brad Fitzpatrick开发,但被许多网站使用。这是一套开放源代码软件,以BSD license授权发布。
memcached缺乏认证以及安全管制,这代表应该将memcached服务器放置在防火墙后。
memcached的API使用三十二比特的循环冗余校验(CRC-32)计算键值后,将数据分散在不同的机器上。当表格满了以后,接下来新增的数据会以LRU机制替换掉。由于memcached通常只是当作缓存系统使用,所以使用memcached的应用程序在写回较慢的系统时(像是后端的数据库)需要额外的代码更新memcached内的数据。
安装Memcached
[root@controller ~]# yum install -y memcached python-memcached
#python-*模块在OpenStack中起到连接数据库的作用
修改Memcached配置文件
[root@controller ~]# vi /etc/sysconfig/memcached
PORT="11211" 默认端口号
USER="memcached" 默认账户名
MAXCONN="1024" 最大连接数
CACHESIZE="64" 缓存大小
OPTIONS="-l 127.0.0.1,::1,controller"
[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 ~]# systemctl start memcached //启动服务
[root@controller ~]# netstat -anptu | grep 11211 //查看端口
tcp 0 0 192.168.100.80:11211 0.0.0.0:* LISTEN 21078/memcached
tcp 0 0 127.0.0.1:11211 0.0.0.0:* LISTEN 21078/memcached
tcp6 0 0 ::1:11211 :::* LISTEN 21078/memcached
安装etcd
为什么需要 Etcd ?
所有的分布式系统,都面临的一个问题是多个节点之间的数据共享问题,这个和团队协作的道理是一样的,成员可以分头干活,但总是需要共享一些必须的信息,比如谁是 leader, 都有哪些成员,依赖任务之间的顺序协调等。所以分布式系统要么自己实现一个可靠的共享存储来同步信息(比如 Elasticsearch ),要么依赖一个可靠的共享存储服务,而 Etcd 就是这样一个服务。
Etcd 提供什么能力?
Etcd 主要提供以下能力,已经熟悉 Etcd 的读者可以略过本段。
提供存储以及获取数据的接口,它通过协议保证 Etcd 集群中的多个节点数据的强一致性。用于存储元信息以及共享配置。
提供监听机制,客户端可以监听某个key或者某些key的变更(v2和v3的机制不同,参看后面文章)。用于监听和推送变更。
提供key的过期以及续约机制,客户端通过定时刷新来实现续约(v2和v3的实现机制也不一样)。用于集群监控以及服务注册发现。
提供原子的CAS(Compare-and-Swap)和 CAD(Compare-and-Delete)支持(v2通过接口参数实现,v3通过批量事务实现)。用于分布式锁以及leader选举。
ETCD-应用场景
场景一:服务发现(Service Discovery)
服务发现要解决的也是分布式系统中最常见的问题之一,即在同一个分布式集群中的进程或服务,要如何才能找到对方并建立连接。本质上来说,服务发现就是想要了解集群中是否有进程在监听udp或tcp端口,并且通过名字就可以查找和连接。要解决服务发现的问题,需要有下面三大支柱,缺一不可。
一个强一致性、高可用的服务存储目录。基于Raft算法的etcd天生就是这样一个强一致性高可用的服务存储目录。
一种注册服务和监控服务健康状态的机制。用户可以在etcd中注册服务,并且对注册的服务设置key TTL,定时保持服务的心跳以达到监控健康状态的效果。
一种查找和连接服务的机制。通过在etcd指定的主题下注册的服务也能在对应的主题下查找到。为了确保连接,我们可以在每个服务机器上都部署一个Proxy模式的etcd,这样就可以确保能访问etcd集群的服务都能互相连接。
下面我们来看服务发现对应的具体场景:
微服务协同工作架构中,服务动态添加。随着Docker容器的流行,多种微服务共同协作,构成一个相对功能强大的架构的案例越来越多。透明化的动态添加这些服务的需求也日益强烈。通过服务发现机制,在etcd中注册某个服务名字的目录,在该目录下存储可用的服务节点的IP。在使用服务的过程中,只要从服务目录下查找可用的服务节点去使用即可。
PaaS平台中应用多实例与实例故障重启透明化。PaaS平台中的应用一般都有多个实例,通过域名,不仅可以透明的对这多个实例进行访问,而且还可以做到负载均衡。但是应用的某个实例随时都有可能故障重启,这时就需要动态的配置域名解析(路由)中的信息。通过etcd的服务发现功能就可以轻松解决这个动态配置的问题
场景二:消息发布与订阅
在分布式系统中,最适用的一种组件间通信方式就是消息发布与订阅。即构建一个配置共享中心,数据提供者在这个配置中心发布消息,而消息使用者则订阅他们关心的主题,一旦主题有消息发布,就会实时通知订阅者。通过这种方式可以做到分布式系统配置的集中式管理与动态更新。
•应用中用到的一些配置信息放到etcd上进行集中管理。这类场景的使用方式通常是这样:应用在启动的时候主动从etcd获取一次配置信息,同时,在etcd节点上注册一个Watcher并等待,以后每次配置有更新的时候,etcd都会实时通知订阅者,以此达到获取最新配置信息的目的。
•分布式搜索服务中,索引的元信息和服务器集群机器的节点状态存放在etcd中,供各个客户端订阅使用。使用etcd的key TTL功能可以确保机器状态是实时更新的。
•分布式日志收集系统。这个系统的核心工作是收集分布在不同机器的日志。收集器通常是按照应用(或主题)来分配收集任务单元,因此可以在etcd上创建一个以应用(主题)命名的目录P,并将这个应用(主题相关)的所有机器ip,以子目录的形式存储到目录P上,然后设置一个etcd递归的Watcher,递归式的监控应用(主题)目录下所有信息的变动。这样就实现了机器IP(消息)变动的时候,能够实时通知到收集器调整任务分配。
•系统中信息需要动态自动获取与人工干预修改信息请求内容的情况。通常是暴露出接口,例如JMX接口,来获取一些运行时的信息。引入etcd之后,就不用自己实现一套方案了,只要将这些信息存放到指定的etcd目录中即可,etcd的这些目录就可以通过HTTP的接口在外部访问。
场景三:负载均衡
在场景一中也提到了负载均衡,本文所指的负载均衡均为软负载均衡。分布式系统中,为了保证服务的高可用以及数据的一致性,通常都会把数据和服务部署多份,以此达到对等服务,即使其中的某一个服务失效了,也不影响使用。由此带来的坏处是数据写入性能下降,而好处则是数据访问时的负载均衡。因为每个对等服务节点上都存有完整的数据,所以用户的访问流量就可以分流到不同的机器上。
•etcd本身分布式架构存储的信息访问支持负载均衡。etcd集群化以后,每个etcd的核心节点都可以处理用户的请求。所以,把数据量小但是访问频繁的消息数据直接存储到etcd中也是个不错的选择,如业务系统中常用的二级代码表(在表中存储代码,在etcd中存储代码所代表的具体含义,业务系统调用查表的过程,就需要查找表中代码的含义)。
•利用etcd维护一个负载均衡节点表。etcd可以监控一个集群中多个节点的状态,当有一个请求发过来后,可以轮询式的把请求转发给存活着的多个状态。类似KafkaMQ,通过ZooKeeper来维护生产者和消费者的负载均衡。同样也可以用etcd来做ZooKeeper的工作。
场景四:分布式通知与协调
这里说到的分布式通知与协调,与消息发布和订阅有些相似。都用到了etcd中的Watcher机制,通过注册与异步通知机制,实现分布式环境下不同系统之间的通知与协调,从而对数据变更做到实时处理。实现方式通常是这样:不同系统都在etcd上对同一个目录进行注册,同时设置Watcher观测该目录的变化(如果对子目录的变化也有需要,可以设置递归模式),当某个系统更新了etcd的目录,那么设置了Watcher的系统就会收到通知,并作出相应处理。
•通过etcd进行低耦合的心跳检测。检测系统和被检测系统通过etcd上某个目录关联而非直接关联起来,这样可以大大减少系统的耦合性。
•通过etcd完成系统调度。某系统有控制台和推送系统两部分组成,控制台的职责是控制推送系统进行相应的推送工作。管理人员在控制台作的一些操作,实际上是修改了etcd上某些目录节点的状态,而etcd就把这些变化通知给注册了Watcher的推送系统客户端,推送系统再作出相应的推送任务。
•通过etcd完成工作汇报。大部分类似的任务分发系统,子任务启动后,到etcd来注册一个临时工作目录,并且定时将自己的进度进行汇报(将进度写入到这个临时目录),这样任务管理者就能够实时知道任务进度。
场景五:分布式锁
因为etcd使用Raft算法保持了数据的强一致性,某次操作存储到集群中的值必然是全局一致的,所以很容易实现分布式锁。锁服务有两种使用方式,一是保持独占,二是控制时序。
•保持独占即所有获取锁的用户最终只有一个可以得到。etcd为此提供了一套实现分布式锁原子操作CAS(CompareAndSwap)的API。通过设置prevExist值,可以保证在多个节点同时去创建某个目录时,只有一个成功。而创建成功的用户就可以认为是获得了锁。
•控制时序,即所有想要获得锁的用户都会被安排执行,但是获得锁的顺序也是全局唯一的,同时决定了执行顺序。etcd为此也提供了一套API(自动创建有序键),对一个目录建值时指定为POST动作,这样etcd会自动在目录下生成一个当前最大的值为键,存储这个新的值(客户端编号)。同时还可以使用API按顺序列出所有当前目录下的键值。此时这些键的值就是客户端的时序,而这些键中存储的值可以是代表客户端的编号。
场景六:分布式队列
分布式队列的常规用法与场景五中所描述的分布式锁的控制时序用法类似,即创建一个先进先出的队列,保证顺序。
另一种比较有意思的实现是在保证队列达到某个条件时再统一按顺序执行。这种方法的实现可以在/queue这个目录中另外建立一个/queue/condition节点。
•condition可以表示队列大小。比如一个大的任务需要很多小任务就绪的情况下才能执行,每次有一个小任务就绪,就给这个condition数字加1,直到达到大任务规定的数字,再开始执行队列里的一系列小任务,最终执行大任务。
•condition可以表示某个任务在不在队列。这个任务可以是所有排序任务的首个执行程序,也可以是拓扑结构中没有依赖的点。通常,必须执行这些任务后才能执行队列中的其他任务。
•condition还可以表示其它的一类开始执行任务的通知。可以由控制程序指定,当condition出现变化时,开始执行队列任务。
场景七:集群监控与Leader竞选
通过etcd来进行监控实现起来非常简单并且实时性强。
前面几个场景已经提到Watcher机制,当某个节点消失或有变动时,Watcher会第一时间发现并告知用户。
节点可以设置TTL key,比如每隔30s发送一次心跳使代表该机器存活的节点继续存在,否则节点消失。
这样就可以第一时间检测到各节点的健康状态,以完成集群的监控要求。
另外,使用分布式锁,可以完成Leader竞选。这种场景通常是一些长时间CPU计算或者使用IO操作的机器,只需要竞选出的Leader计算或处理一次,就可以把结果复制给其他的Follower。从而避免重复劳动,节省计算资源。
这个的经典场景是搜索系统中建立全量索引。如果每个机器都进行一遍索引的建立,不但耗时而且建立索引的一致性不能保证。通过在etcd的CAS机制同时创建一个节点,创建成功的机器作为Leader,进行索引计算,然后把计算结果分发到其它节点。
安装etcd
[root@controller ~]# yum -y install etcd
修改配置文件
[root@controller ~]# cd /etc/etcd/
[root@controller etcd]# ls
etcd.conf
[root@controller etcd]# vi etcd.conf
3 ETCD_DATA_DIR="/var/lib/etcd/default.etcd" //数据目录位置
5 ETCD_LISTEN_PEER_URLS="http://192.168.100.80:2380" //监听其他etcd member的url(2380端口,集群之间通讯,域名为无效值)
6 ETCD_LISTEN_CLIENT_URLS="http://192.168.100.80:2379" //对外提供服务的地址(2379端口,集群内部的通讯端口)
9 ETCD_NAME="controller" //集群中节点标识(名称)
20 ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.100.80:2380" //该节点成员的URL地址,2380端口:用于集群之间通讯。
21 ETCD_ADVERTISE_CLIENT_URLS="http://192.168.100.80:2379"
27 ETCD_INITIAL_CLUSTER="controller=http://192.168.100.80:2380"
28 ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-01" //集群唯一标识,群集名称
29 ETCD_INITIAL_CLUSTER_STATE="new"
初始集群状态,new为静态,表示单个节点
若为existing,则表示此ETCD服务将尝试加入已有的集群,初始化完成后,会根据自己的集群名称自动寻找其它相同集群名称的ETCD
若为DNS,则表示此集群将作为被加入的对象,等待加入状态
开机自启动、开启服务,检测端口
[root@controller etcd]# systemctl enable etcd
Created symlink from /etc/systemd/system/multi-user.target.wants/etcd.service to /usr/lib/systemd/system/etcd.service.
[root@controller etcd]# systemctl start etcd
[root@controller etcd]# systemctl status etcd
● etcd.service - Etcd Server
Loaded: loaded (/usr/lib/systemd/system/etcd.service; enabled; vendor preset: disabled)
Active: active (running) since 四 2021-01-28 20:10:25 CST; 14s ago
Main PID: 22110 (etcd)
CGroup: /system.slice/etcd.service
└─22110 /usr/bin/etcd --name=controller --data-dir=/var/lib/etcd/default.etcd --lis...
1月 28 20:10:25 controller etcd[22110]: a803f6966f02f507 received MsgVoteResp from a803f69...m 2
1月 28 20:10:25 controller etcd[22110]: a803f6966f02f507 became leader at term 2
1月 28 20:10:25 controller etcd[22110]: raft.node: a803f6966f02f507 elected leader a803f69...m 2
1月 28 20:10:25 controller etcd[22110]: setting up the initial cluster version to 3.3
1月 28 20:10:25 controller etcd[22110]: set the initial cluster version to 3.3
1月 28 20:10:25 controller etcd[22110]: enabled capabilities for version 3.3
1月 28 20:10:25 controller etcd[22110]: published {Name:controller ClientURLs:[http://192....ec4
1月 28 20:10:25 controller etcd[22110]: ready to serve client requests
1月 28 20:10:25 controller etcd[22110]: serving insecure client requests on 192.168.100.80...ed!
1月 28 20:10:25 controller systemd[1]: Started Etcd Server.
Hint: Some lines were ellipsized, use -l to show in full.
[root@controller etcd]# netstat -anptu | grep 2379
tcp 0 0 192.168.100.80:2379 0.0.0.0:* LISTEN 22110/etcd
tcp 0 0 192.168.100.80:2379 192.168.100.80:36030 ESTABLISHED 22110/etcd
tcp 0 0 192.168.100.80:36030 192.168.100.80:2379 ESTABLISHED 22110/etcd
[root@controller etcd]# netstat -anptu | grep 2380
tcp 0 0 192.168.100.80:2380 0.0.0.0:* LISTEN 22110/etcd
[root@controller etcd]#
C1、C2安装OpenStack组件
[root@compute01 ~]# yum -y install centos-release-openstack-train python-openstackclient openstack-selinux openstack-utils
更多推荐
所有评论(0)