一、glance服务概括:
Glance是OpenStack镜像服务组件,glance服务默认监听在9292端口,其接收REST API请求,然后通过其他模块(glance-registry及image store)来完成诸如镜像的获取、上传、删除等操作,Glance提供restful API可以查询虚拟机镜像的metadata,并且可以获得镜像,通过Glance,虚拟机镜像可以被存储到多种存储上,比如简单的文件存储或者对象存储(比如OpenStack中swiftx项目)是在创建虚拟机的时候,需要先把镜像上传到glance,对镜像的列出镜像、删除镜像和上传镜像都是通过glance进行理,glance有两个主要的服务,一个是glace-api接收镜像的删除上传和读取,一个是glance-Registry。
glance-registry负责与mysql数据交互,用于存储或获取镜像的元数据(metadata),提供镜像元数据相关的REST接口,通过glance-registry可以向数据库中写入或获取镜像的各种数据,glance-registyr监听的端口是9191,glance数据库中有两张表,一张是glance表,一张是imane property表,image表保存了镜像格式、大小等信息,image property表保存了镜像的定制化信息。
image store 是一个存储的接口层,通过这个接口glance可以获取镜像,image store支持的存储有Amazon的S3、openstack本身的swift、还有ceph、glusterFS、sheepdog等分布式存储,image store是镜像保存与读取的接口,但是它只是一个接口,具体的实现需要外部的支持,glance不需要配置消息队列,但是需要配置数据库和keystone。
部署安装文档:https://docs.openstack.org/ocata/zh_CN/install-guide-rdo/glance-install.html
二、创建并初始化数据库:
1、在mysql服务器创建glance数据库并授权
[root@openstack-1 ~]# mysql Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 13 Server version: 10.3.10-MariaDB MariaDB Server Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> CREATE DATABASE glance; #创建数据库glance Query OK, 1 row affected (0.073 sec) MariaDB [(none)]> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY 'centos'; #对数据库授权 Query OK, 0 rows affected (0.132 sec)
2、在控制台一验证是否可以连接glance用户,此时可以连接。
[root@openstack-1 ~]# mysql -uglance -pcentos -h192.168.7.100 Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 15 Server version: 10.3.10-MariaDB MariaDB Server Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> show databases; +--------------------+ | Database | +--------------------+ | glance | | information_schema | +--------------------+ 2 rows in set (0.237 sec) MariaDB [(none)]>
三、控制台一配置和安装
要创建服务证书,完成这些步骤
1、创建 glance
用户
[root@openstack-1 ~]# openstack user create --domain default --password-prompt glance
2、添加 admin
角色到 glance
用户和 service
项目上。
[root@openstack-1 ~]# openstack role add --project service --user glance admin
3、创建glance实体
# openstack service create --name glance \ --description "OpenStack Image" image
创建API的镜像端口
# openstack endpoint create --region RegionOne image public http://openstack-vip.net:9292 #创建公有endpoint,其中openstack-vip.net是hosts文件中的VIP域名解析 # openstack endpoint create --region RegionOne image internal http://openstack-vip.net:9292 #创建私有endpoint # openstack endpoint create --region RegionOne image admin http://openstack-vip.net:9292 #创建管理endpoint
安装openstack-glance软件包
1、安装软件包
# yum install openstack-glance
2、编辑文件 /etc/glance/glance-api.conf
并完成如下动作:
在 [database]
部分,配置数据库访问:
[database] # ... connection = mysql+pymysql://glance:[email protected]/glance
其中glance:centos为创建数据库时glance用户名密码,openstack-vip.net是本地hosts的域名解析
3、在 [keystone_authtoken]
和 [paste_deploy]
部分,配置认证服务访问:vim /etc/glance/glance-api.conf
[keystone_authtoken] # ... auth_uri = http://openstack-vip.net:5000 auth_url = http://openstack-vip.net:35357 memcached_servers = openstack-vip.net:11211 #本地hosts解析VIP地址的域名(openstack-vip.net)。 auth_type = password project_domain_name = default user_domain_name = default project_name = service username = glance #glance用户名 password = glance # glance认证服务的密码 [paste_deploy] # ... flavor = keystone
将 password
写为你为认证服务中你为 glance
用户选择的密码。
4、在 [glance_store]
部分,配置本地文件系统存储和镜像文件位置:
[glance_store] # ... stores = file,http default_store = file filesystem_store_datadir = /var/lib/glance/images/
5、编辑文件 ``/etc/glance/glance-registry.conf``并完成如下动作,这俩配置文件一样,一共改了三个地方,数据库、认证信息和认证方法:
在 [database]
部分,配置数据库访问:
[database] # ... connection = mysql+pymysql://glance:[email protected]/glance
注意:其中glance:centos为创建数据库时glance用户名密码,openstack-vip.net是本地hosts的域名解析。
6、在 [keystone_authtoken]
和 [paste_deploy]
部分,配置认证服务访问:
[keystone_authtoken] # ... auth_uri = http://openstack-vip.net:5000 auth_url = http://openstack-vip.net:35357 memcached_servers = openstack-vip.net:11211 auth_type = password project_domain_name = default user_domain_name = default project_name = service username = glance password = glance [paste_deploy] # ... flavor = keystone
将 password
写为你为认证服务中你为 glance
用户选择的密码。
7、写入镜像服务数据库:
# su -s /bin/sh -c "glance-manage db_sync" glance
8、启动glance服务,并设置为开机启动
# systemctl enable openstack-glance-api.service openstack-glance-registry.service # systemctl start openstack-glance-api.service openstack-glance-registry.service
9、验证glance服务可以使用
[root@linux-host1 ~]# glance image-list #结果为空为正常,出现其他结果则进行排错 +----+------+ | ID | Name | +----+------+ +----+------+ [root@linux-host1 ~]# openstack image list #没有结果正常
四、配置haproxy服务
1、在haproxy服务器上添加glance服务转发:vim /etc/haproxy/haproxy.cfg
listen openstack_keystone_port_9292 bind 192.168.7.248:9292 mode tcp log global server 192.168.7.100 192.168.7.100:9292 check inter 3000 fall 3 rise 5 server 192.168.7.101 192.168.7.100:9292 check inter 3000 fall 3 rise 5 backup
2、重启haproxy服务
[root@mysql1 ~]# systemctl restart haproxy
3、重启后,确认监听了9292端口
[root@mysql1 ~]# ss -nlt
五、在mysql 服务器上安装NFS服务,并挂载
1、在mysql服务器上安装NFS服务,然后新建一个目录存放缓存数据
[root@mysql1 ~]# yum install nfs-utils -y [root@mysql1 ~]# mkdir /openstack/glance -p #创建的目录作为共享
2、将新建的目录共享
[root@mysql1 ~]# vim /etc/exports /openstack/glance *(rw,no_root_squash) [root@mysql1 ~]# systemctl start nfs [root@mysql1 ~]# exportfs -r #如果nfs服务已启动,需要重新加载时,让共享的目录加载生效,不要重启,最好是加载生效,如果重启,会将正在访问的报500错误。
在控制台一查看共享的目录情况
1、在控制台一进行验证此时是否可以看到共享的目录
[root@openstack-1 ~]# showmount -e 192.168.7.106 Export list for 192.168.7.106: /openstack/glance *
2、在挂载共享的目录前,需要将glance服务停止,再挂载
# systemctl stop openstack-glance-api.service openstack-glance-registry.service #停止glance服务 [root@openstack-1 ~]# mount -t nfs 192.168.7.106:/openstack/glance /var/lib/glance/images #将共享目录挂载到/var/lib/glance/images目录下
3、挂载完成之后再重新启动glance
# systemctl restart openstack-glance-api.service openstack-glance-registry.service
4、将挂载的共享目录最好写入配置文件中,作为开机自动挂载
[root@openstack-1 ~]#vim /etc/fstab 192.168.7.106:/openstack/glance /var/lib/glance/images nfs defaults,_netdev 0 0 #挂载到文件中,其中_netdev是获取网络设备,添加此参数,超时挂载时就可以开启启动,否则一直无法开机 [root@openstack-1 ~]# mount -a #让挂载生效,查看挂载是否正常。
下来我们下载镜像测试一下共享镜像
1、在控制台一下载源镜像
wget http://download.cirros-cloud.net/0.3.5/cirros-0.3.5-x86_64-disk.img
2、查看控制台一的glance的UID和GID
[root@openstack-1 ~]# id glance uid=1000(glance) gid=1000(glance) groups=1000(glance)
2、在nfs服务器上将共享的glance目录权限改为glance用户的uid和gid的1000,控制台一才会将下载的镜像才能上传上去,否则就会报503错误。
[root@mysql1 openstack]# ll total 0 drwxr-xr-x 2 root root 6 Jan 6 14:06 glance [root@mysql1 openstack]# chown 1000.1000 glance [root@mysql1 openstack]# ll total 0 drwxr-xr-x 2 1000 1000 6 Jan 6 14:06 glance
3、改完权限之后,然后在控制台一上传下载下来的镜像文件,使用 QCOW2 磁盘格式, bare 容器格式上传镜像到镜像服务并设置公共可见,这样所有的项目都可以访问它:
# openstack image create "cirros-0.3.5" \ --file cirros-0.3.5-x86_64-disk.img \ --disk-format qcow2 --container-format bare \ --public
六、下来需要实现高可用glance
在控制台一上做配置
1、将/etc/glance目录下的文件打包
[root@openstack-1 ~]# cd /etc/glance [root@openstack-1 ~]# tar zcvf glance-conller1.tar.gz ./*
2、将打包的文件复制到第二个glance控制台的/etc/glance目录下
[root@openstack-1 ~]# scp glance-conller1.tar.gz 192.168.7.101:/etc/glance/
在控制台二上配置
1、将控制台一传过来的文件进行解压
[root@openstack-2 ~]# tar -xvf glance-conller.tar.gz
2、新建一个挂载目录,并将用户和组权限都修改为glance
[root@openstack-2 ~]# mkdir /var/lib/glance/images [root@openstack-2 ~]# chown glance.glance /var/lib/glance/images -R
3、将挂载的共享目录最好写入配置文件中,作为开机自动挂载
[root@openstack-2 ~]#vim /etc/fstab 192.168.7.106:/openstack/glance /var/lib/glance/images nfs defaults,_netdev 0 0 #挂载到文件中,其中_netdev是获取网络设备,添加此参数,超时挂载时就可以开启启动,否则一直无法开机 [root@openstack-2 ~]# mount -a #让挂载生效,查看挂载是否正常。
4、启动glance服务,并设置为开机启动
# systemctl enable openstack-glance-api.service openstack-glance-registry.service # systemctl start openstack-glance-api.service openstack-glance-registry.service
5、下载源镜像进行测试
wget http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img
注意:cirros-0.3.4为文件名称,可以进行修改。
6、将控制台一的admin.sh脚本复制到控制台二上
[root@openstack-1 ~]# scp admin.sh 192.168.7.101:/root
7、然后在控制台二进行生效
[root@openstack-2 ~]# . admin.sh #或者使用source admin.sh 都能使脚本生效
8、使用 QCOW2 磁盘格式, bare 容器格式上传镜像到镜像服务并设置公共可见,这样所有的项目都可以访问它:
# openstack image create "cirros-0.3.4" \ --file cirros-0.3.4-x86_64-disk.img \ --disk-format qcow2 --container-format bare \ --public
当我们的一个NFS服务器宕机后,另一个NFS服务器又是好的,改怎么备份过去呢?又该怎么挂载呢?
1、下来就是rsync登场,rsync只会同步增量部分,nfs拥有相同的部分就不会再进行备份复制,此时可以在nfs-1服务器上复制同步。
[root@mysql1 ~]# rsync -alvopg /openstack/glance/* 192.168.7.107:/openstack/glance/
2、在控制台一上重新挂载复制的文件
[root@openstack-1 ~]# mount -o remount /var/lib/glance/images