基本构成:

  1. 用pacemaker+corosync控制心跳和资源迁移
  2. 用drbd同步zabbix配置文件和mysql数据库
  3. 所有软件都用yum安装至默认路径
  4. 主机的drbd领域挂载至/drbd,备机不挂载
  5. 主机在drbd领域中创建/drbd/zabbix,挂载至/etc/zabbix,备机不挂载
  6. 主机在drbd领域中创建/drbd/mysql,挂载至/var/lib/mysql,备机不挂载

    主机正常时如左图,主机故障时如右图

IP构成:

 

ZAB01

ZAB02

VIP

192.168.0.8/24

主业务兼心跳IP

192.168.0.6/24

192.168.0.7/24

DRBD同步用IP

192.168.222.196/24

192.168.222.197/24

磁盘构成:

/dev/sda1

boot

0.5GB

/dev/sda2

lv_swap

8GB

lv_root

41.5GB

/dev/sda3

lv_drbd

450GB

*OS安装的时候只需要分出sda1和sda2,其他的空出来。等系统安装完毕后用fdisk分出sda3,并且先不要格式化。

正式作业前:

1,关闭selinux
2,关闭iptables
3,/etc/hosts 互相添加
4,NTP同步设定
5,在网卡配置文件中加入NOZEROCONF=yes,禁止一些不必要的路由信息自动生成
6,修改/etc/ssh/sshd_conf的 UseDNS参数为no,这样ssh登录的时候会快点
7,fdisk生成/dev/sda3,从sda3中取出剩余的450GB做成lv_drbd用作drbd领域,先不要格式化分区

正式作业:

1,drbd安装

安装elpl的repodata

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

rpm -Uvh http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm

yum install drbd83-utils kmod-drbd83

这里要注意一点,kmod-drbd的版本要和内核版本匹配,不然drbd会报错无法启动。

但是我找遍了googlebaidu也没有找到列表,只能把我知道的写出来。

kmod-drbd83-8.3.13-1 对应kernel 2.6.32-358

kmod-drbd83-8.3.13-3 对应kernel 2.6.32- 573.22.1

关闭drbd的自启动

chkconfig drbd off

编辑配置文件

vi /etc/drbd.d/r0.res

  1. resource r0 {
  2.  
  3. protocol C;
  4.  
  5. net {
  6.  
  7. max-buffers ;
  8.  
  9. max-epoch-size ;
  10.  
  11. sndbuf-size ;
  12.  
  13. }
  14.  
  15. handlers {
  16.  
  17. fence-peer "/usr/lib/drbd/crm-fence-peer.sh";
  18.  
  19. after-resync-target "/usr/lib/drbd/crm-unfence-peer.sh";
  20.  
  21. }
  22.  
  23. syncer {
  24.  
  25. rate 80M;
  26.  
  27. use-rle;
  28.  
  29. verify-alg md5;
  30.  
  31. }
  32.  
  33. disk{
  34.  
  35. fencing resource-only;
  36.  
  37. on-io-error detach;
  38.  
  39. }
  40.  
  41. device /dev/drbd0;
  42.  
  43. on ZAB01 {
  44.  
  45. address ;
  46.  
  47. disk /dev/vg_drbd/lv_drbd;
  48.  
  49. meta-disk internal;
  50.  
  51. }
  52.  
  53. on ZAB02 {
  54.  
  55. address ;
  56.  
  57. disk /dev/vg_drbd/lv_drbd;
  58.  
  59. meta-disk internal;
  60.  
  61. }
  62.  
  63. }

初始化盘

drbdadm create-md r0

如果报这个错

Device size would be truncated, which

would corrupt data and result in

'access beyond end of device' errors.

You need to either

* use external meta data (recommended)

* shrink that filesystem first

* zero out the device (destroy the filesystem)

Operation refused.

打这个命令后再执行一次初始化就好了

dd if=/dev/zero bs=1M count=1 of=/dev/vg_drbd/lv_drbd

两边服务器上启动drbd

/etc/init.d/drbd start

把ZAB01V这边升为主机

drbdadm -- --overwrite-data-of-peer primary r0

主机这边格式化

mkfs.ext4 /dev/drbd0

两边都做个文件夹,用来挂载drbd的盘

mkdir /drbd

主机这边挂载

mount /dev/drbd0 /drbd/

2,mysql安装

安装mysql的repodata

wget http://dev.mysql.com/get/mysql57-community-release-el6-8.noarch.rpm

rpm -ivh mysql57-community-release-el6-8.noarch.rpm

默认会安装的是mysql5.7,如果需要5.6或者5.5的话可以修改repo文件,我装的是5.6

vi /etc/yum.repos.d/mysql-community.repo

把对应版本的

[mysql56-community]下面的

enabled=0改成enabled=1

[mysql57-community]下面的

enabled=1改成enabled=0

安装mysql

yum install mysql-server mysql-devel

关闭mysql的自启动

chkconfig mysqld off

创建文件夹用来放DRBD用的mysql数据

mkdir /drbd/mysql

chmod 700 /drbd/mysql

chown mysql.mysql /drbd/mysql

以下只需要在主机上配置,备机反正是用drbd里的数据,只要保证mysql能启动就可以了。

编辑配置文件

按主机的性能自行修改,以下是我4核8G内存主机配置

vi /etc/my.cnf

  1. [mysqld]
  2.  
  3. datadir=/var/lib/mysql
  4.  
  5. socket=/var/lib/mysql/mysql.sock
  6.  
  7. character-set-server = utf8
  8.  
  9. collation-server = utf8_bin
  10.  
  11. skip-character-set-client-handshake
  12.  
  13. skip-external-locking
  14.  
  15. symbolic-links=
  16.  
  17. innodb_buffer_pool_size = 2048M
  18.  
  19. innodb_log_file_size = 512M
  20.  
  21. sort_buffer_size = 2M
  22.  
  23. innodb_additional_mem_pool_size = 30M
  24.  
  25. innodb_log_buffer_size = 8M
  26.  
  27. key_buffer_size = 16M
  28.  
  29. innodb_data_file_path = ibdata1:1G
  30.  
  31. innodb_file_per_table
  32.  
  33. log-error=/var/log/mysqld.log
  34.  
  35. pid-file=/var/run/mysqld/mysqld.pid

挂载

mount -o bind /drbd/mysql /var/lib/mysql/

启动mysql

service mysqld start

创建zabbix用的DB和账号

>create database zabbix;

>grant all privileges on zabbix.* to zabbix@localhost identified by 'YOURPWD' ;

>flush privileges;

>exit

3,zabbix安装配置

安装zabbix2.4.1的repodata

wget http://repo.zabbix.com/zabbix/2.4/rhel/6/x86_64/zabbix-release-2.4-

1.el6.noarch.rpm

rpm -ivh zabbix-release-2.4-1.el6.noarch.rpm

安装zabbix

yum install zabbix-server-mysql zabbix-web-mysql zabbix-get zabbix-agent

因为agent不需要冗余,设置开机启动

chkconfig zabbix-agent on

创建文件夹用来放DRBD用的zabbix配置文件

mkdir /drbd/zabbix

把http的配置也改了

vi /etc/httpd/conf.d/zabbix.conf

php_value date.timezone Asia/Shanghai

以下同样只需要在主机上配置,备机只要保证zabbix能启动就可以了。

导入zabbix的模板

cd /usr/share/doc/zabbix-server-mysql-2.4.7/create

mysql zabbix < schema.sql

mysql zabbix < images.sql

mysql zabbix < data.sql

配置zabbix_server.conf

vi /etc/zabbix/zabbix_server.conf

  1. #必须的参数
  2.  
  3. DBPassword=YOURPWD
  4.  
  5. #以下参数是性能优化参数
  6.  
  7. StartPollers=
  8.  
  9. StartPollersUnreachable=
  10.  
  11. StartTrappers=
  12.  
  13. StartPingers=
  14.  
  15. StartDiscoverers=
  16.  
  17. MaxHousekeeperDelete=
  18.  
  19. CacheSize=64M
  20.  
  21. StartDBSyncers=
  22.  
  23. HistoryCacheSize=128M
  24.  
  25. ValueCacheSize=128M
  26.  
  27. TrendCacheSize=4M
  28.  
  29. HistoryTextCacheSize=16M

如果需要的话,可以把mysql的patitioning也做了。

参考我的另一篇博文

http://www.cnblogs.com/justbio/p/5379010.html

开启zabbix

service zabbix-server start

service zabbix-agent start

service httpd start

打开网页配置zabbix的页面

http://192.168.0.6/zabbix

配置完成后关闭zabbix

service zabbix-server stop

service zabbix-agent stop

service httpd stop

service mysqld stop

因为最终要同步的文件夹是/drbd,

所以把zabbix的配置文件拷贝到DRBD的文件夹中。

加上-p是为了保持权限不变

cp -rp /etc/zabbix/* /drbd/zabbix/

写个文件到/drbd/mysql和/drbd/zabbix里面去

touch /drbd/zabbix/1.txt

挂载看看有没有问题

mount -o bind /drbd/zabbix/ /etc/zabbix/

ls /etc/zabbix/

1.txt web zabbix_agentd.conf zabbix_agentd.d zabbix_server.conf

里面都能看到有1.txt

记住umount掉

umount /var/lib/mysql/

umount /etc/zabbix/

关闭drbd

/etc/init.d/drbd stop

4,pacemaker安装配置

首先确认没有进程在启动着(zabbix-agent没关系)

ps -ef |grep zabbix |grep -v grep

ps -ef |grep drbd |grep -v grep

ps -ef |grep http |grep -v grep

ps -ef |grep mysql |grep -v grep

安装pacemaker的源

因为clusterlabs.org的pacemaker源默认安装的是cman,我还是喜欢用corosync和heartbeat

所以用的是linux-ha.jp的源,墙内下载源可能要FQ。

wget https://osdn.jp/frs/redir.php?m=iij&f=%2Flinux-ha%2F63919%2Fpacemaker-repo-

1.1.13-1.1.el6.x86_64.rpm

rpm -ivh pacemaker-repo-1.1.13-1.1.el6.x86_64.rpm

安装pacemaker

yum install pacemaker corosync crmsh glib2

配置corosync

vi /etc/corosync/corosync.conf

  1. service {
  2.  
  3. name: pacemaker
  4.  
  5. ver:
  6.  
  7. use_mgmtd: yes
  8.  
  9. }
  10.  
  11. totem {
  12.  
  13. version:
  14.  
  15. token:
  16.  
  17. consensus:
  18.  
  19. rrp_problem_count_timeout:
  20.  
  21. rrp_mode: active
  22.  
  23. interface {
  24.  
  25. member {
  26.  
  27. memberaddr: 192.168.222.196
  28.  
  29. }
  30.  
  31. member {
  32.  
  33. memberaddr: 192.168.222.197
  34.  
  35. }
  36.  
  37. ringnumber:
  38.  
  39. bindnetaddr: 192.168.222.0
  40.  
  41. mcastport:
  42.  
  43. ttl:
  44.  
  45. }
  46.  
  47. transport: udpu
  48.  
  49. }
  50.  
  51. logging {
  52.  
  53. fileline: off
  54.  
  55. to_stderr: no
  56.  
  57. to_logfile: yes
  58.  
  59. logfile: /var/log/cluster/corosync.log
  60.  
  61. to_syslog: yes
  62.  
  63. debug: off
  64.  
  65. timestamp: on
  66.  
  67. logger_subsys {
  68.  
  69. subsys: QUORUM
  70.  
  71. debug: off
  72.  
  73. }
  74.  
  75. }
  76.  
  77. quorum {
  78.  
  79. provider: corosync_votequorum
  80.  
  81. expected_votes:
  82.  
  83. }

启动pacemaker

service corosync start

service pacemaker start

编辑crm配置文件

crm

>configure

>edit

  1. node : ZAB01
  2.  
  3. node : ZAB02
  4.  
  5. primitive res_drbd_r0 ocf:linbit:drbd \
  6.  
  7. params drbd_resource=r0 \
  8.  
  9. op start interval= timeout= \
  10.  
  11. op stop interval= timeout=
  12.  
  13. primitive res_httpd apache \
  14.  
  15. params configfile="/etc/httpd/conf/httpd.conf" \
  16.  
  17. op start interval= timeout= \
  18.  
  19. op stop interval= timeout= \
  20.  
  21. op monitor interval= timeout=
  22.  
  23. primitive res_ip IPaddr2 \
  24.  
  25. \
  26.  
  27. op monitor interval= timeout=
  28.  
  29. primitive res_mount Filesystem \
  30.  
  31. params device="/dev/drbd0" fstype=ext4 directory="/drbd" options=noatime \
  32.  
  33. op monitor interval= timeout= \
  34.  
  35. op start interval= timeout= \
  36.  
  37. op stop interval= timeout=
  38.  
  39. primitive res_mount_mysql Filesystem \
  40.  
  41. params device="/drbd/mysql" fstype=ext4 directory="/var/lib/mysql"
  42.  
  43. options="bind,noatime" \
  44.  
  45. op monitor interval= timeout= \
  46.  
  47. op start interval= timeout= \
  48.  
  49. op stop interval= timeout=
  50.  
  51. primitive res_mount_zabbix Filesystem \
  52.  
  53. params device="/drbd/zabbix" fstype=ext4 directory="/etc/zabbix" options="bind,noatime" \
  54.  
  55. op monitor interval= timeout= \
  56.  
  57. op start interval= timeout= \
  58.  
  59. op stop interval= timeout=
  60.  
  61. primitive res_mysqld mysql \
  62.  
  63. op start interval= timeout= \
  64.  
  65. op stop interval= timeout= \
  66.  
  67. op monitor interval= timeout=
  68.  
  69. primitive res_srcaddr IPsrcaddr \
  70.  
  71. params ipaddress=192.168.0.8 \
  72.  
  73. op monitor interval= timeout=
  74.  
  75. primitive res_zabbix_server lsb:zabbix-server \
  76.  
  77. op start interval= timeout= \
  78.  
  79. op stop interval= timeout= \
  80.  
  81. op monitor interval= timeout=
  82.  
  83. group zabbix res_mount res_mount_mysql res_mount_zabbix res_ip res_srcaddr \
  84.  
  85. res_httpd res_mysqld res_zabbix_server
  86.  
  87. ms ms_drbd_r0 res_drbd_r0 \
  88.  
  89. meta master-max= master-node-max= \
  90.  
  91. clone-max= clone-node-max= notify=true
  92.  
  93. location l_zabbix zabbix : VCCZAB01V
  94.  
  95. colocation c_zabbix inf: zabbix ms_drbd_r0:Master
  96.  
  97. order o_zabbix inf: ms_drbd_r0:promote zabbix:start
  98.  
  99. property cib-bootstrap-options: \
  100.  
  101. have-watchdog=false \
  102.  
  103. dc-version=-6052cd1 \
  104.  
  105. cluster-infrastructure=corosync \
  106.  
  107. \
  108.  
  109. no-quorum-policy=ignore \
  110.  
  111. stonith-enabled=false

配置完成后

>commit

退出crm后打crm_mon查看

crm_mon

  1. ……
  2.  
  3. Online: [ ZAB01 ZAB02 ]
  4.  
  5. Master/Slave Set: ms_drbd_r0 [res_drbd_r0]
  6.  
  7. Masters: [ ZAB01 ]
  8.  
  9. Slaves: [ ZAB02 ]
  10.  
  11. Resource Group: zabbix
  12.  
  13. res_mount (ocf::heartbeat:Filesystem): Started ZAB01
  14.  
  15. res_mount_mysql (ocf::heartbeat:Filesystem): Started ZAB01
  16.  
  17. res_mount_zabbix (ocf::heartbeat:Filesystem): Started ZAB01
  18.  
  19. res_ip (ocf::heartbeat:IPaddr2): Started ZAB01
  20.  
  21. res_srcaddr (ocf::heartbeat:IPsrcaddr): Started ZAB01
  22.  
  23. res_httpd (ocf::heartbeat:apache): Started ZAB01
  24.  
  25. res_mysqld (ocf::heartbeat:mysql): Started ZAB01
  26.  
  27. res_zabbix_server (lsb:zabbix-server): Started ZAB01

查看drbd状态

service drbd status

刚开始会显示同步的进度条,同步完成后,两边的状态分别如下

主机上

  1. drbd driver loaded OK; device status:
  2.  
  3. version: (api:/proto:-)
  4.  
  5. GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, -- ::
  6.  
  7. m:res cs ro ds p mounted fstype
  8.  
  9. :r0 Connected Primary/Secondary UpToDate/UpToDate C /drbd ext4
  10.  
  11. :r0 Connected Primary/Secondary UpToDate/UpToDate C /etc/zabbix ext4
  12.  
  13. :r0 Connected Primary/Secondary UpToDate/UpToDate C /var/lib/mysql ext4

备机上

  1. drbd driver loaded OK; device status:
  2.  
  3. version: (api:/proto:-)
  4.  
  5. GIT-hash: 83ca112086600faacab2f157bc5a9324f7bd7f77 build by dag@Build64R6, -- ::
  6.  
  7. m:res cs ro ds p mounted fstype
  8.  
  9. :r0 Connected Secondary/Primary UpToDate/UpToDate C

系统构筑完成

测试:

关闭主机的pacemaker和corosync

service pacemaker stop

service corosync stop

然后在备机上查看状态

crm_mon

  1. ……
  2.  
  3. Online: [ZAB02 ]
  4.  
  5. Offline: [ZAB01 ]
  6.  
  7. Master/Slave Set: ms_drbd_r0 [res_drbd_r0]
  8.  
  9. Masters: [ ZAB02 ]
  10.  
  11. Resource Group: zabbix
  12.  
  13. res_mount (ocf::heartbeat:Filesystem): Started ZAB02
  14.  
  15. res_mount_mysql (ocf::heartbeat:Filesystem): Started ZAB02
  16.  
  17. res_mount_zabbix (ocf::heartbeat:Filesystem): Started ZAB02
  18.  
  19. res_ip (ocf::heartbeat:IPaddr2): Started ZAB02
  20.  
  21. res_srcaddr (ocf::heartbeat:IPsrcaddr): Started ZAB02
  22.  
  23. res_httpd (ocf::heartbeat:apache): Started ZAB02
  24.  
  25. res_mysqld (ocf::heartbeat:mysql): Started ZAB02
  26.  
  27. res_zabbix_server (lsb:zabbix-server): Started ZAB02

service drbd status

  1. drbd driver loaded OK; device status:
  2.  
  3. version: (api:/proto:-)
  4.  
  5. GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, -- ::
  6.  
  7. m:res cs ro ds p mounted fstype
  8.  
  9. :r0 Connected Primary/Unknow UpToDate/DUnknown C /drbd ext4
  10.  
  11. :r0 Connected Primary/Unknow UpToDate/DUnknown C /etc/zabbix ext4
  12.  
  13. :r0 Connected Primary/Unknow UpToDate/DUnknown C /var/lib/mysql ext4

自动电话,自动微信,自动邮件报警可以参考我的其他博文

自动电话报障 : http://www.cnblogs.com/justbio/p/5378777.html

自动微信报障 : http://www.cnblogs.com/justbio/p/5360160.html

自动邮件报障 : http://www.cnblogs.com/justbio/p/5359918.html

ZABBIX冗余架构构筑(Centos6.4+pacemaker+corosync+drbd)的更多相关文章

  1. zabbix 3.2 高可用实现方式二-pacemaker+corosync实现zabbix高可用集群

    一.pacemaker 是什么 1.pacemaker 简单说明 2.pacemaker 由来 二.pacemaker 特点 三.pacemaker 内部结构 1.群集组件说明: 2.功能概述 四.c ...

  2. corosync+pacemaker and drbd实现mysql高可用集群

    DRBD:Distributed Replicated Block Device 分布式复制块设备,原理图如下 DRBD 有主双架构和双主架构的,当处于主从架构时,这个设备一定只有一个节点是可以读写的 ...

  3. CentOS 6.5环境实现corosync+pacemaker实现DRBD高可用

    DRBD (Distributed Replicated Block Device)分布式复制块设备,它是 Linux 平台上的分散式储存系统,通常用于高可用性(high availability, ...

  4. mfs分布式文件系统,分布式存储,高可用(pacemaker+corosync+pcs),磁盘共享(iscsi),fence解决脑裂问题

    一.MFS概述 MooseFS是一个分布式存储的框架,其具有如下特性:(1)通用文件系统,不需要修改上层应用就可以使用(那些需要专门api的dfs很麻烦!).(2)可以在线扩容,体系架构可伸缩性极强. ...

  5. [ Openstack ] Openstack-Mitaka 高可用之 Pacemaker+corosync+pcs 高可用集群

    目录 Openstack-Mitaka 高可用之 概述    Openstack-Mitaka 高可用之 环境初始化    Openstack-Mitaka 高可用之 Mariadb-Galera集群 ...

  6. 手动配置三台虚拟机pacemaker+corosync并添加httpd服务

    创建三台虚拟机,实验环境:centos7.1,选择基础设施服务安装. 每台虚拟机两块网卡,第一块为pxe,第二块连通外网,手动为两块网卡配置IP.网关,使它们都能ping通外网并可以互相通过hostn ...

  7. pacemaker+corosync/heartbeat对比及资源代理RA脚本

    一.Pacemaker概念 (1)Pacemaker(心脏起搏器),是一个高可用的群集资源管理器.它实现最大可用性资源管理的节点和资源级故障检测和恢复,通过使用首选集群基础设施(Corosync或He ...

  8. Pacemaker+Corosync搭建PostgreSQL集群

    https://my.oschina.net/aven92/blog/518928 · PostgreSQL中国社区: http://postgres.cn/index.php/home · Post ...

  9. postgresql双机热备、高可用方案(采用pacemaker+corosync实现)

    http://blog.csdn.net/qguanri/article/details/51151974 需求描述 我们有两台centos7的数据库主机A.B.要对A.B实现双机热备,A作为数据库m ...

随机推荐

  1. x-requested-with 请求头 区分ajax请求还是普通请求(转)

    在服务器端判断request来自Ajax请求(异步)还是传统请求(同步): 两种请求在请求的Header不同,Ajax 异步请求比传统的同步请求多了一个头参数 1.传统同步请求参数 accept  t ...

  2. strstr函数的用法

    C语言函数 编辑 包含文件:string.h 函数名: strstr 函数原型:      extern char *strstr(char *str1, const char *str2); 语法: ...

  3. phpstorm设置

    phpstorm版本为10.0.3,设置自动换行如下: 快捷方式: 打开新的文件:ctrl+shift+N 格式化:ctrl+alt+L 全局搜索:ctrl+shift+F 更换默认快捷键如下,其实右 ...

  4. textarea格式显示问题

    在 textarea 表单标签中, 当保存有换行的样式时,一般的方法有: 注:这里的info 为要显示的内容: 一.保存后在textarea 表单标签中显示时: info.replace(/\n/g, ...

  5. SUSE zypper failed to work

    记录解决的一个问题. 在SUSE 中zypper 不能使用,错误如下: hostname~ # zypper install make Refreshing service 'packman'.Une ...

  6. 第四章 springboot + swagger(转载)

    此篇博客转发自:http://www.cnblogs.com/java-zhao/p/5348113.html swagger用于定义API文档. 好处: 前后端分离开发 API文档非常明确 测试的时 ...

  7. winxp计算机管理中服务详解

    winxp计算机管理中服务详解01 http://blog.sina.com.cn/s/blog_60f923b50100efy9.html http://blog.sina.com.cn/s/blo ...

  8. .net加密解密

    .net加密概述 .net加密编程模型 .net加密解密类

  9. javascript父级鼠标移入移出事件中的子集影响父级的处理方法

    一.我们先分析其产生的原因: 1.当鼠标从父级移入子集时触发了父级的两个事件:a.父级的mouseout事件(父级离开到子集):b.由于事件冒泡影响,又触发了父级的mouseover事件(父级移入父级 ...

  10. 解决jquery1.9不支持browser对象的问题||TypeError: $.browser is undefined

    在插件的源代码里插入如下代码: (function(jQuery){ if(jQuery.browser) return; jQuery.browser = {}; jQuery.browser.mo ...