高可用OpenStack(Queen版)部署操作手册V2.0 for centos7

网友投稿 1532 2022-10-14

本站部分文章、图片属于网络上可搜索到的公开信息,均用于学习和交流用途,不能代表睿象云的观点、立场或意见。我们接受网民的监督,如发现任何违法内容或侵犯了您的权益,请第一时间联系小编邮箱jiasou666@gmail.com 处理。

高可用OpenStack(Queen版)部署操作手册V2.0 for centos7

高可用OpenStack-Queen版

部署操作指南

for centos7

系统运维操作手册

(v2.0)

2020年5月20日

作者:龍龍

南京迈特望科技股份有限公司

一.环境

1. 组件

组件

版本

Remark

centos

7.4

controller: 4c12g (测试环境,亲测8g内存不足以支持全部服务;另外并没有考虑存储空间,实际生产环境日志量较大,对后端存储有一定要求)

compute: 8c8g (测试环境)

yum源已设置为国内的aliyun:https://opsx.alibaba.com/mirror

openstack

queen

ceph

v12.2.4 luminous

2. 拓扑(逻辑)

1.congtroller节点运行keystone,glance,horizon,nova&neutron&cinder管理相关组件,ceph-mon&ceph-mgr(非openstack服务),另外openstack相关的基础服务;

2.compute节点运行nova-compute,neutron-linuxbridge-agent,cinder-volume(后经验证,如果后端使用共享存储,建议部署在controller节点,可通过pacemaker控制运行模式,但写文档时,此验证环境的cinder-volume部署在compute节点)等,另有计算虚拟化kvm,ceph-osd等;

3.控制节点网络:

管理网络:含host os管理,api,ceph-public等网络,如果生产环境允许,建议各逻辑网络使用独立的物理网络,api区分admin/internal/public接口,对客户端只开放public接口;

外部网络:主要针对guest os访问internet/外部的floating ip;

租户(虚机)隧道网络(与vlan网络共存或2选1):guest os之间通讯的网络,采用vxlan/gre等方式;

租户(虚机)vlan网络(与隧道网络共存或2选1):guest os之间通讯的网络,采用vlan方式;

4.计算节点网络:

管理网络:含host os管理,api,ceph-public等网络;

存储网络:存储集群内部通讯,数据复制同步网络,与外界没有直接联系;

租户(虚机)隧道网络(与vlan网络共存或2选1):guest os之间通讯的网络,采用vxlan/gre等方式;

租户(虚机)vlan网络(与隧道网络共存或2选1):guest os之间通讯的网络,采用vlan方式;

5.采用self-service-networks提供自助网络服务,provider networks不支持专有网络,需要依靠外部基础设施提供3层路由与增值服务(如lbaas,fwaas等);

6.前端采用haproxy做高可用;

7.无状态的服务,如xxx-api,采取active/active的模式运行;有状态的服务,如neturon-xxx-agent,cinder-volume等,建议采取active/passive的模式运行(因前端采用haproxy,客户端的多次请求可能会被转发到不同的控制节点,如果客户端请求被负载到无状态信息的控制节点,可能会导致操作请求失败);自身具有集群机制的服务,如rabbitmq,memcached等采用本身的集群机制即可。

3. 整体规划

Host

IP

Service

Remark

controller01

eth0(Management + API + Message + Storage Public Network): 172.30.200.31

eth1(External Network): 172.30.201.31

eth2(Tunnel Tenant Network):10.0.0.31

eth3(Vlan Tenant Network)

1. keystone
2. glance-api , glance-registry
3. nova-api, nova-conductor, nova-consoleauth, nova-scheduler, nova-novncproxy
4. neutron-api, neutron-linuxbridge-agent, neutron-dhcp-agent, neutron-metadata-agent, neutron-l3-agent
5. cinder-api, cinder-schedulera
6. dashboard
7. ceph-mon, ceph-mgr
8. mariadb, rabbitmq, memcached等

1.控制节点: keystone, glance, horizon, nova&neutron管理组件;

2.网络节点:虚机网络,L2/L3,dhcp,route,nat等;

3.存储节点:调度,监控(ceph)等组件;

4.openstack基础服务

controller02

eth0(Management + API + Message + Storage Public Network): 172.30.200.32

eth1(External Network): 172.30.201.32

eth2(Tunnel Tenant Network):10.0.0.32

eth3(Tenant Network)

1. keystone
2. glance-api , glance-registry
3. nova-api, nova-conductor, nova-consoleauth, nova-scheduler, nova-novncproxy
4. neutron-api, neutron-linuxbridge-agent, neutron-dhcp-agent, neutron-metadata-agent, neutron-l3-agent
5. cinder-api, cinder-schedulera
6. dashboard
7. ceph-mon, ceph-mgr
8. mariadb, rabbitmq, memcached等

1.控制节点: keystone, glance, horizon, nova&neutron管理组件;

2.网络节点:虚机网络,L2/L3,dhcp,route,nat等;

3.存储节点:调度,监控(ceph)等组件;

4.openstack基础服务

controller03

eth0(Management + API + Message + Storage Public Network): 172.30.200.33

eth1(External Network): 172.30.201.33

eth2(Tunnel Tenant Network):10.0.0.33

eth3(Tenant Network)

1. keystone
2. glance-api , glance-registry
3. nova-api, nova-conductor, nova-consoleauth, nova-scheduler, nova-novncproxy
4. neutron-api, neutron-linuxbridge-agent, neutron-dhcp-agent, neutron-metadata-agent, neutron-l3-agent
5. cinder-api, cinder-schedulera
6. dashboard
7. ceph-mon, ceph-mgr
8. mariadb, rabbitmq, memcached等

1.控制节点: keystone, glance, horizon, nova&neutron管理组件;

2.网络节点:虚机网络,L2/L3,dhcp,route,nat等;

3.存储节点:调度,监控(ceph)等组件;

4.openstack基础服务

compute01

eth0(Management + Message + Storage Public Network): 172.30.200.41

eth1(Storage Cluster Network):10.0.254.41

eth2(Tunnel Tenant Network):10.0.0.41

eth3(Tenant Network)

1. nova-compute
2. neutron-linuxbridge-agent
3. cinder-volume
(如果后端使用共享存储,建议部署在controller节点)
4. ceph-osd

1.计算节点:hypervisor(kvm);

2.网络节点:虚机网络等;

3.存储节点:卷服务等组件

compute02

eth0(Management + Message + Storage Public Network): 172.30.200.42

eth1(Storage Cluster Network):10.0.254.42

eth2(Tunnel Tenant Network):10.0.0.42

eth3(Tenant Network)

1. nova-compute
2. neutron-linuxbridge-agent
3. cinder-volume
(如果后端使用共享存储,建议部署在controller节点)
4. ceph-osd

1.计算节点:hypervisor(kvm);

2.网络节点:虚机网络等;

3.存储节点:卷服务等组件

compute03

eth0(Management + Message + Storage Public Network): 172.30.200.43

eth1(Storage Cluster Network):10.0.254.43

eth2(Tunnel Tenant Network):10.0.0.43

eth3(Tenant Network)

1. nova-compute
2. neutron-linuxbridge-agent
3. cinder-volume
(如果后端使用共享存储,建议部署在controller节点)
4. ceph-osd

1.计算节点:hypervisor(kvm);

2.网络节点:虚机网络等;

3.存储节点:卷服务等组

二.基础环境

1. 设置hosts

# 所有节点保持一致的hosts即可,以controller01节点为例;

[root@controller01 ~]# cat etc/hosts

2. 设置ntp

# 所有节点保持时钟同步,以controller01节点为例

[root@controller01 ~]# yum install chrony -y

# 编辑/etc/chrony.conf文件,设置”172.20.0.252”为时钟源,同时设置3个控制节点作为”备用”时钟源;

# 允许”172.30.200.0/24”网段主机从本地同步时钟

[root@controller01 ~]# egrep -v "^$|^#" etc/chrony.conf

server 172.20.0.252 iburst

server controller01 iburst

server controller02 iburst

server controller03 iburst

driftfile var/lib/chrony/drift

makestep 1.0 3

rtcsync

allow 172.30.200.0/24

logdir var/log/chrony

# 设置开机启动,并重启

[root@controller01 ~]# systemctl enable chronyd.service

[root@controller01 ~]# systemctl restart chronyd.service

# 查看状态

[root@controller01 ~]# systemctl status chronyd.service

[root@controller01 ~]# chronyc sources -v

3. 设置openstack packages

# 安装queen版yum源

[root@controller01 ~]# yum install centos-release-openstack-queens -y

[root@controller01 ~]# yum upgrade -y

# 安装openstackclient

[root@controller01 ~]# yum install python-openstackclient -y

# selinux开启时需要安装openstack-selinux,这里已将seliux设置为默认关闭

[root@controller01 ~]# yum install openstack-selinux -y

4. 设置iptables

# 全部节点提前统一设置完成iptables,以controller01节点为例;

# 初始环境已使用iptables替代centos7.x自带的firewalld,同时关闭selinux;

[root@controller01 ~]# vim etc/sysconfig/iptables

# mariadb

# tcp3306:服务监听端口;

# tcp&udp4567:tcp做数据同步复制,多播复制同时采用tcp与udp;

# tcp4568:增量状态传输;

# tcp4444:其他状态快照传输;

# tcp9200:心跳检测

-A INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT

-A INPUT -p tcp -m state --state NEW -m tcp --dport 4444 -j ACCEPT

-A INPUT -p tcp -m state --state NEW -m tcp --dport 4567:4568 -j ACCEPT

-A INPUT -p udp -m state --state NEW -m udp --dport 4567 -j ACCEPT

-A INPUT -p tcp -m state --state NEW -m tcp --dport 9200 -j ACCEPT

# rabbitmq

# tcp4369:集群邻居发现;

# tcp5671,5672:用于AMQP 0.9.1 and 1.0 clients使用;

# tcp5673:非rabbitmq默认使用端口,这里用作hapoxy前端监听端口,避免后端服务与haproxy在1个节点时无法启动的问题;如果使用rabbitmq本身的集群机制,则可不设置此端口;

# tcp15672:用于http api与rabbitadmin访问,后者仅限在management plugin开启时;

# tcp25672:用于erlang分布式节点/工具通信

-A INPUT -p tcp -m state --state NEW -m tcp --dport 4369 -j ACCEPT

-A INPUT -p tcp -m state --state NEW -m tcp --dport 5671:5673 -j ACCEPT

-A INPUT -p tcp -m state --state NEW -m tcp --dport 15672:15673 -j ACCEPT

-A INPUT -p tcp -m state --state NEW -m tcp --dport 25672 -j ACCEPT

# memcached

# tcp11211:服务监听端口;

-A INPUT -p tcp -m state --state NEW -m tcp --dport 11211 -j ACCEPT

# pcs

# tcp2224:pcs web管理服务监听端口,可通过web新建,查看,删除资源等,端口值在/usr/lib/pcsd/ssl.rb文件中设置;

# udp5405:中间件corosync服务集群多播通信端口

-A INPUT -p tcp -m state --state NEW -m tcp --dport 2224 -j ACCEPT

-A INPUT -p udp -m state --state NEW -m udp --dport 5404:5405 -j ACCEPT

# haproxy

# tcp1080:haproxy监听端口

-A INPUT -p tcp -m state --state NEW -m tcp --dport 1080 -j ACCEPT

# dashboard

# tcp80:dashboard监听端口

-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT

# keystone

# tcp35357:admin-api端口;

# tcp5000:public/internal-api端口

-A INPUT -p tcp -m state --state NEW -m tcp --dport 35357 -j ACCEPT

-A INPUT -p tcp -m state --state NEW -m tcp --dport 5000 -j ACCEPT

# glance

# tcp9191:glance-registry端口;

# tcp9292:glance-api端口

-A INPUT -p tcp -m state --state NEW -m tcp --dport 9191 -j ACCEPT

-A INPUT -p tcp -m state --state NEW -m tcp --dport 9292 -j ACCEPT

# nova

# tcp8773:nova-ec2-api端口;

# tcp8774:nova-compute-api端口;

# tcp8775:nova-metadata-api端口;

# tcp8778:placement-api端口;

# tcp6080:vncproxy端口

-A INPUT -p tcp -m state --state NEW -m tcp --dport 8773:8775 -j ACCEPT

-A INPUT -p tcp -m state --state NEW -m tcp --dport 8778 -j ACCEPT

-A INPUT -p tcp -m state --state NEW -m tcp --dport 6080 -j ACCEPT

# cinder

# tcp8776:cinder-api端口

-A INPUT -p tcp -m state --state NEW -m tcp --dport 8776 -j ACCEPT

# neutron

# tcp9696:neutron-api端口;

# udp4789:vxlan目的端口

-A INPUT -p tcp -m state --state NEW -m tcp --dport 9696 -j ACCEPT

-A INPUT -p udp -m state --state NEW -m udp --dport 4789 -j ACCEPT

# ceph

# tcp6789:ceph-mon端口;

# tcp6800~7300:ceph-osd端口

-A INPUT -p tcp -m state --state NEW -m tcp --dport 6789 -j ACCEPT

-A INPUT -p tcp -m state --state NEW -m tcp --dport 6800:7300 -j ACCEPT

[root@controller01 ~]# service iptables restart

三.Mariadb集群

1. 安装mariadb

# 在全部controller节点安装mariadb,以controller01节点为例

[root@controller01 ~]# yum install mariadb mariadb-server python2-PyMySQL -y

# 安装galera相关插件,利用galera搭建集群

[root@controller01 ~]# yum install mariadb-server-galera mariadb-galera-common galera xinetd rsync -y

2. 初始化mariadb

# 在全部控制节点初始化数据库密码,以controller01节点为例;

# root初始密码为空

[root@controller01 ~]# systemctl restart mariadb.service

[root@controller01 ~]# mysql_secure_installation

Enter current password for root (enter for none):

Set root password? [Y/n] y

New password:

Re-enter new password:

Remove anonymous users? [Y/n] y

Disallow root login remotely? [Y/n] n

Remove test database and access to it? [Y/n] y

Reload privilege tables now? [Y/n] y

3. 修改mariadb配置文件

# 在全部控制节点/etc/my.cnf.d/目录下新增openstack.cnf配置文件,主要设置集群同步相关参数,以controller01节点为例,个别涉及ip地址/host名等参数根据实际情况修改

[root@controller01 my.cnf.d]# cat etc/my.cnf.d/openstack.cnf

[mysqld]

binlog_format = ROW

bind-address = 172.30.200.31

default-storage-engine = innodb

innodb_file_per_table = on

max_connections = 4096

collation-server = utf8_general_ci

character-set-server = utf8

[galera]

bind-address = 172.30.200.31

wsrep_provider = usr/lib64/galera/libgalera_smm.so

wsrep_cluster_address ="gcomm://controller01,controller02,controller03"

wsrep_cluster_name = openstack-cluster-01

wsrep_node_name = controller01

wsrep_node_address = 172.30.200.31

wsrep_on=ON

wsrep_slave_threads=4

wsrep_sst_method=rsync

default_storage_engine=InnoDB

[embedded]

[mariadb]

[mariadb-10.1]

4. 构建mariadb集群

# 停止全部控制节点的mariadb服务,以controller01节点为例

[root@controller01 ~]# systemctl stop mariadb.service

# 任选1个控制节点以如下方式启动mariadb服务,这里选择controller01节点

[root@controller01 ~]# usr/libexec/mysqld --wsrep-new-cluster --user=root &

# 其他控制节点加入mariadb集群,以controller02节点为例;

# 启动后加入集群,controller02节点从controller01节点同步数据,也可同步查看mariadb日志/var/log/mariadb/mariadb.log

[root@controller02 ~]# systemctl start mariadb.service

[root@controller02 ~]# systemctl status mariadb.service

# 重新启动controller01节点;

# 启动前删除contrller01节点的数据

[root@controller01 ~]# pkill -9 mysql

[root@controller01 ~]# rm -rf var/lib/mysql/*

# 注意以system unit方式启动mariadb服务时的权限

[root@controller01 ~]# chown mysql:mysql var/run/mariadb/mariadb.pid

# 启动后查看节点所在服务状态,controller01节点从controller02节点同步数据

[root@controller01 ~]# systemctl start mariadb.service

[root@controller01 ~]# systemctl status mariadb.service

# 查看集群状态

[root@controller01 ~]# mysql -uroot -pmysql_pass

MariaDB [(none)]> show status like "wsrep_cluster_size";

MariaDB [(none)]> SHOW status LIKE 'wsrep_ready';

5. 设置心跳检测clustercheck

1)准备脚本

# 下载clustercheck脚本

[root@controller01 ~]# wget https://raw.githubusercontent.com/olafz/percona-clustercheck/master/clustercheck

# 赋权

[root@controller01 ~]# chmod +x clustercheck

[root@controller01 ~]# cp ~/clustercheck usr/bin/

2)创建心跳检测用户

# 在任意控制节点创建clustercheck_user用户并赋权;

# 注意账号/密码与脚本中的账号/密码对应,这里采用的是脚本默认的账号/密码,否则需要修改clustercheck脚本文件

[root@controller01 ~]# mysql -uroot -pmysql_pass

MariaDB [(none)]> GRANT PROCESS ON *.* TO 'clustercheckuser'@'localhost' IDENTIFIED BY 'clustercheckpassword!';

MariaDB [(none)]> FLUSH PRIVILEGES;

3)检测配置文件

# 在全部控制节点新增心跳检测服务配置文件/etc/xinetd.d/mysqlchk,以controller01节点为例

[root@controller01 ~]# touch etc/xinetd.d/mysqlchk

[root@controller01 ~]# vim etc/xinetd.d/mysqlchk

# default: on

# description: mysqlchk

service mysqlchk

{

port = 9200

disable = no

socket_type = stream

protocol = tcp

wait = no

user = root

group = root

groups = yes

server = usr/bin/clustercheck

type = UNLISTED

per_source = UNLIMITED

log_on_success =

log_on_failure = HOST

flags = REUSE

}

4)启动心跳检测服务

# 修改/etc/services,变更tcp9200端口用途,以controller01节点为例

[root@controller01 ~]# vim etc/services

#wap-wsp         9200/tcp                # WAP connectionless session service

mysqlchk        9200/tcp                # mysqlchk

# 启动xinetd服务,以controller01节点为例

[root@controller01 ~]# systemctl daemon-reload

[root@controller01 ~]# systemctl enable xinetd

[root@controller01 ~]# systemctl start xinetd

5)测试心跳检测脚本

# 在全部控制节点验证,以controller01节点为例

[root@controller01 ~]# usr/bin/clustercheck

四.RabbitMQ集群

采用openstack官方的安装方法,在未更新erlang的情况下,rabbitmq不是最新版本。

如果需要部署最新版本rabbitmq集群,可参考:http://cnblogs.com/netonline/p/7678321.html

1. 安装rabbitmq

# 在全部控制节点,使用aliyun的epel镜像,以controller01节点为例

[root@controller01 ~]# wget -O etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

[root@controller01 ~]# yum install erlang rabbitmq-server -y

# 设置开机启动

[root@controller01 ~]# systemctl enable rabbitmq-server.service

2. 构建rabbitmq集群

# 任选1个控制节点首先启动rabbitmq服务,这里选择controller01节点

[root@controller01 ~]# systemctl start rabbitmq-server.service

[root@controller01 ~]# rabbitmqctl cluster_status

# 分发.erlang.cookie

[root@controller01 ~]# scp var/lib/rabbitmq/.erlang.cookie root@172.30.200.32:/var/lib/rabbitmq/

[root@controller01 ~]# scp var/lib/rabbitmq/.erlang.cookie root@172.30.200.33:/var/lib/rabbitmq/

# 修改controller02/03节点.erlang.cookie文件的用户/组,以controller02节点为例

[root@controller02 ~]# chown rabbitmq:rabbitmq var/lib/rabbitmq/.erlang.cookie

# 注意修改全部控制节点.erlang.cookie文件的权限,默认即400权限,可不修改

[root@controller02 ~]# ll var/lib/rabbitmq/.erlang.cookie

# 启动controller02/03节点的rabbitmq服务

[root@controller02 ~]# systemctl start rabbitmq-server

[root@controller03 ~]# systemctl start rabbitmq-server

# 构建集群,controller02/03节点以ram节点的形式加入集群

[root@controller02 ~]# rabbitmqctl stop_app

[root@controller02 ~]# rabbitmqctl join_cluster --ram rabbit@controller01

[root@controller02 ~]# rabbitmqctl start_app

[root@controller03 ~]# rabbitmqctl stop_app

[root@controller03 ~]# rabbitmqctl join_cluster --ram rabbit@controller01

[root@controller03 ~]# rabbitmqctl start_app

# 任意节点可验证集群状态

[root@controller01 ~]# rabbitmqctl cluster_status

3. rabbitmq账号

# 在任意节点新建账号并设置密码,以controller01节点为例

[root@controller01 ~]# rabbitmqctl add_user openstack rabbitmq_pass

# 设置新建账号的状态

[root@controller01 ~]# rabbitmqctl set_user_tags openstack administrator

# 设置新建账号的权限

[root@controller01 ~]# rabbitmqctl set_permissions -p "/" openstack ".*" ".*" ".*"

# 查看账号

[root@controller01 ~]# rabbitmqctl list_users

4. 镜像队列ha

# 设置镜像队列高可用

[root@controller01 ~]# rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'

# 查看镜像队列策略

[root@controller01 ~]# rabbitmqctl list_policies

5. 安装web管理插件

# 在全部控制节点安装web管理插件,以controller01节点为例

[root@controller01 ~]# rabbitmq-plugins enable rabbitmq_management

访问任意节点,如:http://172.30.200.31:15672

五.Memcached集群

Memcached是无状态的,各控制节点独立部署,openstack各服务模块统一调用多个控制节点的memcached服务即可。

采用openstack官方的安装方法,如果需要部署最新版本memcached,可参考:http://cnblogs.com/netonline/p/7805900.html

以下配置以controller01节点为例。

1. 安装memcached

# 在全部控制节点安装memcached

[root@controller01 ~]# yum install memcached python-memcached -y

2. 设置memcached

# 在全部安装memcached服务的节点设置服务监听地址

[root@controller01 ~]# sed -i 's|127.0.0.1,::1|0.0.0.0|g' etc/sysconfig/memcached

3. 开机启动

[root@controller01 ~]# systemctl enable memcached.service

[root@controller01 ~]# systemctl start memcached.service

[root@controller01 ~]# systemctl status memcached.service

六.Pacemaker cluster stack集群

Openstack官网使用开源的pacemaker cluster stack做为集群高可用资源管理软件。

详细介绍:https://docs.openstack.org/ha-guide/controller-ha-pacemaker.html

1. 安装pacemaker

# 在全部控制节点安装相关服务,以controller01节点为例;

# pacemaker:资源管理器(CRM),负责启动与停止服务,位于 HA 集群架构中资源管理、资源代理层

# corosync:消息层组件(Messaging Layer),管理成员关系、消息与仲裁,为高可用环境中提供通讯服务,位于高可用集群架构的底层,为各节点(node)之间提供心跳信息;

# resource-agents:资源代理,在节点上接收CRM的调度,对某一资源进行管理的工具,管理工具通常为脚本;

# pcs:命令行工具集;

# fence-agents:fencing 在一个节点不稳定或无答复时将其关闭,使其不会损坏集群的其它资源,其主要作用是消除脑裂

[root@controller01 ~]# yum install pacemaker pcs corosync fence-agents resource-agents -y

2. 构建集群

# 启动pcs服务,在全部控制节点执行,以controller01节点为例

[root@controller01 ~]# systemctl enable pcsd

[root@controller01 ~]# systemctl start pcsd

# 修改集群管理员hacluster(默认生成)密码,在全部控制节点执行,以controller01节点为例

[root@controller01 ~]# echo pacemaker_pass | passwd --stdin hacluster

# 认证配置在任意节点操作,以controller01节点为例;

# 节点认证,组建集群,需要采用上一步设置的password

[root@controller01 ~]# pcs cluster auth controller01 controller02 controller03 -u hacluster -p pacemaker_pass --force

# 创建并命名集群,在任意节点操作,以controller01节点为例;

# 生成配置文件:/etc/corosync/corosync.conf

[root@controller01 ~]# pcs cluster setup --force --name openstack-cluster-01 controller01 controller02 controller03

3. 启动

# 启动集群,以controller01节点为例

[root@controller01 ~]# pcs cluster start --all

# 设置集群开机启动

[root@controller01 ~]# pcs cluster enable --all

# 查看集群状态,也可使用” crm_mon -1”命令;

# “DC”:Designated Controller;

# 通过”cibadmin --query --scope nodes”可查看节点配置

[root@controller01 ~]# pcs status cluster

# 查看corosync状态;

# “corosync”表示一种底层状态等信息的同步方式

[root@controller01 ~]# pcs status corosync

# 查看节点;

# 或:corosync-cmapctl runtime.totem.pg.mrp.srp.members

[root@controller01 ~]# corosync-cmapctl | grep members

# 查看集群资源

[root@controller01 ~]# pcs resource

或通过web访问任意控制节点:https://172.30.200.31:2224,

账号/密码(即构建集群时生成的密码):hacluster/pacemaker_pass

4. 设置属性

# 在任意控制节点设置属性即可,以controller01节点为例;

# 设置合适的输入处理历史记录及策略引擎生成的错误与警告,在troulbshoot时有用

[root@controller01 ~]# pcs property set pe-warn-series-max=1000 \

pe-input-series-max=1000 \

pe-error-series-max=1000

# pacemaker基于时间驱动的方式进行状态处理,” cluster-recheck-interval”默认定义某些pacemaker操作发生的事件间隔为15min,建议设置为5min或3min

[root@controller01 ~]# pcs property set cluster-recheck-interval=5

# corosync默认启用stonith,但stonith机制(通过ipmi或ssh关闭节点)并没有配置相应的stonith设备(通过“crm_verify -L -V”验证配置是否正确,没有输出即正确),此时pacemaker将拒绝启动任何资源;

# 在生产环境可根据情况灵活调整,验证环境下可关闭

[root@controller01 ~]# pcs property set stonith-enabled=false

# 默认当有半数以上节点在线时,集群认为自己拥有法定人数,是“合法”的,满足公式:total_nodes < 2 * active_nodes;

# 以3个节点的集群计算,当故障2个节点时,集群状态不满足上述公式,此时集群即非法;当集群只有2个节点时,故障1个节点集群即非法,所谓的”双节点集群”就没有意义;

# 在实际生产环境中,做2节点集群,无法仲裁时,可选择忽略;做3节点集群,可根据对集群节点的高可用阀值灵活设置

[root@controller01 ~]# pcs property set no-quorum-policy=ignore

# v2的heartbeat为了支持多节点集群,提供了一种积分策略来控制各个资源在集群中各节点之间的切换策略;通过计算出各节点的的总分数,得分最高者将成为active状态来管理某个(或某组)资源;

# 默认每一个资源的初始分数(取全局参数default-resource-stickiness,通过"pcs property list --all"查看)是0,同时每一个资源在每次失败之后减掉的分数(取全局参数default-resource-failure-stickiness)也是0,此时一个资源不论失败多少次,heartbeat都只是执行restart操作,不会进行节点切换;

# 如果针对某一个资源设置初始分数”resource-stickiness“或"resource-failure-stickiness",则取单独设置的资源分数;

# 一般来说,resource-stickiness的值都是正数,resource-failure-stickiness的值都是负数;有一个特殊值是正无穷大(INFINITY)和负无穷大(-INFINITY),即"永远不切换"与"只要失败必须切换",是用来满足极端规则的简单配置项;

# 如果节点的分数为负,该节点在任何情况下都不会接管资源(冷备节点);如果某节点的分数大于当前运行该资源的节点的分数,heartbeat会做出切换动作,现在运行该资源的节点将释 放资源,分数高出的节点将接管该资源

# pcs property list 只可查看修改后的属性值,参数”--all”可查看含默认值的全部属性值;

# 也可查看/var/lib/pacemaker/cib/cib.xml文件,或”pcs cluster cib”,或“cibadmin --query --scope crm_config”查看属性设置,” cibadmin --query --scope resources”查看资源配置

[root@controller01 ~]# pcs property list

5. 配置vip

# 在任意控制节点设置vip(resource_id属性)即可,命名即为“vip”;

# ocf(standard属性):资源代理(resource agent)的一种,另有systemd,lsb,service等;

# heartbeat:资源脚本的提供者(provider属性),ocf规范允许多个供应商提供同一资源代理,大多数ocf规范提供的资源代理都使用heartbeat作为provider;

# IPaddr2:资源代理的名称(type属性),IPaddr2便是资源的type;

# 通过定义资源属性(standard:provider:type),定位”vip”资源对应的ra脚本位置;

# centos系统中,符合ocf规范的ra脚本位于/usr/lib/ocf/resource.d/目录,目录下存放了全部的provider,每个provider目录下有多个type;

# op:表示Operations

[root@controller01 ~]# pcs resource create vip ocf:heartbeat:IPaddr2 ip=172.30.200.30 cidr_netmask=24 op monitor interval=30s

# 查看集群资源

[root@controller01 ~]# pcs resourceprpr

# 通过”pcs resouce”查询,vip资源在controller01节点;

# 通过”ip a show”可查看vip

[root@controller01 ~]# ip a show eth0

6. High availability management

通过web访问任意控制节点:https://172.30.200.31:2224

账号/密码(即构建集群时生成的密码):hacluster/pacemaker_pass

虽然以cli的方式设置了集群,但web界面默认并不显示,手动添加集群;实际操作只需要添加已组建集群的任意节点即可,如下:

# 如果api区分admin/internal/public接口,对客户端只开放public接口,通常设置两个vip,如命名为:vip_management与vip_public;

# 建议是将vip_management与vip_public约束在1个节点

# [root@controller01 ~]# pcs constraint colocation add vip_management with vip_public

七.Haproxy

1. 安装haproxy

# 在全部控制节点安装haproxy,以controller01节点为例;

# 如果需要安装最新版本,可参考:http://cnblogs.com/netonline/p/7593762.html

[root@controller01 ~]# yum install haproxy -y

2. 配置haproxy.cfg

# 在全部控制节点配置haproxy.cfg,以controller01节点为例;

# haproxy依靠rsyslog输出日志,是否输出日志根据实际情况设定;

# 备份原haproxy.cfg文件

[root@controller01 ~]# cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak

# 集群的haproxy文件,涉及服务较多,这里针对涉及到的openstack服务,一次性设置完成,如下:

[root@controller01 ~]# grep -v ^# /etc/haproxy/haproxy.cfg

global

chroot  /var/lib/haproxy

daemon

group  haproxy

user  haproxy

maxconn  4000

pidfile  /var/run/haproxy.pid

defaults

log  global

maxconn  4000

option  redispatch

retries  3

timeout  http-request 10s

timeout  queue 1m

timeout  connect 10s

timeout  client 1m

timeout  server 1m

timeout  check 10s

# haproxy监控页

listen stats

bind 0.0.0.0:1080

mode http

stats enable

stats uri /

stats realm OpenStack\ Haproxy

stats auth admin:admin

stats  refresh 30s

stats  show-node

stats  show-legends

stats  hide-version

# horizon服务

listen dashboard_cluster

bind 172.30.200.30:80

balance  source

option  tcpka

option  httpchk

option  tcplog

server controller01 172.30.200.31:80 check inter 2000 rise 2 fall 5

server controller02 172.30.200.32:80 check inter 2000 rise 2 fall 5

server controller03 172.30.200.33:80 check inter 2000 rise 2 fall 5

# mariadb服务;

# 设置controller01节点为master,controller02/03节点为backup,一主多备的架构可规避数据不一致性;

# 另外官方示例为检测9200(心跳)端口,测试在mariadb服务宕机的情况下,虽然”/usr/bin/clustercheck”脚本已探测不到服务,但受xinetd控制的9200端口依然正常,导致haproxy始终将请求转发到mariadb服务宕机的节点,暂时修改为监听3306端口

listen galera_cluster

bind 172.30.200.30:3306

balance  source

mode    tcp

server controller01 172.30.200.31:3306 check inter 2000 rise 2 fall 5

server controller02 172.30.200.32:3306 backup check inter 2000 rise 2 fall 5

server controller03 172.30.200.33:3306 backup check inter 2000 rise 2 fall 5

# 为rabbirmq提供ha集群访问端口,供openstack各服务访问;

# 如果openstack各服务直接连接rabbitmq集群,这里可不设置rabbitmq的负载均衡

listen rabbitmq_cluster

bind 172.30.200.30:5673

mode tcp

option tcpka

balance roundrobin

timeout client  3h

timeout server  3h

option  clitcpka

server controller01 172.30.200.31:5672 check inter 10s rise 2 fall 5

server controller02 172.30.200.32:5672 check inter 10s rise 2 fall 5

server controller03 172.30.200.33:5672 check inter 10s rise 2 fall 5

# glance_api服务

listen glance_api_cluster

bind 172.30.200.30:9292

balance  source

option  tcpka

option  httpchk

option  tcplog

server controller01 172.30.200.31:9292 check inter 2000 rise 2 fall 5

server controller02 172.30.200.32:9292 check inter 2000 rise 2 fall 5

server controller03 172.30.200.33:9292 check inter 2000 rise 2 fall 5

# glance_registry服务

listen glance_registry_cluster

bind 172.30.200.30:9191

balance  source

option  tcpka

option  tcplog

server controller01 172.30.200.31:9191 check inter 2000 rise 2 fall 5

server controller02 172.30.200.32:9191 check inter 2000 rise 2 fall 5

server controller03 172.30.200.33:9191 check inter 2000 rise 2 fall 5

# keystone_admin_internal_api服务

listen keystone_admin_cluster

bind 172.30.200.30:35357

balance  source

option  tcpka

option  httpchk

option  tcplog

server controller01 172.30.200.31:35357 check inter 2000 rise 2 fall 5

server controller02 172.30.200.32:35357 check inter 2000 rise 2 fall 5

server controller03 172.30.200.33:35357 check inter 2000 rise 2 fall 5

# keystone_public _api服务

listen keystone_public_cluster

bind 172.30.200.30:5000

balance  source

option  tcpka

option  httpchk

option  tcplog

server controller01 172.30.200.31:5000 check inter 2000 rise 2 fall 5

server controller02 172.30.200.32:5000 check inter 2000 rise 2 fall 5

server controller03 172.30.200.33:5000 check inter 2000 rise 2 fall 5

# 兼容aws ec2-api

listen nova_ec2_api_cluster

bind 172.30.200.30:8773

balance  source

option  tcpka

option  tcplog

server controller01 172.30.200.31:8773 check inter 2000 rise 2 fall 5

server controller02 172.30.200.32:8773 check inter 2000 rise 2 fall 5

server controller03 172.30.200.33:8773 check inter 2000 rise 2 fall 5

listen nova_compute_api_cluster

bind 172.30.200.30:8774

balance  source

option  tcpka

option  httpchk

option  tcplog

server controller01 172.30.200.31:8774 check inter 2000 rise 2 fall 5

server controller02 172.30.200.32:8774 check inter 2000 rise 2 fall 5

server controller03 172.30.200.33:8774 check inter 2000 rise 2 fall 5

listen nova_placement_cluster

bind 172.30.200.30:8778

balance  source

option  tcpka

option  tcplog

server controller01 172.30.200.31:8778 check inter 2000 rise 2 fall 5

server controller02 172.30.200.32:8778 check inter 2000 rise 2 fall 5

server controller03 172.30.200.33:8778 check inter 2000 rise 2 fall 5

listen nova_metadata_api_cluster

bind 172.30.200.30:8775

balance  source

option  tcpka

option  tcplog

server controller01 172.30.200.31:8775 check inter 2000 rise 2 fall 5

server controller02 172.30.200.32:8775 check inter 2000 rise 2 fall 5

server controller03 172.30.200.33:8775 check inter 2000 rise 2 fall 5

listen nova_vncproxy_cluster

bind 172.30.200.30:6080

balance  source

option  tcpka

option  tcplog

server controller01 172.30.200.31:6080 check inter 2000 rise 2 fall 5

server controller02 172.30.200.32:6080 check inter 2000 rise 2 fall 5

server controller03 172.30.200.33:6080 check inter 2000 rise 2 fall 5

listen neutron_api_cluster

bind 172.30.200.30:9696

balance  source

option  tcpka

option  httpchk

option  tcplog

server controller01 172.30.200.31:9696 check inter 2000 rise 2 fall 5

server controller02 172.30.200.32:9696 check inter 2000 rise 2 fall 5

server controller03 172.30.200.33:9696 check inter 2000 rise 2 fall 5

listen cinder_api_cluster

bind 172.30.200.30:8776

balance  source

option  tcpka

option  httpchk

option  tcplog

server controller01 172.30.200.31:8776 check inter 2000 rise 2 fall 5

server controller02 172.30.200.32:8776 check inter 2000 rise 2 fall 5

server controller03 172.30.200.33:8776 check inter 2000 rise 2 fall 5

3. 配置内核参数

# 全部控制节点修改内核参数,以controller01节点为例;

# net.ipv4.ip_nonlocal_bind:是否允许no-local ip绑定,关系到haproxy实例与vip能否绑定并切换;

# net.ipv4.ip_forward:是否允许转发

[root@controller01 ~]# echo "net.ipv4.ip_nonlocal_bind = 1" >>/etc/sysctl.conf

[root@controller01 ~]# echo "net.ipv4.ip_forward = 1" >>/etc/sysctl.conf

[root@controller01 ~]# sysctl -p

4. 启动

# 开机启动是否设置可自行选择,利用pacemaker设置haproxy相关资源后,pacemaker可控制各节点haproxy服务是否启动

# [root@controller01 ~]# systemctl enable haproxy

[root@controller01 ~]# systemctl restart haproxy

[root@controller01 ~]# systemctl status haproxy

访问:http://172.30.200.30:1080/

5. 设置pcs资源

# 任意控制节点操作即可,以controller01节点为例;

# 添加资源lb-haproxy-clone

[root@controller01 ~]# pcs resource create lb-haproxy systemd:haproxy --clone

[root@controller01 ~]# pcs resource

# 设置资源启动顺序,先vip再lb-haproxy-clone;

# 通过“cibadmin --query --scope constraints”可查看资源约束配置

[root@controller01 ~]# pcs constraint order start vip then lb-haproxy-clone kind=Optional

# 官方建议设置vip运行在haproxy active的节点,通过绑定lb-haproxy-clone与vip服务,将两种资源约束在1个节点;

# 约束后,从资源角度看,其余暂时没有获得vip的节点的haproxy会被pcs关闭

[root@controller01 ~]# pcs constraint colocation add lb-haproxy-clone with vip

[root@controller01 ~]# pcs resource

通过high availability management查看资源相关的设置,如下:

至此高可用组件全部部署完毕。

以下部署按照OpenStack单节点组件部署即可,这里不再详述。

上一篇:飞速成功案例 | 低代码重构新零售系统,效率提高近8倍
下一篇:Grep 高效用法实战总结 - 运维笔记
相关文章

 发表评论

暂时没有评论,来抢沙发吧~