Linux/Python学习论坛-京峰教育

 找回密码
 立即注册

一键登录:

搜索
热搜: 活动 交友 discuz
查看: 1496|回复: 0

Mysql+Drbd+Keepalived数据库高可用配置

[复制链接]

217

主题

331

帖子

4711

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4711
QQ
发表于 2015-4-4 22:07:33 | 显示全部楼层 |阅读模式
DRBD(Distributed  Replicated  Block  Device)是一个基于块设备级别在远程服务器直接同步和镜像数据的开源软件,类似于RAID1数据镜像,通常配合keepalived、heartbeat等HA软件来实现高可用性。这里简单记录仅供参考。
一、实施环境
  1. 系统版本:CentOS 5.8
  2. DRBD版本: drbd-8.3.15
  3. Keepalived:keepalived-1.1.15
  4. Master:192.168.149.128
  5. Backup:192.168.149.129
复制代码
二、初始化配置
1)   在128、129两台服务器/etc/hosts里面都添加如下配置:
  1. 192.168.149.128  node1
  2. 192.168.149.129  node2
复制代码
2)   优化系统kernel参数,直接上sysctl.conf配置如下:
  1. net.ipv4.ip_forward = 0
  2. net.ipv4.conf.default.rp_filter = 1
  3. net.ipv4.conf.default.accept_source_route = 0
  4. kernel.sysrq = 0
  5. kernel.core_uses_pid = 1
  6. net.ipv4.tcp_syncookies = 1
  7. kernel.msgmnb = 65536
  8. kernel.msgmax = 65536
  9. kernel.shmmax = 68719476736
  10. kernel.shmall = 4294967296
  11. net.ipv4.tcp_max_tw_buckets = 10000
  12. net.ipv4.tcp_sack = 1
  13. net.ipv4.tcp_window_scaling = 1
  14. net.ipv4.tcp_rmem = 4096        87380   4194304
  15. net.ipv4.tcp_wmem = 4096        16384   4194304
  16. net.core.wmem_default = 8388608
  17. net.core.rmem_default = 8388608
  18. net.core.rmem_max = 16777216
  19. net.core.wmem_max = 16777216
  20. net.core.netdev_max_backlog = 262144
  21. net.core.somaxconn = 262144
  22. net.ipv4.tcp_max_orphans = 3276800
  23. net.ipv4.tcp_max_syn_backlog = 262144
  24. net.ipv4.tcp_timestamps = 0
  25. net.ipv4.tcp_synack_retries = 1
  26. net.ipv4.tcp_syn_retries = 1
  27. net.ipv4.tcp_tw_recycle = 1
  28. net.ipv4.tcp_tw_reuse = 1
  29. net.ipv4.tcp_mem = 94500000 915000000 927000000
  30. net.ipv4.tcp_fin_timeout = 1
  31. net.ipv4.tcp_keepalive_time = 30
  32. net.ipv4.ip_local_port_range = 1024    65530
  33. net.ipv4.icmp_echo_ignore_all = 1
复制代码
3)   两台服务器分别添加一块设备,用于DRBD主设备存储,我这里为/dev/sdb 30G硬盘:
12.jpg
执行如下命令:
  1. mkfs.ext3 /dev/sdb ;dd if=/dev/zero of=/dev/sdb bs=1M count=1;sync
复制代码
三、DRBD安装配置
  1. yum -y install drbd83* kmod-drbd83 ; modprobe  drbd
复制代码
安装完成并加载drbd模块后,vi修改/etc/drbd.conf配置文件,本文内容如下:
  1. global {
  2.     usage-count yes;
  3. }
  4. common {
  5. syncer { rate 100M; }
  6. }
  7. resource r0 {
  8. protocol C;
  9. startup {
  10.                                                                                                                                                                                                                                                                                                                                                                                                                     
  11. }
  12. disk {
  13. on-io-error detach;
  14. #size 1G;
  15. }
  16. net {
  17. }
  18. on node1 {
  19. device /dev/drbd0;
  20. disk /dev/sdb;
  21. address 192.168.149.128:7898;
  22. meta-disk internal;
  23. }
  24. on node2 {
  25. device /dev/drbd0;
  26. disk /dev/sdb;
  27. address 192.168.149.129:7898;
  28. meta-disk internal;
  29. }
  30. }
复制代码
配置修改完毕后执行如下命令初始化:
  1. drbdadm create-md  r0  ;/etc/init.d/drbd restart ;/etc/init.d/status
复制代码
如下图:
13.jpg
以上步骤,需要在两台服务器都执行,两台都配置完毕后,在node2从上面执行如下命令:/etc/init.d/drbd status 看到如下信息,表示目前两台都为从,我们需要设置node1为master,命令如下:
  1. drbdadm -- --overwrite-data-of-peer primary all
  2. mkfs.ext3 /dev/drbd0
  3. mkdir  /app  ;mount /dev/drbd0  /app
复制代码
自此,DRBD配置完毕,我们可以往/app目录写入任何东西,当master出现宕机或者其他故障,手动切换到backup,数据没有任何丢失,相当于两台服务器做网络RAID1。
四、Keepalived配置
  1. wget http://www.keepalived.org/software/keepalived-1.1.15.tar.gz; tar -xzvf keepalived-1.1.15.tar.gz ;cd keepalived-1.1.15 ; ./configure ; make ;make install
  2. DIR=/usr/local/ ;cp $DIR/etc/rc.d/init.d/keepalived  /etc/rc.d/init.d/ ; cp $DIR/etc/sysconfig/keepalived /etc/sysconfig/ ;
  3. mkdir -p /etc/keepalived ; cp $DIR/sbin/keepalived /usr/sbin/
复制代码
两台服务器均安装keepalived,并进行配置,首先在node1(master)上配置,keepalived.conf内容如下:
  1. ! Configuration File for keepalived
  2. global_defs {
  3.    router_id LVS_DEVEL
  4. }
  5. vrrp_script check_mysql {
  6.         script "/data/sh/check_mysql.sh"
  7.         interval 5
  8.         }
  9. vrrp_instance VI_1 {
  10.     state MASTER
  11.     interface eth0
  12.     virtual_router_id 52
  13.     priority 100
  14.     advert_int 1
  15.     authentication {
  16.         auth_type PASS
  17.         auth_pass 1111
  18.     }
  19.     virtual_ipaddress {
  20.         192.168.149.100
  21.          }
  22.         track_script {
  23.         check_mysql
  24.         }
  25. }
复制代码
然后创建check_mysql.sh检测脚本,内容如下:
  1. #!/bin/sh
  2. A=`ps -C mysqld --no-header |wc -l`
  3. if
  4. [ $A -eq 0 ];then
  5.       /bin/umount /app/
  6.       drbdadm secondary r0
  7.       killall keepalived
  8. fi
复制代码
添加node2(backup)上配置,keepalived.conf内容如下:
  1. ! Configuration File for keepalived
  2. global_defs {
  3.    router_id LVS_DEVEL
  4. }
  5. vrrp_sync_group VI{
  6. group {
  7.       VI_1
  8. }
  9. notify_master /data/sh/master.sh
  10. notify_backup /data/sh/backup.sh
  11. }
  12. vrrp_instance VI_1 {
  13.     state BACKUP
  14.     interface eth0
  15.     virtual_router_id 52
  16.     priority 90
  17.     advert_int 1
  18.     authentication {
  19.         auth_type PASS
  20.         auth_pass 1111
  21.     }
  22.     virtual_ipaddress {
  23.         192.168.149.100
  24.          }
  25. }
复制代码
创建master.sh检测脚本,内容如下:
  1. #!/bin/bash
  2. drbdadm primary r0
  3. /bin/mount /dev/drbd0 /app/
  4. /etc/init.d/mysqld start
复制代码
创建backup.sh检测脚本,内容如下:
  1. #!/bin/bash
  2. /etc/init.d/mysqld stop
  3. /bin/umount /dev/drbd0
  4. drbdadm secondary r0
复制代码
发生脑裂恢复步骤如下:
Master执行命令:
  1. drbdadm  secondary r0
  2. drbdadm  --  --discard-my-data  connect r0
  3. Backup上执行命令:
  4. drbdadm  connect r0
复制代码
京峰Linux教育出品,必属精品:www.jfedu.net
京峰Linux教育创始人之一,只为有梦想的人!任何事情只要去行动,就会收获结果!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|京峰教育,只为有梦想的人 ( 京ICP备15013173号 )

GMT+8, 2020-2-26 22:11 , Processed in 0.025694 second(s), 13 queries , Redis On.

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