zoukankan      html  css  js  c++  java
  • linux corosync+pacemaker+drbd+mysql配置安装详解

    官方文档:https://linbit.com/drbd-user-guide/drbd-guide-9_0-cn/#ch-pacemaker

    一, 基本环境介绍及基本环境配置

    ActionScript
    节点1: node1.hulala.com      192.168.1.35     centos6.5_64    添加8G新硬盘
    节点2: node1.hulala.com      192.168.1.36     centos6.5_64    添加8G新硬盘
    vip:   192.168.1.39

    节点1与节点2均需配置

    修改主机名:

    ActionScript
    vim /etc/sysconfig/network
    HOSTNAME=node1.hulala.com

    配置hosts解析:

    Bash
    vim /etc/hosts
    192.168.1.35    node1.hulala.com node1 
    192.168.1.36    node2.hulala.com node1

    同步系统时间:

    Bash
    ntpdate cn.pool.ntp.org

    关闭防火墙与SELINUX

    Bash
    service iptables stop
    chkconfig iptables off
    cat /etc/sysconfig/selinux
    SELINUX=disabled

    以上配置在两个节点都需要配置,配置完成之后重启两个节点

    二:配置ssh互信

    Bash
    [root@node1~]#ssh-keygen -t rsa -b 1024
    [root@node1~]#ssh-copy-id root@192.168.1.36
    [root@node2~]#ssh-keygen -t rsa -b 1024
    [root@node2~]#ssh-copy-id root@192.168.1.35

    三:DRBD的安装与配置(node1和node2执行相同操作)

    Bash
    [root@node1~]#wget -c http://elrepo.org/linux/elrepo/el6/x86_64/RPMS/drbd84-utils-8.4.2-1.el6.elrepo.x86_64.rpm
    [root@node1~]#wget -c http://elrepo.org/linux/elrepo/el6/x86_64/RPMS/kmod-drbd84-8.4.2-1.el6_3.elrepo.x86_64.rpm
    [root@node1~]#rpm -ivh *.rpm

    获取一个sha1值做为shared-secret

    Bash
    [root@node1~]#sha1sum /etc/drbd.conf
    8a6c5f3c21b84c66049456d34b4c4980468bcfb3  /etc/drbd.conf

    创建并编辑资源配置文件:/etc/drbd.d/dbcluster.res

    Bash
    [root@node1~]# vim /etc/drbd.d/dbcluster.res
    resource dbcluster {
        protocol C;

    handlers {

    pri-on-incon-degr "echo o > /proc/sysrq-trigger ; halt -f ";

    pri-lost-after-sb "echo o > /proc/sysrq-trigger ; halt -f ";

    local-io-error "echo o > /proc/sysrq-trigger ; halt -f";

    fence-peer "/usr/lib4/heartbeat/drbd-peer-outdater -t 5";

    pri-lost "echo pri-lst. Have a look at the log file. | mail -s 'Drbd Alert' root";

    split-brain "/usr/lib/drbd/notify-split-brain.sh root";

    out-of-sync "/usr/lib/drbd/notify-out-of-sync.sh root";

    }

    
        net {
            cram-hmac-alg sha1;
            shared-secret "8a6c5f3c21b84c66049456d34b4c4980468bcfb3";
            after-sb-0pri discard-zero-changes;
    after-sb-1pri discard-secondary;
            after-sb-2pri disconnect;
            rr-conflict disconnect;
        }
        device    /dev/drbd0;
        disk      /dev/sdb1;
    meta-disk internal;
        on node1.hulala.com {
            address   192.168.1.35:7789;
        }
        on node2.hulala.com {
            address   192.168.1.36:7789;
        }
    }

    以上配置所用参数说明:

    RESOURCE: 资源名称

    PROTOCOL: 使用协议”C”表示”同步的”,即收到远程的写入确认之后,则认为写入完成.

    NET: 两个节点的SHA1 key是一样的

    after-sb-0pri : “Split Brain”发生时且没有数据变更,两节点之间正常连接

    after-sb-1pri : 如果有数据变更,则放弃辅设备数据,并且从主设备同步

    rr-conflict: 假如前面的设置不能应用,并且drbd系统有角色冲突的话,系统自动断开节点间连接

    META-DISK: Meta data保存在同一个磁盘(sdb1)

    ON <NODE>: 组成集群的节点

    将DRBD配置拷贝到node机器:

    Bash
    [root@node1~]#scp /etc/drbd.d/dbcluster.res root@192.168.1.36:/etc/drbd.d/

    创建资源及文件系统:

    创建分区(未格式化过)

    在node1和node2上创建LVM分区:

    Bash
    [root@node1~]#fdisk /dev/sdb

    在node1和node2上给资源(dbcluster)创建meta data:

    Bash
    [root@node1~drbd]#drbdadm create-md dbcluster

    激活资源(node1和node2都得查看)

    – 首先确保drbd module已经加载

    查看是否加载:

    Bash
    # lsmod | grep drbd

    若未加载,则需加载:

    Bash
    # modprobe drbd
    # lsmod | grep drbd
    drbd                  317261  0 
    libcrc32c               1246  1 drbd

    启动drbd后台进程:

    Bash
    [root@node1 drbd]# drbdadm up dbcluster
    [root@node2 drbd]# drbdadm up dbcluster

    查看(node1和node2)drbd状态:

    Bash
    [root@node2 drbd]# /etc/init.d/drbd status
    GIT-hash: 7ad5f850d711223713d6dcadc3dd48860321070c build by dag@Build64R6, 2012-09-06 08:16:10
    m:res        cs         ro                   ds                         p  mounted  fstype
    0:dbcluster  Connected  Secondary/Secondary  Inconsistent/Inconsistent  C

    从上面的信息可以看到,DRBD服务已经在两台机器上运行,但任何一台机器都不是主机器(“primary” host),因此无法访问到资源(block device).

    开始同步:

    仅在主节点操作(这里为node1)

    Bash
    [root@node1 drbd]# drbdadm — –overwrite-data-of-peer primary dbcluster

    查看同步状态:

    Bash
    [root@node1 drbd.d]# cat /proc/drbd 
    version: 8.4.2 (api:1/proto:86-101)
    GIT-hash: 7ad5f850d711223713d6dcadc3dd48860321070c build by dag@Build64R6, 2012-09-06 08:16:10
     0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r—–
     ns:8297248 nr:0 dw:0 dr:8297912 al:0 bm:507 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

    上面的输出结果的一些说明:

    cs (connection state): 网络连接状态

    ro (roles): 节点的角色(本节点的角色首先显示)

    ds (disk states):硬盘的状态

    复制协议: A, B or C(本配置是C)

    看到drbd状态为”cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate”即表示同步结束.

    也可以这样查看drbd状态:

    Bash
    [root@centos193 drbd]# drbd-overview 
      0:dbcluster/0  Connected Secondary/Primary UpToDate/UpToDate C r—–

    创建文件系统:

    在主节点(Node1)创建文件系统:

    Bash
    [root@node1 drbd]# mkfs -t ext4 /dev/drbd0
    mke2fs 1.41.12 (17-May-2010)
    Filesystem label=
    OS type: Linux
    Block size=4096 (log=2)
    …….
    180 days, whichever comes first.  Use tune2fs -c or -i to override.

    注:没必要在辅节点(Node2)做同样的操作,因为DRBD会处理原始磁盘数据的同步.

    另外,我们也不需要将这个DRBD系统挂载到任何一台机器(当然安装MySQL的时候需要临时挂载来安装MySQL),因为集群管理软件会处理.还有要确保复制的文件系统仅仅挂载在Active的主服务器上.

    三:mysql的安装

    1,在node1和node2节点安装mysql:

    Bash
    yum install mysql* -y

    2.node1和node2都操作停止mysql服务

    Bash
    [root@node1~]# service mysql stop
    Shutting down MySQL.        [  OK  ]

    3.node1和node2都操作创建数据库目录并将该目录权限属主修改为mysql

    Bash
    [root@host1 /]# mkdir -p /mysql/data
    [root@host1 /]# chown -R mysql:mysql /mysql

    4,关闭mysql临时挂载DRBD文件系统到主节点(Node1):

    Bash
    [root@node1 ~]# mount /dev/drbd0  /mysql/

    5.node1和node2都操作修改my.cnf文件修改

    在[mysqld]下添加新的数据存放路径

    Bash
    datadir=/mysql/data

    7.将默认的数据路径下的所有文件和目录cp到新的目录下(node2不用操作)

    Bash
    [root@host1 mysql]#cd /var/lib/mysql
    [root@host1 mysql]#cp -R * /mysql/data/

    node1和node2都操作这里注意copy过去的目录权限属主需要修改为mysql,这里直接修改mysql目录即可.

    Bash
    [root@host1 mysql]# chown -R mysql:mysql /mysql

    8.启动node1上的mysql进行登陆测试

    Bash
    [root@host1 mysql]# mysql

    9.在节点Node1卸载DRBD文件系统

    Bash
    [root@node1 ~]# umount /var/lib/mysql_drbd
    [root@node1 ~]# drbdadm secondary dbcluster

    将DRBD文件系统挂载节点Node2

    Bash
    [root@node2 ~]# drbdadm primary dbcluster
    [root@node2 ~]# mount /dev/drbd0 /mysql/

    节点Node2上配置MySQL并测试

    Bash
    [root@node1 ~]# scp node2:/etc/my.cnf /etc/my.cnf
    [root@node2 ~]# chown mysql /etc/my.cnf
    [root@node2 ~]# chmod 644 /etc/my.cnf

    10. node2上做mysql登陆测试

    Bash
    [root@node2 ~]# mysql

    11.在Node2上卸载DRBD文件系统,交由集群管理软件Pacemaker来管理

    Bash
    [root@node2~]# umount /var/lib/mysql_drbd
    [root@node2~]# drbdadm secondary dbcluster
    [root@node2~]# drbd-overview 
    0:dbcluster/0  Connected Secondary/Secondary UpToDate/UpToDate C r—– 
    [root@node2~]#

    四:Corosync和Pacemaker的安装配置(node1和node2都需安装)

    安装Pacemaker必须依赖:

    Bash
    [root@node1~]#yum -y install automake autoconf libtool-ltdl-devel pkgconfig python glib2-devel libxml2-devel libxslt-devel python-devel gcc-c++ bzip2-devel gnutls-devel pam-devel libqb-devel

    安装Cluster Stack依赖:

    Bash
    [root@node1~]yum -y install clusterlib-devel corosynclib-devel

    安装Pacemaker可选依赖:

    Bash
    [root@node1~]yum -y install ncurses-devel openssl-devel cluster-glue-libs-devel docbook-style-xsl

    Pacemaker安装:

    Bash
    [root@node1~]yum -y install pacemaker

    crmsh安装:

    Bash
    [root@node1~]wget http://download.opensuse.org/repositories/network:/ha-clustering:/Stable/CentOS_CentOS-6/network:ha-clustering:Stable.repo
    [root@node1~]yum -y install crmsh

    1,配置corosync

    Corosync Key

    生成节点间安全通信的key:

    Bash
    [root@node1~]# corosync-keygen

    将authkey拷贝到node2节点(保持authkey的权限为400):

    Bash
    [root@node~]# scp /etc/corosync/authkey node2:/etc/corosync/

    2,[root@node1~]# cp /etc/corosync/corosync.conf.example /etc/corosync/corosync.conf

    编辑/etc/corosync/corosync.conf:

    Bash
    # Please read the corosync.conf.5 manual page
    compatibility: whitetank
    aisexec { 
            user: root 
            group: root 
    } 
    totem {
            version: 2
    secauth: off
    threads: 0
    interface {
    ringnumber: 0
    bindnetaddr: 192.168.1.0
    mcastaddr: 226.94.1.1
    mcastport: 4000
    ttl: 1
    }
    }
    logging {
    fileline: off
    to_stderr: no
    to_logfile: yes
    to_syslog: yes
    logfile: /var/log/cluster/corosync.log
    debug: off
    timestamp: on
    logger_subsys {
    subsys: AMF
    debug: off
    }
    }
    amf {
    mode: disabled
    }

    创建并编辑/etc/corosync/service.d/pcmk,添加”pacemaker”服务

    Bash
    [root@node1~]# cat /etc/corosync/service.d/pcmk 
    service {
    # Load the Pacemaker Cluster Resource Manager
    name: pacemaker
    ver: 1
    }

    将上面两个配置文件拷贝到另一节点

    Bash
    [root@node1]# scp /etc/corosync/corosync.conf node2:/etc/corosync/corosync.conf
    [root@node1]# scp /etc/corosync/service.d/pcmk node2:/etc/corosync/service.d/pcmk

    3,启动corosync和Pacemaker

    分别在两个节点上启动corosync并检查.

    Bash
    [root@node1]# /etc/init.d/corosync start
    Starting Corosync Cluster Engine (corosync):               [  OK  ]
    [root@node1~]# corosync-cfgtool -s
    Printing ring status.
    Local node ID -1123964736
    RING ID 0
    id = 192.168.1.189
    status = ring 0 active with no faults
    [root@node2]# /etc/init.d/corosync start
    Starting Corosync Cluster Engine (corosync):               [  OK  ]
    – 在两节点上分别启动Pacemaker:
    [root@node1~]# /etc/init.d/pacemaker start
    Starting Pacemaker Cluster Manager:                        [  OK  ]
    [root@node2~]# /etc/init.d/pacemaker start
    Starting Pacemaker Cluster Manager:

    资源配置

    配置资源及约束                  

    配置默认属性

    查看已存在的配置:

    Bash
    [root@node1 ~]# crm configure show
    node node1.hulala.com
    node node2.hulala.com
    property $id="cib-bootstrap-options" dc-version="1.1.8-7.el6-394e906" cluster-infrastructure="classic openais (with plugin)" expected-quorum-votes="2"

    禁止STONITH错误:

    Bash
    [root@node1 ~]# crm configure property stonith-enabled=false
    [root@node1 ~]# crm_verify -L

    让集群忽略Quorum:

    Bash
    [root@node1~]# crm configure property no-quorum-policy=ignore

    防止资源在恢复之后移动:

    Bash
    [root@node1~]# crm configure rsc_defaults resource-stickiness=100

    设置操作的默认超时:

    Bash
    [root@node1~]# crm configure property default-action-timeout="180s"

    设置默认的启动失败是否为致命的:

    Bash
    [root@node1~]# crm configure property start-failure-is-fatal="false"

    配置DRBD资源

    配置之前先停止DRBD:

    Bash
    [root@node1~]# /etc/init.d/drbd stop
    [root@node1~]# /etc/init.d/drbd stop

    配置DRBD资源:

    Bash
    [root@node1~]# crm configure
    crm(live)configure# primitive p_drbd_mysql ocf:linbit:drbd params drbd_resource="dbcluster" op monitor interval="15s" op start timeout="240s" op stop timeout="100s"

    配置DRBD资源主从关系(定义只有一个Master节点):

    Bash
    crm(live)configure# ms ms_drbd_mysql p_drbd_mysql meta master-max="1" master-node-max="1" clone-max="2" clone-node-max="1" notify="true"

    配置文件系统资源,定义挂载点(mount point):

    Bash
    crm(live)configure# primitive p_fs_mysql ocf:heartbeat:Filesystem params device="/dev/drbd0" directory="/var/lib/mysql_drbd/" fstype="ext4"

    配置VIP资源

    Bash
    crm(live)configure# primitive p_ip_mysql ocf:heartbeat:IPaddr2 params ip="192.168.1.39" cidr_netmask="24" op monitor interval="30s"

    配置MySQL资源

    Bash
    crm(live)configure# primitive p_mysql lsb:mysql op monitor interval="20s" timeout="30s" op start interval="0" timeout="180s" op stop interval="0" timeout="240s"

    组资源和约束

    通过”组”确保DRBD,MySQL和VIP是在同一个节点(Master)并且确定资源的启动/停止顺序.

    启动: p_fs_mysql–>p_ip_mysql->p_mysql

    停止: p_mysql–>p_ip_mysql–>p_fs_mysql

    Bash
    crm(live)configure# group g_mysql p_fs_mysql p_ip_mysql p_mysql

    组group_mysql永远只在Master节点:

    Bash
    crm(live)configure# colocation c_mysql_on_drbd inf: g_mysql ms_drbd_mysql:Master

    MySQL的启动永远是在DRBD Master之后:

    Bash
    crm(live)configure# order o_drbd_before_mysql inf: ms_drbd_mysql:promote g_mysql:start

    配置检查和提交

    Bash
    crm(live)configure# verify
    crm(live)configure# commit
    crm(live)configure# quit

    查看集群状态和failover测试

    状态查看:

    Bash
    [root@node1 mysql]# crm_mon -1r

    Failover测试:

    将Node1设置为Standby状态

    Bash
    [root@node1 ~]# crm node standby

    过几分钟查看集群状态(若切换成功,则看到如下状态):

    Bash
    [root@node1 ~]# crm status

    将Node1恢复online状态:

    Bash
    [root@node1 mysql]# crm node online
    [root@node1 mysql]# crm status

    文章来源:https://www.jb51.net/article/84361.htm

  • 相关阅读:
    通过源码安装PostgresSQL
    mysql 8.0.16 单主 mgr搭建
    美团点评SQL优化工具SQLAdvisor开源快捷部署
    通过springboot 去创建和提交一个表单(七)
    在springboot中验证表单信息(六)
    调度任务(五)
    接收上传的multi-file的文件(四)
    消费Restful的web服务(三)
    关于RabbitMQ服务器整合(二)
    在springboot中用redis实现消息队列
  • 原文地址:https://www.cnblogs.com/cheyunhua/p/15740991.html
Copyright © 2011-2022 走看看