手动搭建分布式OpenStack Newton vxlan模式v1.0-debug
前言 搭建前必须看我
本文档搭建的是分布式N版openstack(controller+ N compute)的文档。
openstack版本为Newton
搭建的时候,请严格按照文档所描写的进行配置,在不熟悉的情况下,严禁自己添加额外的配置和设
置!
学习这个文档能搭建基本的openstack环境,切记千万不能用于生产!要用于生产的环境,必须有严格!
测试还有额外的高级配置!
文档版权属于DevOps运维,未经允许,严禁售卖、复制传播!
欢迎加入千人OpenStack高级技术交流群:127155263 (非常活跃)
(扫码入群)
阅读文档注意,红色的部分是重要提示,另外其他加颜色的字体参数也得注意!
有些命令很长,注意有换行了,别只敲一半,每条命令前面都带有 #。
一、环境准备
1. 前提准备
安装vmware workstation12.5.0,虚拟出三台配置至少CPU 4c MEM 4G的虚拟机
Controller节点和Compute节点配置:
CPU:4c
MEM:4G
Disk:200G
Network: 3 (eth0 eth1 eth2, 第一块网卡就是extenel的网卡,第二块网卡是admin网卡,第三块是tunnel隧道)
Cinder节点配置:
CPU:4c
MEM:4G
Disk:200G+50G(这个50G可以根据自己需求调整大小)
Network: 2 (eth0 eth1, 第一块网卡就是extenel的网卡,第二块网卡是admin网卡,cinder节点不需要隧道)
安装CentOS7.2系统(最小化安装,不要yum update升级到7.3!) + 关闭防火墙 + 关闭selinux
# systemctl stop firewalld.service
# systemctl disable firewalld.service
安装好相关工具,因为系统是最小化安装的,所以一些ifconfig vim等命令没有,运行下面的命令把它们装上:
# yum install net-tools wget vim ntpdate bash-completion -y
替换CentOS默认源,默认生产环境上不了外网,所以你得想办法用自己的内部Yum源,如果没有,需要搭建一个。
让系统上网,然后运行下面命令:
# cd /etc/yum.repos.d
# rm -rf *
# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
这里用的是阿里的源。
另外openstack mitaka的软件依赖包已经上传在了百度云里面(openstack-newton.tar.gz)
大家下载后,传到Linux下面的/mnt/下面
并且按照视频里面的要求,配置好openstack.repo本地openstack源
openstack.repo具体配置如下:
[openstack]
name=openstack
baseurl= file:///mnt/openstack-newton/
enabled=1
gpgcheck=0
2. 更改hostname
# hostnamectl set-hostname controller
如果是compute就运行:
# hostnamectl set-hostname compute1
cinder节点就运行:
# hostnamectl set-hostname cinder
然后每个节点配置/etc/hosts文件如下
10.1.1.150 controller
10.1.1.151 compute1
10.1.1.152 cinder
更多高端IT运维课程 , 请访问 http://devops.taobao.com
3. NTP同步系统时间
# ntpdate cn.pool.ntp.org
然后查看运行date命令查看时间是否同步成功
注意,这个操作很重要,openstack是分布式架构的,每个节点都不能有时间差!
很多同学刚装完centos系统,时间会跟当前北京的时间不一致,所以必须运行下这个命令!
4. 配置IP 网络配置规划
网络配置:
external : 9.110.187.0/24
admin mgt : 10.1.1.0/24
tunnel:10.2.2.0/24
storage:10.3.3.0/24 (我们环境没有,如果你集成了ceph就应该用到)
controller虚拟机第一块网卡external,请配置IP 9.110.187.150
第二块网卡admin,请配置IP 10.1.1.150
第三块网卡tunnel,请配置IP 10.2.2.150
compute1虚拟机第一块网卡external,请配置IP 9.110.187.151
第二块网卡admin,请配置IP 10.1.1.151
第三块网卡tunnel,请配置IP 10.2.2.151
cinder虚拟机第一块网卡external,请配置IP 9.110.187.152
第二块网卡admin,请配置IP 10.1.1.152
第三块网卡tunnel,请配置IP 10.2.2.152
三个网络解释:
1. external : 这个网络是链接外网的,也就是说openstack环境里的虚拟机要让用户访问,那必须有个网段是连外网的,用户通过这个网
络能访问到虚拟机。如果是搭建的公有云,这个IP段一般是公网的(不是公网,你让用户怎么访问你的虚拟机?)
2. admin mgt:这个网段是用来做管理网络的。管理网络,顾名思义,你的openstack环境里面各个模块之间需要交互,连接数据库,连
接Message Queue都是需要一个网络去支撑的,那么这个网段就是这个作用。最简单的理解,openstack自己本身用的IP段。
3. tunnel : 隧道网络,openstack里面使用gre或者vxlan模式,需要有隧道网络;隧道网络采用了点到点通信协议代替了交换连接,在
openstack里,这个tunnel就是虚拟机走网络数据流量用的。
当然这3个网络你都放在一块也行,但是只能用于测试学习环境,真正的生产环境是得分开的。在自己学习搭建的时候,通常我们用的是
vmware workstation虚拟机,有些同学创建虚拟机后,默认只有一块网卡,有些同学在只有一块网卡就不知道如何下手了,一看有三种
网络就晕乎了... 所以,在创建完虚拟机后,请给虚拟机再添加2块网卡,根据生产环境的要求去搭建学习。
三种网络在生产环境里是必须分开的,有的生产环境还有分布式存储,所以还得额外给存储再添加一网络,storage段。网络分开的好处
就是数据分流、安全、不相互干扰。你想想,如果都整一块了,还怎么玩?用户访问虚拟机还使用你openstack的管理段,那太不安全
了...
更多高端IT运维课程 , 请访问 http://devops.taobao.com
二、 搭建Mariadb
1. 安装mariadb数据库
# yum install -y MariaDB-server MariaDB-client
2. 配置mariadb
# vim /etc/my.cnf.d/mariadb-openstack.cnf
在mysqld区块添加如下内容:
[mysqld]
default-storage-engine = innodb
innodb_file_per_table
collation-server = utf8_general_ci
init-connect = 'SET NAMES utf8'
character-set-server = utf8
bind-address = 10.1.1.150
3、启动数据库及设置mariadb开机启动
# systemctl enable mariadb.service
# systemctl restart mariadb.service
# systemctl status mariadb.service
# systemctl list-unit-files |grep mariadb.service
4. 配置mariadb,给mariadb设置密码
# mysql_secure_installation
先按回车,然后按Y,设置mysql密码,然后一直按y结束
这里我们设置的密码是devops
三、安装RabbitMQ
1. 每个节点都安装erlang
# yum install -y erlang
2. 每个节点都安装RabbitMQ
# yum install -y rabbitmq-server
3. 每个节点都启动rabbitmq及设置开机启动
# systemctl enable rabbitmq-server.service
# systemctl restart rabbitmq-server.service
# systemctl status rabbitmq-server.service
# systemctl list-unit-files |grep rabbitmq-server.service
4. 创建openstack,注意将PASSWOED替换为自己的合适密码
# rabbitmqctl add_user openstack devops
5. 将openstack用户赋予权限
# rabbitmqctl set_permissions openstack ".*" ".*" ".*"
# rabbitmqctl set_user_tags openstack administrator
# rabbitmqctl list_users
6. 看下监听端口 rabbitmq用的是5672端口
# netstat -ntlp |grep 5672
7 .查看RabbitMQ插件
# /usr/lib/rabbitmq/bin/rabbitmq-plugins list
8. 打开RabbitMQ相关插件
# /usr/lib/rabbitmq/bin/rabbitmq-plugins enable rabbitmq_management mochiweb webmachine rabbitmq_web_dispatch
amqp_client rabbitmq_management_agent
更多高端IT运维课程 , 请访问 http://devops.taobao.com
打开相关插件后,重启下rabbitmq服务
# systemctl restart rabbitmq-server
浏览器输入:http://9.110.187.150:15672 默认用户名密码:guest/guest
通过这个界面,我们能很直观的看到rabbitmq的运行和负载情况
当然我们可以不用guest,我们换一个另外用户,比如mqadmin
# rabbitmqctl add_user mqadmin mqadmin
# rabbitmqctl set_user_tags mqadmin administrator
# rabbitmqctl set_permissions -p / mqadmin ".*" ".*" ".*"
我们还可以通过这命令把密码换了,比如把guest用户的密码变成devops
# rabbitmqctl change_password guest devops
9. 查看rabbitmq状态
用浏览器登录http://9.110.187.150:15672 输入openstack/devops也可以查看状态信息:
三、安装配置Keystone
1、配置openstack Newton yum源
cd /etc/yum.repos.d
vim openstack.repo
添加:
[openstack]
name=newton
baseurl= http://mirror.centos.org/centos/7/cloud/x86_64/openstack-newton/
enabled=1
gpgcheck=0
2、创建keystone数据库
# CREATE DATABASE keystone;
3、创建数据库用户及赋予权限
# GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'devops';
# GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'devops';
注意将devops替换为自己的数据库密码
4、安装keystone和memcached
# yum -y install openstack-keystone httpd mod_wsgi python-openstackclient memcached python-memcached openstack-
utils
5、启动memcache服务并设置开机自启动
# systemctl enable memcached.service
# systemctl restart memcached.service
# systemctl status memcached.service
6、配置/etc/keystone/keystone.conf文件
# openssl rand -hex 10 首先需要先产生一个随机数,用作初始配置时的管理员令牌
# ADMIN_TOKEN=929c32c35c315b694536 这个字符串就是上面openssl随机生成的
# cp /etc/keystone/keystone.conf /etc/keystone/keystone.conf.bak
# >/etc/keystone/keystone.conf
# openstack-config --set /etc/keystone/keystone.conf DEFAULT debug false
# openstack-config --set /etc/keystone/keystone.conf DEFAULT verbose true
# openstack-config --set /etc/keystone/keystone.conf DEFAULT admin_token 929c32c35c315b694536
# openstack-config --set /etc/keystone/keystone.conf DEFAULT admin_endpoint http://controller:35357
更多高端IT运维课程 , 请访问 http://devops.taobao.com
# openstack-config --set /etc/keystone/keystone.conf DEFAULT public_endpoint http://controller:5000
# openstack-config --set /etc/keystone/keystone.conf database connection mysql://keystone:devops@controller/keystone
# openstack-config --set /etc/keystone/keystone.conf oslo_messaging_rabbit rabbit_host controller
# openstack-config --set /etc/keystone/keystone.conf oslo_messaging_rabbit rabbit_port 5672
# openstack-config --set /etc/keystone/keystone.conf oslo_messaging_rabbit rabbit_userid openstack
# openstack-config --set /etc/keystone/keystone.conf oslo_messaging_rabbit rabbit_password devops
# openstack-config --set /etc/keystone/keystone.conf cache backend oslo_cache.memcache_pool
# openstack-config --set /etc/keystone/keystone.conf cache enabled true
# openstack-config --set /etc/keystone/keystone.conf cache memcache_servers controller:11211
# openstack-config --set /etc/keystone/keystone.conf memcache servers controller:11211
# openstack-config --set /etc/keystone/keystone.conf token expiration 3600
# openstack-config --set /etc/keystone/keystone.conf token provider fernet
7、配置httpd.conf文件&memcached文件
# sed -i "s/#ServerName www.example.com:80/ServerName controller/" /etc/httpd/conf/httpd.conf
# sed -i 's/OPTIONS*.*/OPTIONS="-l 127.0.0.1,::1,10.1.1.150"/' /etc/sysconfig/memcached
8、配置keystone与httpd结合
# vim /etc/httpd/conf.d/wsgi-keystone.conf
Listen 5000
Listen 35357
WSGIDaemonProcess keystone-public processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}
WSGIProcessGroup keystone-public
WSGIScriptAlias / /usr/bin/keystone-wsgi-public
WSGIApplicationGroup %{GLOBAL}
WSGIPassAuthorization On
ErrorLogFormat "%{cu}t %M"
ErrorLog /var/log/httpd/keystone-error.log
CustomLog /var/log/httpd/keystone-access.log combined
Require all granted
WSGIDaemonProcess keystone-admin processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}
WSGIProcessGroup keystone-admin
WSGIScriptAlias / /usr/bin/keystone-wsgi-admin
WSGIApplicationGroup %{GLOBAL}
WSGIPassAuthorization On
ErrorLogFormat "%{cu}t %M"
ErrorLog /var/log/httpd/keystone-error.log
CustomLog /var/log/httpd/keystone-access.log combined
Require all granted
9、数据库同步
# su -s /bin/sh -c "keystone-manage db_sync" keystone
11、初始化fernet
# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
# keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
10、启动httpd,并设置httpd开机启动
# systemctl enable httpd.service
# systemctl restart httpd.service
更多高端IT运维课程 , 请访问 http://devops.taobao.com
# systemctl status httpd.service
# systemctl list-unit-files |grep httpd.service
11、创建 admin 用户角色
# keystone-manage bootstrap \
--bootstrap-password devops \
--bootstrap-username admin \
--bootstrap-project-name admin \
--bootstrap-role-name admin \
--bootstrap-service-name keystone \
--bootstrap-region-id RegionOne \
--bootstrap-admin-url http://controller:35357/v3 \
--bootstrap-internal-url http://controller:35357/v3 \
--bootstrap-public-url http://controller:5000/v3
这样,就可以在 openstack 命令行里使用 admin 账号登录了。
验证,测试是否已配置合理:
# openstack project list --os-username admin --os-project-name admin --os-user-domain-id default --os-project-domain-id
default --os-identity-api-version 3 --os-auth-url http://controller:5000 --os-password devops
12. 创建admin用户环境变量,创建/root/admin-openrc 文件并写入如下内容
# vim /root/admin-openrc
添加以下内容:
export OS_USER_DOMAIN_ID=default
export OS_PROJECT_DOMAIN_ID=default
export OS_USERNAME=admin
export OS_PROJECT_NAME=admin
export OS_PASSWORD=devops
export OS_IDENTITY_API_VERSION=3
export OS_AUTH_URL=http://controller:35357/v3
13、创建service项目
# source /root/admin-openrc
# openstack project create --domain default --description "Service Project" service
14、创建demo项目
# openstack project create --domain default --description "Demo Project" demo
15、创建demo用户
# openstack user create --domain default demo --password devops
注意:devops为demo用户密码
16、创建user角色将demo用户赋予user角色
# openstack role create user
# openstack role add --project demo --user demo user
17、验证keystone
# unset OS_TOKEN OS_URL
# openstack --os-auth-url http://controller:35357/v3 --os-project-domain-name default --os-user-domain-name default --
os-project-name admin --os-username admin token issue --os-password devops
# openstack --os-auth-url http://controller:5000/v3 --os-project-domain-name default --os-user-domain-name default --
os-project-name demo --os-username demo token issue --os-password devops
四、安装配置glance
1、创建glance数据库
更多高端IT运维课程 , 请访问 http://devops.taobao.com
# CREATE DATABASE glance;
2、创建数据库用户并赋予权限
# GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY 'devops';
# GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY 'devops';
3、创建glance用户及赋予admin权限
# source /root/admin-openrc
# openstack user create --domain default glance --password devops
# openstack role add --project service --user glance admin
4、创建image服务
# openstack service create --name glance --description "OpenStack Image service" image
5、创建glance的endpoint
# openstack endpoint create --region RegionOne image public http://controller:9292
# openstack endpoint create --region RegionOne image internal http://controller:9292
# openstack endpoint create --region RegionOne image admin http://controller:9292
6、安装glance相关rpm包
#yum install openstack-glance -y
7、修改glance配置文件/etc/glance/glance-api.conf
注意红色的密码设置成你自己的
# cp /etc/glance/glance-api.conf /etc/glance/glance-api.conf.bak
# >/etc/glance/glance-api.conf
# openstack-config --set /etc/glance/glance-api.conf database connection
mysql+pymysql://glance:devops@controller/glance
# openstack-config --set /etc/glance/glance-api.conf oslo_messaging_rabbit rabbit_host controller
# openstack-config --set /etc/glance/glance-api.conf oslo_messaging_rabbit rabbit_port 5672
# openstack-config --set /etc/glance/glance-api.conf oslo_messaging_rabbit rabbit_userid openstack
# openstack-config --set /etc/glance/glance-api.conf oslo_messaging_rabbit rabbit_password devops
# openstack-config --set /etc/glance/glance-api.conf keystone_authtoken auth_uri http://controller:5000
# openstack-config --set /etc/glance/glance-api.conf keystone_authtoken auth_url http://controller:35357
# openstack-config --set /etc/glance/glance-api.conf keystone_authtoken memcached_servers controller:11211
# openstack-config --set /etc/glance/glance-api.conf keystone_authtoken auth_type password
# openstack-config --set /etc/glance/glance-api.conf keystone_authtoken project_domain_name default
# openstack-config --set /etc/glance/glance-api.conf keystone_authtoken user_domain_name default
# openstack-config --set /etc/glance/glance-api.conf keystone_authtoken username glance
# openstack-config --set /etc/glance/glance-api.conf keystone_authtoken password devops
# openstack-config --set /etc/glance/glance-api.conf keystone_authtoken project_name service
# openstack-config --set /etc/glance/glance-api.conf paste_deploy flavor keystone
# openstack-config --set /etc/glance/glance-api.conf glance_store stores file,http
# openstack-config --set /etc/glance/glance-api.conf glance_store default_store file
# openstack-config --set /etc/glance/glance-api.conf glance_store filesystem_store_datadir /var/lib/glance/images/
8、修改glance配置文件/etc/glance/glance-registry.conf:
# cp /etc/glance/glance-registry.conf /etc/glance/glance-registry.conf.bak
# >/etc/glance/glance-registry.conf
# openstack-config --set /etc/glance/glance-registry.conf database connection
mysql+pymysql://glance:devops@controller/glance
# openstack-config --set /etc/glance/glance-registry.conf oslo_messaging_rabbit rabbit_host controller
# openstack-config --set /etc/glance/glance-registry.conf oslo_messaging_rabbit rabbit_port 5672
# openstack-config --set /etc/glance/glance-registry.conf oslo_messaging_rabbit rabbit_userid openstack
# openstack-config --set /etc/glance/glance-registry.conf oslo_messaging_rabbit rabbit_password devops
# openstack-config --set /etc/glance/glance-registry.conf keystone_authtoken auth_uri http://controller:5000
# openstack-config --set /etc/glance/glance-registry.conf keystone_authtoken auth_url http://controller:35357
# openstack-config --set /etc/glance/glance-registry.conf keystone_authtoken memcached_servers controller:11211
# openstack-config --set /etc/glance/glance-registry.conf keystone_authtoken auth_type password
# openstack-config --set /etc/glance/glance-registry.conf keystone_authtoken project_domain_name default
# openstack-config --set /etc/glance/glance-registry.conf keystone_authtoken user_domain_name default
# openstack-config --set /etc/glance/glance-registry.conf keystone_authtoken project_name service
# openstack-config --set /etc/glance/glance-registry.conf keystone_authtoken username glance
# openstack-config --set /etc/glance/glance-registry.conf keystone_authtoken password devops
更多高端IT运维课程 , 请访问 http://devops.taobao.com