corosync和pacemaker高可用mariadb和haproxy

简介:

     高可用的解决方案keepalived只是提供了最简单的高可用功能,真正高级的功能keepalived很难完成。openAIS规范提供完善的解决方案,但是很重量级很多功能考虑的很全面、很细致,了解这些我们才可以更加深入的理解高可用的完整的体系,当遇到特殊的高可用场景我们必须使用这些方案才可以解决。

OpenAIS规范的解决方案

     这个规范一直迭代到今天,形成的完整的体系如图1.1

spacer.gifwKioL1ikY8rg4cZ1AAA20crbbzo909.png

图1.1

     既然多个主机要组成一个集群,那么就要有一个软件帮助多个主机间实现心跳信息通告,这个实现通告的在OpenAIS规范中被定义为message layer。

     整个集群的服务管理需要一个软件,被规范定义为cluster resource manager集群资源管理。这只是集群资源管理,但是真正到执行操作的时候需要一个可以管理主机服务的接口,这个接口软件被规范定义为location resource manager本地资源管理。这一层才是真正执行操作的,产生这一层的原因基本上所有的服务设计时都没考虑被高可用,但是我们有需要操控这些服务只好制造一个可以调用其他服务器的管理层。

     message layer常用组件有:heartbeatv1,2,3,corosync(suse研发),cman(redhat)

     cluster resource manager常用组件有:pacemaker(Redhat),heartbeatv1,2

     管理接口常用组件:crmsh(suse),pcs(Redhat)

     网页管理接口:hawk, LCMC, pacemaker-mgmt

    

centos6还有RHCS

     

高级功能

之所以说keepalived的功能简单是因为以下这些

quorum投票功能

法定票数(大于总票数的一半也可以设定不用大于一半) ,用来判定集群分裂的场景中,某些节点是否可以继续以集群方式运行;

当偶数个机器组成的机器分裂,投票可以借助仲裁设备:

ping node

ping node group

quorum disk: qdisk 

without quorum之时,如何采取对资源管控的策略:

                stopped

                ignore

                freeze

                suicide

资源隔离机制

当计算机故障,防止服务抖动和或者防止同时向共享存储写数据导致存储破坏

     节点级别:STONITH

电源交换机

服务硬件管理模块

虚拟化软件关闭虚拟机

     资源级别:

          共享存储器禁止写数据

资源粘性

资源倾向于留在当前的分数(-oo, +oo)

资源约束

          位置约束:资源对某节点运行的倾向性(-oo, +oo)

                    inf: 正无穷

                    -inf: 负无穷

                    n:

                    -n:

          排列约束:定义资源彼此间的倾向性(是否在一起)

                    inf:

                    -inf:

                    n, -n

          顺序约束:属于同一服务的多个资源运行在同一节点时,其启动及关闭的次序约束;

                    A --> B --> C

                    C --> B --> A

资源组组:组内资源将会组内顺序启动和关闭

RA

resource Agent真正管理service的工具

     大致有一下分类lsb,ocf,service,stonith,systemd

     由于资源可以这样灵活的组合配置,那么我们可以打造一个极端的应用场景,五台计算机提供四种不同的服务,我们把五台计算机直接组成一个集群,根据资源粘性把四个服务分布运行在不同的计算机上,然后留一台计算机做给其他四个计算机做backup。不仅如此,当五台计算机中两台计算机宕机,我们可以让四种服务运行在三台计算机之上。

corosync和pacemaker

实践

     目前有两个比较常用的配置接口一个是crmsh一个pcs,这里我首先使用crmsh构建一个mariadb高可用集群,然后使用pcs构建一个haproxy集群,这里都使用双节点。如图1.2

spacer.gifwKiom1ikY92Aah95AABBlT0-uag504.png

图1.2

     如图vip172.16.29.11在两个node间流转

准备配置

node1的配置

1
2
3
#下载crmsh的yum源的配置文件,以为crmsh没有被被收录到源中
wget http: //download .opensuse.org /repositories/network : /ha-clustering : /Stable/CentOS_CentOS-7/network :ha-clustering:Stable.repo -P  /etc/yum .repos.d/
yum  install  pacemaker crmsh mariadb-server haproxy pcs -y
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
vim  /etc/corosync/corosync .conf
#配置文件事例
totem {
     version: 2
     crypto_cipher: aes256
     crypto_hash: sha1
     interface {
         ringnumber: 0
#集群主机所在的网段
         bindnetaddr: 172.16.0.0
#多播地址
         mcastaddr: 239.255.101.99
         mcastport: 5405
         ttl: 1
     }
}
logging {
     fileline: off
     to_stderr: no
     to_logfile:  yes
     logfile:  /var/log/cluster/corosync .log
     to_syslog: no
     debug: off
     timestamp: on
     logger_subsys {
         subsys: QUORUM
         debug: off
     }
}
quorum {
     provider: corosync_votequorum
}
#配置组成集群的两个主机
nodelist {
     node {
         ring0_addr: 172.16.29.10
         nodeid: 1
     }
     node {
         ring0_addr: 172.16.29.20
         nodeid: 2
     }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#使用这个命令生成corosync通信的秘钥
corosync-keygen
vim  /etc/hosts
#添加域名解析
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
172.16.29.10 node1.org node1
172.16.29.20 node2.org node2
#主机间使用秘钥通信
ssh -keygen -t rsa  #这个命令一路按回车就可以了
ssh -copy- id  -i . ssh /id_rsa .pub node2
#复制配置文件到node2,这一步需要在node2安装pacemaker后执行
scp  -p authkey corosync.conf node2: /etc/corosync/
scp  /etc/hosts  node2: /etc/
1
2
3
4
5
6
7
8
9
10
#开启服务,并授权用户登录,创建数据库jim
systemctl start mariadb.service
mysql <<eof
grant all on *.* to  'tom' @ '172.16.%.%'  identified by  '12345' ;
create database jim;
eof
#设置mariadb开机启动,这一项是pacemaker控制systemd管理的服务根本
systemctl  enable  mariadb.service
#启动服务
systemctl start pacemaker.service corosync.service

node2的配置

1
2
3
4
5
6
7
8
9
10
11
12
13
#下载crmsh的yum源的配置文件,以为crmsh没有被被收录到源中
wget http: //download .opensuse.org /repositories/network : /ha-clustering : /Stable/CentOS_CentOS-7/network :ha-clustering:Stable.repo -P  /etc/yum .repos.d/
yum  install  pacemaker crmsh mariadb-server pcs -y
#开启服务,并授权用户登录,创建数据库tom,两个主机的数据库故意创建不一样方便查看服务器迁移
systemctl start mariadb.service
mysql <<eof
grant all on *.* to  'tom' @ '172.16.%.%'  identified by  '12345' ;
create database tom;
eof
#设置mariadb开机启动,这一项是pacemaker控制systemd管理的服务根本
systemctl  enable  mariadb.service
#启动服务
systemctl start pacemaker.service corosync.service

mariadb集群服务配置

     mariadb集群服务的配置使用crmsh配置,crmsh配置的集群服务会自动同步到集群的每一个节点,同步的机制是配置信息是首先传送到DC节点,然后通告给其他节点。

crmsh的使用方法是输入crm进入交互接口然后输入配置,这个配置接口和交换机的配置接口使用类似,并且拥有强大的补全功能。具体怎么使用我不介绍了,可以使用help [command]查看帮助信息,帮助信息最底下还有事例。

1
2
3
4
5
6
7
8
9
crm configure  #进入crm配置接口
property stonith-enabled= false  #关闭stonith,因为我们没有具体的设备
property no-quorum-policy=ignore  #不使用法定票数,因为我们配置的是双节点的集群,一个节点故障另一个节点拥有的票数就不会大于半数
primitive vip ocf:heartbeat:IPaddr params ip= "172.16.29.11"  #定义vip集群资源
primitive mariadb systemd:mariadb  #定义mariadb集群资源
group dbservice vip mariadb  #把vip和mariadb资源定义为组,一群两个资源运行在同一台主机之上
monitor vip 20s:20s  #定义vip的监控,每20s监控一次,延迟20s
monitor mariadb 20s:20s
commit  #保存配置,并使其生效

haproxy集群服务配置

     haproxy集群配置使用pcs,pcs不是交互式管理接口,我们可以直接输入管理命令管理

node1的配置

1
2
3
4
5
6
systemctl start pcsd.service  #开启pcsd进程
systemctl  enable  haproxy.service  #设置haproxy开机启动,这一项是pacemaker控制systemd管理的服务根本
vim  /etc/haproxy/haproxy .cfg  #在default中添加如下内容
     stats  enable
     stats hide-version
     stats uri      /ha10

node2的配置

1
2
3
4
5
6
systemctl start pcsd.service  #开启pcsd进程
systemctl  enable  haproxy.service  #设置haproxy开机启动,这一项是pacemaker控制systemd管理的服务根本
vim  /etc/haproxy/haproxy .cfg  #在default中添加如下内容
     stats  enable
     stats hide-version
     stats uri      /ha20

集群的配置的配置

1
2
3
pcs resource create vip2 ocf:heartbeat:IPaddr params ip= "172.16.29.12"  op  monitor interval=20s timeout=20  #定义vip2资源,并定义监控
pcs resource create haproxy systemd:haproxy  op  monitor interval=20s timeout=20  #定义haproxy资源,并定义监控
pcs constraint order  set  vip haproxy  #使用顺序约束把vip2和haproxy绑定在一起

测试

然后我们就可以根据两台主机的ip地址情况,测试高可用情况了



      本文转自Ailu0li 51CTO博客,原文链接:http://blog.51cto.com/oldking/1898250,如需转载请自行联系原作者

     





相关文章
|
关系型数据库 MySQL Linux
小白带你学习linux的mariadb高可用MAH
小白带你学习linux的mariadb高可用MAH
129 0
|
关系型数据库 MySQL Linux
|
关系型数据库 MySQL 测试技术
基于Keepalived高可用集群的MariaDB读写分离机制实现
一 MariaDB读写分离机制 在实现读写分离机制之前先理解一下三种主从复制方式:1.异步复制:MariaDB默认的复制即是异步的,主库在执行完客户端提交的事务后会立即将结果返给给客户端,并不关心从库是否已经接收并处理,这样就会有一个问题,主节点如果挂掉了,此时主上已经提交的事务可能并没有传到从上,如果此时,强行将从提升为主,可能导致新主上的数据不完整。
1279 0
|
NoSQL 关系型数据库 MySQL
阿里云RDS关系型数据库大全_MySQL版、PolarDB、PostgreSQL、SQL Server和MariaDB等
阿里云RDS关系型数据库如MySQL版、PolarDB、PostgreSQL、SQL Server和MariaDB等,NoSQL数据库如Redis、Tair、Lindorm和MongoDB
368 0
|
7月前
|
关系型数据库 Java MySQL
Linux安装JDK1.8 & tomcat & MariaDB(MySQL删减版)
本教程提供了在Linux环境下安装JDK1.8、Tomcat和MariaDB的详细步骤。这三个组件的组合为Java Web开发和部署提供了一个强大的基础。通过遵循这些简单的指导步骤,您可以轻松建立起一个稳定、高效的开发和部署环境。希望这个指导对您的开发工作有所帮助。
316 8
|
8月前
|
缓存 关系型数据库 MySQL
error: Failed dependencies: mariadb-connector-c-config is obsoleted by mysql-community-server-8.0.36-1.el7.x86_64 问题解决
error: Failed dependencies: mariadb-connector-c-config is obsoleted by mysql-community-server-8.0.36-1.el7.x86_64 问题解决
500 19
|
7月前
|
SQL 关系型数据库 MySQL
如何在 MySQL 或 MariaDB 中导入和导出数据库
如何在 MySQL 或 MariaDB 中导入和导出数据库
763 0
|
7月前
|
SQL Ubuntu 关系型数据库
如何在云服务器上创建和管理 MySQL 和 MariaDB 数据库
如何在云服务器上创建和管理 MySQL 和 MariaDB 数据库
128 0