高性能业务架构解决方案(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源
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-Master与mysql-Backup的File与Position值
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;
查看结果
5.3 配置keepalived实现热备
5.3.1 Keepalived的安装
在master与backup上面均需要配置
安装开发组环境工具
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
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
测试VIP连通性
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 测试主从同步
主服务器创建数据库
查看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 将相关开机自启服务
开机自启服务
chkconfig mysqld on chkconfig keepalived on
开机自启脚本