高性能业务架构解决方案(Keepalive+MySQL)
高性能业务架构解决方案(Keepalive+MySQL)
一、 概况
二、 相关理论
三、 架构拓扑
四、 资源规划
五、 实施部署
5.1初始化配置
5.2 Mysql主从同步配置
5.3 配置keepalived实现热备
5.3.1 Keepalived的安装
5.3.2 Keepalived的配置
5.3.3 监测脚本
六、 测试
6.1 测试主从同步
6.2 高可用测试
七、注意事项
7.1 LVS安装注意事项
7.2 将相关开机自启服务
一、概况
关于MySQL-HA,目前存在多种解决方案,例如如heartbeat、drbd、mmm、共享存储,但是它们各有优缺点。heartbeat、drbd配置较为复杂,需要自己写脚本才能实现MySQL自动切换,脚步编写对应无编程功底的人来说存在很大的难度;对于mmm,生产环境中很少有人用,且mmm 管理端需要单独运行一台服务器上,要是想实现高可用,就得对mmm管理端做HA,这样无疑又增加了硬件开支;对于共享存储,MySQL数据还是放在本地较为安全,存储设备毕竟存在单点隐患。使用MySQL双master+keepalived是一种非常好的解决方案,在MySQL-HA环境中,MySQL互为主从关系,这样就保证了两台MySQL数据的一致性,然后用keepalived实现虚拟IP,通过keepalived自带的服务监控功能来实现MySQL障时自动切换。
二、相关理论
keepalived:顾名思义是保持存活,常用来搭建设备的高可用,防止业务核心设备出现单点故障。keepalived基于VRRP协议来实现高可用,主要用作realserver的健康检查以及负载均衡主机和backup主机之间的故障漂移。如果将TCP/IP划分为5层,则Keepalived就是一个类似于3~5层交换机制的软件,具有3~5层交换功能,其主要作用是检测web服务器的状态,如果某台web服务器故障,Keepalived将检测到并将其从系统中剔除,当该web服务器工作正常后Keepalived自动将其加入到服务器群中,这些工作全部自动完成,而不需要人工干预,只需要人工修复故障的web服务器即可。
三层机理是发送ICMP数据包即PING给某台服务器,如果不通,则认为其故障,并从服务器群中剔除;四层机理是检测TCP端口号状态来判断某台服务器是否故障,如果检测端口存在异常,则从服务器群中剔除;五层机理是根据用户的设定检查某个服务器应用程序是否正常运行,如果不正常,则从服务器群中剔除。
三、架构拓扑
四、资源规划
主机名称 |
内网IP |
操作系统 |
SQL-Master |
10.10.10.11 |
Centos 6.5 64位 |
SQL-Backup |
10.10.10.12 |
Centos 6.5 64位 |
VIP |
10.10.10.50 |
\ |
五、实施部署
5.1初始化配置
l getenforce 0关闭SeLinux
l 修改主机名
l 防火墙开放22/3306端口
l 测试网络连通性
l 更新YUM源
1
2
3
|
mv
/etc/yum
.repos.d
/CentOS-Base
.repo
/etc/yum
.repos.d
/CentOS-Base
.repo.backup
wget -O
/etc/yum
.repos.d
/CentOS-Base
.repo http:
//mirrors
.aliyun.com
/repo/Centos-6
.repo
yum makecache
#生成缓存
|
5.2Mysql主从同步配置
1
2
3
4
|
yum
install
mysql-server mysql -y
chkconfig mysqld on
service mysqld start
mysqladmin -u root password 51idc
|
主从均需要修改my.cnf
Mysql-Master的配置文件如下
vim /etc/my.cnf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
[mysqld]
datadir=
/var/lib/mysql
socket=
/var/lib/mysql/mysql
.sock
user=mysql
server-
id
=1
#mysql-M的id为1,mysql-B的id为2
binlog-
do
-db=anchnet
#需要同步是数据库
binlog-ignore-db=mysql
#不需要同步的数据库
replicate-
do
-db=anchnet
#需要记录日志的数据库
replicate-ignore-db=mysql,information_schema
log-bin=mysql-bin
log-slave-updates
sync_binlog=1
auto_increment_offset=1
#自增字段的起始值,mysql-M为1,
auto_increment_increment=2
slave-skip-errors=all
log_bin_trust_function_creators=1
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
[mysqld_safe]
log-error=
/var/log/mysqld
.log
pid-
file
=
/var/run/mysqld/mysqld
.pid
|
Mysql-Backup需要需要一下,其余与主保持一致
server-id=2
auto_increment_offset=2
查看此时查看mysql-Master与mysql-Backup的File与Position值
Mysql-Master配置如下:
1
2
3
4
5
6
7
|
service mysqld restart
mysql -uroot -p51idc
use mysql;
insert into mysql.user(Host,User,Password) values(
"localhost"
,
"51idc"
,password(
"51idc"
));
grant replication slave on *.* to
'51idc'
@
'10.10.10.12'
identified by
'51idc'
;
change master to master_host=
'10.10.10.12'
, master_user=
'51idc'
, master_password=
'51idc'
, master_log_file=
'mysql-bin.000003'
, master_log_pos=106;
start slave;
|
Mysql-Backup配置如下:
1
2
3
4
5
6
7
|
service mysqld restart
mysql -uroot -p51idc
use mysql;
insert into mysql.user(Host,User,Password) values(
"localhost"
,
"51idc"
,password(
"51idc"
));
grant replication slave on *.* to
'51idc'
@
'10.10.10.11'
identified by
'51idc'
;
change master to master_host=
'10.10.10.11'
, master_user=
'51idc'
, master_password=
'51idc'
, master_log_file=
'mysql-bin.000003'
, master_log_pos=106;
start slave;
|
查看结果
5.3 配置keepalived实现热备
5.3.1 Keepalived的安装
在master与backup上面均需要配置
安装开发组环境工具
1
|
yum groupinstall
"Development tools"
-y
|
安装相应软件包
1
2
|
yum
install
openssl-devel popt-devel -y
ln
-s
/usr/src/kernels/2
.6.32-642.1.1.el6.x86_64
/usr/src/linux
#此处要根据实际操作系统最高版本的kernel 为准
|
如果/usr/src/kernels/下面没文件使用yum 安装 kernel-devel
#下载keepalive
1
2
3
4
|
wget http:
//www
.keepalived.org
/software/keepalived-1
.2.24.
tar
.gz
tar
zxvf keepalived-1.2.24.
tar
.gz
cd
keepalived-1.2.24
.
/configure
--with-kernel-
dir
=
/usr/src/kernels/2
.6.32-642.1.1.el6.x86_64
|
(注意这个步骤要看到以下字样才是正常的)
Use IPVS Framework : Yes
IPVS sync daemon support : Yes
1
2
3
4
5
6
7
8
9
|
make
&&
make
install
cp
/usr/local/etc/rc
.d
/init
.d
/keepalived
/etc/rc
.d
/init
.d/
cp
/usr/local/etc/sysconfig/keepalived
/etc/sysconfig/
mkdir
/etc/keepalived
cp
/usr/local/etc/keepalived/keepalived
.conf
/etc/keepalived/
cp
/usr/local/sbin/keepalived
/usr/sbin/
chkconfig --add keepalived
chkconfig --level 2345 keepalived on
/etc/init
.d
/keepalived
start
|
至此keepalive就已经安装完毕。
5.3.2 Keepalived的配置
vim /etc/keepalived
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
|
! Configuration File
for
keepalived
global_defs {
router_id LVS_DEVEL
}
vrrp_script chk_mysql_port {
script
"/usr/mysql_check.sh"
#检测脚本
interval 2
weight 2
}
vrrp_instance VI_1 {
state BACKUP
#mysql-M与mysql-B保持均为BACKUP
interface eth1
#网卡接口
virtual_router_id 77
#router id保持一直
priority 100
#优先级,mysql-B数值小于100
advert_int 1
authentication {
auth_type PASS
auth_pass 51idc
}
track_script {
chk_mysql_port
}
virtual_ipaddress {
10.10.10.50
#VIP地址
}
}
Mysql-B配置修改优先级即可
priority 90
Service keepalived restart
|
测试VIP连通性
5.3.2 Keepalived的配置
vim /usr/mysql_check.sh
1
2
3
4
5
6
7
8
|
#!/bin/sh
PATH=
/usr/sbin
:
/usr/bin
:$PATH
export
PATH
STAT=`
netstat
-ant|
grep
LISTEN|
egrep
"0.0.0.0:3306"
|
wc
-l`
if
[ $STAT -
eq
0 ];
then
/etc/init
.d
/keepalived
stop
exit
fi
|
六、测试
6.1 测试主从同步
主服务器创建数据库
查看slave
测试主从同步已经成功。
6.2 高可用测试
停止mysql-M的keepalived
查看VIP:10.10.10.50已经迁移至mysql-B
七、注意事项
7.1 LVS安装注意事项
ln -s /usr/src/kernels/2.6.32-642.1.1.el6.x86_64 /usr/src/linux #此处要根据实际操作系统最高版本的kernel 为准
./configure --with-kernel-dir=/usr/src/kernels/2.6.32-642.1.1.el6.x86_64
(注意这个步骤要看到以下字样才是正常的)
Use IPVS Framework : Yes
IPVS sync daemon support : Yes
7.2 将相关开机自启服务
开机自启服务
1
2
|
chkconfig mysqld on
chkconfig keepalived on
|
开机自启脚本