openstack HA配置-Mysql

概念

环境准备

两个控制节点

host: controller1
IP: 192.168.0.20

host: controller2
IP: 192.168.0.21

hosts文件

分别在controller1和controller2节点的hosts文件中添加如下

192.168.0.20    controller1
192.168.0.21    controller2

ssh互信

在controller1节点执行如下

# ssh-keygen -t rsa -P ''
# ssh-copy-id -i  /root/.ssh/id_rsa.pub controller2

在controller2节点执行如下

# ssh-keygen -t rsa -P ''
# ssh-copy-id -i  /root/.ssh/id_rsa.pub controller1

时间同步

# apt-get install ntp

安装和配置 corosync+pacemaker

安装 corosync+pacemaker

# apt-get install pacemaker
# apt-get install corosync

配置 corosync+pacemaker

配置文件两个

配置文件:/etc/corosync/corosync.conf

# /etc/corosync/corosync.conf
totem {                           #心跳信息传递层
    version: 2                    #版本
    secauth: on                   #认证信息  一般on
    threads: 0                    #线程
    interface {                   #定义心跳信息传递的接口
        ringnumber: 0
        bindnetaddr: 172.16.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
}

把节点controller1的配置文件copy到controller2中

# scp /etc/corosync/corosync.conf controller2:/etc/corosync/

认证文件

节点controller1上的操作

# 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).
遇到这个情况,表示电脑的随机数不够,各位朋友可以不停的随便敲键盘,或者安装软件也可以生成随机数

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

# scp /etc/corosync/authkey controller2:/etc/corosync/

开启服务和查看集群中的节点信息 (在controller1和controller2上的操作)

开启集群

# service corosync start
查看集群状态
# crm status

注意:
如果启动corosync时无反应也不报错,修改/etc/default/corosync文件,把START=no改为START=yes

安装和配置drbd

安装drbd

# apt-get install drbd8-utils

注意:
在 ubuntu 14.04 下运行 service drbd start 很可能会出现如下错误.
node already registered
* Starting DRBD resources
DRBD module version: 8.4.5
userland version: 8.4.4
you should upgrade your drbd tools!
这是由于 linux 内核版本升级到, 而于自带的 drbd 软件不兼容导致的. 可以通过 ppa 来安装第三方提供的高版本的 drbd 解决, 命令如下:

# apt-get install -y python-software-properties
# add-apt-repository ppa:icamargo/drbd
# apt-get update
# apt-get install -y drbd8-utils

之后应该就可以启动 drbd 了

# service drbd start

配置drbd

配置文件两个

全局配置文件: /etc/drbd.d/global_common.conf
资源配置文件: /etc/drbd.d/mydata.res (没有需要自己创建)

全局配置文件: /etc/drbd.d/global_common.conf

#  /etc/drbd.d/global_common.conf

global {
        usage-count no; # 是否参加DRBD使用者统计,默认是yes
        # minor-count dialog-refresh disable-ip-verification
}
common {
        protocol C;  # DRBD支持三种协议,默认是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"; # 该选项可以用来指定HMAC算法来启用对等节点授权。drbd强烈建议启用对等节点授权机制。可以指定/proc/crypto文件中识别的任一算法。必须在此指定算法,以明确启用对等节点授权机制。
                shared-secret "mydrbdlab"; # 该选项用来设定在对待节点授权中使用的密码,最长64个字符
        }
        syncer {
                rate 1000M; # 设置主备节点同步时的网络速率最大值
        }
}

资源配置文件: /etc/drbd.d/mydata.res

# /etc/drbd.d/mydata.res

resource mydata { # 资源组的名称,mydata 
  on controller1 { # 节点主机名
    device    /dev/drbd0; # 今后使用的设备
    disk      /dev/sda3; #  # 该节点上的用于存放数据的分区号,配置的先前已经创建的分区,sda3修改为创建的分区
    address   192.168.0.20:7789; # 该节点的IP地址
    meta-disk internal; # meta data信息存放的方式
  }
  on controller2 { # 节点主机名
    device    /dev/drbd0; # 今后使用的设备
    disk      /dev/sda3; #  # 该节点上的用于存放数据的分区号,配置的先前已经创建的分区,sda3修改为创建的分区
    address   192.168.0.21:7789; # 该节点的IP地址
    meta-disk internal; # meta data信息存放的方式
  }
}

在controller1节点上操作

创建drbd的资源

# drbdadm create-md mydata # mydata前面创建的资源组名称

(如果出现如下错误:

md_offset21467942912

al_offset21467910144

bm_offset21467254784

Foundext3 filesystem

20964792kB data area apparently used

20964116kB left usable by current configuration

Devicesize would be truncated, which

wouldcorrupt data and result in’access beyond end of device’ errors.

You needto either

  • useexternal meta data (recommended)

  • shrinkthat filesystem first

  • zeroout the device (destroy the filesystem)

Operationrefused.

Command ‘drbdmeta 1 v08 /dev/sdb1 internal create-md’terminated with exit code 40

drbdadm create-md r0exited with code 40 )

执行如下命令:


# dd if=/dev/zero bs=1M count=1of=/dev/sdb1;sync

再次执行drbdadm create-md r0看到success则表示成功。

启动服务

# service drbd start

在controller2节点上操作

创建drbd的资源

# drbdadm create-md mydata # mydata前面创建的资源组名称

启动服务

# service drbd start

在controller1上执行,设置controller1为drbd的主节点

# drbdadm primary --force mydata

在controller2上执行,设置controller2为drbd的备用节点

# drbdadm  secondary mydata  #把此节点改为drbd的备用节点

查看同步进度

# cat /proc/drbd

此命令可以动态的查看同步进度

# watch -n1 'cat /proc/drbd'

在controller1上,格式化drdb分区并挂载drbd的分区

格式化分区

# mke2fs -t ext4 /dev/drbd0

创建挂载的文件

# mkdir /mnt/mysqldata

挂载文件

# mount /dev/drbd0    /mnt/mysqldata

修改文件权限

# chown -R mysql:mysql /mnt/mysqldata/

安装和配置mysql

安装(同时在controller1和controller2上执行)

# apt-get install mysql-server

配置(同时在controller1和controller2上执行)

配置文件两个
/etc/mysql/my.cnf
vim /etc/apparmor.d/usr.sbin.mysqld

配置文件/etc/mysql/my.cnf

datadir 目录指向预挂载 drbd0目录

# /etc/mysql/my.cnf
... ...
datadir = /mnt/mysqldata/data
... ...

配置文件 vim /etc/apparmor.d/usr.sbin.mysqld

#/var/lib/mysql/ r,行修改为如下
 /mnt/mysqldata/data/ r,
#/var/lib/mysql/** rwk,,行修改为如下
/mnt/mysqldata/data/** rwk,

初始化mysql数据库(只在controller1上执行)

# /usr/bin/mysql_install_db --user=mysql --datadir=/mnt/mysqldata/data/  --basedir=/usr

启动mysql数据库(只在controller1上执行)

# service mysql start

设置mysql管理员密码(只在controller1上执行)

# /usr/bin/mysqladmin -u root password 'root'

整体测试

由以上步骤可以得到mysql数据库在controller1节点上可以正常运行,现在关闭controller1上的数据库,将启动controller2上的数据库。

在controller1上执行如下

停止controller1上的数据库

# service mysql stop

卸载drbd0的挂载点

# umount    /dev/drbd0

将controller1改为备用节点

# drbdadm  secondary mydata

在controller2上执行

将controller2改为主节点

# drbdadm primary mydata

创建挂载的文件

# mkdir /mnt/mysqldata

挂载文件

# mount /dev/drbd0    /mnt/mysqldata

修改文件权限

# chown -R mysql:mysql /mnt/mysqldata/

开启controller2上的mysql数据库

# service mysql start

进入数据库,查看是否一样

# mysql -uroot -proot
> show databases;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值