Keystone 高可靠性部署与性能测试

Goal

Keystone Region 为跨地域的 Openstack 集群提供了统一的认证和用户租户管理。目前公司在国内外部署了数十套 Openstack 集群,其中既有集群在内网,又有集群在公网;既有 Havana 集群,也有 Icehouse 集群;既有 nova-network 集群,又有 Neutron 集群,如下图:

为了集中管理,全局共享一个 Keystone Server, 因此对 Keystone
Server 的安全性和性能,都有特殊的要求。

安全性通过 SSL 实现和防止 DDOS 实现,可靠性通过 Apache、Haproxy、mysqlcluster 实现(关于 openstack
整体 HA 的实现,可以参考  http://blog.csdn.net/wsfdl/article/details/41386155),如下图:

Deployment

物理主机信息

Host Name            IP                         VIP/DNS                                 CPU                                        Memory

keystone01            internal_ip01        public_ip/keystone-server       E5-2620(24 Processor)          64G

keystone02            internal_ip02        public_ip/keystone-server       E5-2620(24 Processor)          64G

说明:若无注明,keystone01 和 keystone02 的部署与配置相同

# yum   -y   install   mysql mysql-server MySQL-python

# yum   -y   install   openstack-keystone python-keystoneclient

# yum   -y   install   haproxy

# yum   -y   install   httpd

# yum   -y   install   keepalived

# yum   -y   install   haproxy

# yum   -y   install   httpd

# yum   -y   install   keepalived

Configuration

/etc/keystone/keystone.conf

[DEFAULT]

public_endpoint=https://keystone-server/main/

admin_endpoint=https://keystone-server/admin/

[database]

connection=mysql://keystone:[email protected]/keystone

max_pool_size=500

[signing]

token_format=UUID

[ssl]

cert_subject=/C=US/ST=Unset/L=Unset/O=Unset/CN=keystone-server

[token]

provider=keystone.token.providers.uuid.Provider

/etc/httpd/conf.d/wsgi-keystone.conf

NameVirtualHost *:5000

Listen internal_ip0x:5000

<VirtualHost *:5000>

ServerName keystone-main

WSGIScriptAlias /main  /var/www/cgi-bin/keystone/main

ErrorLog /var/log/keystone/apache2-main-error.log

LogLevel debug

CustomLog /var/log/keystone/apache2-main-access.log common

</VirtualHost>

NameVirtualHost *:35357

Listen internal_ip0x:35357

<VirtualHost *:35357>

ServerName keystone-admin

WSGIScriptAlias /admin  /var/www/cgi-bin/keystone/admin

ErrorLog /var/log/keystone/apache2-admin-error.log

LogLevel debug

CustomLog /var/log/keystone/apache2-admin-access.log common

</VirtualHost>

/etc/haproxy/haproxy.cfg

<span style="font-family:Courier New;">global
    daemon
    log 127.0.0.1 local3

defaults
    maxconn 4000
    log     global
    timeout server 10s
    timeout connect 10s
    timeout client 10s
    mode http
    option forwardfor
    option http-server-close
    log global

listen stats
    mode http
    bind public_ip:8000
    stats enable
    stats hide-version
    stats uri     /
    stats realm   Haproxy\ Statistics
    stats auth    lecloud:openstack
    stats admin if TRUE

frontend keystone_frontend
    bind </span><span style="font-family: 'Courier New';">public_ip</span><span style="font-family:Courier New;">:443 ssl crt /etc/haproxy/keystone_https.pem
    reqadd X-Forwarded-Proto:\ https
    acl admin_path path_beg  /admin
    acl main_path  path_beg  /main
    use_backend admin_backend if admin_path
    use_backend main_backend if main_path

backend admin_backend
    balance roundrobin
    redirect scheme https if !{ ssl_fc }
    server keystone-server-01 internal_ip01:35357 check inter 10s
    server keystone-server-02 internal_ip02:35357 check inter 10s

backend main_backend
    balance roundrobin
    redirect scheme https if !{ ssl_fc }
    server keystone-server-01 internal_ip01:5000 check inter 10s
    server keystone-server-02 internal_ip02:5000 check inter 10s</span>

/etc/keepalived/keepalived.conf

<span style="font-family:Courier New;"><span style="color:#333333;">vrrp_script haproxy-check {
    script "killall -0 haproxy"
    interval 2
    weight 10
}

vrrp_instance openstack-vip {
    state MASTER               </span><span style="color:#ff0000;"># 注:keystone01 为 MASTER, keystone02 为 BACKUP</span><span style="color:#333333;">
    priority 102
    interface eth0
    virtual_router_id 108
    advert_int 3
    virtual_ipaddress {
        public_ip
    }
    track_script {
        haproxy-check
    }
}</span></span>

# mkdir   /var/www/cgi-bin/keystone/

# cp   /usr/share/keystone/keystone.wsgi   /var/www/cgi-bin/keystone/

# ln   -s   /var/www/cgi-bin/keystone/keystone.wsgi   /var/www/cgi-bin/keystone/admin

# ln   -s   /var/www/cgi-bin/keystone/keystone.wsgi   /var/www/cgi-bin/keystone/main

# service   httpd   start

# chkconfig   httpd   on

# keystone-manage   ssl_setup   --keystone-user   keystone   --keystone-group   keystone                     注:keystone01

# cat  /etc/keystone/ssl/certs/keystone.pem   /etc/keystone/ssl/private/keystonekey.pem   >   /etc/haproxy/keystone_https.pem              注:keystone01,同时把 keystone_https.pem
拷贝至 keystone02 /etc/haproxy/ 目录下

# (crontab   -l   -u   keystone   2>&1 | grep   -q   token_flush)   ||   echo ‘@dayly   /usr/bin/keystone-manage   token_flush >/var/log/keystone/keystone-tokenflush.log   2>&1‘   >>
  /var/spool/cron/keystone

# echo   "net.ipv4.ip_nonlocal_bind = 1"   >>   /etc/sysctl.conf

# sysctl   -p

# service   haproxy   start

# chkconfig   haproxy   on

# service   keepalived   start

# chkconfig   keepalived   on

Benchmark

Configure Rally

关于 Rally,详情请参见  Openstack 性能测试 http://blog.csdn.net/wsfdl/article/details/41654373

# git   clone   https://git.openstack.org/stackforge/rally   &&   cd   rally

# ./rally/install_rally.sh   -v

# source   /opt/rally/bin/activate

#  rally   deployment   create   --filename=existing.json   --name=existing

#  rally   -v   task   start   create-user.json

<span style="font-family:Courier New;">(rally)[[email protected] rally]# cat existing.json
{
    "type": "ExistingCloud",
    "auth_url": "https://keystone-server/admin/v2.0",
    "admin": {
        "username": "test",
        "password": "test",
        "tenant_name": "test"
    }
}</span>

create-user.json

<span style="font-family:Courier New;">(rally)[[email protected] rally]# cat create-user.json
{
    "KeystoneBasic.create_user": [
        {
            "args": {
                "name_length": 10
            },
            "runner": {
                "type": "constant",
                "times": 10000,
                "concurrency": 900
            }
        }
    ]
}</span>

/etc/rally/rally.conf

<span style="font-family:Courier New;"><span style="color:#333333;">[default]
# Use SSL for all OpenStack API interfaces
https_insecure=False      </span><span style="color:#ff0000;">#Rally 对 HTTPS 测试的支持有个 Bug,已被小弟修复合入社区</span><span style="color:#333333;">
# Path to CA server cetrificate for SSL
https_cacert=/etc/ca.pem</span></span>

Result

注:以创建用户为例,一个并发数(Concurrency),包含两个 HTTPS 请求(一个为申请 token,另一个为创建用户)。此处仅给出 mysql(单点) 数据库下keystone server 的并发性能。

时间: 2024-10-11 23:27:42

Keystone 高可靠性部署与性能测试的相关文章

OHSCE 教程:高可靠性的 PHP 通信框架

OHSCE高可靠性的PHP通信框架. PHP以太网(TCP/UDP/ICMP).RS232.RS485通信,可广泛直接或桥接各种网络工程通信. 特别合适于对可靠性要求较高.上位机与末端协同工作的场景.如物联网设备通信.智能化系统.工业与自动化系统.可靠网络服务器. 可运行于Windows.Linux.OS X(基础教程qkxue.net).对Windows提供了全项功能支持,与自动化生态亲和. 不过分追求高性能,充分平衡了可靠性与高性能. 天生支持分布式,可大规模部署. 在保证您的网络可靠性的前

openstack高可靠性介绍

1.高可靠性系统一个至关重要的方面是消除单点故障SPOF.SPOF是指能够导致系统宕机或者数据丢失的单个设备或者软件的故障.为了消除单点故障,需要检查以下几个结构的冗余性: 网络模块,比如交换机和路由器 应用和服务的自动迁移 存储模块 机房设施,如电源,空调,防火 大多数高可靠系统在多个非独立故障发生时会失效.典型的高可靠系统能够达到99.99%甚至更高的可靠性,意味着一年最多只能有一个小时的宕机时间,为了达到这个目标,高可靠系统需要实现在故障发生后1到2分钟内恢复. 对于openstack的基

IM系统如何保障消息高可靠性

消息传输的高可靠性在即时通讯系统中是最为基础.也是最核心的部分之一,同时也是衡量通讯系统的质量的重要指标.本文主要描述常见通讯系统模型的实现原理,分析影响消息传输可靠性的常见问题,并介绍有度即时通服务体系是如何通过架构及技术细节实现高可靠的消息送达机制.快递式系统模型是常见的即时通讯系统模型,主要结构如下图所示:该模型的消息发送过程不是一个完整事务,以下这些场景将出现丢消息的问题:1. ClientA将发消息送给Server,Server收到后回复ClientA发送成功,后续中转由Server保

开源jms服务ActiveMQ的负载均衡+高可用部署方案探索

一个文件(或目录)拥有若干个属性,包括(r/w/x)等基本属性,以及是否为目录(d)与文件(-)或连接文件(l)等属性.此外,Linux还可以设置其他系统安全属性,使用chattr来设置,以lsattr来查看,最重要的是可以设置其不可修改的特性,即便是文件的拥有者都不能进行修改.这个属性相当重要,尤其是在安全机制方面(security). 文件默认权限:umask 当建立一个新的文件或目录时,它的默认属性是与umask有关的.通常,umask就是指定当前用户在建立文件或目录时的属性默认值.那么,

高可靠性

HA高可靠性,特征实现系统的高可靠性,支持HA特性的设备有两块单板,一块为主用板,工作在Master模式,另一块为备用板工作在Slave模式,用户不能直接对备用板进行命令操作,需要通过主用板的命令行界面进行配置,然后主用板会将配置同步给备用板,来保持主备板当前配置一致 HA主要体现两个方面1.当主用板故障或拔出时,备用板将迅速自动取代主用板称为新的主用板,保证设备的继续运行2.当升级设备的时候,可以先升级备用板,在手工执行主备倒换 monitor link组 监控链路组,每个组由上行端口和下行端

如何建立高可靠性的企业网络

对于大部分大型企业来说,企业信息化建设在企业经营中发挥着举足轻重的作用.特别是在企业运作越来越融入计算机网络的今天,企业的沟通.应用.财务.决策.会议等等数据流都在企业网络上传输,构建一个"安全可靠.性能卓越.管理方便"的"高品质"大型企业网络已经成为企业信息化建设成功的关键基石. 为什么选择MPLS VPN技术组网 MPLS VPN组网技术是现在发展最快的VPN技术,无论是从技术本身,还是从常规的网络应用来说,MPLS VPN可以达到与ATM.帧中继同样的安全程度

第五十六课 云计算模型 openstack架构、keystone基础及部署

虚拟机及云计算模型介绍 OpenStack  Overview OpenStack  演示架构.Keystone基础及部署 Glance基础原理及部署应用

利用NLB群集实现WEB站点的高可用部署

利用NLB群集实现WEB站点的高可用部署 前面的博文中和各位博友聊了如何搭建一个WEB站点,那么今天就和大家聊聊如何实现WEB站点的高可用性. 在本文中我们利用NLB来为大家讲解如何实现WEB站点的高可用: NLB简介: 网络负载平衡群集(简称:NLB),起作用时防止单一的节点故障,其部署至少需要两台服务器,NLB的作用就是当群集中的某个节点出现故障或者停止工作是,其运行服务会自动切换到群集的另一台主机,当然和我们其他群集一样,当来访流量过多的时候NLB群集会自动实现网络负载,防止负载不均,从而

Redis高可用部署及监控

Redis高可用部署及监控 目录                        一.Redis Sentinel简介 二.硬件需求 三.拓扑结构 1.单M-S结构 2.双M-S结构 3.优劣对比 四.配置部署 1.Redis配置 2.Redis Sentinel配置 3.启动服务 4.故障模拟检测 五.备份恢复 1.备份策略 2.灾难恢复 六.运维监控 1.安全监控 2.性能监控   一.           Redis Sentinel简介   Redis Sentinel是redis自带的集