高性能业务架构解决方案(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,目前存在多种解决方案,例如heartbeatdrbdmmm、共享存储,但是它们各有优缺点。heartbeatdrbd配置较为复杂,需要自己写脚本才能实现MySQL自动切换,脚步编写对应无编程功底的人来说存在很大的难度;对于mmm,生产环境中很少有人用,且mmm 管理端需要单独运行一台服务器上,要是想实现高可用,就得对mmm管理端做HA,这样无疑又增加了硬件开支;对于共享存储,MySQL数据还是放在本地较为安全,存储设备毕竟存在单点隐患。使用MySQLmaster+keepalived是一种非常好的解决方案,在MySQL-HA环境中,MySQL互为主从关系,这样就保证了两台MySQL数据的一致性,然后用keepalived实现虚拟IP,通过keepalived自带的服务监控功能来实现MySQL障时自动切换。

二、相关理论

keepalived:顾名思义是保持存活,常用来搭建设备的高可用,防止业务核心设备出现单点故障。keepalived基于VRRP协议来实现高可用主要用作realserver的健康检查以及负载均衡主机和backup主机之间的故障漂移。如果将TCP/IP划分为5Keepalived就是一个类似于3~5层交换机制的软件,具有3~5层交换功能,其主要作用是检测web服务器的状态,如果某台web服务器故障,Keepalived将检测到并将其从系统中剔除,当该web服务器工作正常后Keepalived自动将其加入到服务器群中,这些工作全部自动完成,而不需要人工干预,只需要人工修复故障的web服务器即可。

层机理是发送ICMP数据包即PING给某台服务器,如果不,则认为其故障,并从服务器群中剔除层机理是检测TCP端口号状态来判断某台服务器是否故障,如果检测端口存在异常,则从服务器群中剔除层机理是根据用户的设定检查某个服务器应用程序是否正常运行,如果不正常,则从服务器群中剔除。

三、架构拓扑

wKioL1ih0ZmyTYKMAADIaxQj8DA633.png

四、资源规划

主机名称

内网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初始化配置

getenforce 0关闭SeLinux

修改主机名

防火墙开放22/3306端口

测试网络连通性

更新YUM

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主从同步配置

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

[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-Mastermysql-BackupFilePosition

wKioL1ih1PiBgkLRAADYGTIc5x8831.png

wKioL1ih1W3DQeRwAADV0V4CMSg545.png


Mysql-Master配置如下:

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配置如下:

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;

查看结果

wKiom1ih1paAIYASAAWyy3TiNJE582.png

5.3 配置keepalived实现热备

5.3.1 Keepalived的安装

masterbackup上面均需要配置

安装开发组环境工具

yum groupinstall "Development tools" -y

安装相应软件包

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

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

wKiom1ih16PStstNAADFZnQv6qA342.png

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

! 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

测试wKioL1ih2JDBooQGAAQecQc1ESQ266.png

wKioL1ih2afw-LnZAAPz1rNultg558.png

测试VIP连通性


wKiom1ih2WCCkZL7AALFj3MJ-kw482.png

5.3.2 Keepalived的配置

vim /usr/mysql_check.sh

#!/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 测试主从同步

主服务器创建数据库

wKiom1ih2hSyfrJUAAJY-L79nYY277.png

查看slave

wKioL1ih2nrQyN9FAAJotfApZag203.png

测试主从同步已经成功。

6.2 高可用测试

停止mysql-Mkeepalived

wKiom1ih2uSQbOhtAAP3qPU2opw396.png

查看VIP10.10.10.50已经迁移至mysql-B

wKiom1ih2zvRPcoYAAQgk7IGeno710.png停止mysql-M上的mysql

wKioL1ih24fRd8AlAASVSuudF_Q471.pngVIP已经迁移到mysql-B

wKioL1ih28Xyryf_AAQ791mw81M582.png

七、注意事项

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

wKiom1ih3DOy3qmoAAER-NWd5pI041.png

7.2 将相关开机自启服务

开机自启服务

chkconfig mysqld on
chkconfig keepalived on

开机自启脚本

wKioL1ih3JzgiP4QAAGiUwsvIBM878.png