pacemaker+haproxy+openstack+rocky

第一章 环境准配

本章节是对基础环境进行配置,所有的节点都需要操作,包括控制节点、计算节点、网络节点、存储节点。

一、环境需求

主机名 ip 网卡 磁盘
controller01 10.10.27.71 ens192/ens224
controller02 10.10.27.72 ens192/ens224
controller03 10.10.27.73 ens192/ens224
compute1 10.10.27.74 ens192/ens224
storage1 10.10.27.75 ens192/ens224
storage2 10.10.27.76 ens192/ens224
storage3 10.10.27.77 ens192/ens224
controller 10.10.27.78

二、配置网卡

1.配置ens192

ens192配置的是管理网络,集群中所有的管理网络都应该在同一个网段,一般情况下管理网卡上方都会接在交换机的access口,但是也有人会将ens192这张网卡接在交换机的trunk口,这样就需要配置vlan_id了,可参考文章OpenStack文件下网络规划OpenStack网络规划的文章,这里是由KVM虚拟机部署的,因此不考虑服务器和交换机的连接。

此网卡一般会配置成静态网络,配置相应的ip地址,下面列出了需要修改项,其他的默认参数保留。

BOOTPROTO=static
ONBOOT=yes
IPADDR=10.10.27.71
NETMASK=255.255.255.0
GATEWAY=10.10.27.1
DNS1=10.10.27.1

2.配置ens224

ens224是业务网络,一般情况下会将这块网卡接到交换机的trunk口,这是由于业务网络可能会有多个网段,接在交换机的access口也是可以的,但是一个交换机的access口有限,为了充分利用交换机资源,避免浪费,因此将服务区的这块网口接到交换机的trunk口,这样在配置ens224这块网卡时,就需要配置vlan_id,此操作可参考文章OpenStack文件下网络规划OpenStack网络规划的文章,这里是由KVM虚拟机部署的,因此不考虑服务器和交换机的连接。

三、设置主机名

主机名按照环境需求中的定义的主机名去修改,主机名可以直接修改配置文件也可以使用命令行去修改,修改完后重启或使用bash命令生效。NODE_NAME为不同的主机名。

# hostnamectl set-hostname NODE_NAME

四、配置hosts

# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
10.10.27.78 controller
10.10.27.71 controller01
10.10.27.72 controller02
10.10.27.73 controller03
10.10.27.74 compute1
10.10.27.75 storage01
10.10.27.76 storage02
10.10.27.77 storage03

五、关闭firewalld

# systemctl stop firewalld
# systemctl disable firewalld

六、关闭selinux

# setenforce 0
# cat /etc/selinux/config 

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected. 
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted 

七、关闭NetworkManage

# systemctl stop NetworkManager
# systemctl disable NetworkManager

八、替换centos7源

centos源默认是官方的源,官方的源下载的速度比较慢,因此可以将centos7的自带源修改为ali源,这样下载速度会增强。阿里源https://developer.aliyun.com/mirror/

# cd /etc/yum.repos.d/
# mkdir _bak
# mv * _bak/
# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  2523  100  2523    0     0    441      0  0:00:05  0:00:05 --:--:--   600

yum clean all
yum makecache

九、配置chrony

# yum install chrony -y
# cat /etc/chrony.conf | grep -v ^$ | grep -v ^#
server cn.pool.ntp.org iburst
allow 10.10.27.0/24
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
local stratum 10
logdir /var/log/chrony

# systemctl enable chronyd
# systemctl start chronyd
# chronyc sources

第二章 安装Ceph

本章节所有的内容都在Ceph节点上执行,Ceph的安装我们使用ceph-deploy工具安装,这个工具需要一个部署节点,我们将storage01当作部署节点,storage01、storage02和storage03部署mon服务。

一、配置ceph源

# cat /etc/yum.repos.d/ceph.repo
[ceph]
name=Ceph packages for $basearch
baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/$basearch
enabled=1
gpgcheck=1
priority=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc

[ceph-noarch]
name=Ceph noarch packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/noarch
enabled=1
gpgcheck=1
priority=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc

[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/SRPMS
enabled=0
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
priority=1

# yum clean all
# yum makecache

二、配置免密服务

#ssh-keygen
#ssh-copy-id root@storage01
#ssh-copy-id root@storage02
#ssh-copy-id root@storage03

三、安装cep-deploy工具

# yum -y remove epel-release
# yum install ceph-deploy -y

四、部署MON服务

1.创建文件目录

此目录是Ceph的部署目录,后续的操作都可以在此目录下完成。

# mkdir /root/my-cluster
# cd /root/my-cluster

2.创建集群

如果在在部署过程中遇到某些问题想要从头再来,可以使用以下命令进行配置清除,此清除命令不会清除Ceph的安装包。

#ceph-deploy purgedata {ceph-node} [{ceph-node}]
#ceph-deploy forgetkeys

如果想要将安装包一起清除,则使用以下命令。

#ceph-deploy purge {ceph-node} [{ceph-node}]

进入到管理目录,执行以下命令创建集群。

#ceph-deploy new {initial-monitor-node(s)}
#例如:
# ceph-deploy new storage01

创建集群后,部署路径下生成三个文件,ceph.conf是Ceph的配置文件,ceph-deploy-ceph.log是Ceph的日志文件,ceph.mon.keyring是Ceph的MON的认证文件。

[root@storage01 my-cluster]# ls
ceph.conf  ceph-deploy-ceph.log  ceph.mon.keyring

3.修改配置文件

[root@storage01 my-cluster]# cat ceph.conf 
[global]
fsid = 5163b8bf-44a0-4043-b615-0b234cb87e94
mon_initial_members = storage01 #MON节点配置
mon_host = 10.10.27.75 #MON节点配置
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx

public network =192.168.31.0/23 #外部访问集群的网络
cluster network =192.168.31.0/23 #集群内部网络
#默认osd pool的数量,此配置要和用于做存储的磁盘数量一致
osd pool default size = 3
rbd_default_format = 2
#设置monitor之间的时差,默认为0.5
mon clock drift allowed = 2
mon clock drift warn backoff = 30

[osd]
osd data = /var/lib/ceph/osd/ceph-$id

4.安装Ceph服务

调用ceph-deploy install命令会在每个节点上都安装相应的包,主要的包包括epel-release、yum-plugin-priorities、ceph ceph-radosgw等模块,也会安装一些依赖的模块ceph-mon、ceph-mds、ceph-osd、ceph-mgr等模块。

#ceph-deploy install {ceph-node} [{ceph-node} ...]
例如:
# ceph-deploy install storage01 storage02 storage03

5.初始化monitor

# ceph-deploy mon create-initial

6.赋予所有mon节点管理员权限

[root@storage01 my-cluster]# ceph-deploy admin storage01 storage02 storage03
[root@storage01 my-cluster]# ceph -s
  cluster:
    id:     5163b8bf-44a0-4043-b615-0b234cb87e94
    health: HEALTH_OK
 
  services:
    mon: 1 daemons, quorum ceph01
    mgr: no daemons active
    osd: 0 osds: 0 up, 0 in
 
  data:
    pools:   0 pools, 0 pgs
    objects: 0 objects, 0B
    usage:   0B used, 0B / 0B avail
    pgs:     

五、部署mgr服务

由于OSD磁盘没有被创建,而配置文件中的配置的OSD的默认数是3个,因此集群的状态是HEALTH_WARN。

# ceph-deploy mgr create storage01
[root@storage01 my-cluster]# ceph -s
  cluster:
    id:     5163b8bf-44a0-4043-b615-0b234cb87e94
    health: HEALTH_OK
 
  services:
    mon: 1 daemons, quorum ceph01
    mgr: ceph01(active)
    osd: 0 osds: 0 up, 0 in
 
  data:
    pools:   0 pools, 0 pgs
    objects: 0 objects, 0B
    usage:   0B used, 0B / 0B avail
    pgs:     
 

六、部署osd服务

1.擦除磁盘

在部署osd服务时要指定一块磁盘,因此需要先对这块磁盘进行格式化,即对磁盘的内容进行擦除。

#擦除磁盘
# ceph-deploy disk zap storage01 /dev/sdb
# ceph-deploy disk zap storage02 /dev/sdb
# ceph-deploy disk zap storage03 /dev/sdb

2.部署osd服务

# ceph-deploy osd create --data /dev/sdb storage01
# ceph-deploy osd create --data /dev/sdb storage02
# ceph-deploy osd create --data /dev/sdb storage03

#查看状态
# ceph -s
  cluster:
    id:     5163b8bf-44a0-4043-b615-0b234cb87e94
    health: HEALTH_OK
 
  services:
    mon: 1 daemons, quorum ceph01
    mgr: ceph01(active)
    osd: 3 osds: 3 up, 3 in
 
  data:
    pools:   0 pools, 0 pgs
    objects: 0 objects, 0B
    usage:   3.01GiB used, 477GiB / 480GiB avail
    pgs:     

七、集群扩展

集群的mon是负责监控整个集群的状态,一般它为基数个,如果只有一个,当这个集群挂了之后就会出现单点故障。

1.同步配置文件

mon节点在配置文件中进行了配置,如果想要拓展mon节点,则需要在ceph.conf文件中修改,修改完成后将配置文件同步到所有的存储节点。

[root@storage01 my-cluster]# ceph-deploy --overwrite-conf admin storage01 storage02 storage03

2. 扩展mon

[root@storage01 my-cluster]# ceph-deploy mon add storage02
[root@storage01 my-cluster]# ceph-deploy mon add storage03

3. 扩展mgr

[root@storage01 my-cluster]# ceph-deploy mgr create storage02 storage03

八、配置ceph客户端

ceph客户端的意思是说在需要操作ceph的OpenStack节点安装ceph工具,然后让这些客户端获取admin权限,这样就能从其他的OpenStack节点操作ceph了。

1.免密配置

#ssh-copy-id root@controller01
#ssh-copy-id root@controller02
#ssh-copy-id root@controller03
#ssh-copy-id root@compute1

2.安装ceph

[root@storage01 my-cluster]# ceph-deploy install controller01 controller02 controller03 compute1

3.设置admin权限

[root@storage01 my-cluster]# ceph-deploy admin controller01 controller02 controller03 compute1

九、创建地址池

# ceph osd pool create vms 64
# ceph osd pool create images 16
# ceph osd pool create volumes 32
# ceph osd pool create backups 16
# ceph osd pool create gnocchi 8

# rbd pool init volumes
# rbd pool init images
# rbd pool init backups
# rbd pool init vms
# rbd pool init gnocchi

十、创建ceph用户

Ceph若开启了用户认证,则需要创建用户并给用户设定操作mon、osd的权限。

#创建cinder用户
# ceph auth get-or-create client.cinder mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=volumes, allow rwx pool=vms, allow rx pool=images'
#创建glance用户
# ceph auth get-or-create client.glance mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=images'
#创建cinder-backup用户
ceph auth get-or-create client.cinder-backup mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=backups'
#创建gnocchi用户
ceph auth get-or-create client.gnocchi mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=gnocchi'

#查看已有用户和权限
# ceph auth list

第三章 OpenStack环境基础配置

除了三小节之外,其他的在所有OpenStack节点上执行,三小节免密登录是为了方便拷贝已经配置好的配置文件到其他节点,这样省事。

一、配置OpenStack源

# yum install centos-release-openstack-rocky -y
# yum upgrade -y

二、安装OpenStack命令行

# yum install python-openstackclient openstack-selinux -y

三、控制节点做免密

# ssh-keygen 
# ssh-copy-id root@controller02
# ssh-copy-id root@controller03

第四章 数据库HA

一、安装mariadb和galera

此小节中的内容在所有控制节点上执行,如果数据库集群不和控制节点在一起,则只在所有的数据库服务器上执行。

1.安装包

# yum install mariadb mariadb-server python2-PyMySQL galera mariadb-server-galera -y
# systemctl enable mariadb.service

2.配置mariadb-server.cnf

* default-storage-engine:指定数据库引擎
* wsrep_provider:指定ganera库的路径
* wsrep_cluster_address:#Galera集群中各节点地址。gcomm:// [地址使用组通信协议]。
* wsrep_node_address:#本节点在Galera集群中的通信地址,也是本机ip地址
* wsrep_node_name:#本节点在Galera集群中的通信名称,可自定义。

值得注意的是,在其他节点上wsrep_node_address、wsrep_node_name参数需要修改,其他的皆可保持不变。

[root@controller01 ~]# cat /etc/my.cnf.d/mariadb-server.cnf | grep -v ^# | grep -v ^$
[server]
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
max_connections = 4096
net_write_timeout= 900
net_read_timeout= 120
default-storage-engine = innodb
innodb_file_per_table = on
collation-server = utf8_general_ci
character-set-server = utf8

[galera]
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_address="gcomm://10.10.27.71,10.10.27.72,10.10.27.73"
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
wsrep_node_address="10.10.27.73"
wsrep_cluster_name="galeracluster11"
wsrep_node_name="galera1"
[embedded]
[mariadb]
[mariadb-10.1]

3.优化mariadb

修改mariadb启动文件,在启动文件中的[Service]配置组中增加以下参数,这样可以提高数据库的连接数。

LimitNOFILE=65535
LimitNPROC=65535

# systemctl --system daemon-reload

二、启动服务

启动集群和初始化数据库密码必须在同一节点上执行。

1.启动集群

# galera_new_cluster

2.初始化数据库密码

# mysql_secure_installation

3.启动数据库
启动数据库时,要注意启动时执行步骤1和步骤2的节点不用启动,依次启动其他的节点即可。

# systemctl start mariadb

4.验证集群

# mysql -uroot -p -e"show status like 'wsrep_cluster_size';"
Enter password: 
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| wsrep_cluster_size | 3     |
+--------------------+-------+
# mysql -uroot -p -e"show status like 'wsrep_incoming_addresses';"
Enter password: 
+--------------------------+----------------------------------------------------------+
| Variable_name            | Value                                                    |
+--------------------------+----------------------------------------------------------+
| wsrep_incoming_addresses | 10.10.27.72:3306,10.10.27.73:3306,10.10.27.71:3306 |
+--------------------------+----------------------------------------------------------+

三、故障处理

若因为断点导致数据库同时掉线,且无法正常启动时,在主节点01上执行以下命令。

# cat /var/lib/mysql/grastate.dat
# sed -i "/safe_to_bootstrap/s/0/1/" /var/lib/mysql/grastate.dat
# galera_new_cluster

等到主节点01起来之后,在依次启动其他的节点即可。

# systemctl start mariadb

四、配置远程登录

# mysql -uroot -p

grant all privileges  on *.* to root@'%' identified by '1q2w3e4r';
flush privileges;
set global net_read_timeout = 120;
set global net_write_timeout = 900;

第五章 rabbitmq HA

一、安装rabbitmq

rabbitmq这个包需要在所有的rabbitmq节点部署。

1.安装包

# yum install erlang rabbitmq-server -y
# systemctl enable rabbitmq-server.service

2.优化rabbitmq

在rabbitmq的启动服务文件的[Service]配置组中增加以下参数,这样可以让更多的用户能够连接到rabbbitmq。

LimitNOFILE=65535
# vi /usr/lib/systemd/system/rabbitmq-server.service 
# systemctl daemon-reload

二、认证

将节点01当做主节点,将erlang.cookie拷贝到其他的节点,这样的认证有助于它们的内部通信。认证完成后启动其他节点的rabbitmq。

1.认证

# systemctl start rabbitmq-server.service
查看集群状态
# rabbitmqctl cluster_status
# scp /var/lib/rabbitmq/.erlang.cookie root@controller02:/var/lib/rabbitmq/.erlang.cookie
.erlang.cookie                                                                                                               100%   20    36.0KB/s   00:00    
# scp /var/lib/rabbitmq/.erlang.cookie root@controller03:/var/lib/rabbitmq/.erlang.cookie
.erlang.cookie                                                                                                               100%   20    35.8KB/s   00:00     

2.启动其他节点rabbitmq

# chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie
# chmod 400 /var/lib/rabbitmq/.erlang.cookie
# systemctl start rabbitmq-server.service
# rabbitmqctl cluster_status

三、添加集群到主节点

我们通过rabbitmqctl cluster_status命令在每个节点上看到的都是每个节点的集群运行状态,我们要将其他节点的rabbitmq集群添加到节点01(主节点)的集群中,在主节点01之外的其他节点依次执行以下命令。

#停止集群
# rabbitmqctl stop_app
#添加集群到主节点
# rabbitmqctl join_cluster --ram rabbit@controller01
#启动集群
# rabbitmqctl start_app
# rabbitmqctl cluster_status
Cluster status of node rabbit@controller03
[{
   nodes,[{
   disc,[rabbit@controller01]},
         {
   ram,[rabbit@controller03,rabbit@controller02]}]},
 {
   running_nodes,[rabbit@controller02,rabbit@controller01,rabbit@controller03]},
 {
   cluster_name,<<"rabbit@controller01">>},
 {
   partitions,[]},
 {
   alarms,[{
   rabbit@controller02,[]},
          {
   rabbit@controller01,[]},
          {
   rabbit@controller03,[]}]}]

四、创建用户

本小节的内容在任意rabbitmq节点执行即可。

1.创建用户

#创建用户
# rabbitmqctl add_user openstack 1q2w3e4r
#为用户设置权限
# rabbitmqctl set_permissions openstack ".*" ".*" ".*"
#查看用户列表
# rabbitmqctl list_users

2.设置镜像队列高可用

# rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
# rabbitmqctl list_policies

五、开启rabbit web管理插件

本小节内容需要在所有的rabbitmq节点执行,这样做是为了开启rabbitmq的web管理界面,它对应的端口是15672。

# rabbitmq-plugins enable rabbitmq_management
web 访问http://ip:15672 guest guest

第六章 memcached

memcached服务在各节点独立部署,openstack各个服务模块统一调用多个控制节点的memcached服务。本章节在所有控制节点执行。

# yum install memcached python-memcached -y
 
# sed -i 's|127.0.0.1,::1|0.0.0.0|g' /etc/sysconfig/memcached
# systemctl enable memcached.service
# systemctl start memcached.service

第七章 pacemarker+haproxy

一、pacemarker

1.安装pacemarker包

所有的控制节点都需要安装pacemarker的包。

# yum install pacemaker pcs corosync fence-agents resource-agents -y
# systemctl enable pcsd
# systemctl start pcsd

2.修改集群管理员密码

集群默认的管理员为hacluster,由于我们在每台控制节点上都安装了placemarker集群,因此需要在所有控制节点上执行以下命令。

# echo 1q2w3e4r | passwd --stdin hacluster

3.认证配置节点

认证配置节点,是让集群管理员hacluster能够操作集群的节点,此操作可以在任意控制节点执行。

# pcs cluster auth controller01 controller02 controller03 -u hacluster -p 1q2w3e4r --force

4.创建pacemarker集群

pacemarker集群可以在任意控制节点创建,创建命令如下:

# pcs cluster setup --force --name openstack-cluster-01 controller01 controller02 controller03
# pcs cluster start --all
# pcs cluster enable --all

5.设置集群属性

此操作可以在任意控制节点操作。

# pcs property set pe-warn-series-max=1000 pe-input-series-max=1000 pe-error-series-max=1000
# pcs property set cluster-recheck-interval=5
# pcs property set stonith-enabled=false
# pcs property list

6.设置vip

在任意控制节点操作即可,vip是指对外暴露的ip地址,所有的请求都是通过vip接收,然后通过haroxy发送到相应的节点处理。其中ip和nic参数根据实际情况修改。

# pcs resource create vip ocf:heartbeat:IPaddr2 ip=10.10.27.78 cidr_netmask=24 nic=ens192 op monitor interval=30s

7.集群相关的操作

# 查看集群状态
# pcs status cluster
# 查看corosync状态;
# pcs status corosync
# 查看集群资源,即查看vip在哪台节点上
# pcs resource
web访问https://ip:2224 hacluster 1q2w3e4r

二、haproxy

本小节中1-7在所有控制节点执行。

1.安装haproxy

# yum install haproxy -y

2.系统配置

# cat /etc/sysctl.conf | grep -v ^# | grep -v ^$
net.ipv4.ip_nonlocal_bind =1
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv6.conf.all.forwarding=1

# sysctl -p

3.haproxy基础配置

# cat /etc/haproxy/haproxy.cfg
global
  log 127.0.0.1 local0
  log 127.0.0.1 local1 notice
  chroot  /var/lib/haproxy
  daemon
  group  haproxy
  maxconn  4000
  pidfile  /var/run/haproxy.pid
  user  haproxy

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

listen stats
  bind 0.0.0.0:1080
  log 127.0.0.1 local0 err
  maxconn 10    
  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
  stats admin if TRUE  

4.配置mariadb监控页

mariadb监控页的配置可采用source模式,这样可以有效的避免数据的不一致行。

#路径: /etc/haproxy/haproxy.cfg
listen galera_cluster
  bind 10.10.27.78:33060
  balance  source
  mode    tcp
  option httpchk
  server controller01 10.10.27.71:3306  inter 5000 fastinter 2000 rise 2 fall 2
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值