1. OpenStack Dashboard
目前我们已经讲解并安装了OpenStack的Keystone、Glance、Nova、Neutron。而且我们已经使用命令成功的创建了一台虚拟机,并且可以进行连接和访问。我相信大家已经迫不及待的想看到OpenStack的DashBoard了。 那么OpenStack的有三种管理方法Horizon、CLI和API。本小节,我们就来部署Horizon。 Horizon是OpenStack的Dashboard,是一个可以让云管理员和用户管理OpenStack各种资源和服务的web接口。Horizon通过OpenStack API和各个组件进行交互。 Dashboard会根据Keystone中注册的Service去显示相应的功能。所以如果你没有安装相应的服务,却再Keystone中做了注册,登陆Dashboard是会报错的。
1.1.1. Horizon部署
需要将Keystone和Hoarizon分开部署,彼此之间有冲突。部署到linux-node2节点上。
- 安装Horizon
[root@linux-node2 ~]# yum install -y openstack-dashboard
- Horizon配置
[root@linux-node2 ~]# vim /etc/openstack-dashboard/local_settings
#允许所有主机访问
ALLOWED_HOSTS = ['*', ]
#设置Keystone地址
OPENSTACK_HOST = "192.168.56.11"
OPENSTACK_KEYSTONE_URL = "http://%s:5000/v3" % OPENSTACK_HOST
#设置API版本,需要新增
OPENSTACK_API_VERSIONS = {
"identity": 3,
"volume": 2,
"compute": 2,
}
#为通过仪表盘创建的用户配置默认的 user 角色
OPENSTACK_KEYSTONE_DEFAULT_ROLE = "user"
开启多域支持
OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True
设置默认的域
OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = 'Default'
#设置Session存储到Memcached
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': '192.168.56.11:11211',
}
}
#启用Web界面上修改密码
OPENSTACK_HYPERVISOR_FEATURES = {
'can_set_mount_point': True,
'can_set_password': True,
'requires_keypair': False,
}
#设置时区
TIME_ZONE = "Asia/Shanghai"
#禁用自服务网络的一些高级特性
OPENSTACK_NEUTRON_NETWORK = {
...
'enable_router': False,
'enable_quotas': False,
'enable_distributed_router': False,
'enable_ha_router': False,
'enable_lb': False,
'enable_firewall': False,
'enable_vpn': False,
'enable_fip_topology_check': False,
}
- 重新生产Horizon配置文件
如果根据官方文档,和默认安装的配置,访问/dashboard后跳转到/auth/login并且会提示404 Not Found,需要重新生成配置文件
[root@linux-node2 ~]# cd /usr/share/openstack-dashboard
[root@linux-node2 ~]# python manage.py make_web_conf --apache > /etc/httpd/conf.d/openstack-dashboard.conf
- 启动服务
[root@linux-node2 ~]# systemctl enable httpd.service
[root@linux-node2 ~]# systemctl restart httpd.service
好的,现在你就可以使用http://192.168.56.11/来访问仪表盘了。用户名和密码可以使用admin或者demo。需要你亲自来体验他们到底有什么不同。
1.1.2. Horizon的Session存储
我们经常在负载均衡的环境下,会遇到Session的问题,一般的解决办法有三种:
- Session保持
- Session复制
- Session共享
Horizon作为一个典型的Django应用,是使用 Django session架构来处理用户的session数据,目前session支持以下几种存储方式:
- 本地内存缓存
- 键值对存储(Memcached或者Redis)
- 数据库存储
- cookies
通过修改 local_settings 文件的 SESSION_ENGINE 的配置值来自定制session后端
本地内存缓存
本地内存缓存是最快速和最简单的session后端配置方法,因为他不需要处理任何的依赖关系。尽管如此,他也拥有以下明显的缺点:
- 存储为非共享的,不能跨进程
- 进程终止后没有持续性。
单一的Horizon安装的默认为本地内存后端,因为他没有依赖性问题。生产环境是不推荐使用这个后端的,甚至在严肃的开发工作中也不推荐。你仍旧可以这样启用:
SESSION_ENGINE = 'django.contrib.sessions.backends.cache' CACHES = { 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache' }
键值对存储
你可以使用Memcached 或 Redis 等应用程序作为session的外部缓存机制。这些应用程序为session提供了持久并可以共享的存储,这在小规模或开发环境中的部署中十分有用。
- Memcached
Memcached 是一个高性能和分布式的内存对象缓存系统,为小块的任意数据提供进驻内存的键值对的存储。 需求: Memcached服务运行并可以访问。 安装了python-memcached 的 Python 模块 通过下面的方法启用:
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
CACHES = {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache'
'LOCATION': 'my_memcached_host:11211',
}
- Redis
Redis是一个开源的,BSD许可的,高级键值对存储。他通常被称为数据结构服务器。 需求: Redis服务运行并可以访问 安装了 redis 以及 django-redis 的python模块 通过以下配置方法启用:
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
CACHES = {
"default": {
"BACKEND": "redis_cache.cache.RedisCache",
"LOCATION": "127.0.0.1:6379:1",
"OPTIONS": {
"CLIENT_CLASS": "redis_cache.client.DefaultClient",
}
}
}