corosync和pacemaker高可用mariadb和haproxy

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

OpenAIS规范的解决方案mysql

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

spacer.gifwKioL1ikY8rg4cZ1AAA20crbbzo909.png

图1.1数据库

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

     整个集群的服务管理须要一个软件,被规范定义为cluster resource manager集群资源管理。这只是集群资源管理,可是真正到执行操做的时候须要一个能够管理主机服务的接口,这个接口软件被规范定义为location resource manager本地资源管理。这一层才是真正执行操做的,产生这一层的缘由基本上全部的服务设计时都没考虑被高可用,可是咱们有须要操控这些服务只好制造一个能够调用其余服务器的管理层。centos

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

     cluster resource manager经常使用组件有:pacemaker(Redhat),heartbeatv1,2服务器

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

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

    

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的配置

#下载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
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
    }
}
#使用这个命令生成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/
#开启服务,并受权用户登陆,建立数据库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的配置

#下载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]查看帮助信息,帮助信息最底下还有事例。

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的配置

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的配置

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

集群的配置的配置

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地址状况,测试高可用状况了

相关文章
相关标签/搜索