您的位置:首页 > 其它

RHCS多节点部署应用企业环境 推荐

2013-05-15 21:29 344 查看
一路磕磕碰碰终于是换了第三份工作,一路做过来,看着自己去年写的博客,发现自己真的成长了一些。上周突然51cto的米米同学说参加大学生博客大赛,51cto见证了我漫漫的成长过程,我想就算不是为了比赛,为了自己,给这个好的平台努力证明一下自己。所有我又来了!我很喜欢集群,开始的时候就是搞这个RHCS,作为redhat对企业的集群环境的产品,RHCS好用,但是不好做,原因主要是作为RHCS作为付费集群套件一方面是成本高,另一方面RHCS的资料相对于其他开源集群产品相对较少。官方的文档也比较偏向介绍产品本身的好处,特别是在仲裁盘部分,官方建议是直接找厂家咨询。无奈之下我只好用下策,先是虚拟机测试,然后是真机环境测试,一下是整个测试的环境。跟着做一把,肯定会有帮助的啦。RHCS的介绍这里就不复述了,网络上的材料很多,官方的文档尤其详细,用功的同学可以通读一边,通俗易懂。

1.1、 集群网络规划

主机操作系统rhel5.8。3台DELL R910设备,。网卡eth1与其它2个节点的IPMI口组成Fence域,上联一台交换机sw1,业务口都为eth0上联交换机sw1,因为实验环境有限,没有做网卡bond.其中DELL的fenceing功能是通过管理口中的ipmi2.0完成的,ipmi可以直接配置ip地址,用户名密码方便远程管理服务器的电源。
节点名网卡功能Ip地址用户密码备注
test001eth0业务192.168.1.101rootpasswd
eth1管理192.168.2.101rootpasswd
ipmifence192.168.2.4rootpasswd
test002
eth0业务192.168.1.102rootpasswd
eth1管理192.168.2.102rootpasswd
ipmifence192.168.2.5rootpasswd
test003
eth0业务192.168.1.103rootpasswd
eth1管理192.168.2.103rootpasswd
ipmifence192.168.2.6rootpasswd

1.2、 基础配置说明

注意:所有的配置都要在三台节点完成,这里仅做test001的演示。test002,test003与test001配置方法一致。

1.2.1、 安装rhel5.8操作系统

系统安装过程,按需求安装,这里就不做说明。

1.2.2、 按照上表配置相应的网卡业务ip,管理ip

编辑:/etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
IPADDR=192.168.1.101
NETMASK=255.255.255.0
ONBOOT=yes
TYPE=Ethernet
BOOTPROTO=none
USERCTL=no
编辑:/etc/sysconfig/network-scripts/ifcfg-eth3
DEVICE=eth3
IPADDR=192.168.2.101
NETMASK=255.255.255.0
ONBOOT=yes
TYPE=Ethernet
BOOTPROTO=none
USERCTL=no

1.2.3、 Ipmi口的配置

安装ipmi工具
yum install OpenIPMI OpenIPMI-develOpenIPMI-tools OpenIPMI-libs
/etc/init.d/ipmi start
chkconfig ipmi on
进行IPMI的基本网络配置:以下指令分别配置了IP地址、掩码、网关、允许进入开关。
ipmitool lan set 1 ipaddr 192.168.2.4
ipmitool lan set 1 netmask 255.255.255.0
ipmitool lan set 1 defgw ipaddr 192.168.2.1
ipmitool lan set 1 access on
ipmitool lan print 1 # 检查网络配置结果
开启默认用户、设置默认密码:
ipmitool lan set 1 user
ipmitool lan set 1 password passwd
ipmitool user list 1 # 显示当前用户列表
通过查看用户列表。可以看到当前有两个用户,一个是默认匿名用户,一个是root。而root的uid = 2。所以要设置一下root用户的密码,按照提示输入两次密码:
ipmitool user set password 2
密码设为:passwd在多台服务器上配置好IPMI后,测试可以ping通设置好的IP地址。以下为两种检验方法:
ping 192.168.2.4
ipmitool -H 192.168.2.4-U root power status
正常返回结果会是:poweris on。

1.2.4、 配置主机名为test001,test002,test003

编辑/etc/sysconfig/network文件HOSTNAME=test00X

1.2.5、 配置/etc/hosts主机名与ip的映射关系

编辑/etc/hosts 文件
192.168.1.101 test001
192.168.1.102 test002
192.168.1.103 test003
192.168.2.4    ipmi01
192.168.2.5   ipmi02
192.168.2.6   ipmi03
192.168.1.104 vip01
192.168.1.105 vip02

2、 RHCS集群配置(test001)

此部分的配置要在所有的节点操作,这里给出节点test001的操作,test002,test003的操作与test001的一样。

2.1、 Yum配置(test001)

将rhel5.8光盘挂在在/mnt下面
[root@test001 ~]#mount –o loop rhel5.8.iso /mnt
在/etc/yum.repos.d/目录下新建rhel.repo文件,
[root@test003 ~]# vim /etc/yum.repos.d/rhel.repo
[rhel]
name=rhel
baseurl=file:///mnt/Server
gpgcheck=0
[storage]
name=storage
baseurl=file:///mnt/ClusterStorage
gpgcheck=0
[cluster]
name=cluster
baseurl=file:///mnt/Cluster
gpgcheck=0

2.2、 RHEL5.8集群软件安装(test001)

2.2.1、 安装clustering

[root@test001 ~]# yum groupinstallClustering
Loaded plugins: katello, product-id,security, subscription-manager
Updating certificate-based repositories.
Unable to read consumer identity
Setting up Group Process
Resolving Dependencies
--> Running transaction check
…………
Installed:
Cluster_Administration-en-US.noarch 0:5.8-1.el5
cluster-cim.x86_64 0:0.12.1-7.el5
cluster-snmp.x86_64 0:0.12.1-7.el5
ipvsadm.x86_64 0:1.24-13.el5
luci.x86_64 0:0.12.2-51.el5
modcluster.x86_64 0:0.12.1-7.el5
piranha.x86_64 0:0.8.4-24.el5
rgmanager.x86_64 0:2.0.52-28.el5
ricci.x86_64 0:0.12.2-51.el5
system-config-cluster.noarch 0:1.0.57-12
Dependency Installed:
cman.x86_64 0:2.0.115-96.el5
net-snmp.x86_64 1:5.3.2.2-17.el5
oddjob.x86_64 0:0.27-12.el5
oddjob-libs.x86_64 0:0.27-12.el5
openais.x86_64 0:0.80.6-36.el5
perl-Net-Telnet.noarch 0:3.03-5
perl-XML-LibXML.x86_64 0:1.58-6
perl-XML-LibXML-Common.x86_64 0:0.13-8.2.2
perl-XML-NamespaceSupport.noarch 0:1.09-1.2.1
perl-XML-SAX.noarch 0:0.14-11
pexpect.noarch 0:2.3-3.el5
python-imaging.x86_64 0:1.1.5-7.el5
python-pycurl.x86_64 0:7.15.5.1-8.el5
python-suds.noarch 0:0.4.1-2.el5
tix.x86_64 1:8.4.0-11.fc6
tkinter.x86_64 0:2.4.3-46.el5
tog-pegasus.x86_64 2:2.11.0-3.el5
tog-pegasus-libs.x86_64 2:2.11.0-3.el5
Complete!

2.2.2、 安装逻辑卷集群包lvm2-cluster

[root@test001 ~]# yum -y installlvm2-cluster
Loaded plugins: katello, product-id,security, subscription-manager
Updating certificate-based repositories.
Unable to read consumer identity
Setting up Install Process
Resolving Dependencies
--> Running transaction check
……
Installing:
lvm2-cluster    x86_64   2.02.88-7.el5       storage      301 k
Installed:
lvm2-cluster.x86_64 0:2.02.88-7.el5
Complete!
启动集群功能:
[root@test001 ~]# lvmconf --enable-cluster

注意:保证第二节部分(test001节点)的操作步骤,其他两节点(test002,test003)都做了。

2.2.3、 配置仲裁盘

rhcs仲裁盘一定要用裸设备制作,不能给lvm管理做成逻辑卷,而且这个仲裁盘必须是共享磁盘,可以是san共享存储或其他的共享磁盘才可以,满足这几个条件才能做。在任意节点制作都可以:

2.2.3.1格式化分区

[root@test001 ~]# fdisk /dev/hda
Device contains neither a valid DOSpartition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel. Changes willremain in memory only,
until you decide to write them. After that,of course, the previous
content won't be recoverable.
Warning: invalid flag 0x0000 of partitiontable 4 will be corrected by w(rite)
Command (m for help): p
Disk /dev/hda: 2147 MB, 2147483648 bytes
255 heads, 63 sectors/track, 261 cylinders
Units = cylinders of 16065 * 512 = 8225280bytes
Device Boot      Start         End      Blocks  Id  System
Command (m for help): n
Command action
e   extended
p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-261, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK(1-261, default 261): +20M
Command (m for help): p
Disk /dev/hda: 2147 MB, 2147483648 bytes
255 heads, 63 sectors/track, 261 cylinders
Units = cylinders of 16065 * 512 = 8225280bytes
Device Boot      Start         End      Blocks  Id  System
/dev/hda1               1           3       24066  83  Linux
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
[root@test001 ~]# partprobe

2.2.3.2 制作仲裁盘

[root@test001 ~]# mkqdisk -c /dev/hda1 -lqdisk01
mkqdisk v0.6.0
Writing new quorum disk label 'qdisk01' to/dev/hda1.
WARNING: About to destroy all data on/dev/hda1; proceed [N/y] ? y
Initializing status block for node 1...
Initializing status block for node 2...
Initializing status block for node 3...
Initializing status block for node 4...
Initializing status block for node 5...
Initializing status block for node 6...
Initializing status block for node 7...
Initializing status block for node 8...
Initializing status block for node 9...
Initializing status block for node 10...
Initializing status block for node 11...
Initializing status block for node 12...
Initializing status block for node 13...
Initializing status block for node 14...
Initializing status block for node 15...
Initializing status block for node 16...

2.2.3.3 查看仲裁盘状态:

[root@test001 ~]# mkqdisk –L
mkqdisk v0.6.0
/dev/disk/by-id/ata-QEMU_HARDDISK_QM00001-part1:
/dev/disk/by-path/pci-0000:00:01.1-ide-0:0-part1:
/dev/hda1:
Magic:                eb7a62c2
Label:                qdisk01
Created:              Wed Apr 24 21:03:56 2013
Host:                 test001
KernelSector Size:   512
RecordedSector Size: 512
在剩下的所有节点运行:
[root@test002 ~]# partprobe
[root@test003 ~]# partprobe

3、 新建集群

3.1、 集群工具介绍

rhcs有两种工具可以配置集群,一种是c/s结构的web界面的配置工具,服务端是luci,客户端是ricci默认安装clustering包组的时候都安装了这两个工具。第二种是system-config-cluster是系统工具,但是在rhel6.0版本之后就没有这个工具了。

3.1.1、 Luci使用配置

第一次使用的时候要配置用户密码,默认的用户是admin:
[root@test001 ~]# luci_admin init
Initializing the luci server
Creating the 'admin' user
Enter password: #密码
Confirm password: #确认密码
Please wait...
The admin password has been successfullyset.
Generating SSL certificates...
The luci server has been successfullyinitialized
You must restart the luci server forchanges to take effect.
Run "service luci restart" to doso
[root@test001 ~]# /etc/init.d/luci restart
Shutting down luci:                                        [  OK  ]
Starting luci: Generating https SSLcertificates...  done
[  OK  ]
Point your web browser tohttps://test001:8084 to access luci
然后用web游览器登陆https://test001:8084

3.1.2、 System-config-cluster

这个工具在系统工具里面,可以找到。或者直接在命令行下运行:[root@test001~]#system-config-cluster


4、 利用system-config-cluser新建集群

点击:createNew configuration

填入集群名字:test使用仲裁盘:参数设置:Miniumscore:修改成1,默认是3.添加程序:ping–c2 –t2 192.168.1.254 这个254是业务网关!!Lable:qdisk01这个非常重要,不是乱填的,qdisk01是上面第二节我们建的仲裁盘他的标签是qdisk01,这里推荐用标签。Score:1,间隔次数:interval:2确认无误完:OK

4.1.1、 添加集群节点

选择:clusternodes,输入节点名(这个节点名要与/etc/hosts里面的保持一致)将test001,test002,test003都按这个方法添加进去。

4.1.2、 添加fence设备:

因为dell服务器的管理口用的是ipmi口,采用fence_ipmilan,并且将上面第一节部分配置的ip,用户名,密码(root,root.123)填入即可。把三台dell服务器的ipmi接口都添加进去。点击:fencedevice ,添加新的fence 设备,在下拉菜单中找到相应的ipmifence设备,将上面第一节部分配置的ip,用户名,密码(root,root.123)填入即可。

4.1.3、 将fence设备添加到节点。

选中:clusternodes下面的test001,然后点击在右下角有一个managefencing for this node。出现如下界面:点击:Adda New Fence Level

现在ipmi01这个impi设备给test001,点击ok。(一个ipmi设备只用给一个节点使用,用完了就不能再给其他节点了)

Test002,test003节点都安装这个方法添加ipmi02,ipmi03的fence设备。

4.1.4、 添加失效恢复域

注意:这个域并不是热迁移,是冷恢复(coldrecovery)期间的服务会有一小段时间无法提供服务。


点击:FaailoverDomains,添加新的失效域。输入与名字(这个域名字可以使用具体应用的名字来取比较方便管理这里做测试就采用fdx的命名方式),点击OK。将所有节点都添加到fd01里面,test001,test002,test003,设置优先级,1的优先级最高,服务迁移的时候是根据这个优先级来判断迁移到具体的哪一台服务器上。将上个选项都打上√。

注意:失效域看具体业务需求,在rhcs中不是必须的配置,一个域里面可以运行很多服务,也可以一个应用之运行在一个域里面。服务只能在域中的服务器间迁移。

4.1.5、添加resource

4.1.5.1添加vip


4.1.5.2添加文件系统


4.1.5.3添加服务启动脚本


4.1.6、 创建一个应用

点击services,创建一个应用web_server,点击:Adda shared resource to thisService,并将刚才创建的三个资源都添加给它。在右上角选择失效域fd01,然后策略为迁移(relocate),点击关闭。然后保存到/etc/cluster/cluster.conf

4.1.7、 分发集群配置文件

scp /etc/cluster/cluster.conf  test002:/etc/cluster/
scp /etc/cluster/cluster.conf  test003:/etc/cluster/

4.2、 启动集群

4.2.1、 cman

在所有节点启动cman服务
[root@test001 ~]# /etc/init.d/cman start
Starting cluster:
Loading modules... done
Mounting configfs... done
Starting ccsd... done
Starting cman... done
Startingdaemons... done
Starting fencing... done
[  OK  ]

4.2.2、 clvm

在所有节点启动clvm
[root@test001 ~]# /etc/init.d/clvmd start
Starting clvmd:
Activating VG(s):   2 logical volume(s) in volume group "vg_hninms"now active
1logical volume(s) in volume group "test01" now active
[  OK  ]

4.2.3、 qdisk

在所有节点启动qdiskd
[root@test001 ~]# /etc/init.d/qdiskd  restart

4.2.4、 rgmanager

在所有节点启动
[root@test001 ~]# /etc/init.d/rgmanager  start

5、 测试

查看集群运行情况
[root@test001 ~]# clustat –i 1
Cluster Status for test @ Wed Apr 2421:32:42 2013
Member Status: Quorate
Member Name                             ID   Status
------ ----                             ---- ------
test001                                     1 Online,Local, rgmanager
test002                                     2 Online,rgmanager
test003                                     3 Online,rgmanager
/dev/disk/by-id/ata-QEMU_HARDDISK_QM0000  0 Online, Quorum Disk
Service Name                   Owner (Last)                   State
------- ----                   ----- ------                   -----
service:web_server             test002                        started
这个集群中有前面添加的web_serser应用,目前是在test002上运行,状态是started,下面查看一下vip是否分配正常,在test002中运行:ip addr
[root@test002 ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu16436 qdisc noqueue
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0:<BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 52:54:00:a7:f4:ea brd ff:ff:ff:ff:ff:ff
inet 192.168.1.102/24 brd 192.168.0.255 scope global eth0
inet 192.168.1.104/24 scope global secondaryeth0
inet6 fe80::5054:ff:fea7:f4ea/64 scope link
valid_lft forever preferred_lft forever
3: sit0: <NOARP> mtu 1480 qdisc noop
link/sit 0.0.0.0 brd 0.0.0.0
查看应用的文件系统是否挂在在指定的目录下面:
[root@test002 ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg_hninms-lv_root
13G  3.8G 7.9G  33% /
/dev/vda1              99M   13M  82M  14% /boot
tmpfs                 390M     0 390M   0% /dev/shm
/dev/mapper/test01-lvtest01
97M  5.6M  87M   7% /var/www/html

5.1、 迁移测试

将test002中的httpd服务停掉。
[root@test002 ~]# /etc/init.d/httpd stop
Stopping httpd:                                           [  OK  ]
查看test002的日志###test002
Apr 24 21:44:17 test002clurgmgrd: [4632]: <err> script:httpd: status of /etc/init.d/httpd failed(returned 3)
Apr 24 21:44:17 test002 clurgmgrd[4632]:<notice> status on script "httpd" returned 1 (generic error)
Apr 24 21:44:17 test002 clurgmgrd[4632]:<notice> Stopping service service:web_server
Apr 24 21:44:17 test002 avahi-daemon[2297]:Withdrawing address record for 192.168.1.104 on eth0.
Apr 24 21:44:27 test002 clurgmgrd[4632]:<notice> Service service:web_server is recovering
Apr 24 21:44:31 test002 clurgmgrd[4632]:<notice> Service service:web_server is nowrunning on member 3
查看test003的日志#########test003
Apr 24 21:37:36 test003 clurgmgrd[3015]: <notice> Member 2 shutting down
Apr 24 21:38:27 test003 clurgmgrd: [3015]:<err> script:httpd: status of /etc/init.d/httpd failed (returned 3)
Apr 24 21:38:27 test003 clurgmgrd[3015]:<notice> status on script "httpd" returned 1 (generic error)
Apr 24 21:38:27 test003 clurgmgrd[3015]:<notice> Stopping service service:web_server
Apr 24 21:38:27 test003 avahi-daemon[2298]:Withdrawing address record for 192.168.1.104 on eth0.
Apr 24 21:38:37 test003 clurgmgrd[3015]:<notice> Service service:web_server is recovering
Apr 24 21:38:37 test003 clurgmgrd[3015]:<notice> Recovering failed service service:web_server
Apr 24 21:38:37 test003 kernel: kjournaldstarting.  Commit interval 5 seconds
Apr 24 21:38:37 test003 kernel: EXT3 FS ondm-2, internal journal
Apr 24 21:38:37 test003 kernel: EXT3-fs: mounted filesystem with ordered data mode.
Apr 24 21:38:39 test003 avahi-daemon[2298]: Registering new address record for 192.168.1.104 on eth0.
Apr 24 21:38:40 test003 clurgmgrd[3015]:<notice> Service service:web_server started
在查看集群的状态:服务这时候已经迁移到test003Apr 24 21:44:31 test003 clurgmgrd[9700]:<notice> Service service:web_server started Cluster Status for test @ Wed Apr 2421:47:08 2013Member Status: Quorate Member Name ID Status ------ ---- ---- ------ test001 1 Online,Local, rgmanager test002 2 Online,rgmanager test003 3 Online,rgmanager /dev/disk/by-id/ata-QEMU_HARDDISK_QM0000 0 Online, Quorum Disk Service Name Owner (Last) State ------- ---- ----- ------ ----- service:web_server test003 started #####test

5.2、 仲裁盘测试

查看集群状态
[root@test001 ~]# clustat –i1
Cluster Status for test @ Wed Apr 2423:27:24 2013Member Status: Quorate Member Name ID Status ------ ---- ---- ------ test001 1 Online,rgmanager test002 2 Online, Local, rgmanager test003 3 Online,rgmanager /dev/disk/by-id/ata-QEMU_HARDDISK_QM0000 0 Online, Quorum Disk Service Name Owner (Last) State ------- ---- ----- ------ ----- service:ftp_server test003 started service:web_server test001 started 这里做一下说明:在test001上多了一个应用ftp_server,这个应用添加的方法与web_server的方法是一样的,服务器上安装ftp服务器,将服务器的资源添加给应用即可(文件系统,服务ip,启动脚本)仲裁盘测试说明:仲裁测试是在虚拟机上完成的,仲裁盘是为了解决小集群应用存活的问题而存在的.在一般没有仲裁盘的集群里面,例如五台节点只要死了超过两台那么该集群就无仲裁,集群就挂起。有仲裁盘的情况下,可以做到五节点死了四个,集群还能活着,只是单台承载所有应用也会很吃力,迁移时间会比较长,具体出现的情况还是没办法完全模拟。在有运行应用的两个节点test003,test001运行:
iptables -A OUTPUT -d 192.168.0.55 -p icmp -j REJECT
将test003,test001的仲裁盘的进程阻断,这样就可以模拟仲裁盘的功能。Qdisk 进程会向业务网关发送ping测试包,阻断测试包就会导致仲裁失败,失败就会导致节点被fence保护起来,然后用dlm锁起,知道将节点重启之后才释放锁,然后将服务迁移到test002.查看结果:一般情况下,3节点死了2个,集群必死,可是这种情况集群还活着。
[root@test002 ~]# clustat –i 1
Member Status: Quorate Member Name ID Status ------ ---- ---- ------ test001 1 Online,rgmanager test002 2 Online,Local, rgmanager test003 3 Online,rgmanager /dev/disk/by-id/ata-QEMU_HARDDISK_QM0000 0 Online, Quorum Disk Service Name Owner (Last) State ------- ---- ----- ------ ----- service:ftp_server test002 started service:web_server test002 started 然后等待,test001,test003正常重启后,加入集群这时候集群会根据,失效域里面的优先级来重现迁移应用这时候,原来在test002上的web_server,跟ftp_server都会迁到各自域里面权限最好的服务器上。
[root@test001 ~]# clustat –i 1
Member Status: Quorate Member Name ID Status ------ ---- ---- ------ test001 1 Online, rgmanager test002 2 Online,Local, rgmanager test003 3 Online,rgmanager /dev/disk/by-id/ata-QEMU_HARDDISK_QM0000 0 Online, Quorum Disk Service Name Owner (Last) State ------- ---- ----- ------ ----- service:ftp_server test003 started service:web_server test001 started 到此,测试完毕,大部分的内容都有测试成功,包括服务迁移,单台节点存活利用qdisk来维持集群存活,服务迁移等。此部分内容未采用GFS2来作为集群文件系统进行测试,采用GFS2替换本文中的ext3即可。
如有什么问题,方便留言或者私信给我,我再做进一步的测试,谢谢大家啦!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息