Chinaunix首页 | 论坛 | 博客
  • 博客访问: 155954
  • 博文数量: 55
  • 博客积分: 2409
  • 博客等级: 大尉
  • 技术积分: 371
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-10 14:19
文章分类

全部博文(55)

文章存档

2012年(5)

2011年(15)

2010年(6)

2009年(29)

我的朋友

分类: 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出现主备切换时,activeMQmaster会异常退出,activeMQslave会僵死,且无法自动恢复。

为了解决上面的出现的问题,采用一个监控脚本来监控activeMQ实例的状态,从而保证activeMQ 共享DB高可用的可行性。下面是监控脚本的大体逻辑:

利用linux cron服务,每分钟运行一次该脚本,从而保证activeMQ的状态正常。

部署方案

服务器:rip1

服务器:rip2

IPvip

系统管理员(root用户);

运行中心人员;

Mysql 5.1.59

ncurses-5.6.tar.gz(mysql的依赖文件)

下载好Msql    mysql-5.1.59.tar.gzapache-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用户,编译安装mysqlncurses-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-hostmaster-usermaster-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.     同时针对keepalivedaction脚本,需要部署到特定目录即可(要保证keepalivedconf文件同log.sh脚本中的路径信息一致,否则无法正常执行,log.sh会在keepalived切换时输出日志,并且可能会重启mysql服务,所以一定要配置正确了)。

 

root用户通过手工启停keepalived服务,来查看虚IP是否能够正常转移,同时也要验证keepalived的脚本(log.sh)是否正常执行。

1.         root用户,在AB服务器上添加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/rip2Activemq的配置文件(conf目录下的activemq.xml中的mysql的虚IPdb、用户名和密码),可以参看如下文件:

         

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这个表,如果有,表明同步rip1rip2的同步成功;

 

然后在rip2上操作如下步骤:

cd /usr/local/mysql/bin

./mysql

use test;

drop table username;

查看rip1中是否还存在username这张表,如果没有,表明同步rip2rip1的同步成功;

6.2     测试activemq+mysql数据库同步

1.         首先在rip1rip2上建立mq使用的库,例如之前使用的test

2.         启动rip1mq(保证修改了mq的配置文件中mysql相关信息)

cd /usr/mpsp/apache-activemq-5.4.2/bin

./ activemq restart

3.         查看mysql数据库,看rip1/2mysql数据库中是否生成了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;

阅读(5039) | 评论(1) | 转发(0) |
0

上一篇:nginx安装步骤

下一篇:没有了

给主人留下些什么吧!~~

图片MM2012-05-17 21:14:20

步骤很详细,学习起来比较顺利,多谢了