分类: Java
2012-05-14 15:17:17
TOC \o "1-3" \h \z \u
编写本文档,是为了指导系统和运行中心人员完成“activeMQ高可用”的上线工作,尽可能避免人为随意操作造成的意外情况。
同时也作为一个教材,给后续工作提供操作参考。
本着不影响现有生产环境和业务的前提下,具体的实施步骤本着如下原则:
1. 增强系统的可维护性,尽量避免需要操作系统root用户的操作;
2. 增强系统的自维护性,能够自动实现失败转移和失败恢复;
消息服务目前在平台中的地位越来越重要,很多系统已经严重依赖消息服务,这就要求消息服务器必须做到高可用。
针对于消息服务,高可用分为第三个方面:
第一:消息不能够因为消息服务的失败转移而丢失;
第二:当主消息服务器不可用时,备消息服务器能够在可接受的时间隔内接管服务;
第三:备消息服务器在接管服务后,之前未被处理过的消息能够继续被处理;
目前平台的消息服务器选择的是apache activeMQ,结合activeMQ的特性和以上讲到的三个方面,最后决定采用activeMQ + 监控脚本+ mysql DB +keepalived的方案。示意图如下:
消息服务器需要将消息持久化,本方案选择使用mysql作为持久化DB。为了避免mysql的单点,这里又引入了一系列机制来保证mysql的高可用和DB数据的备份,即:mysql+keepalived+ mysql replication。
Mysql服务高可用:引入keepalived双机软件,维护一个虚IP,客户端通过虚IP来访问mysql服务;当主的mysql服务器不可用时,keepalived软件会失败转移,由备mysql服务器接管服务。
Mysql数据高可用:通过引入“mysql replication“ ,来实现两台mysql服务的数据同步。即mysql主的数据更新会异步的同步给备mysql,但是为了防止出现混乱,主备mysql不能够同时对外提供服务,客户端只能通过虚IP来访问mysql服务。
的高可用
activeMQ原生支持共享DB的高可用方案。如下:
同一时刻只有一个activeMQ实例能够持有DB lock,能够成为master对外提供服务,其他处于slave状态的activeMQ实例会不断的尝试去获取DB lock,当master不可用时会释放DB lock,这时就会有一个slave成为master,继续提供服务。
这个方案看起来比较理想,但是在整体方案的测试过程中,发现比较严重的问题:当mysql出现主备切换时,activeMQ的master会异常退出,activeMQ的slave会僵死,且无法自动恢复。
为了解决上面的出现的问题,采用一个监控脚本来监控activeMQ实例的状态,从而保证activeMQ 共享DB高可用的可行性。下面是监控脚本的大体逻辑:
利用linux 的cron服务,每分钟运行一次该脚本,从而保证activeMQ的状态正常。
部署方案服务器:rip1;
服务器:rip2;
虚IP:vip。
系统管理员(root用户);
运行中心人员;
Mysql 5.1.59
ncurses-5.6.tar.gz(mysql的依赖文件)
作下载好Msql包 mysql-5.1.59.tar.gz、apache-activemq-5.4.2-bin.tar.gz keepalived-1.1.17.tar.gz上传到/usr/mpsp/software目录下面
在rip1/rip2服务器上安装mysql,下面是具体的安装步骤:
1. Root用户,创建 mysql的用户名和用户组:
useradd mysql
groupadd -g mysql mysql
2. Root用户,解压缩mysql-5.1.59.tar.gz和依赖文件ncurses-5.6.tar.gz:
cd /usr/mpsp/software
tar -zxvf mysql-5.1.59.tar.gz
tar -zxvf ncurses-5.6.tar.gz
3. Root用户,编译安装mysql和ncurses-5.6:
cd /usr/mpsp/software/ncurses-5.6
./configure
make && make install
cd /usr/mpsp/software/mysql-5.1.59
./configure --prefix=/usr/local/mysql
make && make install
4. Root用户,把mysql的配置文件copy到相应目录
cp -av /usr/local/mysql/share/mysql/my-medium.cnf /etc/my.cnf
5. Root用户,修改mysql安装目录的权限
chown -R mysql.mysql /usr/local/mysql
服务1. Root用户,修改mysql的配置文件my.cnf,正式生产环境需要修改master-host、master-user、master-password
服务器rip1的配置,需要修改如下参数:
server-id = 1
master-host = rip2
master-user = synuser
master-password = 12345
服务器rip2的配置,需要修改如下参数:
server-id = 2
master-host = rip1
master-user = synuser
master-password = 123456
2. 在两台mysql服务器上分别初始化Mysql
cd /usr/local/mysql/bin
./mysql_install_db
3. 在两台mysql服务器上分别修改生成的mysql的目录权限
chown -R mysql.mysql /usr/local/mysql
4. 在两台mysql服务器上依次启动mysql
./mysqld_safe &
5. 在两台mysql服务器上分别给sysuser用户赋同步库的权限
cd /usr/local/mysql/bin
./mysql
GRANT all privileges ON 库名.* TO synuser@'%' IDENTIFIED BY '123456';
flush privileges;
6. 测试同步是否成功
l rip1服务器同步:
cd /usr/local/mysql/bin
./mysql
Slave stop;
Reset master;
show master status;
slave start;
show slave status\G (查看同步状态, 看到如下状态就表示同步成功)
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 0
l rip2服务器同步:
Slave stop;
Reset master;
show master status;
slave start;
show slave status\G (查看同步状态, 看到如下状态就表示同步成功)
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 0
7. 将mysql加入系统服务
a) 把Msql的脚本文件拷到系统的启动目录下
cp /usr/local/mysql/share/mysql/mysql.server /etc/init.d/mysql
b) 将mysql加到启动服务列表里
chkconfig --add mysql
c) 让系统启动时自动打开mysql服务
chkconfig mysql on
在A服务器上安装keepalived软件,下面是具体的安装步骤:
1. mpsp用户,将软件包keepalived-1.1.17.tar.gz上传到服务器上mpsp用户主目录下;
2. mpsp用户,解压缩,指令为:
tar –zxf keepalived-1.1.17.tar.gz
3. root用户,进入上一步骤解压缩后的目录,配置keepalived,命令依次如下:
./configure --prefix=/usr/local/keepalived --mandir=/usr/local/share/man
make
make install
4. root用户,依次执行如下命令:
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
mkdir /etc/keepalived
5. root用户,修改keepalived的默认配置,修改文件/etc/sysconfig/keepalived,
将“KEEPALIVED_OPTIONS="-D"”修改为:“KEEPALIVED_OPTIONS="-D -d"”
6. mpsp用户,将配置文件“keepalived.conf_backup”上传到主目录下;
7. root用户,将上一步的配置文件copy到/etc/keepalived目录,命令如下:
cp ~mpsp/ keepalived.conf_backup /etc/keepalived/ keepalived.conf
如果上述步骤没有出现问题,将步骤1—5在服务器B上执行一遍,最后在B上执行如下步骤:
8. mpsp用户,将配置文件“keepalived.conf_main”上传到主目录下;
9. root用户,将上一步的配置文件copy到/etc/keepalived目录,命令如下:
cp ~mpsp/ keepalived.conf_main /etc/keepalived/ keepalived.conf
10. 同时针对keepalived有action脚本,需要部署到特定目录即可(要保证keepalived的conf文件同log.sh脚本中的路径信息一致,否则无法正常执行,log.sh会在keepalived切换时输出日志,并且可能会重启mysql服务,所以一定要配置正确了)。
root用户通过手工启停keepalived服务,来查看虚IP是否能够正常转移,同时也要验证keepalived的脚本(log.sh)是否正常执行。
1. root用户,在A、B服务器上添加keepalived服务的开机自启动,命令:
chkconfig –level 35 keepalived on
部署方案
服务器:rip1;
服务器:rip2;
运行中心人员;
apache-activemq-5.4.2-bin.tar.gz(由运行中心提供)。
1. Mpsp用户,解压缩apache-activemq-5.4.2-bin.tar.gz到/usr/mpsp目录
cd /usr/mpsp/software/
tar -zxvf apache-activemq-5.4.2-bin.tar.g /usr/mpsp
2. mpsp用户,修改服务器rip1/rip2上Activemq的配置文件(conf目录下的activemq.xml中的mysql的虚IP、db、用户名和密码),可以参看如下文件:
3. 分别访问rip1/rip2上的mysql数据库,建立用于给mq使用数据库用户,并赋权:
cd /usr/local/mysql/bin
./mysql
GRANT ALL PRIVILEGES ON 库名.* TO 'mquser'@'虚ip' IDENTIFIED BY '密码' WITH GRANT OPTION;
flush privileges;
分别在两台服务器上各部署一份activeMQ,先不要启动。
为每一个activeMQ配置一个监控脚本,使用cron每分钟运行一次。
同时要根据activeMQ的部署,对下面的监控脚本中的常量进行适当的调整。
注意:在配置activeMQ时,要将应用的的日志输出移动到activeMQ安装目录的以外,防止影响监控脚本的检测,修改配置文件log4j.properties即可。
6 ActiveMQ+mysql+keepalived高可用测试步骤 6.1 测试mysql数据库同步
1. 重起两台mysql应用
/etc/init.d/mysql restart
2. 测试mysql能否同步:
rip1的操作步骤
cd /usr/local/mysql/bin
./mysql
use test;
create table username (id int(15));
查看rip2中是否有username这个表,如果有,表明同步rip1到rip2的同步成功;
然后在rip2上操作如下步骤:
cd /usr/local/mysql/bin
./mysql
use test;
drop table username;
查看rip1中是否还存在username这张表,如果没有,表明同步rip2到rip1的同步成功;
6.2 测试activemq+mysql数据库同步1. 首先在rip1或rip2上建立mq使用的库,例如之前使用的test;
2. 启动rip1的mq(保证修改了mq的配置文件中mysql相关信息)
cd /usr/mpsp/apache-activemq-5.4.2/bin
./ activemq restart
3. 查看mysql数据库,看rip1/2的mysql数据库中是否生成了mq的三张表
+----------------+
| Tables_in_test |
+----------------+
| ACTIVEMQ_ACKS |
| ACTIVEMQ_LOCK |
| ACTIVEMQ_MSGS |
如果生成,证明同步成功
6.3 监控脚本依据部署环境,修改mqdog.sh中的常量,然后分别部署到mq服务器所在的服务器上,使用cron调用,时间间隔为一分钟。
6.4 结束至此,完成了部署。可以测试mq的高可用。
7 Q&A 7.1 Mysql同步出错的解决发现同步出错时:
1.首先停掉slave进程:
stop slave;
2.设定参数:
set global SQL_SLAVE_SKIP_COUNTER=1;
3.重启slave进程:
start slave;