|
Mysql的写高可用,读的负载均衡
DRBD+MYSQL+HEARTBEAT+PACEMAKER+LVS+KEEPALIVE
说明:
1. 是Mysql的高可用集群
2. 通过Mysql的主从复制,实现mysql的读写分离。
3. 集群资源管理是用的是pacemaker,对应的配置文件是cib.xml,而非旧版本的haresources。但haresources比cib.xml简单很多。
4. 使用heartbeat实现Mysql主服务的高可用,keepalived实现从服务器的高可用。
###########架构简介############
##mysql主服务器+DRBD的主节点
IP: 192.168.1.104——>drbd1
##mysql主服务器(备用)+DRBD的从节点
IP: 192.168.1.105——>drbd2
##mysql从服务器(realserver)
IP:192.168.1.106——>RS1
192.168.1.107——>RS2
192.168.1.107——>RS3
##LVS的DR+keepalived的主节点
IP:192.168.1.109——>lvs1
##LVS的DR+keepalived的从节点
IP:192.168.1.110——>lvs2
##heartbeat所使用的VIP:
IP:192.168.1.111——>写数据库时,所使用的VIP
##lvs+keepalived所使用的VIP:
IP:192.168.1.112——>读数据库时,所使用的VIP
###########所需软件#############
1. drbd-8.4.3.tar.gz
2. mysql-5.5.28-linux2.6-x86_64.tar.gz9(二进制)
3. Reusable-Cluster-Components-glue--glue-1.0.9.tar.bz2
4. ClusterLabs-resource-agents-v3.9.2-0-ge261943.tar.gz
5. pacemaker_1.1.7.orig.tar.gz
6. keepalived-1.2.7-3.el6.x86_64.rpm
注:yum源的配置如下:
[local]
baseurl=file:///mnt
gpgcheck=0
[ha]
baseurl=file:///mnt/HighAvailability
gpgcheck=0
[LB]
baseurl=file:///mnt/LoadBalancer
gpgcheck=0
[server]
baseurl=file:///mnt/Server
gpgcheck=0
############Drbd的安装与配置#############
##Drbd的安装
1. tar xf drbd-8.4.3.tar.gz -C /usr/local/src
2. cd /usr/loca/src/drbd-8.4.3
3. ./configure \
>--prefix=/usr/local/drbd \
>--with-km \
>--with-distro=redhat
报错1:
configure: error: Cannot build utils without flex, either install flex or pass the --without-utils option.
解决方法:
yum -y install flex
4. make && make install
5. cp /usr/local/drbd/etc/rc.d/init.d/drbd /etc/init.d/drbd
6. chkconfig --add drbd
7. ln -sv /usr/local/drbd/etc/drbd.conf /etc/
8. ln -sv /usr/local/drbd/etc/drbd.d /etc/
9. modprobe drbd
注:以上操作在主从DRBD服务器上都需要做
##Drbd的配置
1. 用fdisk -c /dev/sdb 分出10G大小的/dev/sdb1
2. 配置/etc/drbd.d/global_common.conf
global {
usage-count yes;
}
common {
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";
}
startup {
wfc-timeout 120;
degr-wfc-timeout 120;
}
disk {
resync-rate 40M;
on-io-error detach;
fencing resource-only;
}
net {
protocol C;
cram-hmac-alg sha1;
shared-secret "mysql-ha";
csums-alg sha1;
verify-alg crc32c;
}
}
3. 配置/etc/drbd.d/r0.res
resource r0 {
device /dev/drbd0;
disk /dev/sdb1;
meta-disk internal;
on drbd1 {
address 192.168.1.104:7789;
}
on drbd2 {
address 192.168.1.105:7789;
}
}
4. drbdadm create-md r0
5. service drbd start
注:以上说有操作在主从节点都要进行
6. drbdadm primary r0
报错1:
0: State change failed: (-2) Need access to UpToDate data
Command 'drbdsetup primary 0' terminated with exit code 17
解决方法:
drbdadm -- --overwrite-data-of-peer primary all
7. mkfs -t ext4 /dev/drbd0
8. mkdir /data
9. mount /dev/drbd0 /data
#################MySQL的安装与配置#################
##MySQL的安装
1. tar xf mysql-5.5.28-linux2.6-x86_64.tar.gz -C /usr/local
2. ln -sv mysql-5.5.28-linux2.6-x86_64.tar.gz mysql
3. cd mysql
4. groupadd mysql
5. useradd mysql -g mysql -s /sbin/nologin -M -r
6. chown -R mysql.mysql .
7. chown -R mysql.mysql /data
8. scripts/mysql_install_db --user=mysql --datadir=/data
9. chown -R root .
10. cp support-files/mysql.server /etc/init.d/mysqld
11. cp support-files/my-large.cnf /data/my.cnf
12. ln -sv /data/my.cnf /etc/
13. ./bin/mysqld_safe --user=mysql &
14. 修改/etc/my.cnf
[mysqld]
datadir=/data
15. echo "PATH=$PATH:/usr/local/mysql/bin" > /etc/profile.d/mysql.sh
16. . /etc/profile
17. 修改/etc/init.d/mysqld
datadir=/data
注:以上同样的操作也要在mysql的三个从节点上进行,另外,在备用主节点上,除了8、11、13步骤外,其余的需要做一遍。
##MySQL的配置
主节点:
1.修改my.cnf
[mysqld]
server-id=11
log-bin=mysql-bin #默认是开启的
sync-binlog=1
innodb-file-per-table=1
2. 创建从服务器拷贝账号
grant replication client, replication slave on *.* to 'repl'@'192.168.1.106/107/108'> 从节点:
1.修改my.cnf
[mysqld]
server-id=12 #另外两台分别是13,14
read-only=1
relay-log=relay-bin
innodb-file-per-table=1
2. 设置所要连接的主服务器以及拷贝的文件和所在位置
mysql> change master to
-> master_host='192.168.1.111',
-> master_user='repl',
-> master_password='123',
-> master_port=3306,
3. start slave;
4. show slave status; #查看是否配置成功。
##################Heartbeat-HA的安装################
>>>>>>>>>>>>定义环境变量>>>>>>>>heartbeat-3-0-7e3a82377fa8.tar.bz2的安装>/etc/profile.d/heartbeat.sh
2. . /etc/profile.d/heartbeat.sh
########################Heartbeat的配置######################
1. cd /usr/local/heartbeat/share/doc/heartbeat
2. cp ha.cf haresources authkeys /usr/local/heartbeat/etc/ha.d
3. cd /usr/local/heartbeat/etc/ha.d
4. chmod 600 authkeys
5. vim /etc/hosts
192.168.1.104 drbd1
192.168.1.105 drbd2
6. vim ha.cf
autojoin none
bcast eth0
warntime 15
deadtime 60
initdead 120
keepalive 2
compression bz2
compression_threshold 2
debug 0
node drbd1
node drbd2
pacemaker respawn
7. vim authkeys
auth 1
1 crc
8. service heartbeat start
报错1:
/usr/local/heartbeat/etc/ha.d/shellfuncs: line 96: /usr/lib/ocf/lib//heartbeat/ocf-shellfuncs: No such file or directory
解决方法:
修改/usr/local/heartbeat/etc/ha.d/shellfuncs:
. /usr/local/heartbeat/usr/lib/ocf/lib//heartbeat/ocf-shellfuncs
报错2:
Starting High-Availability services: Heartbeat failure [rc=6]. Failed.
heartbeat[5175]: 2013/06/14_00:24:39 ERROR: Illegal directive [bcast] in /usr/local/heartbeat/etc/ha.d//ha.cf
heartbeat[5175]: 2013/06/14_00:24:39 ERROR: Compression module(bz2) not found
heartbeat[5175]: 2013/06/14_00:24:39 info: Pacemaker support: respawn
heartbeat[5175]: 2013/06/14_00:24:39 WARN: File /usr/local/heartbeat/etc/ha.d//haresources exists.
heartbeat[5175]: 2013/06/14_00:24:39 WARN: This file is not used because pacemaker is enabled
heartbeat[5175]: 2013/06/14_00:24:39 ERROR: Client child command [/usr/local/heartbeat/lib/heartbeat/ccm] is not executable
heartbeat[5175]: 2013/06/14_00:24:39 ERROR: Directive respawn hacluster /usr/local/heartbeat/lib/heartbeat/ccm failed
heartbeat[5175]: 2013/06/14_00:24:39 ERROR: Heartbeat not started: configuration error.
heartbeat[5175]: 2013/06/14_00:24:39 ERROR: Configuration error, heartbeat not started.
解决方法:
1. ln -svf /usr/local/heartbeat/lib64/heartbeat/ccm /usr/local/heartbeat/lib/heartbeat/
2. ln -svf /usr/local/heartbeat/lib64/heartbeat/plugins/RAExec/* /usr/local/heartbeat/lib/heartbeat/plugins/RAExec/
3. ln -svf /usr/local/heartbeat/lib64/heartbeat/plugins/* /usr/local/heartbeat/lib/heartbeat/plugins/
9. chkconfig heartbeat on ; checonfig logd on
######################配置pacemaker#############################
1. 配置如下:
使用如下命令:crm configure show 显示配置如下
node $id="97ae394b-5f7c-472c-85a7-8e22de0c656b" drbd2 \
attributes standby="off"
node $id="e0c675cd-57aa-4975-b36c-8564c13c714a" drbd1 \
attributes standby="off"
primitive drbd_r0 ocf:heartbeat:drbd \
params drbd_resource="r0" \
op monitor interval="30s" role="Master" \
op start interval="0" timeout="240s" \
op stop interval="0" timeout="100s"
primitive fs ocf:heartbeat:Filesystem \
params device="/dev/drbd0" directory="/data" fstype="ext4" \
op start interval="0" timeout="60s" \
op stop interval="0" timeout="60s" \
meta target-role="Started"
primitive myip ocf:heartbeat:IPaddr \
params ip="192.168.1.111"
primitive mysql lsb:mysqld
group mysqlservice fs myip mysql
ms ms_drbd_mysql drbd_r0 \
meta master-max="1" master-node-max="1" clone-max="2" clone-node-max="1" notify="true"
colocation fs_with_drbd_r0 inf: mysqlservice ms_drbd_mysql:Master
colocation mysql_on_drbd_master inf: mysql ms_drbd_mysql:Master
order fs_after_drbd inf: ms_drbd_mysql:promote fs:start
order mysql_after_fs inf: fs:start mysql:start
property $id="cib-bootstrap-options" \
dc-version="1.1.7-ee0730e13d124c3d58f00016c3376a1de5323cff" \
cluster-infrastructure="Heartbeat" \
no-quorum-policy="ignore" \
stonith-enabled="false" \
last-lrm-refresh="1371372103" \
expected-quorum-votes="2"
###################Keepalived+LVS的安装与配置###########################
>>>>>>>>>>>>>>>>>>>>>安装配置 |
|
|