您的位置:首页 > 数据库 > SQL

openstack HA配置-Mysql

2015-11-20 21:36 549 查看

概念

环境准备

两个控制节点

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                    <
4000
span class="hljs-comment">#线程
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 -
a9da
-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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: