Chinaunix首页 | 论坛 | 博客
  • 博客访问: 657215
  • 博文数量: 220
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1961
  • 用 户 组: 普通用户
  • 注册时间: 2014-11-04 21:54
文章分类

全部博文(220)

文章存档

2018年(1)

2015年(140)

2014年(79)

我的朋友

分类: 系统运维

2015-08-20 14:47:18

http://guanqianjian.blog.51cto.com/9652236/1605084
http://ljbaby.blog.51cto.com/10002758/1684301


                   编译安装MySQL实现corosync+pacemaker+drbd+mysql高可用 


实验拓扑图:


实验节点:节点一:IP172.16.249.248    host:  node1.stu11.com  node1 

           节点二:IP172.16.249.122    host: node3.stu11.com    node3   


wKiom1S58bCwx945AADEhiTB-SY859.jpg     


 

节点二的配置前准备:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
##########下载安装drbd,以及依赖的包########
[root@node3 ~ ]# rpm -ivh drbd84-utils-8.9.1-1.el6.elrepo.x86_64.rpm kmod-drbd84-8.4.5-504.1.el6.x86_64.rpm     
[root@node3 ~ ]# yum install corosync pacemaker -y ####安装corosync和pacemaker
[root@node3 .ssh ]#fdisk /dev/sda       ####创建用作drbd的磁盘,我这里使用分区模拟了
Command (m for help): n
Command action e  extended p  
primary partition (1-4) p
Partition number (1-4): 3
First cylinder (7859-15665, default 7859):
Using default value 7859
Last cylinder,
+cylinders or +size{K,M,G} (7859-15665, default 15665): +2G ##2G同步快一点,实际大小看生产需要
Command (m for help): w
[root@node3 .ssh ]#partx -a /dev/sda

 节点一配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@node1 ~ ]# rpm -ivh drbd84-utils-8.9.1-1.el6.elrepo.x86_64.rpm kmod-drbd84-8.4.5-504.1.e
[root@node1 ~ ]# yum install corosync pacemaker -y
[root@node1 ~ ]#fdisk /dev/sda
Command (m forhelp): n
Command action e  extended  p  
primary partition (1-4) p
Partition number(1-4): 3
First cylinder(7859-15665, default 7859):
Using default value7859
Last cylinder,
+cylinders or +size{K,M,G} (7859-15665, default 15665): +2G 
Command (m forhelp): w
[root@node1 ~ ]#partx -a /dev/sda

 ##############################编辑corosync配置文件##############################

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
[root@node1 corosync]# cp corosync.conf.example corosync.conf
[root@node1 corosync]# vim corosync.conf    ##仅显示的是在使用的部分
  2 compatibility: whitetank
  3
  4 totem {
  5     version: 2
 10     secauth: on
 12     threads: 0
 17     interface {
 19         ringnumber: 0
 25         bindnetaddr: 172.16.0.0     
 39         mcastaddr: 239.22.11.123  ##指定组播地址
 44         mcastport: 5405
 49         ttl: 1
 50     }
 51 }
 53 logging {
 57     fileline: off
 60     to_stderr: no
 63     to_logfile: yes
 64    logfile: /var/log/cluster/corosync.log
 66     to_syslog: yes
 68     debug: off
 72     timestamp: on
 73    logger_subsys {
 74        subsys: AMF
 75        debug: off
 76     }
 77 }
 78 service {         ####将pacemaker以模块方式和corosync结合工作
 79    ver: 0
 80    name: pacemaker
 81 }

##########################################生成密钥########################################

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@node1 yum.repos.d ]# corosync-keygen
Writing corosync key
to /etc/corosync/authkey.
[root@node1 drbd.d]# ls
global_common.conf  global_common.conf.bak  mydisk.res
[root@node1 corosync]# ll
total 24
-r-------- 1 root
root  128 Jan 17 09:38 authkey    ###保证权限是600或400
-rw-r--r-- 1 root
root 2701 Jan 17 09:38 corosync.conf
[root@node1 corosync]# scp corosync.conf authkey node3:/etc/corosync/
corosync.conf                   100% 2701     2.6KB/s   00:00   
authkey                         100%  128     0.1KB/s  00:00 
[root@node3 corosync ]# ll    //查看各节点密钥文件权限都是600,默认是不需要修改的。
total 24
-r-------- 1 root
root  128 Jan 17 09:38 authkey

############################配置各节点DRBD配置文件配置##############################################

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
[root@node1 drbd.d]# vim global_common.conf
  5 global {
  6    usage-count no;
  7     #minor-count dialog-refresh disable-ip-verification
  8 }
 10 common {
 11    handlers {
 17         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";
 18         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";
 19         local-io-error "/usr/lib/drbd/notify-io-error.sh;/usr/lib/drbd/notify-emergency-shutdown.sh; echo o > /proc    /sysrq-trigger ; halt -f";
 25     }
 26
 27    startup {
 28        # wfc-timeout degr-wfc-timeout outdated-wfc-timeout wait-after-sb
 29     }
 30
 31    options {
 32        # cpu-mask on-no-data-accessible
 33     }
 35     disk {
 36          on-io-error detach; ###磁盘故障直接拆除
 41     }
 42
 43    net {
 44         protocol C; ###最稳妥的协议
 45         cram-hmac-alg "sha1";
 46         shared-secret "test";
 54     }
 56 syncer {
 57    rate 100M;
 58
 59 }
 60 }    //一定要注意最后一个引号,是全局段的。


##################################配值DRBD资源文件##################################################

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 [root@node1 drbd.d ]#vim mydisk.res 
  1 resource mydisk {
  2    on node1.stu11.com {
  3        device /dev/drbd0;
  4        disk /dev/sda3;
  5        address 172.16.249.248:7789;
  6        meta-disk internal;
  7        }
  8        on node3.stu11.com {
  9        device /dev/drbd0;
 10        disk /dev/sda3;
 11        address 172.16.249.122:7789;
 12        meta-disk internal;
 13        }
 14 }

#################################同步两个节点的配置文件###########################################

1
2
3
[root@node1 drbd.d]# scp global_common.conf mydisk.res node3:/etc/drbd.d/
global_common.conf                    100% 2101     2.1KB/s   00:00   
mydisk.res                            100%  257     0.3KB/s   00:00

##################################各节点资源初始化#################################################

1
2
3
4
5
6
7
8
[root@node1 corosync]# drbdadm create-md mydisk
initializing
activity log
NOT initializing
bitmap
Writing meta data...
New drbd meta data
block successfully created.
1
2
3
4
5
6
7
8
9
10
11
[root@node3 drbd.d]# drbdadm create-md mydisk
initializing
activity log
NOT initializing
bitmap
Writing meta data...
New drbd meta data
block successfully created.
[root@node3 corosync]# service drbd start
Starting DRBD
resources:

##########################################启动各节点DRBD###########################################

1
2
3
[root@node1 corosync]# service drbd start
Starting DRBD
resources:

wKiom1S5-P-yT5ifAADHFsB3Q2U098.jpg [root@node1 corosync ]# drbd-overview     //查看节点状态

 0:mydisk/0  Connected Secondary/Secondary Inconsistent/Inconsistent

##########################提升一个节点为主节点:并且查看数据在同步######################################

1
2
3
4
5
6
[root@node1 corosync]# drbdadm primary --force mydisk
[root@node1 corosync]# drbd-overview
 0:mydisk/0 
SyncSource Primary/Secondary UpToDate/Inconsistent
[>...................]
sync'ed:  7.1% (1959028/2103412)K

wKioL1S5-zLRwAzuAAGTM_9o4Nw385.jpg ##################################对DRBD格式化####################################################

[root@node1 corosync ]# mke2fs -t ext4 /dev/drbd0   //对主节点格式化

wKiom1S5-sOy7yq9AADDFnFRipc185.jpg #####################################挂载创建测试文件############################################

1
2
3
4
5
6
7
[root@node1 corosync ]# mount /dev/drbd0 /mnt/  
[root@node1 corosync]# cd /mnt/
[root@node1 mnt ]#ls
lost+found
[root@node1 mnt ]#touch test.txt
[root@node1 mnt ]#ls
lost+found  test.txt

 ##################### ##降为从节点把另一个节点升为主节点挂载查看测试文件########################

1
2
3
4
5
6
7
[root@node1 ~ ]# umount /mnt/     
[root@node1 ~ ]#drbd
drbdadm        drbdmeta       drbd-overview  drbdsetup     
[root@node1 ~ ]#drbdadm secondary mydisk
[root@node1 ~ ]#drbd-overview
 0:mydisk/0 
Connected Secondary/Secondary UpToDate/UpToDate

#####################节点二升级主节点,查看测试文件#################################

wKiom1S5-_ihLcNtAAEVRvGonog788.jpg

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
[root@node3 /]# yum groupinstall "Development Tools" -y
[root@node3 /]# yum install "Server Platform Developmnet"
[root@node3 ~ ]# yum install cmake -y     //mariadb是使用cmake的编译安装的
[root@node3 ~ ]# tar xf mariadb-10.0.13.tar.gz -C /usr/local/
[root@node3 local ]#groupadd -g 306 mysql
[root@node3 local ]#useradd -u 306 -g 306 mysql
[root@node3 local ]#id mysql
uid=306(mysql) gid=306(mysql) groups=306(mysql)
[root@node3 local ]#mkdir /mydata
[root@node3 ~ ]#umount /mnt/     
[root@node3 local ]#chown -R mysql:mysql /mydata
[root@node3 ~ ]#mount /dev/drbd0 /mydata     
[root@node3 mariadb-10.0.13 ]#cmake .
            -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \##指定安装路径
            -DMYSQL_DATADIR=/mydata \                ##指定库位置          
            -DWITH_INNOBASE_STORAGE_ENGINE=1 \       ##指定存储引擎          
            -DWITH_ARCHIVE_STORAGE_ENGINE=1\                      
            -DWITH_BLACKHOLE_STORAGE_ENGINE=1\          
            -DWITH_READLINE=1\                                
            -DWITH_SSL=system\                      ##定制SSL功能          
            -DWITH_ZLIB=system\                     ##定制ZLIB功能          
            -DWITH_LIBWRAP=0\           
            -DMYSQL_UNIX_ADDR=/tmp/mysql.sock\      ##sock位置          
            -DDEFAULT_CHARSET=utf8 \                 ##默认字符集         
            -DDEFAULT_COLLATION=utf8_general_ci  
#make 
#make之后
Linking CXX
executable my_safe_process
[100%] Built target
my_safe_process
[root@node3 mysql ]#ls /mydata/
aria_log.00000001  aria_log_control  ibdata1 
ib_logfile0  ib_logfile1  mysql performance_schema  test
[root@node3support-files ]# cp my-large.cnf /etc/mysql/my.cnf
[root@node3support-files ]# cd /etc/mysql
[root@node3 mysql ]#ls
my.cnf
[root@node3 mysql ]#vim my.cnf  #####在mysqld添加如下
innodb_file_per_table = on
datadir = /mydata
[root@node3 mysql ]#
service mysqld start
Starting
MySQL...                                         
[  OK  ]
[root@node3 mysql ]# mysql   //登陆已经正常了
Welcome to the MySQL
monitor.  Commands end with ; or \g.
Your MySQL
connection id is 4
Server version: 5.5.5-10.0.13-MariaDB-log Source
distribution
Copyright (c) 2000,
2013, Oracle and/or its affiliates. All rights reserved.

 wKioL1S6AKiBdZmaAACOJ8rbeRU363.jpg ########################下面,就可以使用crmsh配置资源了。###########################


下面,就可以使用crmsh配置资源了。

首先:保证我们两个节点的服务不会开机自动启动。

wKioL1S6AhCjIfplAADGdV1gZTs642.jpgwKiom1S6AV3BIyK6AAEBu0s2HYQ789.jpg ##################启动两个节点的corosync##########################################################

1
2
3
[root@node3 ~ ]#service corosync start
Starting Corosync
Cluster Engine (corosync):              [  OK  ]
1
2
3
4
5
6
7
8
9
10
11
12
[root@node3 ~ ]# service mysqld stop    ##停掉我们使用的所有资源
Stopping
mysqld:                                          [  OK  ]
[root@node3 ~ ]#umount /mydata/
[root@node3 ~ ]#drbd-overview
 0:mydisk/0 Connected Primary/Secondary UpToDate/UpToDate
[root@node3 ~ ]#drbdadm secondary mydisk
[root@node3 ~ ]#drbd-overview
 0:mydisk/0 Connected Secondary/Secondary UpToDate/UpToDate
[root@node3 ~ ]#service drbd stop
Stopping all DRBD
resources: .

wKioL1S6Av7xuRf-AAE6aE3fG9I709.jpg 安装crmsh    ##安装并且定义

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
[root@node3 ~ ]# yum install crmsh-2.1-1.6.x86_64.rpm
[root@node3 ~ ]# crm
crm(live)# configure
#####################第一步:定义前提属性#############################
crm(live)configure# property stonith-enabled=false            //禁用stonish
crm(live)configure# property no-quorum-policy=ignore    //定义无票策略
#####################第二步:定义DRBD主资源###########################
crm(live)configure#
primitive mydrbd ocf:linbit:drbd params drbd_resource="mydisk" op
monitor role=Master timeout=20 interval=10 op monitor role=Slave timeout=20
interval=10 op start timeout=240 op stop timeout=100
####################第三步:定义DRBD主从资源##########################
crm(live)configure#ms ms_mydrbd mydrbd meta master-max="1" master-node-max="1"
clone-max="2" clone-node-max="1" notify="true"
####################第四步:定义文件系统资源##########################
crm(live)configure#primitive myfs ocf:heartbeat:Filesystem params device=/dev/drbd0
directory=/mydata fstype="ext4" op monitor timeout=40 interval=20 op start timeout=60 op stop timeout=60
####################第五步:定义协同约束##############################
crm(live)configure#colocation mydrbd-master_with_myfs inf: ms_mydrbd:Master myfs
crm(live)configure#
####################第六步:定义顺序约束##############################
crm(live)configure#order ms_mydrbd-master_before_myfs inf: ms_mydrbd:promote myfs:start
#################第七步:定义流动IP###################################
crm(live)configure#primitive myvip ocf:heartbeat:IPaddr params ip=172.16.11.11 op monitor
timeout=20 interval=10 op start timeout=20 op stop timeout=20
###################第八步:定义mysql服务资源############################
crm(live)configure#primitive myservice lsb:mysqld op monitor timeout=20 interval=20
crm(live)configure#
###################第九步:定义他们为一个组资源########################
crm(live)configure#group mygroup myvip myfs ms_mydrbd:Master myservice
####################第十步:定义他们的协同约束#########################
crm(live)configure#order myfs_before_myservice inf: myfs:start myservice:start
crm(live)configure# commit     ##提交
interval in monitor_Master must be unique
crm(live)configure#show     ##查看我们定义的所有资源

wKiom1S6A5azjLKOAAVVzvgpk14762.jpgwKiom1S6A_Cj3MhEAACrW42JB6g335.jpg wKiom1S6BBvRHUnUAACjCpLd-ME589.jpg Corosync简介

Corosync是高可用集群中基础事务层 (Messaging Layer)的一个实现方案与heartbeat的功能类似,主要用来传递集群的事务信息,但是Corosync的功能更加强大,正在逐渐地取代heartbeat。Corosync在传递信息的时候可以通过一个简单的配置文件来定义信息传递的方式和协议等。


Pacemaker简介

Pacemaker是一个集群资源管理器,从heartbeat v3版本中分裂出来,功能强大。它利用集群事务层提供的组件对各节点进行资源管理及监控并从节点或资源级别的故障中恢复,以实现群集服务的最大可用性。


DRBD

使用DRBD实现对MariaDB数据存放目录的备份和高可用。关于DRBD的具体应用,可参考前面的博客。


实现过程

实验环境:

192.168.1.102    时间服务器

192.168.1.126    node1

192.168.1.127    node2

node1和node2为集群的两个节点,在这两个节点上部署Corosync、Pacemaker及MariaDB,利用DRBD在这两个节点上创建两个对等的存储设备,用来存放MariaDB数据库的数据文件以实现故障时的切换。


配置集群的必要前提:

1)各节点时间同步

2)节点之间能够基于主机名相互访问

为了方便也可以在各节点之间实现SSH基于秘钥的通信。


利用ansible批量部署Corosync和Pacemaker

以下是role的目录结构:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[root@www roles]# tree
.
├── common
│   ├── files
│   │   ├── hosts
│   │   └── ntp.conf
│   └── tasks
│       └── main.yml
├── crmsh
│   ├── files
│   │   └── crmsh-2.1-1.6.x86_64.rpm
│   └── tasks
│       └── main.yml
└── ha
    ├── files
    │   ├── authkey
    │   └── corosync.conf
    ├── handlers
    │   └── main.yml
    └── tasks
        └── main.yml

common

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@www roles]# vim common/tasks/main.yml 
- name: hosts file
  copy: src=hosts dest=/etc/hosts
- name: sync time
  copy: src=ntp.conf dest=/etc/ntp.conf
- name: start ntpd
  service: name=ntpd state=started enabled=no
#############################################
[root@www roles]# vim common/files/ntp.conf 
................
server 192.168.1.102
................
#############################################
[root@www roles]# vim common/files/hosts 
................
192.168.1.126 node1.xiaoxiao.com node1
192.168.1.127 node2.xiaoxiao.com node2

common角色的作用就是将已经配置好的ntp服务配置文件及hosts文件发送至各节点,并启动ntp服务。实现集群的两个必要前提。

crmsh

crmsh角色用于将crmsh-2.1-1.6.x86_64.rpm安装包复制到各节点,并使用yum安装(yum install crmsh-2.1-1.6.x86_64.rpm)自动解决依赖关系。这个包由源提供,并且这个包依赖pssh,需要添加epel源。

crmsh是一个用户层的工具,用于配置集群资源。crmsh由SUSE提供。对应的工具还有pcs,这个由红帽提供,也是专用于corosync+pacemaker的资源配置工具。

ha

ha角色用于安装Corosync和Pacemaker,并为之添加配置文件,秘钥文件及启动服务。Corosync和Pacemaker安装包base源有提供可以直接安装。

Corosync的配置文件/etc/corosync/corosync.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
compatibility: whitetank
totem {
        version: 2                #版本
        secauth: on               #是否基于安全认证的方式验证每一个节点
        threads: 0                #启动的线程数(取决于cpu的核心),0表示不启用线程机制
        interface {
                ringnumber: 0     
                bindnetaddr: 192.168.1.0    #绑定在哪个网络地址上
                mcastaddr: 230.230.3.3      #多播地址
                mcastport: 5405             #用于传递多播信息的端口  
                ttl: 1
        }
}
logging {
        fileline: off
        to_stderr: no
        to_logfile: yes
        to_stderr: no
        to_logfile: yes                    #由程序自己记录日志
        logfile: /var/log/cluster/corosync.log #日志路径
        to_syslog: no                      #日志是否由rsyslog记录
        debug: off
        timestamp: on                      #每一条日志打上时间戳
        logger_subsys {
                subsys: AMF
                debug: off
        }
}
amk {
        mode: disabled
}
service {                   #以插件化的方式调用pacemaker
        ver:    1           #版本号
        name:   pacemaker
}
aisexec {                   #以哪个用户和组的身份来运行
        user: root
        group: root
}

wKiom1XMAibwNr7gAAHFZ_gEG2k772.jpg

1
2
3
4
5
[root@node1 ~]# corosync-keygen 
Corosync Cluster Engine Authentication key generator.
Gathering 1024 bits for key from /dev/random.
Press keys on your keyboard to generate entropy.
Press keys on your keyboard to generate entropy (bits = 768).

在生成秘钥文件过程中需要不断敲键盘才能完成执行过程,简单起见,可以使用/dev/urandom代替/dev/random。

1
2
[root@node1 ~]# mv /dev/random /dev/random.bak
[root@node1 ~]# mv /dev/urandom /dev/random

用完之后不要忘了改回来!!!


这里使用ansible部署,将已经配置好的主配置文件corosync.conf和秘钥文件authkey放在ha角色的files目录下。playbook如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[root@www roles]# vim ha/tasks/main.yml
- name: install corosync and pacemaker
  yum: name={{ item }} state=present
  with_items:
   - corosync
   - pacemaker
  tags: inst
- name: copy keyFile
  copy: src=authkey dest=/etc/corosync/authkey owner=root group=root mode=0400
  tags: authkey
- name: copy configute file
  copy: src=corosync.conf dest=/etc/corosync/corosync.conf
  tags: conf
- name: start corosync
  service: name=corosync state=started enabled=no
  tags: startCorosync
- name: start pacemaker
  service: name=pacemaker state=started enabled=no
  tags: startPacemaker

若要重启服务,需要先stop pacemaker,再stop corosync,然后再进行重启。配置ha.yml,并执行。

1
2
3
4
5
6
7
8
9
10
11
[root@www corosync]# vim ha.yml 
- name: install corosync and crmsh
  remote_user: root
  hosts: web
  roles:
  - common
  - ha
  - crmsh
#########################################
[root@www corosync]# ansible-playbook ha.yml 
......


使用drbd创建设备

配置global_common.conf文件及drbd资源文件(在各节点上),资源文件如下(drbd的具体应用在前面的博客):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@node1 ~]# vim /etc/drbd.d/dbdata.res 
resource dbdata {
 on node1.xiaoxiao.com {
        device /dev/drbd0;
        disk /dev/sdb1;
        address 192.168.1.126:7789;
        meta-disk internal;
 }
 on node2.xiaoxiao.com {
        device /dev/drbd0;
        disk /dev/sdb1;
        address 192.168.1.127:7789;
        meta-disk internal;
 }
}

在各节点上创建设备,启动服务并完成挂载。

1
2
3
4
5
6
7
8
9
############在控制节点上##################
[root@www ~]# ansible web -m shell -a 'drbdadm create-md dbdata'
[root@www ~]# ansible web -m shell -a 'service drbd start'
############node1上#####################
[root@node1 ~]# drbdadm primary --force resource
[root@node1 ~]# mkfs -t ext4 -b 1024 /dev/drbd0
[root@node1 ~]# mkdir /data
[root@node1 ~]# mount /dev/drbd0 /data
[root@node1 ~]# mkdir /data/mydata             #作为MariaDB的数据存放目录


安装MariaDB

这里使用二进制安装方式在各节点上安装MariaDB。在node2上也执行如下操作。

1
2
3
[root@node1 ~]# tar xf mariadb-10.0.10-linux-x86_64.tar.gz -C /usr/local/
[root@node1 ~]# cd /usr/local/
[root@node1 local]# ln -sv mariadb-10.0.10-linux-x86_64/ mysql

添加mysql用户mysql组,两个节点上的uid和gid都得一致,并修改目录权限

1
2
3
[root@www ~]# ansible web -m shell -a 'groupadd -g 300 mysql'
[root@www ~]# ansible web -m shell -a 'useradd -u 300 -g 300 mysql'
[root@www ~]# ansible web -m shell -a 'chown -R root:mysql /usr/local/mysql/*'

在node1上完成数据库的初始化(数据存放在drbd设备上,在一个节点上完成即可),在配置文件my.cnf中datadir要指向drbd设备挂载的目录/data下的mydata:

1
2
3
4
5
6
7
8
9
[root@www ~]# chown -R mysql:mysql /data/mydata
[root@node1 mysql]# mkdir /etc/mysql
[root@node1 mysql]# cp support-files/my-large.cnf /etc/mysql/my.cnf
[root@node1 mysql]# vim /etc/mysql/my.cnf
datadir=/data/mydata                    #指定数据存放目录
bind-address=192.168.1.200             #mysql服务仅监听在指定地址上
...........
############执行初始化脚本#####################
[root@node1 mysql]# ./scripts/mysql_install_db --user=mysql --datadir=/data/mydata/

同步配置文件,并添加启动脚本:

1
2
3
4
5
6
[root@node1 mysql]# scp -p /etc/mysql/my.cnf node2:/etc/mysql/
[root@www ~]# ansible web -m shell -a 'cp -a /usr/local/mysql/support-files/mysql.server /etc/rc.d/init.d/mysqld'
[root@www ~]# ansible web -m shell -a 'chkconfig --add mysqld'
############确保各服务开机不自动启动##############
[root@www ~]# ansible web -m shell -a 'chkconfig mysqld off'
[root@www ~]# ansible web -m shell -a 'chkconfig drbd off'

安装完成之后启动服务测试一下,看是否能够正常运行。必要的话,drbd主从切换,在另一个节点上也进行测试。


配置集群资源实现高可用

首先根据具体情况设置这两个参数的值stonith-enabled,no-quorum-policy。

1
2
3
4
[root@node1 ~]# crm
crm(live)# configure
crm(live)configure# property stonith-enabled=false
crm(live)configure# property no-quorum-policy=ignore

添加ip,mysqld,文件系统资源

1
2
3
crm(live)configure# primitive myip ocf:heartbeat:IPaddr params ip=192.168.1.200 op monitor timeout=20s interval=10s
crm(live)configure# primitive myserver lsb:mysqld op monitor timeout=15 interval=15
crm(live)configure# primitive dataFS ocf:heartbeat:Filesystem params device=/dev/drbd0 directory=/data fstype="ext4" op monitor timeout=40 interval=20 op start timeout=60 op stop timeout=60

添加drbd资源,并添加其克隆资源

1
2
crm(live)configure# primitive mydatadrbd ocf:linbit:drbd params drbd_resource=dbdata op monitor role=Master timeout=20 interval=10 op monitor role=Slave timeout=20 interval=20 op start timeout=240 op stop timeout=100
crm(live)configure# master ms_mydata mydatadrbd meta master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=true

定义资源约束及资源启动的先后顺序

1
2
3
4
5
6
crm(live)configure# colocation myip_with_myserver inf: myip myserver
crm(live)configure# colocation myserver_with_dataFS inf: myserver dataFS
crm(live)configure# colocation dataFS_with_ms_mydata inf: dataFS ms_mydata:Master
crm(live)configure# order ms_mydata_before_dataFS inf: ms_mydata:promote dataFS:start
crm(live)configure# order dataFS_before_myserver inf: dataFS:start myserver:start
crm(live)configure# order myip_before_myserver inf: myip myserver:start

定义完成之后进行验证,然后提交。

1
2
crm(live)configure# verify
crm(live)configure# commit

所有资源定义如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
crm(live)# configure show
node node1.xiaoxiao.com \
        attributes standby=off
node node2.xiaoxiao.com \
        attributes standby=off
primitive dataFS Filesystem \
        params device="/dev/drbd0" directory="/data" fstype=ext4 \
        op monitor timeout=40 interval=20 \
        op start timeout=60 interval=0 \
        op stop timeout=60 interval=0
primitive mydatadrbd ocf:linbit:drbd \
        params drbd_resource=dbdata \
        op monitor role=Master timeout=20 interval=10 \
        op monitor role=Slave timeout=20 interval=20 \
        op start timeout=240 interval=0 \
        op stop timeout=100 interval=0
primitive myip IPaddr \
        params ip=192.168.1.200 \
        op monitor timeout=20s interval=10s
primitive myserver lsb:mysqld \
        op monitor timeout=15 interval=15
ms ms_mydata mydatadrbd \
        meta master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=true
colocation dataFS_with_ms_mydata inf: dataFS ms_mydata:Master
colocation myip_with_myserver inf: myip myserver
colocation myserver_with_dataFS inf: myserver dataFS
order dataFS_before_myserver inf: dataFS:start myserver:start
order ms_mydata_before_dataFS inf: ms_mydata:promote dataFS:start
order myip_before_myserver inf: myip myserver:start
property cib-bootstrap-options: \
        dc-version=1.1.11-97629de \
        cluster-infrastructure="classic openais (with plugin)" \
        expected-quorum-votes=2 \
        stonith-enabled=false \
        no-quorum-policy=ignore \
        last-lrm-refresh=1439387136


查看集群的运行情况,显示所有资源运行在node2上。

wKiom1XMHQ6zrMUEAAMVssqxAc4416.jpgwKioL1XMH6ixFTKeAABwmYVsm44786.jpg

1
2
############node2上#####################
[root@node2 ~]# crm node standby

资源已全部切换至node1上

wKioL1XMJTCAZT9nAANkZR_6dTI124.jpg管理员在2009年8月13日编辑了该文章文章。

-->
阅读(2041) | 评论(0) | 转发(0) |
0

上一篇:通过socket连接nginx 优化php-fpm 性能 Php-fpm TcpSocket vs UnixSocket

下一篇:fssh--闪速批量远程命令执行利器源码发布啦

给主人留下些什么吧!~~