Chinaunix首页 | 论坛 | 博客
  • 博客访问: 255300
  • 博文数量: 54
  • 博客积分: 2668
  • 博客等级: 少校
  • 技术积分: 560
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-06 01:08
文章分类

全部博文(54)

文章存档

2011年(14)

2010年(14)

2009年(26)

分类: Mysql/postgreSQL

2009-05-16 10:51:46

Mysql集群配置

项目背景

随着人们对业务的要求和用用户的满意度期望值的不断提升,很多生产系统(尤其是金融,基金,证券,保险行业和电信)需要提供7x24小时的不间断服务。我们将可将应用服务再整合,搭建一个集群环境,保证能够把出现问题的机器自动启动,使其恢复到初始状态。而且在整个服务切换过程中,不需要任何的人为干预。这也是高效能的解决方案

  1. 项目要求

搭建Mysql的集群服务
  1. 实施步骤

实验平台Redhat Enterprise 5

所需软件:红帽集群套件(Redhat Cluster Suite

服务器:两台node1(192.168.0,1),node2(192.168.0.2),
Fences设备:栅设备节点fence(192.168.0.3)
存储:共享存储设备节点share(192.168.0.4)
网络交换机:一个
应用程序Mysql

下载:mysql集群配置的PDF文档

  1. 初始配置

在配置之前保证各节点网络互通
Node1上编辑/etc/hosts文件,声明将添加的个集群节点

Node1#vi /etc/hosts(加入如下内容)

127.0.0.1 localhost.localdomain localhost

192.168.0.1 node1.

192.168.0.2 node2.

192.168.0.3 fence.

192.168.0.4 share.

修改/etc/sysconfig/network
NETWORKING=yes
HOSTNAME=node1
GATEWAY=192.168.0.254
注:其它节点按照相应的配置修改node2,fenc,share的机器

设置各节点的root ssh key,这样有利于我们在各节点之间互相访问

Node1#ssh-keygan

Node1#cp .ssh/id_dsa.pub .ssh/authorized_key


Node1/root/.ssh目录复制到其它节点上去,这样节点就可以无密码相互访问了。

Node1#for i in node2 fence share ;do scp –r .ssh $i:/root/;done;


/etc/hosts文件复制到其它节点上去,声明将其加入到集群中各节点

Node1#for i in node2 fence share; do scp –r /etc/hosts $i:/etc/

为每个节点安装集群套件,mysql应用程序,取消mysqld的服务,因为mysqld 是由rgmananger服务器启动的,并取消开机启动的集群服务,便于排错

Node1#for i in node1 node2 fence share; do ssh $i yum –y groupinstall Clustering “Clusert Storage”

Node1#for i in node1 node2 fence share; do ssh $i yum –y install mysql*; done;

Node1#for i in node1 node2; do ssh $i chkconfig mysqld off;done;

Node1#for i in node1 node2 fence share; do ssh $i chkconfig cman off; done;

Node1#for i in node1 node2 fence share; do ssh $i chkconfig rgmanager off ;done;

注:配置本地的yum源,这在我的文章里有关于本地yum的配置方法


在某一个节点上进入图形界面执行system-config-cluster
Node1#system-config-cluster&

如图1:

第一次使用system-config-cluster时会提示你新建一个cluster.conf配置文件,选择一个组波地址multicast (255.0.0.1~234.255.255.255)之间的一个ip.

查看配置是否正确,多播地址为228.0.0.15,这用多播技术就因为多播发送数据包到单个IP地址,由多个IP主机去处理和接收,而不去管IP互联网络上所处的位置。对于一对多的数据传输,多播比单播和关播要高效。与单播不同,多播仅发送数据的一个副本;与广播不同,多播流量仅由正在监听的主机进行接收和处理。

点击"Edit Cluster Properties" 调出"Cluster Properies" 配置 Cluster 的名称和相关

如图3:


属性。"Post­Join Delay" 栅进程接收新节点的加入请求后等待节点确认加入的延迟秒数,

默认值为 3,典型的设置为 20 30,这个根据你的网路和集群的实际情况而定。"Post­Fail

Delay" 栅进程发现节点失效后将节点踢出错误恢复域的等待延迟时间,默认值为 0 代表立

即踢出不延时,这个值要按你集群网络的实际情况而定。RHCS v5 中添加了对 Xen fence

的支持,所以多出了个 Run XVM Daemon 的选项框新增四个 cluster node, 分别为 node1node2 fence sharestrg (这里的名称必须与 /etc/hosts 中声明的一致)。如果你是多网络接口,请设置 mulicast interface 为你公网接口。

如图4:

新增 Fence Device 点击 "Add a Fence Device" 如果有 Fence 设备请依照厂牌选择


进行配置,键入名称、IP 位置、控制帐号、密码即可。大多数情况下你也许没有专门的


fence 设备,感谢 RedHat 给我们带来了 Global Network Block Device(gnbd)方式。


请选择"Global Network Block Device" ,然后填入 Fence 设备的名字(Cluster 中为和


其他设备区别而设,属于自定义范围),填入 Fence 服务器的 ip 或者你在/etc/hosts 声明过


fence 节点名。

如图5:

注:在其它节点做相应的操作

建立 Failover Domains ,点击"Create Failover Domain" 添加新的错误恢复域,在"Failover Domain Configuration"窗体中,点选选单中央上方的"Available

Cluster Node" node1node2 新增进来。右边的两个打勾选向分别是 "Restrict

Failover Domains members" 以及 "Priotitzed List"。如果妳只有两台, 打勾第一项

Restrict Failover Domains members” 就可以了,这项是只允许这两台做轮替。另外一

"Priotitzed List"则是在你有两台以上的服务器,需要分别设定轮替的优先级时需要的。

当你打钩"Priotitzed List"后可以使用"Adjust Priority" 调整多节点的替换优先级

如图6:

建立 Resource, 点击"Create a Resource" 依照妳所需要提供的服务新增资源。因为

如图7:

Mysql HA 需要浮动 ip 保证提供服务透明性,所以我们先配置浮动 ip 资源。点选中央上


方的下拉菜单, 选择" IP Address" , 在地址栏里填入一个 ip 地址,ip 地址必须是可以


访问的且没有被其他服务器或网络接口使用的 ip ,它既不是 node1 ip 也不是 node2 ip


而是 Mysql HA 集群对外提供服务的 ip

如图8:

接下来我们配置 Mysql mysqld 服务启动和监视资源。点选中央上方的下拉菜单,


选择" Script" , 定义这个"Script" 资源的名字,将脚本的全路径位置填入"File(with


path)"输入框中。需要说明的是,可以作为脚本资源加入集群的必须俱备状态判断功能,


且需要可以传给 rgmanager 服务正确的状态判断值。


注意:我们将在后面修改/etc/init.d/mysqld 这个脚本!


建立 Service , 单击"Create a Service" 填入服务名。如图10


"Server Management" 窗口中单击"Add Shared Resoure to this service" ,先加入


IP Address Script 。再把右上角的 "Failover domain" 选入我们设置的错误恢复域的名


称。
如图11



请将 Autostart this service 勾选。在 Recovery Policy 有三个选项分别是


RestartRelocateDisableRestart 为当服务发生错误会尝试重新启动服务,除非超过


太多次重新启动服务均认为不稳定才会进行更换主机服务。Relcate 则是一旦服务发生问题


马上切换交付其他主机负责服务。Disable 就比较无聊了,这个需要手工切换了恢复了,


确定要看着监控自己手工切换吗? 建议是选择 Relocate

最后总览一下,然点保存退出,如图12


配置好后,将/etc/cluster/cluster.conf拷贝到其它节点上去

Node1#for i in node1 node2 fence share ;do scp –r /etc/cluster/ $i:/etc ;done;

然后启动Cluser服务

Node1#for i in node1 node2 fence share ;do ssh $i service cman start & done;

Node1#for I in node1 node2 fence share; do ssh $i service rgmanager start & done;

2.导出GNBD共享设备

share节点上划出2 2G的分区用来导出gnbd共享设备

share# fdisk /dev/sda


The number of cylinders for this disk is set to 1044.


There is nothing wrong with that, but this is larger than 1024,


and could in certain setups cause problems with:


1) software that runs at boot time (e.g., old versions of LILO)


2) booting and partitioning software from other OSs


(e.g., DOS FDISK, OS/2 FDISK)


Command (m for help): n


Command action


e extended


p primary partition (1-4)


e


Partition number (1-4): 3


First cylinder (651-10440, default 651):


Using default value 651


Last cylinder or +size or +sizeM or +sizeK (651-10440, default 10440):


Using default value 1044 0


Command (m for help): n


Command action


l logical (5 or over)


p primary partition (1-4)


l


First cylinder (651-10440, default 651):


Using default value 651


Last cylinder or +size or +sizeM or +sizeK (651-10440, default 10440): +2048M


Command (m for help): p


Disk /dev/hda: 85890 MB, 85899345929 bytes


255 heads, 63 sectors/track, 10440 cylinders


Units = cylinders of 160650 * 512 = 82252800 bytes


Device Boot Start End Blocks Id System


/dev/sda1 * 1 13 104391 83 Linux


/dev/sda2 14 650 5116702+ 83 Linux


/dev/sda3 651 10440 31648050 5 Extended


/dev/sda5 651 900 2008093+ 83 Linux


Command (m for help): n


Command action


l logical (5 or over)


p primary partition (1-4)


l


First cylinder (901-10440, default 901):


Using default value 901


Last cylinder or +size or +sizeM or +sizeK (901-10440, default 10440): +2048M


Command (m for help): p


Disk /dev/hda: 85890 MB, 85899345929 bytes


255 heads, 63 sectors/track, 10440 cylinders


Units = cylinders of 160650 * 512 = 82252800 bytes


Device Boot Start End Blocks Id System


/dev/sda1 * 1 13 104391 83 Linux


/dev/sda2 14 650 5116702+ 83 Linux


/dev/sda3 651 10440 31648050 5 Extended


/dev/sda5 651 900 2008093+ 83 Linux


/dev/sda6 901 1250 2008145+ 83 Linux


启动 gnbd_serv 服务
share# gnbd_serv
使用gnbd导出共享设备,并查看

share# gnbd_export -d /dev/sda5 -e gnbd_share1


share# gnbd_export -d /dev/sda6 -e gnbd_share2


share# gnbd_export -l


Server[1] : gnbd_share1


--------------------------


file : /dev/sda5


sectors : 2329547


readonly : no


cached : no


timeout : 60


Server[2] : gnbd_share2


--------------------------


file : /dev/sda6


sectors : 2324382


readonly : no


cached : no


timeout : 60


3.导入gnbd共享设备

node1 node2 需要共享设备来存储 mysql 的数据,所以我们需要在 node1 node2



上导入 gnbd 共享设备。



挂接gnbd内核模块,然后导入,查看。

node1#for i in node1 node2 ;do ssh $i modprobe gnbd

;done

node1#for i in node1 node2 ;do ssh $i gnbd_import -i share;done

node1#for i in node1 node2 ;do ssh $i gnbd -l ;done

如果没有这个模块的话,请yum装一下。
4.使用gnbd共享设备做clvm

为了满足共享存储的动态扩充,需要在 GNBD 的基础上配置 CLVM 来满足 GFS 文件



系统的动态扩展。



CLVM 要求所有 RHCS 中的节点设备都运行 CLVMD。必须配置所有加入集群的节



点都运行 CLVMD



首先打开 LVM2 CLVMD 的支持。



node1#for i in node1 node2 ;do ssh $i lvmconf - -enalbe-cluster;done;

然后在node1上创建PV,GV,LV

node1# pvcreate /dev/gnbd/gnbd_share1


Physical volume "/dev/gnbd/gnbd_share1" successfully created


node1# pvcreate /dev/gnbd/gnbd_share2


Physical volume "/dev/gnbd/gnbd_share2" successfully created


node1# vgcreate CVG0 /dev/gnbd/gnbd_share1


Volume group "CVG0" successfully created


node1# lvcreate -L 512M CVG0 -n CLVM0


Logical volume "CLVM0" created


然后在node2上查看一下执行lvdisplay,如果没有,重启一下clvmd服务,或者lvscan一下。
4.CLVM上创建gfs集群文件系统

node1 # mkfs.gfs -p lock_dlm -t mysql_cluster:gfs1 -j 2 /dev/CVG0/CLVM0

-p lock_dlm 是使用的分布式琐。



-t后面指定的是—集群名:文件系统表名



-j实指可接入节点数,后面可以用 gfs_jadd 动态添加。



注意:
只需要在一个节点上创建文件系统,其他节点就可以挂接了。



5.挂接 GFS 并测试

node1 # mount /dev/CVG0/CLVG0 /var/lib/mysql


node2 # mount /dev/CVG0/CLVG0 /var/lib/mysql


node1 # whire true ; do echo A >> /var/lib/mysql/test ; sleep 500 ; done


node2 # whire true ; do echo B >> /var/lib/mysql/test ; sleep 500 ; done


前面说到的修改mysqld的启动脚本

/etc/init.d/mysqld 中需要修改和添加 stop()函数。



status mysqld >/dev/null >&1

;

if [ $? -eq 3 ] ; then


return 0


fi


加在 stop()函数的起始位置。




然后就是测试集群实体mysqld的切俄换,模拟mysql服务出错down,看是否能够切换。

阅读(2684) | 评论(0) | 转发(0) |
0

上一篇:linux学习

下一篇:在centos5.3安装Oracle10g

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