分类: Mysql/postgreSQL
2009-05-16 10:51:46
随着人们对业务的要求和用用户的满意度期望值的不断提升,很多生产系统(尤其是金融,基金,证券,保险行业和电信)需要提供7x24小时的不间断服务。我们将可将应用服务再整合,搭建一个集群环境,保证能够把出现问题的机器自动启动,使其恢复到初始状态。而且在整个服务切换过程中,不需要任何的人为干预。这也是高效能的解决方案
项目要求
实施步骤
实验平台:Redhat Enterprise 5
所需软件:红帽集群套件(Redhat Cluster Suite)
初始配置
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. |
NETWORKING=yes
HOSTNAME=node1
GATEWAY=192.168.0.254
|
设置各节点的root ssh key,这样有利于我们在各节点之间互相访问
Node1#ssh-keygan
Node1#cp .ssh/id_dsa.pub .ssh/authorized_key |
Node1#for i in node2 fence share ;do scp –r .ssh $i:/root/;done; |
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; |
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:
属性。"PostJoin Delay" 栅进程接收新节点的加入请求后等待节点确认加入的延迟秒数,
默认值为 3,典型的设置为 20 至 30,这个根据你的网路和集群的实际情况而定。"PostFail
Delay" 栅进程发现节点失效后将节点踢出错误恢复域的等待延迟时间,默认值为 0 代表立
即踢出不延时,这个值要按你集群网络的实际情况而定。RHCS v5 中添加了对 Xen fence
的支持,所以多出了个 Run XVM Daemon 的选项框新增四个 cluster node, 分别为 node1、node2 、fence 和 sharestrg (这里的名称必须与 /etc/hosts 中声明的一致)。如果你是多网络接口,请设置 mulicast interface 为你公网接口。
新增 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" 将 node1、node2 新增进来。右边的两个打勾选向分别是 "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。
接下来我们配置 Mysql 的 mysqld 服务启动和监视资源。点选中央上方的下拉菜单,
选择" Script" , 定义这个"Script" 资源的名字,将脚本的全路径位置填入"File(with
且需要可以传给 rgmanager 服务正确的状态判断值。
注意:我们将在后面修改/etc/init.d/mysqld 这个脚本!
建立 Service , 单击"Create a Service" 填入服务名。如图10
在"Server Management" 窗口中单击"Add Shared Resoure to this service" ,先加入
IP Address 和 Script 。再把右上角的 "Failover domain" 选入我们设置的错误恢复域的名
请将 Autostart this service 勾选。在 Recovery Policy 有三个选项分别是
Restart、Relocate、Disable。Restart 为当服务发生错误会尝试重新启动服务,除非超过
太多次重新启动服务均认为不稳定才会进行更换主机服务。Relcate 则是一旦服务发生问题
马上切换交付其他主机负责服务。Disable 就比较无聊了,这个需要手工切换了恢复了,你
确定要看着监控自己手工切换吗? 建议是选择 Relocate
Node1#for i in node1 node2 fence share ;do scp –r /etc/cluster/ $i:/etc ;done; |
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; |
在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
|
share# gnbd_serv
|
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
|
node1 和 node2 需要共享设备来存储 mysql 的数据,所以我们需要在 node1 和 node2
上导入 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 |
为了满足共享存储的动态扩充,需要在 GNBD 的基础上配置 CLVM 来满足 GFS 文件
CLVM 要求所有 RHCS 中的节点设备都运行 CLVMD。必须配置所有加入集群的节
首先打开 LVM2 对 CLVMD 的支持。
node1#for i in node1 node2 ;do ssh $i lvmconf - -enalbe-cluster;done; |
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
|
node1 # mkfs.gfs -p lock_dlm -t mysql_cluster:gfs1 -j 2 /dev/CVG0/CLVM0 |
-p lock_dlm 是使用的分布式琐。
-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
|
在/etc/init.d/mysqld 中需要修改和添加 stop()函数。
将
status mysqld >/dev/null >&1 ;
if [ $? -eq 3 ] ; then
return 0
fi
加在 stop()函数的起始位置。
|