OpenStack Mitaka HA高可用搭建

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenStack Mitaka HA高可用搭建相关的知识,希望对你有一定的参考价值。

OpenStack Mitaka HA高可用搭建mini试看版
version 1.0
环境虚拟机列表:
10.1.1.120 controller1 controller1.test.com
10.1.1.121 controller2 controller2.test.com
10.1.1.122 controller3 controller3.test.com
10.1.1.133 compute1 compute1.test.com
10.1.1.134 glance-backend backend.test.com
10.1.1.135 cinder1 cinder1.test.com
9.110.187.128 demo.openstack.com
网络配置:
public : 9.110.187.0/24
admin : 10.1.1.0/24
private:10.2.2.0/24
mapping network port:eno67109408
一、 搭建Mariadb Galera Cluster

  1. Mariadb Galera Cluster集群介绍
    Mariadb Galera Cluster是mysql高可用性和可扩展性的解决方案
    官网:http://galeracluster.com/products/
    MariaDB Galera Cluster 是一套在mysql innodb存储引擎上面实现multi-master及数据实时同步的系统架构,业务层面无需做读写分
    离工作,数据库读写压力都能按照既定的规则分发到 各个节点上去。在数据方面完全兼容 MariaDB 和 MySQL。
    特性:
    (1).同步复制 Synchronous replication
    (2).Active-active multi-master 拓扑逻辑
    (3).可对集群中任一节点进行数据读写
    (4).自动成员控制,故障节点自动从集群中移除
    (5).自动节点加入
    (6).真正并行的复制,基于行级
    (7).直接客户端连接,原生的 MySQL 接口
    (8).每个节点都包含完整的数据副本
    (9).多台数据库中数据同步由 wsrep 接口实现
    缺点:
    (1).目前的复制仅仅支持InnoDB存储引擎,任何写入其他引擎的表,包括mysql.*表将不会复制,但是DDL语句会被复制的,因此创建用户将会
    被复制,但是insert into mysql.user…将不会被复制的.
    (2).DELETE操作不支持没有主键的表,没有主键的表在不同的节点顺序将不同,如果执行SELECT…LIMIT… 将出现不同的结果集.
    (3).在多主环境下LOCK/UNLOCK TABLES不支持,以及锁函数GET_LOCK(), RELEASE_LOCK()…
    (4).查询日志不能保存在表中。如果开启查询日志,只能保存到文件中。
    (5).允许最大的事务大小由wsrep_max_ws_rows和wsrep_max_ws_size定义。任何大型操作将被拒绝。如大型的LOAD DATA操作。
    (6).由于集群是乐观的并发控制,事务commit可能在该阶段中止。如果有两个事务向在集群中不同的节点向同一行写入并提交,失败的节
    点将中止。对 于集群级别的中止,集群返回死锁错误代码(Error: 1213 SQLSTATE: 40001 (ER_LOCK_DEADLOCK)).
    (7).XA事务不支持,由于在提交上可能回滚。
    (8).整个集群的写入吞吐量是由最弱的节点限制,如果有一个节点变得缓慢,那么整个集群将是缓慢的。为了稳定的高性能要求,所有的
    节点应使用统一的硬件。
    (9).集群节点建议最少3个。
    (10).如果DDL语句有问题将破坏集群。
    架构图:
  2. 配置Mariadb Galera官方源地址
    在三个node上分别执行下面的操作,目的是安装Galera。
    在/etc/yum.repos.d下创建一个repo文件

    vim /etc/yum.repos.d/mariadb.repo

    添加:
    [mariadb]
    name = MariaDB
    baseurl = http://yum.mariadb.org/10.1/centos7-amd64
    enabled=1
    gpgcheck=0

  3. 安装Mariadb Galera
    在三个node上分别执行:

    yum install -y MariaDB-server MariaDB-client galera xinetd rsync ntpdate

    systemctl start mariadb.service

    .......

  4. 配置 MariaDB Cluster集群
    第一个节点上,添加内容如下:

    vim /etc/my.cnf.d/client.cnf

    添加内容:
    [client]
    port = 3306
    .......

    vim /etc/my.cnf.d/server.cnf

    添加内容:
    [isamchk]
    key_buffer_size = 16M # key_buffer_size这个参数是用来设置索引块(index blocks)缓存的大小,它被所有线程共享,严格说是
    它决定了数据库索引处理的速度,尤其是索引读的速度
    [mysqld]
    binlog_format=ROW #该参数可以有三种设置值:row、statement和mixed。row代表二进制日志中记录数据表每一行经过写操作
    后被修改的最终值。各个参与同步的Salve节点,也会参照这个最终值,将自己数据表上的数据进行修改;statement形式是在日志中记录
    数据操作过程,而非最终的执行结果。各个参与同步的Salve节点会解析这个过程,并形成最终记录;mixed设置值,是以上两种记录方
    式的混合体,MySQL服务会自动选择当前运行状态下最适合的日志记录方式。
    character-set-server = utf8 #设置数据库的字符集
    collation-server = utf8_general_ci
    max_allowed_packet = 256M # 设置mysql接收数据包最大值,比如你执行的sql语句过大,可能会执行失败,这个参数就是让能
    执行的sql语句大小调高
    max_connections = 10000 # 设置mysql集群最大的connection连接数,这个在openstack环境里非常重要
    ignore-db-dirs = lost+found # 设置忽略把lost+found当做数据目录
    init-connect = SET NAMES utf8 # 设置初始化字符集编码(仅对非超级用户有效)
    innodb_autoinc_lock_mode = 2 #这种模式下任何类型的inserts都不会采用AUTO-INC锁,性能最好,但是在同一条语句内部产生
    auto_increment值间隙。
    innodb_buffer_pool_size = 2000M #设置缓冲池字节大小,InnoDB缓存表和索引数据的内存区域;这个值设置的越大,在不止一次
    的访问相同的数据表数据时,消耗的磁盘I / O就越少。在一个专用的数据库服务器,则可能将其设置为高达80%的机器物理内存大小。不
    过在实际的测试中,发现无限的增大这个值,带来的性能提升也并不显著,对CPU的压力反而增大,设置合理的值才是最优。
    innodb_doublewrite = 0 #设置0是禁用doublewrite,一般在不关心数据一致性(比如使用了RAID0)或文件系统可以保证不会出现
    部分写失效,你可以通过将innodb_doublewrite参数设置为0还禁用doublewrite。
    innodb_file_format = Barracuda #设置文件格式为Barracuda,Barracude是innodb-plugin后引入的文件格式,同时
    Barracude也支持Antelope文件格式,Barracude在数据压缩上优于Antelope,配合下面的innodb_file_per_table=1使用
    innodb_file_per_table = 1 #开启独立的表空间,使每个 Innodb的表,有自已独立的表空间。如删除文件后可以回收那部分空间。
    .......
    [galera]
    bind-address=10.1.1.120 # mysql服务绑定的IP
    wsrep_provider = /usr/lib64/galera/libgalera_smm.so
    wsrep_cluster_address = "gcomm://10.1.1.120,10.1.1.121,10.1.1.122" #gcomm是特殊的地址,仅仅是Galera cluster初始化启动时
    候使用
    .......
    [mysqld_safe]
    nice = 0 # 调用系统的nice命令设置进程优先级,linux系统的普通用户只能在0-19中设置,mysql用户为普通用户,设置为0 应该就是
    让mysql进程优先级最高了。
    .......
    [mysqldump]
    max_allowed_packet = 16M # MySQL根据配置文件会限制Server接受的数据包大小。有时候大的插入和更新会受
    max_allowed_packet 参数限制,导致写入或者更新失败。
    quick # 强制 mysqldump 从服务器查询取得记录直接输出而不是取得所有记录后将它们缓存到内存中
    quote-names #使用()引起表和列名。默认为打开状态,使用--skip-quote-names取消该选项。
    第二个和第三个节点的my.cnf配置如下,注意改下相关IP和节点名称:

    vim /etc/my.cnf.d/client.cnf

    [client]
    port = 3306
    socket = /var/lib/mysql/mysql.sock
    .......
    [mysqld]
    binlog_format=ROW
    character-set-server = utf8
    collation-server = utf8_general_ci
    max_allowed_packet = 256M
    max_connections = 10000
    .......
    innodb_autoinc_lock_mode = 2
    innodb_buffer_pool_size = 2000M
    innodb_doublewrite = 0
    .......
    [galera]
    bind-address = 10.1.1.121
    wsrep_provider = /usr/lib64/galera/libgalera_smm.so
    wsrep_cluster_address = "gcomm://10.1.1.120,10.1.1.121,10.1.1.122"
    .......
    [mysqld_safe]
    nice = 0
    .......
    vim mysql-clients.cnf:
    [mysqldump]
    max_allowed_packet = 16M
    .......

  5. 设置mysql最大连接数
    修改完server.cnf,然后后修改下mysql.service文件,让数据库最大支持连接数调整到10000(这样做是很有用的,笔者在维护
    openstack环境中,在VM数量比较大负载较高的时候,经常出现因为数据库连接数不够导致访问界面出现各种内容刷不出的情况)
    .......
    都修改完毕后,执行systemctl daemon-reload
    最等启动了mariadb服务就能通过show variables like ‘max_connections‘; 可查看当前连接数值
  6. 关于mysql服务的启动顺序
    三个节点my.cnf都配置完成后,全部执行systemctl stop mariadb.service && systemctl disable mariadb.service
    然后在第一个节点用下面的命令初始化启动mariadb集群服务

    /usr/sbin/mysqld --wsrep-new-cluster --user=root &

    .......

  7. 查看mariadb数据库集群状态

    mysql -uroot -p

    .......
    二、安装RabbitMQ Cluster集群

  8. 每个节点都安装erlang

    yum install -y erlang

    .......

  9. 每个节点都启动rabbitmq及设置开机启动

    systemctl enable rabbitmq-server.service

    systemctl restart rabbitmq-server.service

    systemctl status rabbitmq-server.service

    systemctl list-unit-files |grep rabbitmq-server.service

    .......
    7 .查看RabbitMQ插件

    /usr/lib/rabbitmq/bin/rabbitmq-plugins list

    .......

  10. 查看rabbitmq状态

    rabbitmqctl cluster_status

  11. 集群配置
    .......
    在controller1上操作:

    scp /var/lib/rabbitmq/.erlang.cookie controller2:/var/lib/rabbitmq/.erlang.cookie

    .......
    在controller2上操作:

    systemctl restart rabbitmq-server

    rabbitmqctl stop_app

    rabbitmqctl join_cluster --ram [email protected]

    rabbitmqctl start_app

    .......
    查看集群状态:

    rabbitmqctl cluster_status

  12. 集群管理
    如果遇到rabbitmq脑裂情况,按以下步骤操作,重新设置集群:
    登录没加入集群的节点:
    rabbitmqctl stop_app
    rabbitmqctl reset
    rabbitmqctl start_app
    .......
    删除后执行systemctl restart rabbitmq-server rabbitmq服务一般能起来。
  13. RabbitMQ优化
    .......
    三、 安装Pacemaker
    三个ctr节点需要安装以下包:
    pacemaker
    pcs (CentOS or RHEL) or crmsh
    corosync
    fence-agents (CentOS or RHEL) or cluster-glue
    resource-agents
    添加一个network_ha-clustering_Stable的源:

    cd /etc/yum.repos.d

    vim ha-clustering.repo

    添加以下内容:
    [network_ha-clustering_Stable]
    name=Stable High Availability/Clustering packages (CentOS_CentOS-7)
    type=rpm-md
    .......
    gpgkey=http://download.opensuse.org/repositories/network:/haclustering:/
    Stable/CentOS_CentOS//repodata/repomd.xml.key

    yum install -y lvm2 cifs-utils quota psmisc

    yum install -y pcs pacemaker corosync fence-agents-all resource-agents

    .......

  14. 三个ctr节点都设置PCS服务开机启动

    systemctl enable pcsd

    systemctl enable corosync

    .......

  15. 设置密码,每个节点就需要设置,而且密码必须一样

    passwd hacluster

  16. 配置编写corosync.conf 文件

    vim /etc/corosync/corosync.conf

    添加以下内容:
    totem {
    version: 2
    secauth: off
    cluster_name: openstack-cluster
    transport: udpu
    }
    .......
    quorum {
    provider: corosync_votequorum
    }
    logging {
    to_logfile: yes
    logfile: /var/log/cluster/corosync.log
    to_syslog: yes
    }
    在ctr1节点上生成密钥:

    cd /etc/corosync/

    ssh-keygen -t rsa

    corosync-keygen

    chmod 400 authkey

    .......

  17. 设置集群相互验证, 在controller1上操作即可

    pcs cluster auth controller1 controller2 controller3 -u hacluster -p passw0rd --force

  18. 在controller1上创建并启动名为openstack-cluster的集群,其中controller1 controller2 controller3为集群成员:

    pcs cluster setup --force --name openstack-cluster controller1 controller2 controller3

  19. 设置集群自启动

    pcs cluster enable --all

    .......

  20. 通过crm设置VIP

    crm

    crm(live)# config
    crm(live)configure# primitive vip ocf:heartbeat:IPaddr2 params ip=9.110.187.128 cidr_netmask=24 nic=eno16777736 op .......
    四、 安装HAProxy

  21. 安装Haproxy
    在三个节点上分别安装HAProxy
    .......
  22. 跟rsyslog结合配置haproxy日志,在三个节点上都操作

    cd /etc/rsyslog.d/

    vim haproxy.conf

    添加:
    $ModLoad imudp
    $UDPServerRun 514
    $template Haproxy,"%rawmsg% "
    local0.=info -/var/log/haproxy.log;Haproxy
    local0.notice -/var/log/haproxy-status.log;Haproxy

    systemctl restart rsyslog.service

    systemctl status rsyslog.service

  23. 在三个节点上配置haproxy.cfg

    cd /etc/haproxy/

    mv haproxy.cfg haproxy.cfg.orig

    vim haproxy.cfg

    添加下面内容:
    global
    log 127.0.0.1 local0
    log 127.0.0.1 local1 notice
    maxconn 4096
    chroot /usr/share/haproxy
    user haproxy
    group haproxy
    daemon
    .......
    frontend stats-front
    bind *:8088
    mode http
    default_backend stats-back
    backend stats-back
    mode http
    balance source
    stats uri /haproxy/stats
    stats auth admin:passw0rd
    listen RabbitMQ-Server-Cluster
    bind 9.110.187.128:56720
    mode tcp
    balance roundrobin
    option tcpka
    server controller1 controller1:5672 check inter 5s rise 2 fall 3
    server controller2 controller2:5672 check inter 5s rise 2 fall 3
    server controller3 controller3:5672 check inter 5s rise 2 fall 3
    listen RabbitMQ-Web
    bind 9.110.187.128:15673
    mode tcp
    balance roundrobin
    option tcpka
    server controller1 controller1:15672 check inter 5s rise 2 fall 3
    server controller2 controller2:15672 check inter 5s rise 2 fall 3
    server controller3 controller3:15672 check inter 5s rise 2 fall 3
    .......
    listen nova_compute_api_cluster
    bind 9.110.187.128:8774
    balance source
    option tcpka
    option httpchk
    option tcplog
    server controller1 controller1:9774 check inter 2000 rise 2 fall 5
    server controller2 controller2:9774 check inter 2000 rise 2 fall 5
    server controller3 controller3:9774 check inter 2000 rise 2 fall 5
    listen nova_vncproxy_cluster
    bind 9.110.187.128:6080
    balance source
    option tcpka
    option tcplog
    server controller1 controller1:6080 check inter 2000 rise 2 fall 5
    server controller2 controller2:6080 check inter 2000 rise 2 fall 5
    server controller3 controller3:6080 check inter 2000 rise 2 fall 5
    .......
    重启下haproxy,如果发现服务状态不对,先不管,后面改系统内核参数可以解决

    systemctl start haproxy.service

    systemctl status haproxy.service

  24. 配置Haproxy能监控Galera数据库集群
    在controller1上进入mysql,创建clustercheck
    MariaDB [(none)]> grant process on . to ‘clustercheckuser‘@‘localhost‘ identified by ‘clustercheckpassword!‘;
    .......
    三个节点分别创建clustercheck文本,里面是clustercheckuser用户和密码

    vim /etc/sysconfig/clustercheck

    添加:
    MYSQL_USERNAME=clustercheckuser
    .......
    确认下是否存在/usr/bin/clustercheck 脚本,如果没有从网上下载一个,然后放到/usr/bin目录下面,记得chmod +x
    /usr/bin/clustercheck 赋予权限
    .......
    在controller1上检查haproxy服务状态

    clustercheck (存在/user/bin/clustercheck可以直接运行clustercheck命令)

    结合xinetd监控Galera服务(三个节点都安装xinetd)

    yum -y install xinetd

    vim /etc/xinetd.d/mysqlchk

    添加以下内容:

    default: on

    .......
    .......
    scp /etc/xinetd.d/mysqlchk controller3:/etc/xinetd.d/mysqlchk

    vim /etc/services

    最后一行添加:mysqlchk 9200/tcp # mysqlchk
    重启xinetd服务

    systemctl restart xinetd.service

    systemctl status xinetd.service

  25. 三个节点修改内核参数
    修改内核参数的作用是让haproxy正常启动
    .......
  26. 三个节点启动haproxy服务

    systemctl restart haproxy.service

    systemctl status haproxy.service

  27. 访问haproxy 前端web平台
    http://9.110.187.128:8088/haproxy/stats admin/passw0rd
    Galera集群服务已经监控成功
    五、安装配置Keystone
  28. 配置openstack Mitaka yum源

    cd /etc/yum.repos.d

    vim openstack-mitaka.repo

    添加:
    .......
    2、在controller1上创建keystone数据库

    mysql -uroot -p

    MariaDB [(none)]> CREATE DATABASE keystone;
    3、在controller1上创建数据库用户及赋予权限
    MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone. TO ‘keystone‘@‘localhost‘ IDENTIFIED BY ‘passw0rd‘;
    MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.
    TO ‘keystone‘@‘%‘ IDENTIFIED BY ‘passw0rd‘;
    注意将passw0rd 替换为自己的数据库密码

  29. 在三个节点上分别安装keystone

    yum -y install openstack-keystone httpd mod_wsgi python-openstackclient memcached python-memcached openstackutils

    5.在三个节点上分别启动memcache服务并设置开机自启动

    systemctl enable memcached.service

    systemctl start memcached.service

    systemctl status memcached.service

    6、配置/etc/keystone/keystone.conf文件
    .......

  30. 配置httpd.conf文件

    vim /etc/httpd/conf/httpd.conf

    ServerName controller1 (如果是controller2那就写controller2)
    Listen 8080 (80->8080 haproxy里用了80,不修改启动不了)

  31. 配置keystone与httpd结合

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

    .......

  32. 在controller1上设置数据库同步

    su -s /bin/sh -c "keystone-manage db_sync" keystone

  33. 三个节点都要启动httpd,并设置httpd开机启动

    systemctl enable httpd.service

    systemctl start httpd.service

    systemctl status httpd.service

    systemctl list-unit-files |grep httpd.service

  34. 在controller1上创建 admin 用户角色

    keystone-manage bootstrap

    --bootstrap-password passw0rd
    --bootstrap-username admin
    --bootstrap-project-name admin
    .......
    这样,就可以在 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://demo.openstack.com:5000 --os-password passw0rd

  35. 在controller1上创建admin用户环境变量,创建/root/admin-openrc 文件并写入如下内容:

    vim /root/admin-openrc

    添加以下内容:
    export OS_USER_DOMAIN_ID=default
    export OS_PROJECT_DOMAIN_ID=default
    export OS_USERNAME=admin
    .......

  36. 在controller1上创建endpoint

    source /root/admin-openrc

    openstack endpoint create --region RegionOne identity public http://demo.openstack.com:5000/v3

    openstack endpoint create --.......

  37. 在controller1上创建service项目

    openstack project create --domain default --description "Service Project" service

    .......

  38. 在controller1上创建demo用户环境变量,创建/root/demo-openrc 文件并写入下列内容:

    vim /root/demo-openrc

    添加:
    export OS_USER_DOMAIN_ID=default
    export OS_PROJECT_DOMAIN_ID=default
    export OS_USERNAME=demo
    export OS_PROJECT_NAME=demo
    .......

  39. 另外两个节点Keystone的安装
    另外两个controller节点只需要从第三点开始安装即可
    具体要操作的步骤点列表: 4、 5、6 、7、8、 10、11、12
    六、安装配置glance
    1、在controller1上创建glance数据库
    MariaDB [(none)]> CREATE DATABASE glance;
    2、在controller1上创建数据库用户并赋予权限
    .......
    3、在controller1上创建glance用户及赋予admin权限

    source /root/admin-openrc

    .......
    4、在controller1上创建image服务

    openstack service create --name glance --description "OpenStack Image service" image

    5、在controller1上创建glance的endpoint

    openstack endpoint create --region RegionOne image public http://demo.openstack.com:9292

    .......
    6、在controller1、2、3上安装glance相关rpm包

    yum install openstack-glance python-glance python-glanceclient -y

    7、在controller1、2、3上修改glance配置文件/etc/glance/glance-api.conf
    注意红色的密码设置成你自己的

    >/etc/glance/glance-api.conf

    openstack-config --set /etc/glance/glance-api.conf DEFAULT debug False

    openstack-config --set /etc/glance/glance-api.conf DEFAULT verbose True

    openstack-config --set /etc/glance/glance-api.conf DEFAULT bind_host controller1

    openstack-config --set /etc/glance/glance-api.conf DEFAULT bind_port 9393

    openstack-config --set /etc/glance/glance-api.conf DEFAULT registry_host controller1

    openstack-config --set /etc/glance/glance-api.conf DEFAULT registry_port 9191

    openstack-config --set /etc/glance/glance-api.conf DEFAULT auth_region RegionOne

    openstack-config --set /etc/glance/glance-api.conf DEFAULT registry_client_protocol http

    .......
    8、在controller1、2、3上修改glance配置文件/etc/glance/glance-registry.conf:

    >/etc/glance/glance-registry.conf

    openstack-config --set /etc/glance/glance-registry.conf DEFAULT debug False

    openstack-config --set /etc/glance/glance-registry.conf DEFAULT verbose True

    openstack-config --set /etc/glance/glance-registry.conf DEFAULT bind_host controller1

    openstack-config --set /etc/glance/glance-registry.conf DEFAULT bind_port 9191

    openstack-config --set /etc/glance/glance-registry.conf DEFAULT workers 4

    openstack-config --set /etc/glance/glance-registry.conf oslo_messaging_rabbit rabbit_hosts 10.1.1.120:5672, 10.1.1.121:5672,

    10.1.1.122:5672
    .......
    9、controller1同步glance数据库

    su -s /bin/sh -c "glance-manage db_sync" glance

    10、在controller1、2、3上启动glance及设置开机启动

    systemctl enable openstack-glance-api.service openstack-glance-registry.service

    .......
    11、在controller1、2、3上将glance版本号写入环境变量中

    echo " " >> /root/admin-openrc &&

    echo " " >> /root/demo-openrc &&

    .......

  40. 搭建glance后端存储
    因为是HA环境,3个控制节点必须要有一个共享的后端存储,不然request发起请求的时候不确定会去调用哪个控制节点的glance服务,
    如果没有共享存储池存镜像,那么会遇到创建VM时候image找不到的问题。
    这里我们采用NFS的方式把glance的后端存储建立起来,当然在实际的生产环境当中,一般会用ceph、GlusterFS等方式,这里我们以
    NFS为例子来讲诉后端存储的搭建。
    首先准备一台物理机或者虚拟机,要求空间要大,网络最好是在万兆
    这里我们用10.1.1.134这台虚拟机
    首先在这台机器上安装glance组件:
    .......

    systemctl start nfs-server

    让NFS共享目录生效:

    showmount -e

    接着在3个controller节点上做如下操作:

    mount -t nfs 10.1.1.134:/var/lib/glance/images /var/lib/glance/images

    echo "/usr/bin/mount -t nfs 10.1.1.134:/var/lib/glance/ /var/lib/glance/" >> /etc/rc.d/rc.local

    .......
    13、在controller1上下载测试镜像文件

    wget http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img

    14、在controller1上传镜像到glance

    source /root/admin-openrc

    glance image-create --name "cirros-0.3.4-x86_64" --file cirros-0.3.4-x86_64-disk.img --disk-format qcow2 --containerformat

    bare --visibility public --progress
    如果你做好了一个CentOS6.7系统的镜像,也可以用这命令操作,例:
    .......
    查看镜像列表:

    glance image-list

    15、 其他两个节点重复6、7、8、10、11步骤
    七、安装配置nova
    1、在controller1上创建nova数据库
    MariaDB [(none)]> CREATE DATABASE nova;
    .......
    2、在controller1上创建数据库用户并赋予权限
    MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO ‘nova‘@‘localhost‘ IDENTIFIED BY ‘passw0rd‘;
    .......
    3、在controller1上创建nova用户及赋予admin权限

    source /root/admin-openrc

    openstack user create --domain default nova --password passw0rd

    .......
    4、在controller1上创建computer服务

    openstack service create --name nova --description "OpenStack Compute" compute

    5、在controller1上创建nova的endpoint

    openstack endpoint create --region RegionOne compute public http://demo.openstack.com:8774/v2.1/%(tenant_id)s

    .......
    6、在controller1、2、3上安装nova相关软件

    yum install -y openstack-nova-api openstack-nova-cert openstack-nova-conductor openstack-nova-console openstacknova-

    novncproxy openstack-nova-scheduler
    7、在controller1、2、3上配置nova的配置文件/etc/nova/nova.conf

    >/etc/nova/nova.conf

    openstack-config --set /etc/nova/nova.conf DEFAULT debug False

    openstack-config --set /etc/nova/nova.conf DEFAULT verbose True

    openstack-config --set /etc/nova/nova.conf DEFAULT enabled_apis osapi_compute,metadata

    openstack-config --set /etc/nova/nova.conf DEFAULT osapi_compute_listen_port 9774

    openstack-config --set /etc/nova/nova.conf DEFAULT my_ip 10.1.1.120

    openstack-config --set /etc/nova/nova.conf DEFAULT use_neutron True

    openstack-config --set /etc/nova/nova.conf DEFAULT firewall_driver nova.virt.firewall.NoopFirewallDriver

    .......
    注意:其他节点上记得替换IP,还有密码,文档红色以及绿色的地方。
    8、在controller1上同步nova数据

    su -s /bin/sh -c "nova-manage api_db sync" nova

    .......
    9、在controller1上设置开机启动

    systemctl enable openstack-nova-api.service openstack-nova-cert.service openstack-nova-consoleauth.service openstacknova-

    scheduler.service openstack-nova-conductor.service openstack-nova-novncproxy.service
    .......
    .......

    systemctl list-unit-files |grep openstack-nova-*

    10、随便一个节点上验证nova服务

    unset OS_TOKEN OS_URL

    source /root/admin-openrc

    .......

    openstack endpoint list 查看endpoint list命令

  41. controller2 & controller3 节点分别重复6、7、9、10
    注意第7步的绿色IP记得换成本机的IP
    八、安装配置neutron
    1、在controller1上创建neutron数据库
    MariaDB [(none)]> CREATE DATABASE neutron;
    2、在controller1上创建数据库用户并赋予权限
    MariaDB [(none)]> GRANT ALL PRIVILEGES ON neutron. TO ‘neutron‘@‘localhost‘ IDENTIFIED BY ‘passw0rd‘;
    MariaDB [(none)]> GRANT ALL PRIVILEGES ON neutron.
    TO ‘neutron‘@‘%‘ IDENTIFIED BY ‘passw0rd‘;
    3、在controller1上创建neutron用户及赋予admin权限

    source /root/admin-openrc

    .......
    4、在controller1上创建network服务

    openstack service create --name neutron --description "OpenStack Networking" network

    5、在controller1上创建endpoint

    openstack endpoint create --region RegionOne network public http://demo.openstack.com:9696

    .......
    6、在controller1、2、3上安装neutron相关软件

    yum install openstack-neutron openstack-neutron-ml2 openstack-neutron-linuxbridge ebtables -y

    7、在controller1、2、3上配置neutron配置文件/etc/neutron/neutron.conf

    >/etc/neutron/neutron.conf

    openstack-config --set /etc/neutron/neutron.conf DEFAULT debug False

    openstack-config --set /etc/neutron/neutron.conf DEFAULT verbose true

    openstack-config --set /etc/neutron/neutron.conf DEFAULT bind_host controller1

    openstack-config --set /etc/neutron/neutron.conf DEFAULT bind_port 9797

    openstack-config --set /etc/neutron/neutron.conf DEFAULT core_plugin neutron.plugins.ml2.plugin.Ml2Plugin

    openstack-config --set /etc/neutron/neutron.conf DEFAULT service_plugins

    neutron.services.l3_router.l3_router_plugin.L3RouterPlugin,neutron.services.metering.metering_plugin.MeteringPlugin

    openstack-config --set /etc/neutron/neutron.conf DEFAULT rpc_backend rabbit

    .......

    openstack-config --set /etc/neutron/neutron.conf oslo_messaging_rabbit rabbit_max_retries 0

    openstack-config --set /etc/neutron/neutron.conf oslo_messaging_rabbit amqp_durable_queues False

    openstack-config --set /etc/neutron/neutron.conf keystone_authtoken auth_uri http://demo.openstack.com:5000

    openstack-config --set /etc/neutron/neutron.conf keystone_authtoken auth_url http://demo.openstack.com:35357

    .......

    openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2_type_vxlan vni_ranges 1:1000

    openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini securitygroup enable_ipset True

    9、在controller1、2、3上配置/etc/neutron/plugins/ml2/linuxbridge_agent.ini

    openstack-config --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini DEFAULT debug false

    openstack-config --

    .......
    注意eno67109408是public网卡,一般这里写的网卡名都是能访问外网的,如果不是外网网卡,那么VM就会与外界网络隔离。
    10、在controller1、2、3上配置 /etc/neutron/l3_agent.ini

    openstack-config --set /etc/neutron/l3_agent.ini DEFAULT interface_driver

    neutron.agent.linux.interface.BridgeInterfaceDriver
    .......
    11、在controller1、2、3上配置/etc/neutron/dhcp_agent.ini

    openstack-config --set /etc/neutron/dhcp_agent.ini DEFAULT interface_driver

    neutron.agent.linux.interface.BridgeInterfaceDriver
    .......
    12、在controller1、2、3上重新配置/etc/nova/nova.conf,配置这步的目的是让compute节点能使用上neutron网络

    openstack-config --set /etc/nova/nova.conf neutron url http://demo.openstack.com:9696

    openstack-config --set /etc/nova/nova.conf neutron auth_url http://demo.openstack.com:35357

    openstack-config --set /etc/nova/nova.conf neutron auth_plugin password

    .......
    13、在controller1、2、3上将dhcp-option-force=26,1450写入/etc/neutron/dnsmasq-neutron.conf

    echo "dhcp-option-force=26,1450" >/etc/neutron/dnsmasq-neutron.conf

    14、在controller1、2、3上配置/etc/neutron/metadata_agent.ini

    openstack-config --set /etc/neutron/metadata_agent.ini DEFAULT nova_metadata_ip demo.openstack.com

    .......
    15、在controller1、2、3上创建软链接

    ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini

    16、在controller1上同步数据库

    su -s /bin/sh -c "neutron-db-manage --config-file /etc/neutron/neutron.conf --config-file

    /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head" neutron
    17、在controller1、2、3上重启nova服务,因为刚才改了nova.conf

    systemctl restart openstack-nova-api.service

    systemctl status openstack-nova-api.service

    18、在controller1、2、3上重启neutron服务并设置开机启动

    systemctl enable neutron-server.service neutron-linuxbridge-agent.service neutron-dhcp-agent.service neutronmetadata-

    agent.service
    .......
    19、在controller1、2、3上启动neutron-l3-agent.service并设置开机启动

    systemctl enable neutron-l3-agent.service

    systemctl start neutron-l3-agent.service

    systemctl status neutron-l3-agent.service

    20、随便一节点上执行验证

    source /root/admin-openrc

    .......

    neutron agent-list

    21、创建vxLan模式网络,让虚拟机能外出
    a. 首先先执行环境变量

    source /root/admin-openrc

    b. 创建flat模式的public网络,注意这个public是外出网络,必须是flat模式的
    .......
    f. 创建路由,我们在界面上操作
    点击项目-->网络-->路由-->新建路由
    路由名称随便命名,我这里写"router", 管理员状态,选择"上"(up),外部网络选择"provider"
    点击"新建路由"后,提示创建router创建成功!
    .......
    22、检查网络服务

    neutron agent-list

    看服务是否是笑脸
    九、安装Dashboard
    1、安装dashboard相关软件包

    yum install openstack-dashboard -y

    2、修改配置文件/etc/openstack-dashboard/local_settings

    vim /etc/openstack-dashboard/local_settings

    直接覆盖我给的local_settings文件也行(为了减少出错,大家还是用我提供的local_settings文件替换覆盖)
    3、启动dashboard服务并设置开机启动

    systemctl enable httpd.service memcached.service

    systemctl restart httpd.service memcached.service

    systemctl status httpd.service memcached.service

    到此,Controller HA节点搭建完毕,打开firefox浏览器即可访问http://9.110.187.128/dashboard/ 可进入openstack界面!
    十、安装配置cinder
    1、在controller1上创建数据库用户并赋予权限
    MariaDB [(none)]> CREATE DATABASE cinder;
    MariaDB [(none)]> GRANT ALL PRIVILEGES ON cinder. TO ‘cinder‘@‘localhost‘ IDENTIFIED BY ‘passw0rd‘;
    MariaDB [(none)]> GRANT ALL PRIVILEGES ON cinder.
    TO ‘cinder‘@‘%‘ IDENTIFIED BY ‘passw0rd‘;
    2、在controller1上创建cinder用户并赋予admin权限

    source /root/admin-openrc

    openstack user create --domain default cinder --password passw0rd

    openstack role add --project service --user cinder admin

    3、在controller1上创建volume服务

    openstack service create --name cinder --description "OpenStack Block Storage" volume

    openstack service create --name cinderv2 --description "OpenStack Block Storage" volumev2

    4、在controller1上创建endpoint

    openstack endpoint create --region RegionOne volume public http://demo.openstack.com:8776/v1/%(tenant_id)s

    .......
    5、在controller1、2、3上安装cinder相关服务

    yum install openstack-cinder -y

    6、在controller1、2、3上配置cinder配置文件

    >/etc/cinder/cinder.conf

    openstack-config --set /etc/cinder/cinder.conf DEFAULT debug False

    openstack-config --set /etc/cinder/cinder.conf DEFAULT verbose True

    openstack-config --set /etc/cinder/cinder.conf DEFAULT my_ip 10.1.1.120

    openstack-config --set /etc/cinder/cinder.conf DEFAULT rpc_backend rabbit

    openstack-config --set /etc/cinder/cinder.conf DEFAULT osapi_volume_listen_port 8778

    openstack-config --set /etc/cinder/cinder.conf DEFAULT auth_strategy keystone

    .......

    openstack-config --set /etc/cinder/cinder.conf oslo_messaging_rabbit rabbit_retry_backoff 2

    openstack-config --set /etc/cinder/cinder.conf oslo_messaging_rabbit rabbit_max_retries 0

    openstack-config --set /etc/cinder/cinder.conf oslo_messaging_rabbit amqp_durable_queues False

    openstack-config --set /etc/cinder/cinder.conf keystone_authtoken auth_uri http://demo.openstack.com:5000

    openstack-config --set /etc/cinder/cinder.conf keystone_authtoken auth_url http://demo.openstack.com:35357

    .......

    openstack-config --set /etc/cinder/cinder.conf oslo_concurrency lock_path /var/lib/cinder/tmp

    7、在controller1上同步数据库

    su -s /bin/sh -c "cinder-manage db sync" cinder

    8、在controller1、2、3上启动cinder服务,并设置开机启动

    systemctl enable openstack-cinder-api.service openstack-cinder-scheduler.service

    .......
    注意!其他controller2和controller3 重复做5、6、8步即可!
    11、安装Cinder节点,Cinder节点这里我们需要额外的添加一个硬盘(/dev/sdb)用作cinder的存储服务(注意!这一步是在cinder节点
    操作的)

    yum install lvm2 -y

    .......

  42. 编辑存储节点lvm.conf文件(注意!这一步是在cinder节点操作的)

    vim /etc/lvm/lvm.conf

    在devices 下面添加 filter = [ "a/sda/", "a/sdb/", "r/.*/"] ,如图:
    然后重启下lvm2服务:

    systemctl restart lvm2-lvmetad.service

    systemctl status lvm2-lvmetad.service

    15、安装openstack-cinder、targetcli (注意!这一步是在cinder节点操作的)
    yum install openstack-cinder targetcli python-keystone ntpdate -y
    16、配置cinder配置文件(注意!这一步是在cinder节点操作的)

    >/etc/cinder/cinder.conf

    openstack-config --set /etc/cinder/cinder.conf DEFAULT debug False

    openstack-config --set /etc/cinder/cinder.conf DEFAULT verbose True

    .......

    openstack-config --set /etc/cinder/cinder.conf oslo_messaging_rabbit rabbit_ha_queues True

    openstack-config --set /etc/cinder/cinder.conf oslo_messaging_rabbit rabbit_use_ssl False

    openstack-config --set /etc/cinder/cinder.conf oslo_messaging_rabbit rabbit_retry_interval 1

    .......

    openstack-config --set /etc/cinder/cinder.conf keystone_authtoken auth_uri http://demo.openstack.com:5000

    openstack-config --set /etc/cinder/cinder.conf keystone_authtoken auth_url http://demo.openstack.com:35357

    openstack-config --set /etc/cinder/cinder.conf keystone_authtoken memcached_servers

    controller1:11211,controller2:11211,controller3:11211

    openstack-config --set /etc/cinder/cinder.conf keystone_authtoken auth_type password

    openstack-config --set /etc/cinder/cinder.conf keystone_authtoken project_domain_name default

    openstack-config --set /etc/cinder/cinder.conf keystone_authtoken user_domain_name default

    .......

    openstack-config --set /etc/cinder/cinder.conf lvm iscsi_protocol iscsi

    openstack-config --set /etc/cinder/cinder.conf lvm iscsi_helper lioadm

    openstack-config --set /etc/cinder/cinder.conf oslo_concurrency lock_path /var/lib/cinder/tmp

    17、启动openstack-cinder-volume和target并设置开机启动(注意!这一步是在cinder节点操作的)

    systemctl enable openstack-cinder-volume.service target.service

    .......
    18、在任意一个节点上验证cinder服务是否正常

    source /root/admin-openrc

    cinder service-list

    十一、把相关服务和资源添加到Pacermaker

  43. Pacermaker参数说明
    primitive添加格式:
    primitive 唯一ID 资源代理类型:资源代理的提供程序:资源代理名称
    params attr_list
    meta attr_list
    op op_type [<attribute>=<value>...] ...]
    primitive 参数说明:
    资源代理类型: lsb, ocf, stonith, service
    资源代理的提供程序: heartbeat , pacemaker
    资源代理名称:即resource agent, 如:IPaddr2,httpd, mysql
    params:实例属性,是特定资源类的参数,用于确定资源类的行为方式及其控制的服务实例。
    meta:元属性, 是可以为资源添加的选项。它们告诉 CRM 如何处理特定资源。
    op:操作,默认情况下,群集不会确保您的资源一直正常。要指示群集确保资源状况依然正常,需要向资源的定义中添加一个监视操作
    monitor。可为所有类或资源代理添加monitor。
    op_type :包括 start,stop,monitor
    interval :执行操作的频率。单位:秒。
    timeout : 需要等待多久才声明操作失败。
    requires :需要满足什么条件才能发生此操作。允许的值:nothing、quorum 和 fencing。默认值取决于是否启用屏障和资源的类是否
    为 stonith。对于 STONITH 资源,默认值为 nothing。
    on-fail :此操作失败时执行的操作。允许的值:
    ignore:假装资源没有失败。
    block:不对资源执行任何进一步操作。
    stop:停止资源并且不在其他位置启动该资源。
    restart:停止资源并(可能在不同的节点上)重启动。
    fence:关闭资源失败的节点 (STONITH)。
    standby:将所有资源从资源失败的节点上移走。
    enabled 如果值为 false,将操作视为不存在。允许的值:true、false。
    例:
    primitive r0 ocf:linbit:drbd
    params drbd_resource=r0
    op monitor role=Master interval=60s
    op monitor role=Slave interval=300s
    meta元属性参数说明:
    priority:如果不允许所有的资源都处于活动状态,群集会停止优先级较低的资源以便保持较高优先级资源处于活动状态。
    target-role: 此资源试图保持的状态,包括started和stopped
    is-managed:是否允许群集启动和停止资源,包括true和 false。
    migration-threshold:用来定义资源的故障次数,假设已经为资源配制了一个首选在节点上运行的位置约束。如果那里失败了,系统会检
    查 migration-threshold 并与故障计数进行比较。如果故障计数 >= migration-threshold,会将资源迁移到下一个自选节点。
    默认情况下,一旦达到阈值,就只有在管理员手动重置资源的故障计数后(在修复故障原因后),才允许在该节点上运行有故障的资源。
    但是,可以通过设置资源的 failure-timeout 选项使故障计数失效。如果设置migration-threshold=2 和 failure-timeout=60s ,将会导
    致资源在两次故障后迁移到新的节点,并且可能允许在一分钟后移回(取决于黏性和约束分数)。
    迁移阈值概念有两个例外,在资源启动失败或停止失败时出现:启动故障会使故障计数设置为 INFINITY,因此总是导致立即迁移。停止故障会
    导致屏障(stonith-enabled 设置为 true 时,这是默认设置)。如果不定义 STONITH资源(或 stonith-enabled 设置为 false),则该资源根本
    不会迁移。
    failure-timeout:在恢复为如同未发生故障一样正常工作(并允许资源返回它发生故障的节点)之前,需要等待几秒钟,,默认值0
    (disabled)
    resource-stickiness:资源留在所处位置的自愿程度如何,即黏性,默认为0。
    multiple-active:如果发现资源在多个节点上活动,群集该如何操作,包括:
    block(将资源标记为未受管),stop_only(停止所有活动实例),stop_start(默认值,停止所有活动实例,并在某个节点启动资源)
    requires:定义某种条件下资源会被启动。默认资源会被fencing,为以下这几种值时除外
    • nothing - 集群总能启动资源;
    • quorum - 集群只有在大多数节点在线时能启动资源,当stonith-enabled为false 或资源为stonith时,其为默认值;
    • fencing - 集群只有在大多数节点在线,或在任何失败或未知节点被关闭电源时,才能启动资源;
    • unfencing - 集群只有在大多数节点在线,或在任何失败或未知节点被关闭电源时并且只有当节点没被fencing时,才能启动资源。当为
      某一fencing设备,而将stonith的meta参数设置为provides=unfencing时,其为默认值。
  44. 添加RabbitMQ 服务到PCS
    rabbitmq的PCS资源在/usr/lib/ocf/resource.d/rabbitmq 下
    在每个控制节点上操作:

    systemctl disable rabbitmq-server

    在controller1上操作:

    cat /var/lib/rabbitmq/.erlang.cookie 查看本机rabbitmq cookie值,下面红色部分就是erlang cookie值

    crm configure

    primitive p_rabbitmq-server ocf:rabbitmq:rabbitmq-server-ha
    params erlang_cookie=OBXLKSWFQVGZLAUBLIKX node_port=5672
    op monitor interval=30 timeout=60
    op monitor interval=27 role=Master timeout=60
    op start interval=0 timeout=360
    op stop interval=0 timeout=120
    op promote interval=0 timeout=120
    op demote interval=0 timeout=120
    op notify interval=0 timeout=180
    meta migration-threshold=10 failure-timeout=30s resource-stickiness=100
    .......
    做完资源添加操作大概过4-5分钟后,服务才能接管起来:
    crm status

  45. 添加haproxy到PCS
    在每个控制节点上操作:

    systemctl disable haproxy

    .......

  46. 添加glance相关服务到PCS
    在每个控制节点上操作:

    systemctl disable openstack-glance-api openstack-glance-registry

    在controller1上操作:

    crm configure

    primitive openstack-glance-api systemd:openstack-glance-api
    op start interval=0s timeout=30
    op stop interval=0s timeout=30
    op monitor interval=30 timeout=30
    .......
    commit

  47. 添加nova相关服务到PCS
    在每个控制节点上操作:
    #systemctl disable openstack-nova-api openstack-nova-cert openstack-nova-consoleauth openstack-nova-scheduler
    openstack-nova-conductor openstack-nova-novncproxy
    在controller1上操作:

    crm configure

    primitive openstack-nova-api systemd:openstack-nova-api
    op start interval=0s timeout=45
    op stop interval=0s timeout=45
    op monitor interval=30 timeout=30
    primitive openstack-nova-cert systemd:openstack-nova-cert
    op start interval=0s timeout=45
    op stop interval=0s timeout=45
    op monitor interval=30 timeout=30
    .......
    commit
    clone openstack-nova-api-clone openstack-nova-api
    meta target-role=Started
    clone openstack-nova-cert-clone openstack-nova-cert
    meta target-role=Started
    clone openstack-nova-conductor-clone openstack-nova-conductor
    meta target-role=Started
    clone openstack-nova-novncproxy-clone openstack-nova-novncproxy
    meta target-role=Started
    clone openstack-nova-scheduler-clone openstack-nova-scheduler
    meta target-role=Started
    commit

  48. 添加cinder相关服务到PCS
    在每个控制节点上操作:

    systemctl disable openstack-cinder-api openstack-cinder-scheduler

    在controller1上操作:

    crm configure

    primitive openstack-cinder-api systemd:openstack-cinder-api
    op start interval=0s timeout=45
    op stop interval=0s timeout=45
    op monitor interval=30 timeout=30
    .......
    commit

  49. 添加neutron相关服务到PCS
    在每个控制节点上操作:

    systemctl disable neutron-server neutron-l3-agent neutron-linuxbridge-agent neutron-dhcp-agent neutron-metadataagent

    在controller1上操作:

    crm configure

    primitive openstack-neutron-server systemd:neutron-server
    op start interval=0s timeout=45
    .......
    primitive openstack-neutron-dhcp-agent systemd:neutron-dhcp-agent
    op start interval=0s timeout=45
    op stop interval=0s timeout=45
    op monitor interval=30 timeout=30
    primitive openstack-neutron-metadata-agent systemd:neutron-metadata-agent
    op start interval=0s timeout=45
    op stop interval=0s timeout=45
    op monitor interval=30 timeout=30
    .......
    clone openstack-neutron-metadata-agent-clone openstack-neutron-metadata-agent
    meta target-role=Started
    commit

  50. 排错
    如果有服务起不来,对照下面列表cleanup下(视频里有详解)
    crm resource cleanup rabbitmq-server-clone
    crm resource cleanup openstack-memcached-clone
    crm resource cleanup openstack-glance-api-clone
    .......
    Compute节点部署
    一、安装相关依赖包

    yum install openstack-selinux python-openstackclient yum-plugin-priorities openstack-nova-compute openstack-utils

    ntpdate -y

  51. 配置nova.conf

    >/etc/nova/nova.conf

    openstack-config --set /etc/nova/nova.conf DEFAULT debug False

    openstack-config --set /etc/nova/nova.conf DEFAULT verbose True

    openstack-config --set /etc/nova/nova.conf DEFAULT force_raw_images True

    openstack-config --set /etc/nova/nova.conf DEFAULT remove_unused_original_minimum_age_seconds 86400

    .......

    openstack-config --set /etc/nova/nova.conf oslo_messaging_rabbit rabbit_userid openstack

    openstack-config --set /etc/nova/nova.conf oslo_messaging_rabbit rabbit_password passw0rd

    openstack-config --set /etc/nova/nova.conf oslo_messaging_rabbit rabbit_use_ssl False

    openstack-config --set /etc/nova/nova.conf oslo_messaging_rabbit rabbit_ha_queues True

    openstack-config --set /etc/nova/nova.conf oslo_messaging_rabbit rabbit_retry_interval 1

    openstack-config --set /etc/nova/nova.conf oslo_messaging_rabbit rabbit_retry_backoff 2

    .......

    openstack-config --set /etc/nova/nova.conf libvirt cpu_mode host-model

  52. 在线热迁移配置
    在线热迁移需要的前提条件:
    a. 需要有共享存储,NFS、 Ceph、 GPFS 或者直接连接EMC等存储设备都可以提供共享存储。
    b. 源和目标节点的 CPU 类型要一致。
    c. 源和目标节点的 Libvirt 版本要一致。
    d. 源和目标节点能相互识别对方的主机名称,可以在 /etc/hosts 中加入对方的主机名
    配置方法:
    .......
    b. 配置libvirtd.conf和libvirtd
    sed -i ‘s/#listen_tls = 0/listen_tls = 0/g‘ /etc/libvirt/libvirtd.conf
    sed -i ‘s/#listen_tcp = 1/listen_tcp = 1/g‘ /etc/libvirt/libvirtd.conf
    .......
    d. 设置libvirtd.service 和openstack-nova-compute.service开机启动,并且重启libvirtd &openstack-nova-compute

    systemctl enable libvirtd.service openstack-nova-compute.service

    .......
    e. 热迁移虚拟机操作
    命令:nova live-migration instance_id node_name

    nova live-migration 990b077d-663c-4a61-bd64-0e5ebeab2554 compute2

    nova show 990b077d-663c-4a61-bd64-0e5ebeab2554 查看是否确实迁移成功

  53. 添加环境变量

    cat <<END >/root/admin-openrc

    export OS_PROJECT_DOMAIN_NAME=default
    export OS_USER_DOMAIN_NAME=default
    export OS_PROJECT_NAME=admin
    export OS_USERNAME=admin
    export OS_PASSWORD=passw0rd
    export OS_AUTH_URL=http://demo.openstack.com:35357/v3
    export OS_IDENTITY_API_VERSION=3
    END

    cat <<END >/root/demo-openrc

    export OS_PROJECT_DOMAIN_NAME=default
    export OS_USER_DOMAIN_NAME=default
    .......

  54. 验证

    source /root/admin-openrc

    openstack compute service list

    二、安装Neutron

  55. 安装相关软件包

    yum install openstack-neutron-linuxbridge ebtables ipset -y

  56. 配置neutron.conf

    >/etc/neutron/neutron.conf

    sed -i ‘/^connection/d‘ /etc/neutron/neutron.conf

    openstack-config --set /etc/neutron/neutron.conf DEFAULT debug False

    openstack-config --set /etc/neutron/neutron.conf DEFAULT verbose True

    openstack-config --set /etc/neutron/neutron.conf DEFAULT rpc_backend rabbit

    .......

  57. 配置/etc/neutron/plugins/ml2/linuxbridge_agent.ini

    openstack-config --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini linux_bridge physical_interface_mappings

    provider:eno50332184

    openstack-config --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini vxlan enable_vxlan True

    .......
    注意provider后面那个网卡名是第二块网卡的名称。

  58. 配置nova.conf

    openstack-config --set /etc/nova/nova.conf neutron url http://demo.openstack.com:9696

    openstack-config --set /etc/nova/nova.conf neutron auth_url http://demo.openstack.com:35357

    openstack-config --set /etc/nova/nova.conf neutron auth_type password

    .......

  59. 重启和enable相关服务

    systemctl restart libvirtd.service openstack-nova-compute.service

    .......
    三、配置Cinder

  60. 计算节点要是想用cinder,那么需要配置nova配置文件(注意!这一步是在计算节点操作的)

    openstack-config --set /etc/nova/nova.conf cinder os_region_name RegionOne

    .......

  61. 然后在controller1、2、3上重启nova服务

    systemctl restart openstack-nova-api.service

    .......
    四. 验证

    source /root/admin-openrc

    neutron ext-list

    neutron agent-list

    到此,Computer节点搭建完毕,运行nova host-list可以查看新加入的computer1节点
    如果需要再添加另外一个computer节点,只要重复下第二大步即可!记得把计算机名和IP地址改下。_
    技术分享图片

以上是关于OpenStack Mitaka HA高可用搭建的主要内容,如果未能解决你的问题,请参考以下文章

OpenStackOpenStack系列15之OpenStack高可用详解

快速搭建kubernetes高可用集群(3master+3worker+负载均衡)

理解 OpenStack 高可用(HA):Neutron 分布式虚拟路由

openstack 高可用(HA)- Mariadb

讲清楚说明白openstack中vm流量走向之2——DVR模式

openstack mitaka宿主机怎么可以访问虚拟机