设为首页 收藏本站
查看: 2928|回复: 0

[经验分享] OpenStack中MySQL高可用配置

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-9-10 11:52:54 | 显示全部楼层 |阅读模式
    采用Heartbeat+DRBD+mysql高可用方案,配置两个节点的高可用集群
l  配置各节点互相解析

  gb07
DSC0000.png
  gb06
DSC0001.png
  l  配置各节点时间同步
  gb07
  [iyunv@gb07 ~]# ntpdate 10.10.102.7
  
  gb06
  [iyunv@gb06 ~]# ntpdate 10.10.102.7
  
  l  各节点关闭SELinux
  修改/etc/selinux/config文件中设置SELINUX=disabled ,然后重启服务器。
  
  l  Corosync 安装与配置(两节点上都要安装配置)


  • 安装Corosync
  gb07
  [iyunv@gb07 ~]# yum install -y corosync
  gb06
  [iyunv@gb06 ~]# yum install -y corosync
  


  • .配置Corosync

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

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

[iyunv@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
  }
  [iyunv@gb07 corosync]#  scp corosync.conf gb06:/etc/corosync/
  


  • 认证文件
  [iyunv@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).
  #遇到这个情况,表示电脑的随机数不够,可以不停的随便敲键盘生成随机数
  [iyunv@gb07 corosync]# scp authkey gb06:/etc/corosync/
  #把认证文件也复制到gb06主机上
  l  Pacemaker配置与安装(两节点上都要安装配置)


  • 安装pacemaker
  gb07
  [iyunv@gb07 ~]# yum install -y pacemaker
  gb06
  [iyunv@gb06 ~]# yum install -y pacemaker
  


  • 安装crmsh
  gb07
  [iyunv@gb07 ~]# yum –y install crm
  gb06
  [iyunv@gb06 ~]# yum –y install crm
  
  安装完成后,启动corosync  service corosync start; 启动pacemaker
  service pacemaker start
  
  l  DRBD 安装与配置(两个节点上都要安装配置)


  • 安装drbd
  gb07
  [iyunv@gb07 ~]# yum -y install drbd84 kmod-drbd84
  gb06
  [iyunv@gb06 ~]# yum -y install drbd84 kmod-drbd84
  如果yum源找不到包,尝试在网上搜一下drbd安装,下载相应的yum源文件再安装


  • 配置drbd
  [iyunv@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;
  }
  }
  [iyunv@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;
  }
  }
  [iyunv@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资源

[iyunv@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都是集群的资源,由集群管理的资源开机是一定不能够自行启动的。
  [iyunv@gb07 ~]#chkconfig mysqld off
  [iyunv@gb07 ~]#chkconfig drbd off
  [iyunv@gb06 ~]#chkconfig mysqld off
  [iyunv@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;

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-111915-1-1.html 上篇帖子: 理解 OpenStack 高可用(HA)(4):RabbitMQ 和 Mysql HA 下篇帖子: PostgreSQL Replication之第七章 理解Linux高可用(3)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表