zoukankan      html  css  js  c++  java
  • OpenStack中MySQL高可用配置

      采用Heartbeat+DRBD+mysql高可用方案,配置两个节点的高可用集群

     l  配置各节点互相解析

    gb07

     

    gb06

     

    配置各节点时间同步

    gb07

    [root@gb07 ~]# ntpdate 10.10.102.7

     

    gb06

    [root@gb06 ~]# ntpdate 10.10.102.7

    各节点关闭SELinux

    修改/etc/selinux/config文件中设置SELINUX=disabled ,然后重启服务器。

    Corosync 安装与配置(两节点上都要安装配置)

    • 安装Corosync

    gb07 

    [root@gb07 ~]# yum install -y corosync

    gb06

    [root@gb06 ~]# yum install -y corosync

    • .配置Corosync

                 [root@gb07 ~]# cd /etc/corosync/

    [root@gb07 corosync]# mv corosync.conf.example corosync.conf

    [root@gb07 corosync]# vim corosync.conf

    compatibility: whitetank

    totem {                                                                     #心跳信息传递层

        version: 2                                    #版本

        secauth: on                                                                  #认证信息  一般on

        threads: 0                                                           #线程

        interface {                                                           #定义心跳信息传递的接口

            ringnumber: 0

            bindnetaddr: 10.10.0.0                       #绑定的网络地址,写网络地址

            mcastaddr: 226.94.1.1                                          #多播地址

            mcastport: 5405                                           #多播的端口

            ttl: 1                                                                           #生存周期

        }

    }

    logging {                             #日志

        fileline: off

        to_stderr: no                 #是否输出在屏幕上

        to_logfile: yes               #定义自己的日志

        to_syslog: no                 #是否由syslog记录日志

        logfile: /var/log/cluster/corosync.log  #日志文件的存放路径

        debug: off

        timestamp: on                 #时间戳是否关闭

        logger_subsys {

            subsys: AMF

            debug: off

        }

    }

    amf {

        mode: disabled

    }

    service {

         ver: 0

         name: pacemaker       #pacemaker作为corosync的插件进行工作

    }

    aisexec {

         user: root

         group: root

    }

                  [root@gb07 corosync]#  scp corosync.conf gb06:/etc/corosync/

    • 认证文件

    [root@gb07 corosync]# corosync-keygen

    Corosync Cluster Engine Authentication key generator.

    Gathering 1024 bits for key from /dev/random.

    Press keys on your keyboard to generate entropy (bits = 152).

    #遇到这个情况,表示电脑的随机数不够,可以不停的随便敲键盘生成随机数

    [root@gb07 corosync]# scp authkey gb06:/etc/corosync/

    #把认证文件也复制到gb06主机上

    l  Pacemaker配置与安装(两节点上都要安装配置)

    • 安装pacemaker

    gb07

    [root@gb07 ~]# yum install -y pacemaker

    gb06

    [root@gb06 ~]# yum install -y pacemaker

    • 安装crmsh

    gb07

    [root@gb07 ~]# yum –y install crm

    gb06

    [root@gb06 ~]# yum –y install crm

    安装完成后,启动corosync  service corosync start; 启动pacemaker

    service pacemaker start

    DRBD 安装与配置(两个节点上都要安装配置)

    • 安装drbd

    gb07

    [root@gb07 ~]# yum -y install drbd84 kmod-drbd84

    gb06

    [root@gb06 ~]# yum -y install drbd84 kmod-drbd84

         如果yum源找不到包,尝试在网上搜一下drbd安装,下载相应的yum源文件再安装

    • 配置drbd

    [root@gb07 ~]# cat /etc/drbd.d/global_common.conf

    global {

    usage-count no;

    # minor-count dialog-refresh disable-ip-verification

    }

    common {

    protocol C;

    handlers {

                    pri-on-incon-degr "/usr/lib/drbd/notify-pri-on-incon-degr.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";

                    pri-lost-after-sb "/usr/lib/drbd/notify-pri-lost-after-sb.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";

                    local-io-error "/usr/lib/drbd/notify-io-error.sh; /usr/lib/drbd/notify-emergency-shutdown.sh; echo o > /proc/sysrq-trigger ; halt -f";

                    # fence-peer "/usr/lib/drbd/crm-fence-peer.sh";

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

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

                    # before-resync-target "/usr/lib/drbd/snapshot-resync-target-lvm.sh -p 15 -- -c 16k";

                    # after-resync-target /usr/lib/drbd/unsnapshot-resync-target-lvm.sh;

            }

            startup {

                    #wfc-timeout 120;

                    #degr-wfc-timeout 120;

            }

            disk {

                    on-io-error detach;

                    #fencing resource-only;

            }

            net {

                    cram-hmac-alg "sha1";

                    shared-secret "mydrbdlab";

            }

            syncer {

                    rate 1000M;

            }

    }

           [root@gb07 drbd.d]# cat mysql.res #资源配置文件

                  resource mysql {

                on gb07 {

                     device    /dev/drbd0;

                     disk      /dev/sda3;     #预留的硬盘分区

                     meta-disk internal;

                     address ipv4 10.10.102.7:7700;  

                }

                on gb06 {

                     device    /dev/drbd0;

                     disk      /dev/sda3;

                     meta-disk internal;

                     address ipv4 10.10.102.6:7700;

                }

    }

    [root@gb07 drbd.d]# scp global_common.conf mydata.res gb06:/etc/drbd.d/

     

    • 初始化drbd的资源并启动

     DRBD元数据的初始化和将元数据的初始设置写入 /dev/data/mysql,必须两个节点上都完成

    创建/ dev/drbd0设备节点,将DRBD设备与本地存储设备相连,必须在两个节点上都完成

    使初始设备同步,让设备成为主要的角色(可写和可读)。查看DRBD资源的主要角色和次要角色更详细的说明请参考DRBD用户指南。只能完成一个节点,就是你将继续创建文件系统的那个节点

    • 格式化drbd分区(主节点上完成)

    mkfs -t xfs /dev/drbd0

    mount /dev/drbd0 /mysql

     

    l  将mysql资源加入pacemaker

    • 定义drbd资源

    [root@jie2 ~]# crm

    crm(live)# configure

    crm(live)configure# property stonith-enabled=false

    crm(live)configure# property no-quorum-policy=ignore

    crm(live)configure# primitive mysqldrbd ocf:linbit:drbd params drbd_resource=mysql op monitor role=Master interval=10 timeout=20  op monitor  role=Slave interval=20 timeout=20 op start timeout=240 op stop timeout=100

    crm(live)configure#verify   #检查语法

     

    • 定义drbd的主从资源

    crm(live)configure# ms ms_mysqldrbd mysqldrbd meta master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=true

    crm(live)configure# verify

    • 定义文件系统资源和约束关系

    crm(live)configure# primitive mystore ocf:heartbeat:Filesystem params device="/dev/drbd0" directory="/mysql" fstype="xfs" op monitor interval=40 timeout=40 op start timeout=60 op stop timeout=60

    crm(live)configure# verify

    crm(live)configure# colocation mystore_with_ms_mysqldrbd inf: mystore ms_mysqldrbd:Master

    crm(live)configure# order ms_mysqldrbd_before_mystore mandatory: ms_mysqldrbd:promote mystore:start

    crm(live)configure# verify

    • 定义vip资源、mysql服务的资源约束关系

    crm(live)configure# primitive myvip ocf:heartbeat:IPaddr params ip="10.10.42.96" op monitor interval=20 timeout=20 on-fail=restart

    crm(live)configure# primitive myserver lsb:mysqld op monitor interval=20 timeout=20 on-fail=restart

    crm(live)configure# verify

    crm(live)configure# colocation myserver_with_mystore inf: myserver mystore

    crm(live)configure# order mystore_before_myserver mandatory: mystore:start myserver:start

    crm(live)configure# verify

    crm(live)configure# colocation myvip_with_myserver inf: myvip myserver

    crm(live)configure# order myvip_before_myserver mandatory: myvip myserver

    crm(live)configure# verify

    crm(live)configure# commit

                      commit之后可以查看节点的运行状态,切换节点,看资源是否转移

    • 关闭drbd的服务和关闭mysql的服务

    mysqldrbd都是集群的资源,由集群管理的资源开机是一定不能够自行启动的。

    [root@gb07 ~]#chkconfig mysqld off

    [root@gb07 ~]#chkconfig drbd off

    [root@gb06 ~]#chkconfig mysqld off

    [root@gb06 ~]#chkconfig drdb off

    • 为高可用Mysql配置Openstack服务

      现在,OpenStack的服务必须指向MySQL配置高可用,虚拟群集IP地址 - 而不是像往常一样的MySQL服务器的物理IP地址。

      对于Openstack中的glance,如果Mysql服务的ip地址是10.10.102.7,将会用到以下几行在OpenStack镜像注册配置文件中(glance-registry.conf):

        sql_connection = mysql://glancedbadmin:<password>@10.10.42.96/glance

     

    l  可能会遇到的问题

    • 脑裂故障

    正常状态下,查看集群中drbd资源的连接状态为:

    但由于网络或机器的故障可能会出现drbd脑裂故障,集群的drbd资源连接中断:

    0:mysql/0  StandAlone Secondary/Unknown UpToDate/-- C r-----

    解决办法查看官方链接http://www.drbd.org/users-guide/s-resolve-split-brain.html

    • 集群管理器pacemaker无法启动mysql,启动失败; 控制节点内存要足够,mysql中有个插件innodb,mysqld启动时innodb插件会初始化一个内存缓冲池,约2.3G,如果没有足够的内存,mysqld启动就会失败;
    • 偶尔一个节点挂掉,修复完成后,crm resource list看到该节点的资源状态仍然是stopped,无法start,可能需要重启一下drbd和pacemaker;
  • 相关阅读:
    datagridview绑定xml
    为当前会话的所有作用域中的任何表最后生成的标识值。
    Installation failed with message Failed to finalize session : INSTALL_FAILED_INVALID_APK: Split lib_slice_8_apk was defined multiple times. It is possible that this issue is resolved by uninstalling a
    修改android Studio SDK 路径产生的问题(模拟器不能启动了)
    android 2.3.3 配置github的两步骤
    Android Studio 2.3.3 调用asp.net webService实战(拒绝忽悠)
    CSS style 属性
    Html fieldset、legend 标签
    Html lable 标签
    Html table、thead、tr、th、td 标签
  • 原文地址:https://www.cnblogs.com/littlebugfish/p/4321732.html
Copyright © 2011-2022 走看看