OpenStack中MySQL高可用配置
采用Heartbeat+DRBD+mysql高可用方案,配置两个节点的高可用集群
l 配置各节点互相解析
gb07

gb06

l 配置各节点时间同步
gb07
[root@gb07 ~]# ntpdate 10.10.102.7
gb06
[root@gb06 ~]# ntpdate 10.10.102.7
l 各节点关闭SELinux
修改/etc/selinux/config文件中设置SELINUX=disabled ,然后重启服务器。
l 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
l 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的服务
mysql、drbd都是集群的资源,由集群管理的资源开机是一定不能够自行启动的。
[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;
OpenStack中MySQL高可用配置的更多相关文章
- OpenStack API部分高可用配置(一)
一.概况与原理 SHAPE \* MERGEFORMAT 1)所需要的配置组件有:pacemaker+corosync+HAProxy 2)主要原理:HAProxy作为负载均衡器,将对openst ...
- OpenStack API部分高可用配置(二)
一.安装与配置HAProxy 1.调整内核参数,允许绑定VIP: vim /etc/sysctl.conf [内容] net.ipv4.ip_nonlocal_bind=1 sysctl -p 2.安 ...
- MySQL高可用配置(主从复制)
主从复制包含两个步骤: 在 master 主服务器(组)上的设置,以及在 slave 从属服务器(组)上的设置. 环境: MASTER: 192.168.155.101SLAVE: 192.168.1 ...
- Lvs+Keepalived实现MySQL高可用
LVS+Keepalived+MySQL高可用配置 本文所有配置前提是已实现MySQL双主备份(MySQL双主) 安装前的准备: VIP:192.168.0.201 Keepalived: Keepa ...
- (5.8)mysql高可用系列——MySQL中的GTID复制(实践篇)
一.基于GTID的异步复制(一主一从)无数据/少数据搭建 二.基于GTID的无损半同步复制(一主一从)(mysql5.7)基于大数据量的初始化 正文: [0]概念 [0.5]GTID 复制(mysql ...
- 【DB宝19】在Docker中使用MySQL高可用之MHA
目录 一.MHA简介和架构 1.1 MHA简介 1.2 MHA工具包的组成 1.3 MHA架构 二.准备MHA环境 2.1 下载MHA镜像 2.2 编辑yml文件,创建MHA相关容器 2.3 安装do ...
- linux中keepalived实现nginx高可用配置
linux中keepalived实现nginx高可用配置 安装keepalived 运行如下命令即可 tar -zxvf keepalived-2.0.8.tar.gz -C /usr/src cd ...
- MySQL+keeplived高可用配置
MySQL高可用基础环境:基于MySQL互为主从(双主.主主),请现配置 主备两台机器 主的操作1.在keepalived主服务器上安装keepalived yum -y install keepal ...
- MySQL高可用方案
高可用架构对于互联网服务基本是标配,无论是应用服务还是数据库服务都需要做到高可用.虽然互联网服务号称7*24小时不间断服务,但多多少少有一些时候服务不可用,比如某些时候网页打不开,百度不能搜索或者无法 ...
随机推荐
- startActivity时报错Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVI
原代码如下: Intent intent = new Intent(); intent.setClass(mContext, PhotoView.class); Bundle bundle = new ...
- 安装loadrunner11出现Microsoft Visual c++2005 sp1安装失败
本文转至别处,网上大神多
- 1分钟,通过docker-compose 搭建zookeeper 集群
一.创建三节点 zookeeper 集群 将 docker-compose.yml 保存到当前命令行目录下 docker-compose.yml 文件 version: '2' networks: z ...
- Bitcoin区块验证
目录 区块的生成 区块的验证链接 验证过程 Merkle Tree结构 区块的生成 矿工在挖矿前要组建区块 将coinbase交易打包进区块 将交易池中高优先级的交易打包进区块 优先级 = 交易的额度 ...
- 《Linux内核分析》 第六周
<Linux内核分析> 第6周 一.进程的描述 1.进程控制块PCB 2.linux下的进程转化图 TASK_RUNNING可以是就绪态或者执行态,具体取决于系统调用 TASK_ZOMBI ...
- Sprint计划会议内容
项目名称:蹭课神器 会议内容 首先我们讨论了项目的工作量及实施流程 一.工作认领 二.界面的总体规划 三.主要功能的设计 四.设计数据库 五.编写项目报告 六.软件测试和推广 然后我们进行了工作认领, ...
- 作业C#程序分析
阅读下面程序,请回答如下问题: 问题1:这个程序要找的是符合什么条件的数? 问题2:这样的数存在么?符合这一条件的最小的数是什么? 问题3:在电脑上运行这一程序,你估计多长时间才能输出第一个结果?时间 ...
- CodeM Qualifying Match Q5
问题描述: 给定两个整数 l 和 r ,对于所有满足1 ≤ l ≤ x ≤ r ≤ 10^9 的 x ,把 x 的所有约数全部写下来. 对于每个写下来的数,只保留最高位的那个数码.求1-9每个数码出现 ...
- 课程回顾5in1
提出过的问题 问题1:敏捷开发在现阶段急于使用或试行,会不会得到相反的结果? 整个开发流程在施行了一整个学期,有积极的影响,也有消极的影响.例如通过这个流程的实施,规划短期的项目进度,使得成员能逐步了 ...
- vsphere web client 使用中文的解决办法
1. 很多网站这么说的: vsphere web client的默认URL为:https://hostname:9443/vsphere-client 可以在URL后面加上一个参数来指定区域语言 英语 ...