mysql dba
全部博文(15)
分类: 系统运维
2013-10-26 23:50:50
第一章 RHCS 整体环境搭建概况
环境: 虚拟机:VMware Workstation
操作系统:CentOS 5.5
1.三台机器.其中2台做MySQL Server.一台做存储.
把这个配置文件,复制在这3台机子上面.
2.安装CMAN (分别在mysqlOne和mysqlTwo上面安装)
yum install cman
安装后,脚本文件在/etc/init.d/cman
3.安装RGMANAGER (分别在mysqlOne和mysqlTwo上面安装)
yum install rgmanager
安装后,脚本文件在/etc/init.d/rgmanager
4.安装可视化配置工具
yum install system-config-cluster
5.在storgae-server主机上配置raid5.
详细配置过程请看我写的《VMware Linux RAID5 介绍 》
地址:http://blog.csdn.net/m582445672/article/details/7600798
最终配置成md_d0的raid5如下(把md_d0虚拟raid又分了4个区):
6.在storgae-server主机上的md_d0上配置LVM.
详细配置过程请看我写的《LVM (Logical Volume Management) 配置》
地址:http://blog.csdn.net/m582445672/article/details/7601555
最终配置的LVM为:
(其中/dev/md_d0p1,/dev/md_d0p2,/dev/md_d0p3组合成名为:VolSDD的LVM逻辑卷)
(其中/dev/md_d0p4组成成为:Qdisk的LVM逻辑卷)
7.配置ISCSI服务
在storgae-server主机上配置iscsi服务端(scsi-target)
在mysqlOne和mysqlTwo上配置iscsi客户端(iscsi-Initiator)
详细配置过程请我看写的《ISCSI (Internet Small Computer System Interface) 配置说明 》
地址:http://blog.csdn.net/m582445672/article/details/7602445
最终配置结果如下:
在storgae-server主机上配置ISCSI的服务端:
执行chkconfig tgtd on # 加入开机启动
执行/etc/init.d/tgtd start # 启动iscsi服务端的服务
执行下面脚本来配置SERVER端.
#! /bin/sh
tgtadm --lld iscsi --op new --mode target --tid 1 -T iqn.2023-04.com.example:dev.sdb
tgtadm --lld iscsi --op new --mode logicalunit --tid 1 --lun 1 -b /dev/mapper/VolGroup03-VolSDD
tgtadm --lld iscsi --op bind --mode target --tid 1 -I 192.168.96.6
tgtadm --lld iscsi --op bind --mode target --tid 1 -I 192.168.96.66
tgtadm --lld iscsi --op new --mode target --tid 2 -T iqn.2023-04.com.example:dev.qdisk
tgtadm --lld iscsi --op new --mode logicalunit --tid 2 --lun 1 -b /dev/mapper/VolGroup04-Qdisk
tgtadm --lld iscsi --op bind --mode target --tid 2 -I 192.168.96.6
tgtadm --lld iscsi --op bind --mode target --tid 2 -I 192.168.96.66
tgtadm --lld iscsi --op show --mode target
在mysqlOne和mysqlTwo主机上配置ISCSI的客户端:
执行chkconfig iscsid on # 加入开机启动
执行 /etc/init.d/iscsid start # 启动iscsid的客户端
执行下面的脚本来配置CLIENT端
#! /bin/sh
iscsiadm -m discovery -t sendtargets -p 192.168.96.5
iscsiadm -m node -T iqn.2023-04.com.example:dev.sdb -p 192.168.96.5 -l
iscsiadm -m node -T iqn.2023-04.com.example:dev.qdisk -p 192.168.96.5 -l
执行成功后,在mysqlOne和mysqlTwo主机上可以看到通过iscsi连接到storgae-server主机上的磁盘.
8.配置仲裁盘
其实仲裁盘只需要10M就可以了.但现在做实验,分了10G. 仲裁盘为/dev/sdd
在另一一个主机结点上创建仲裁盘
执行:mkqdisk -c /dev/sdd -l myqdisk
9.配置群集文件 (cluster.conf)
运行system-config-cluster来配置群集文件
a. 创建仲裁
b.建立两个结点(结点名字必须是主机的主机名,Votes是权值)
c.创建fence
d.对这两个结点加入到fence中去.(两个结点都需要这样做)
e.创建失败转移域
f.配置数据源
g.配置服务
保存........
然后可以看到/etc/cluster/cluster.conf这个文件.
生成的配置地址:
10.启动cman.
在mysqlOne和mysqlTwo两台机子上
执行:/etc/init.d/cman start
10 .建立GFS2磁盘
mkfs.gfs2 -t cluster:mygfs1 -p lock_dlm -j 3 /dev/sdc
# cluster表示这个群集的名字(必须跟rhcs的名字相同)
# mygfs1表示gfs磁盘的名字.
# lock_dlm 群集锁
# -j gfs文件系统的结点说
首先挂载gfs2文件系统在某一台主机上.
mount -t gfs2 /dev/sdc /test
11.源码安装mysql server
分别在mysqlOne和mysqlTwo两台主机上安装mysql
详细配置过程请我看写的《CentOS5.5下源码安装mysql5.5》
地址:http://blog.csdn.net/m582445672/article/details/7649999
安装完成后,mysqlOne和mysqlTwo两台mysql的路径都在/home/service_mysql/first_mysql
把数据文件安装到共享磁盘上 /dev/sdc 也就是 /test文件夹里面.
12.配置mysql启动脚本.
这个mysql启动脚本最好去官方下载一个.
当然自己写也可以.但是最遵循启动脚本的标准
下载地址:
因为mysql是源码安装的,所以需要把配置mysql安装路径.
basedir=/home/service_mysql/first_mysql/ # 修改basedir 路径为源码安装的路径
datadir=/test/data # 这个写mysql数据存放的路径. 指向共享存储盘 /dev/sdc
# mount /dev/sdc /test
mysqld_pid_file_path=/test/data/mysqld.pid # 制定pid路径
conf=/home/service_mysql/first_mysql/my.cnf # 制定配置文件路径
最后把配置文件放到/etc/init.d/mysql
13.启动资源服务
在mysqlOne和mysqlTwo两台机子上
执行:/etc/init.d/rgmanager start
执行:/etc/init.d/qdiskd start
14.观察群集状态
clustat -l
查看 VIP
第二章 配置raid
VMware Linux RAID5 配置
VM环境:VMware Workstation
OS环境:CentOS 5.5
一、在VM中,软RAID 设备是/dev/md*, md (Multiple Devices)
二、在RAID5中,至少要有3块硬盘,因为有差错检验.
三、在软RAID5中,实际的硬盘大小应该为实际硬盘数减一,即(N-1),减去的那块空间奇偶校验.这个空间是分散到每个磁盘上的.
四、在软RAID5中,实际的每块硬盘的大小,由最小的那块硬盘来决定.因为数据会拆开平均分配给每块硬盘.
五、所有实际RAID硬盘大小应该是(硬盘数or硬盘的分区数-1)*最小的那个硬盘大小or分区大小
六、因为adadm是个工具,并没服务进程去读取/etc/mdadm.conf文件,所以,这个/etc/mdadm.conf文件是系统kernel默认读取的
RAID模块为kernel支持模块,/etc/mdadm.conf作为默认的配置文件,系统启动时加载RAID模块读默认配置文件/etc/mdadm.conf,与/etc/hosts,/etc/resolv.conf之类一 样。
实验
首先在VM上的Linux安装4块硬盘,/dev/sdb /dev/sdc /dev/sdd /dev/sde 每块硬盘20G
fdisk -l
1.首选把这4块硬盘合并成raid.
mdadm -Cv /dev/md0 -l5 --raid-devices=4 /dev/sdb /dev/sdc /dev/sdd /dev/sde
# C 为创建RAID
# v 为显示创建信息
# /dev/md0 为软raid设备
# --raid-devices 为几块硬盘
2. 这时你可以用mdadm -D /dev/md0 参看RAID创建情况
这时,还在编译,都它编译好了.就可以用了
3. 就创建了一个/dev/md0的raid了.但它的大小是(硬盘数or硬盘的分区数-1)*最小的那个硬盘大小or分区大小
4.如果要使用,还必须指定/dev/md0的文件格式
# mkfs.ext3 /dev/md0
5.这个时候,我们就要使用fdisk /dev/md0 重新对新的/dev/md0进行分区
######################这里分完区就可以用了#########################################.
6.如果想控制页面的大小就需要加-c32 (32标识每个页面32K,默认是64K),页面大小直接影响到IO
mdadm -Cv /dev/md0 -c32 -l5 --raid-devices=4 /dev/sdb /dev/sdc /dev/sdd /dev/sde
通过mdadm -D /dev/md0就可以看到
7.mdadm -Cv /dev/md0 -l5 --raid-devices=4 --spare-devices=1/dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf
# 这个是建立一个热备磁盘,如果某个磁盘坏了.可以自动顶上去.
注:
用/dev/md0 的软raid设备生成的磁盘整列.无法进行分区.
mdadm -Cv /dev/md0 -l5 -c32 --raid-devices=5 --spare-devices=1 /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf /dev/sdg
# 这里,无法对/dev/md0分区后的设备进行mkfs.ext* 操作,无法创建分区的格式.所以挂载md0分区后的设备
# 例如 mkfs.ext3 /etc/md0p1 // error
所以需要
创建md设备时,用/dev/md_d0替代/dev/md0,才能对MD设备进行分区。
mdadm -Cv --auto=mdp /dev/md_d0 -l5 -c32 --raid-devices=5 --spare-devices=1 /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf /dev/sdg
基本操作
mdadm -S /dev/md0 #关闭raid
mdadm -A /dev/md0 #启动raid
mdadm -E /dev/sdb #如果你不知道哪个分区属于哪个磁盘整列,可以用这个命令.
#UUID就是这个磁盘整列的唯一标识符.
mdadm -Av /dev/md0 --uuid=8ba81579:e20fb0e8:e040da0e:f0b3fec8 # 获得UUID后,也可以这样激活阵列
mdadm /dev/md0 --fail /dev/sdb --remove /dev/sdb # 删除某个硬盘或分区.如果有一份热备用盘.如果删除.热备份盘会自动启动.
mdadm /dev/md0 --add /dev/sdb # 新加一块硬盘.
# 重启后,使RAID从内核启动.
mdadm --detail --scan >> /etc/mdadm.conf # 放入配置文件.再次重启raid还是存在
第三章 LVM的配置
LVM (Logical Volume Management) 介绍
1.创建LVM 分区标识
fdisk /dev/sdb
1代表第几个分区. 这里的1就是sdb1, 2就是sdb2
8e代表LINUX LVM
再w保存
# 以上步骤可以不用,这个只是做个标识用.
2. fdisk -l 首先查看已有硬盘(部分截图)
3. pvcreate /dev/sdd1 # 创建LVM物理分区,此时这个分区必须没有挂载
4. pvcreate /dev/sdd2 # 创建LVM物理分区,此时这个分区必须没有挂载
5. pvdisplay # 查看物理卷分区的情况
6. vgcreate VolGroup03 /dev/sdd1 # 把这些物理卷放到一个卷组里面,是它成为一个大硬盘
# 下面红色部分可以忽略
7. vgextend VolGroup03 /dev/sdd2 # 现在已经创建了一个VolGroup03的组,所以现在就是往这个组里面新增卷
# 下面红色部分可以忽略
8. pvdisplay # 这是再看看物理分区的情况,就可以显示是哪个逻辑卷组了
9. vgdisplay # 显示有哪些卷组
10. lvcreate -l +100%free VolGroup03 -n VolSDD # 上面已经把物理卷组创建好了.接下来就是对这个物理卷组进行逻辑划分了.
# 在这个组上,新建一个逻辑分区,分配100%的空间,空间名VolSDD
# free% 自由空间的百分之多少
11. lvdisplay # 逻辑卷的配置情况
12. pvdisplay # 红色区域,可以看到物理分区卷有多少分化到逻辑卷里面
# 在默认情况,逻辑分区卷的文件存放在/dev/VolGroup03/VolSDD or /dev/mapper/VoLSDD
13. mkfs.ext3 /dev/VolGroup03/VolSDD # 创建磁盘文件系统格式.
############################## 以下是一些基本命令#########################################
14. lvs # 逻辑卷list,分配了哪些逻辑卷,就用这个命令
15. mount /dev/VolGroup03/VolSDD /sdd # 这时就可以挂载这个文件系统了
16. lvremove /dev/VolGroup03/VolSDD # 删除某个逻辑卷文件
17. vgreduce VolGroup03 /dev/sdd1 # 从某个卷组中移除一个物理分区,
# 但是,卷中最后一个分区无法删除
18. pvremove /dev/sdd1 # 删除已经移被除卷组中的某一个分区(和pvcreate命令作用相反),去掉它是LVM的物理卷功能
19. vgremove VolGroup03 # 如果是卷组中只有最后一个分区时,要先删除这个卷组.
# 再删除这个卷组中的物理分区 pvremove /dev/sdd2.
20. lvextend -L +10.10G /dev/VolGroup03/VolSDD # 如果某个逻辑卷大小不够,必须要增加.
# 对VolSDD卷增加10.10G的空间
# 这个逻辑卷组必须有这么大的空间(10.10G).自由空间这么大的才行
# 先可以用vgdisplay 来看这个卷还有多少空余的空间
# resize2fs /dev/VolGroup03/VolSDD 这里执行了这个,增加的空间才能生效
21. lvreduce -L 5G /dev/VolGroup03/VolSDD # 减小某个逻辑卷的大小. 减小到只剩下5G.
第四章 ISCSI的配置
VM环境:VMware Workstation
OS环境:CentOS 5.5
ISCSI (Internet Small Computer System Interface)
客户端软件由:ISCSI Initiator
服务端软件由:ISCSI Target
工作流:
Initiator <--> SCSI <--> ISCSI <--> TCP/IP <======> TCP/IP <--> ISCSI <--> SCSI <--> Target
(ip 网络)
安装 ISCSI 的server端
yum install scsi-target-utils
vim /usr/share/doc/scsi-target-utils-0.0/README.iscsi 里面有SCSI-TARGET的详细介绍
/etc/init.d/tgtd start 启动. (只有启动了,才能配置下面的信息)
tgtadm --lld iscsi --op show --mode target
# 查看配置信息
tgtadm --lld iscsi --op new --mode target --tid 1 -T iqn.2001-04.com.example:storage.disk2.amiens.sys1.xyz
# 创建一个新的target服务.唯一标识符 --tid 1
# iqn.2001-04.com.example:storage.disk2.amiens.sys1.xyz 为这个服务的名称.
tgtadm --lld iscsi --op new --mode logicalunit --tid 1 --lun 1 -b /dev/hdc1
# 在这个target服务上添加一个磁盘分区 /dev/hdc1, 添加到 --tid 1的服务中,
# --lun 1 磁盘分区标识符.
.
tgtadm --lld iscsi --op bind --mode target --tid 1 -I ALL
# 添加信任IP ,all 表示所有的都可以,也是添加到--tid 1的服务中
tgtadm --lld iscsi --op unbind --mode target --tid 1 -I ALL
# 删除信任IP
tgtadm --lld iscsi --op bind --mode target --tid 1 -I 192.168.2.29
# 添加某一个IP地址
tgtadm --lld iscsi --op bind --mode target --tid 1 -I 192.168.11.0/24
#添加某一个网段的IP地址
tgtadm --lld iscsi --op new --mode logicalunit --tid 1 --lun 2 -b /dev/hdd1
# .在这个target服务上添加一个磁盘分区 /dev/hdd1, 添加到 --tid 1的服务中,
# 磁盘标识符为 --lun2
tgtadm --lld iscsi --op show --mode target --tid 1 参看ISCSI的参数信息
例如:
MaxRecvDataSegmentLength=8192
MaxXmitDataSegmentLength=8192
....
tgtadm --lld iscsi --mode target --op update --tid 1 --name MaxRecvDataSegmentLength --value 16384
# 修改某个参数的值
tgtadm --lld iscsi --op new --mode account --user fujita --password tomo
# 新建一个用户名和密码
tgtadm --lld iscsi --op show --mode account
# 查看用户信息 , 有多少用户
tgtadm --lld iscsi --op bind --mode account --tid 1 --user fujita
# 用户与--tid 1绑定
安装ISCSI Initiator 端
yum install iscsi-initiator-utils
service iscisd start
iscsiadm -m discovery -t sendtargets -p 192.168.96.16 (开始必须要执行这个,因为用来初始化配置信息的)
# 主机查询划分了哪些lun
# 输入上面这个命令.将在/var/lib/iscis/send_targets and /var/lib/iscis/node 两个文件加中生成target端的基本信息
iscsiadm -m node -T [target-name] -p [ip-address] -l
# 用于连接target端.
# 这里的“-T”后面跟target名称,“ip-address”是target主机的IP地址,“port”是target主机的端口号,默认是3260。
# 例如 :
# targer-name = iqn.2023-04.com.example:dev.sdb
iscsiadm -m node -T [target-name] -p [ip-address] –u
# 断开连接
# ======================简单事例===============================
serve-targetr端 (本机IP 192.168.96.5)
tgtadm --lld iscsi --op new --mode target --tid 1 -T iqn.2023-04.com.example:dev.sdb
tgtadm --lld iscsi --op new --mode logicalunit --tid 1 --lun 1 -b /dev/mapper/VolGroup03-VolSDD
tgtadm --lld iscsi --op bind --mode target --tid 1 -I 192.168.96.6
tgtadm --lld iscsi --op show --mode target
iscsi-initiator 端 (本机IP 192.168.96.6)
首先还是要启动ISCSI服务的
/etc/init.d/iscsid start
iscsiadm -m discovery -t sendtargets -p 192.168.96.5
iscsiadm -m node -T iqn.2023-04.com.example:dev.sdb -p 192.168.96.5 -l
fdisk -l # 红色区是从iscsi-target端获得磁盘空间.
mount /dev/sdc /test # 可以直接挂载
iscsiadm -m node -T iqn.2023-04.com.example:dev.sdb -p 192.168.96.5 -u # 卸载iscsi-target端获得磁盘空间.
第五章 数据库的配置
一、安装依赖包.
1.yum install cmake
2.yum install gcc-c++
3.yum install ncurses-devel
二、解压源码包
1.tar -zxvf mysql-5.5.8.tar.gz
进入解压文件中.......
三、编译+安装
1.执行
cmake -DCMAKE_INSTALL_PREFIX=/home/mysql_service/first_mysql/ -DMYSQL_DATADIR=/home/mysql_service/first_mysql/data -DSYSCONFDIR=/home/mysql_service/first_mysql/ -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_FEDERATED_STORAGE_ENGINE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DMYSQL_UNIX_ADDR=/home/mysql_service/first_mysql/mysqld.sock -DMYSQL_TCP_PORT=3306 -DENABLED_LOCAL_INFILE=1 -DEXTRA_CHARSETS=all -DMYSQL_USER=mysql
2.make
3.make install
四、更换配置文件路径
在mysql目录下面的./mysql/support-files/
cp my-medium.cnf ../my.cnf
五、安装mysql系统库
进入mysql目录下面的 ./mysql/scripts/
1.执行
./mysql_install_db --basedir=/home/mysql_service/first_mysql --datadir=/home/mysql_service/first_mysql/data --defaults-file=/home/mysql_service/first_mysql/my.cnf --user=mysql
# 一定要指定配置文件的路径,默认是在/etc/my.cnf
六、编写MySQL启动脚
#! /bin/sh
/home/mysql-server/mysql/bin/mysqld_safe --defaults-file=/home/mysql_service/first_mysql/my.cnf --datadir=/home/mysql_service/first_mysql/data --pid-file=/home/mysql_service/first_mysql/data/cos54110629.pid --socket=/home/mysql_service/first_mysql/mysqld.sock --user=mysql&
七、更改目录权限
chown -R mysql.mysql /home/mysql_service
八、登录
登录时指定mysqld.sock的路径
mysql -S /home/mysql_service/first_mysql/mysqld.sock
以上五章是参考文档
以下网址是参考技术文档:
http://blog.csdn.net/m582445672/article/details/7650234
http://huangrs.blog.51cto.com/2677571/1058235
http://ixdba.blog.51cto.com/2895551/599020
http://369369.blog.51cto.com/319630/836001
以下是RAID操作记录:
raid 5 文档
http://blog.csdn.net/m582445672/article/details/7600798
操作记录:【注意只能是md_d0】[md0不能分区]
mdadm -Cv /dev/md_d0 -l5 --raid-devices=4 --spare-devices=1 /dev/sdb /dev/sdc /dev/sdd /dev/sde
mdadm -D /dev/md0 【查看】
mkfs.ext3 /dev/md_d0 【整盘格式化】
fdisk /dev/md_d0 [分区]
fdisk -l 【查看分区】
mkfs.ext3 /dev/md_d0p1 【格式化】
mount /dev/md_d0p1 /test【挂载】
这时你可以用mdadm -D /dev/md0 参看RAID创建情况
mdadm -Cv --auto=mdp /dev/md_d0 -l5 -c32 --raid-devices=4 --spare-devices=1 /dev/sdb /dev/sdc /dev/sdd /dev/sdd /dev/sdf
mdadm -Cv /dev/md0 -l5 --raid-devices=4 /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf
以下是iscsi操作记录
iscsiadm -m discovery -t sendtargets -p 192.168.2.196:3260
1. tgtadm --lld iscsi --op new --mode target --tid 1 -T iqn.2023-04.com.example:dev.sdb
2. tgtadm --lld iscsi --op new --mode logicalunit --tid 1 --lun 1 -b /dev/mapper/VolGroup03-VolSDD
3. tgtadm --lld iscsi --op bind --mode target --tid 1 -I 192.168.96.6
4. tgtadm --lld iscsi --op bind --mode target --tid 1 -I 192.168.96.66
5.
6. tgtadm --lld iscsi --op new --mode target --tid 2 -T iqn.2023-04.com.example:dev.qdisk
7. tgtadm --lld iscsi --op new --mode logicalunit --tid 2 --lun 1 -b /dev/mapper/VolGroup04-Qdisk
8. tgtadm --lld iscsi --op bind --mode target --tid 2 -I 192.168.96.6
9. tgtadm --lld iscsi --op bind --mode target --tid 2 -I 192.168.96.66
10.
11. tgtadm --lld iscsi --op show --mode target
1. root@mysqlone ~]# iscsiadm -m node -T iqn.2013-10.com.126:qdisk -p 192.168.1.52 -u
2. Logging out of session [sid: 2, target: iqn.2013-10.com.126:qdisk, portal: 192.168.1.52,3260]
3. Logout of [sid: 2, target: iqn.2013-10.com.126:qdisk, portal: 192.168.1.52,3260] successful.
4. [root@mysqlone ~]# iscsiadm -m node -T iqn.2013-10.com.126:volgroup03 -p 192.168.1.52 -l
5. Logging in to [iface: default, target: iqn.2013-10.com.126:volgroup03, portal: 192.168.1.52,3260] (multiple)
6. Login to [iface: default, target: iqn.2013-10.com.126:volgroup03, portal: 192.168.1.52,3260] successful.
7. [root@mysqlone ~]# iscsiadm -m node -T iqn.2013-10.com.126:qdisk -p 192.168.1.52 -l
8. Logging in to [iface: default, target: iqn.2013-10.com.126:qdisk, portal: 192.168.1.52,3260] (multiple)
9. Login to [iface: default, target: iqn.2013-10.com.126:qdisk, portal: 192.168.1.52,3260] successful.
http://cshbk.blog.51cto.com/5685776/1293971
tgtadm -L iscsi -o new -m target -t 1 -T iqn.2013-09.com.yunqn.www:lvm |
tgtadm --lld iscsi -o new -m logicalunit -t 1 -l 1 -b /dev/mapper/volgroup03-VolSDD
tgtadm --lld iscsi -o bind -m target -t 1 -I 192.168.1.51 |
tgtadm -L iscsi -o show -m target |
iscsiadm -m discovery -t sendtargets -p 192.168.1.52
iscsiadm -m node -T iqn.2013-09.com.yunqn.www:lvm --login
=========================================================================================
tgtadm -L iscsi -o new -m target -t 1 -T iqn.2013-09.com.yunqn.www:qdisk |
tgtadm --lld iscsi -o new -m logicalunit -t 1 -l 2 -b /dev/mapper/volQdisk-VolQdisk
tgtadm --lld iscsi -o bind -m target -t 1 -I 192.168.1.51 |
tgtadm --lld iscsi -o bind -m target -t 1 -I 192.168.1.50
|
注意事项:
从输出日志可以看出,web1在异常宕机后,首先由qdiskd进程将失败节点从集群中隔离,然后qdiskd进程将结果返回给cman进程,cman进程接着去调用Fence进程,最后Fence进程根据事先设置好的Fence agent调用Fence设备将web1成功Fence掉,clurgmgrd进程在接到成功Fence的信息后,web2开始接管web1的服务和IP资源,同时释放dlm锁,GFS2文件系统可以正常读写。
通过观察日志可以发现,qdiskd进程会首先将节点web1从集群隔离,然后由fenced进程将web1成功fence掉,最后,web2才接管了web1的服务和IP资源。这里有个先后问题,也就是说,只有Fence成功,集群资源切换才会进行。
如果fenced进程没有成功将web1节点fence掉,那么RHCS会进入等待状态,此时集群系统GFS2共享存储也将变得不可读写,直到Fence进程返回成功信息,集群才开始进行资源切换,同时GFS2文件系统也将恢复读写。
此时,在web2节点通过cman_tool查看集群状态,信息如下:
fence是RHCS的HA集群中预防集群出现脑裂之后节点争抢文件系统的一种手段。
红帽的HA集群中没有可用的fence设备(例如hp ilo,ibm ipmi,rsa以及dell drac5/6),那么当集群心跳线断开或者物理机宕机,则服务无法自动切换。使用手动fence的,当节点关机的时候服务是可切换的,但是当节点宕机或者断网,切换就不行了。必须要用fence_ack_manual去人工干预,而且这相当于用欺骗另外一个节点已经被fence掉,而不管对方是否真正被fence。所以从这个角度讲,没有fence,无法构建一个完整的RHCS HA集群。
而且如果使用没有fence设备的服务器或者环境去搭建RHCS HA集群的时候,红帽官方也不会对这种架构提供支持。
因此从上述角度说,fence设备是必须的。
现在常用的fence设备,除了上述提到的不同品牌服务器自带的之外,还有一些电源管理交换机,如WTI或者APC什么的。针对虚拟化场景,如果你的host使用的是RHEL,那么可以使用fence_xen或者fence_virsh(分别针对xen和kvm/xen架构),针对HOST是vmware esx的,可以使用fence_vmware_soap,不过操作系统必须是RHEL 5.8以及RHEL 6.1以上,另外某些环境新安可以使用存储fence,即通过阻塞光纤交换机的接口来起到禁止被fence的机器访问存储的效果,不过不能够做到自动化,阻塞的端口必须得手动打开。
用命令 fence_ack_manual -n
操作记录
[root@mysqltwo ~]# mkfs.gfs2 -t cluster:mygfs1 -p lock_dlm -j 3 /dev/sdb
This will destroy any data on /dev/sdb.
It appears to contain a ext3 filesystem.
Are you sure you want to proceed? [y/n] y
Device: /dev/sdb
Blocksize: 4096
Device Size 8.38 GB (2196480 blocks)
Filesystem Size: 8.38 GB (2196479 blocks)
Journals: 3
Resource Groups: 34
Locking Protocol: "lock_dlm"
Lock Table: "cluster:mygfs1"
UUID: CBBB02B2-8E04-305C-5DD5-89E1A669BDC8
cmake -DCMAKE_INSTALL_PREFIX=/home/mysql_service/first_mysql/ -DMYSQL_DATADIR=/home/mysql_service/first_mysql/data -DSYSCONFDIR=/home/mysql_service/first_mysql/ -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_FEDERATED_STORAGE_ENGINE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DMYSQL_UNIX_ADDR=/home/mysql_service/first_mysql/mysqld.sock -DMYSQL_TCP_PORT=3306 -DENABLED_LOCAL_INFILE=1 -DEXTRA_CHARSETS=all -DMYSQL_USER=mysql
./mysql_install_db --basedir=/home/mysql_service/first_mysql --datadir=/test/data --defaults-file=/home/mysql_service/first_mysql/my.cnf --user=mysql
/home/mysql_service/first_mysql/my.cnf
/etc/init.d/cman start
/etc/init.d/rgmanager start
/etc/init.d/qdiskd start
正确停止集群的次序是
1、依次停止每个节点上的应用服务,LZ你这应该是停止DBserver
2、依次umount每个节点上的GFS分区
3、依次停止每个节点上的gfs
4、依次停止每个节点上的clvmd
5、依次停止每个节点上的fenced
6、依次停止每个节点上的cman
启动的时候完全倒过来做即可。
mount -t gfs2 /dev/sdb /test
手动切换节点服务:
clusvcadm -e mysql_service -m mysqlone
clusvcadm -e mysql_service -m mysqltwo
clusvcadm -r mysql_service -m mysqltwo
/home/mysql_service/first_mysql/my.cnf
Css是同步配置文件的服务。
关于RHCS几个服务的解释
分布式集群管理器(cman)
Cluster manager 简称CMAN,是一个分布式集群管理工具,运行在集群的各个节点上,为RHCS提供集群管理任务。
它用于管理集群成员、消息和通知。它通过监控每个节点的运行状态来了解节点成员之间的有关系。当集群中某个节点出现故障时,节点成员关系将发生改变,CMAN及时将这种改变通知底层,进而做出相应的调整。
CMAN根据每个节点的运行状态,统计出一个法定节点数,作为集群是否存活的依据。当整个集群中有多于一半的节点处于激活状态时,表示达到了法定节点数,此集群可以正常运行,当集群中有一半或少于一半的节点处于激活状态时,表示没有达到法定的节点数,此时整个集群系统将变得不可用。
CMAN依赖于CCS,并且CMAN通过CCS读取cluster.conf文件。
锁管理(DLM)
Distributed Lock Manager,简称DLM,是一个分布式锁管理器,它是RHCS的一个底层基础构件,同时也为集群提供了一个公用的锁运行机制。DLM运行在每个节点上,GFS通过锁管理器的机制来同步访问文件系统的元数据。CLVM通过锁管理器来同步更新数据到LVM卷和卷组。
DLM不需要设定锁管理服务器,它采用对等的锁管理方式,大大提高了处理性能。同时,DLM避免了单个节点失败需要整体恢复的性能瓶颈。另外,DLM的请求是本地的,不需要网络请求,因此请求会立即生效。最后,DLM通过分层机制,可以实现多个锁空间的并行锁模式。
配置文件管理(CCS)
Cluster configuration system 简称CCS,主要用于集群配置文件管理和配置文件在节点之间的同步。CCS运行在集群的每个节点上,监控每个集群节点上的单一配置文件/etc/cluster/cluster.conf的状态。当这个文件发生任何变化时,都将些变化更新至集群中的每个节点上,时刻保持每个节点的配置文件同步。
Cluster.conf是一个XML文件,其中包含集群名称,集群节点信息,集群资源和服务信息,fence设备等。
栅设备(Fence)
通过栅设备可以从集群共享存储中断开一个节点,切断I/O以保证数据的完整性。当CMAN确定一个节点失败后,它在集群结构中通告这个失败的节点,fenced进程将失败的节点隔离,以保证失败节点不破坏共享数据。它可以避免因出现不可预知的情况而造成的“脑裂”(split-brain)现象。“脑裂”是指当两个节点之间的心跳线中断时,两台主机都无法获取对方的信息,此时两台主机都认为自己是主节点,于是对集群资源(共享存储,公共IP地址)进行争用,抢夺。
Fence的工作原理是:当意外原因导致主机异常或宕机时,备用机会首先调用fence设备,然后通过fence设备将异常的主机重启或从网络上隔离,释放异常主机占据的资源,当隔离操作成功后,返回信息给备用机,备用机在接到信息后,开始接管主机的服务和资源。
RHCS的Fence设备可以分为两种:内部Fence和外部Fence。内部fence有IBM RSAII卡,HP的ILO卡,以及IPMI设备等;外部FENCE设备有UPS,SAN switch ,Network switch等。
栅设备实例
当节点A上的栅过程发现C节点失效时,它通过栅代理通知光纤通道交换机将C节点隔离,从而释放占用的共享存储。
当A上的栅过程发现C节点失效时,它通过栅代理直接对服务器做电源power on/off,而不是去执行操作系统的开关机指令。
rgmanager管理
它主要用来监督、启动、停止集群的应用、服务和资源。当一个节点的服务失败时,高可用集群服务管理进程可以将服务从这个失败节点转移至其点健康节点上,这种服务转移能力是自动动,透明的。
RHCS通过rgmanager来管理集群服务,rgmanager运行在每个集群节点上,在服务器上对应的进程为clurgmgrd。
在RHCS集群中,高可用生服务包括集群服务和集群资源两个方面。集群服务其实就是应用,如APACHE,MYSQL等。集群资源有IP地址,脚本,EXT3/GFS文件系统等。
在RHCS集群中,高可用性服务是和一个失败转移域结合在一起的。由几个节点负责一个特定的服务的集合叫失败转移域,在失败迁移域中可以设置节点的优先级,主节点失效,服务会迁移至次节点,如果没有设置优先,集群高可用服务将在任意节点间转移。
说了这么多,初学者可能还是不明白RHCS组件之间的关系,所以整个图给大家作感性认识一下,RHCS组件可以归到以下图示中:
集群配置和管理工具
RHCS提供了多种集群配置和管理工具,常用有基于GUI的system-config-cluster,conga等,还提供了基于命令行的管理工具。
System-config-cluster由集群节点配置和集群管理两个部分组成,分别用于创建集群节点配置文件和维护节点运行状态,一般用于早期的RHCS版本中。
Conga是新的基于网络的集群配置工具。它是web界面管理的,由luci和ricci组成,luci可以安装在一台独立的计算机上,也可安装在节点上,用于配置和管理集群,ricci是一个代理,安装在每个集群节点上,luci通过ricci和集群中的每个节点通信。
GFS是RHCS为集群系统提供的一个存储解决方案,它允许集群的多个节点在块级别上共享存储,多个节点同时挂载一个文件系统分区,而使文件系统数据不受破坏,单一的ext2或ext3无法做到。
为了实现多个节点对一个文件系统同时进行读写操作,GFS使用锁管理器(DLM)来管理I/O操作:当一个写进程操作一个文件时,此文件被锁定,其它进程无法进行读写操作,操作完成后,RHCS底层机制会把此操作在其它节点上可见。
有GFS就有RHCS,但建立RHCS时,如果不用共享存储,就没有必要用GFS。
资源(Resource)
脚本(script),IP Address,File system可以用来定义一个高可用的web服务功能
RHCS维护篇
(参考四部曲之后一篇 http://ixdba.blog.51cto.com/2895551/599894)
一、启动RHCS集群
RHCS集群的核心进程有cman和rgmanager,要启动集群,依次在集群的每个节点执行如下命令即可:
service cman start
service rgmanager start
需要注意的是,执行这两个命令是有先后顺序的,需要首先启动cman,然后在启动rgmanager。在集群所有节点成功启动cman服务后,然后继续依次在每个节点启动rgmanager服务。
二、关闭RHCS集群
与启动集群服务刚好相反,关闭RHCS集群的命令为:
service rgmanager stop
service cman stop
首先在集群的每个节点依次关闭rgmanager服务,等待所有节点的rgmanager服务成功关闭后,再依次关闭每个节点的cman服务即可完成真个集群服务的关闭。
有时在关闭cman服务时,可能会提示关闭失败,此时可以检查本机的共享存储GFS2文件系统是否已经卸载,还可以检查其它节点的rgmanager服务是否都已经正常关闭。
三、管理应用服务
集群系统启动后,默认是自动启动应用服务的,但是如果某个应用服务没有自动启动,就需要通过手工方式来启动。管理应用服务的命令是clusvcadm,通过这个命令可以启动、关闭、重启、切换集群中的应用服务。
1. 启动某个应用服务
可以通过如下方式启动某个节点的应用服务:
clusvcadm -e
? Service:表示集群中创建的应用服务名称。
? Node:表示集群节点名称。
例如,要启动节点web1上的webserver服务,操作如下:
[root@web1 ~]# clusvcadm -e webserver -m web1
Member web1 trying to enable service:webserver...Success
service:webserver is now running on web1
可以通过/var/log/messages文件查看启动应用服务的详细信息。当webserver启动后,与服务相关的集群资源:如虚拟IP、应用程序服务脚本也随之启动,可以通过如下命令查看集群资源是否已经正常加载:
2. 关闭某个应用服务
可以通过如下方式关闭某个节点的应用服务:
clusvcadm -s
[root@Mysql1 ~]# clusvcadm -s mysqlserver -m Mysql1
Member Mysql1 stopping service:mysqlserver...Success
可以通过/var/log/messages文件查看关闭应用服务的详细信息。当mysqlserver关闭后,与服务相关的集群资源:如虚拟IP、应用程序服务脚本也随之释放。
3. 重启某个应用服务
可以通过如下方式重启某个节点的应用服务:
clusvcadm -R
[root@web2 ~]# clusvcadm -R webserver -m web1
Member web1 trying to restart service:webserver...Success
这个命令是在web2节点上执行的,但是也能成功将web1节点上的webserver进行重启,由此可知,clusvcadm命令在集群任意节点执行都是可以的。
4. 切换某个服务
可以通过如下方式将一个应用服务从一个节点切换到另一个节点:
clusvcadm -r
[root@web1 ~]# clusvcadm -r webserver -m web2
Trying to relocate service:webserver to web2...Success
service:webserver is now running on web2
四、监控RHCS集群状态
通过对RHCS的监控,有助于了解集群每个节点的健康状况,并能发现问题,及时解决问题,RHCS集群提供了丰富的状态查看命令,这里主要介绍下cman_tool、clustat、ccs_tool的使用方法。
1. cman_tool命令
cman_tool的参数比较多,但是用法比较简单,基本用法格式为:
cman_tool
[root@web1 ~]# cman_tool nodes -a
Node Sts Inc Joined Name
0 M 0 2010-08-23 01:24:00 /dev/sdb7
1 M 2492 2010-08-23 01:22:43 web2
Addresses: 192.168.12.240
2 M 2492 2010-08-23 01:22:43 Mysql1
Addresses: 192.168.12.231
3 M 2492 2010-08-23 01:22:43 Mysql2
Addresses: 192.168.12.232
4 M 2488 2010-08-23 01:22:43 web1
Addresses: 192.168.12.230
此命令显示了节点名称,以及对应的节点IP地址和加入集群的时间。
如果要了解更多集群节点信息,可以通过如下命令:
[root@web1 ~]# cman_tool status
Version:6.2.0
Config Version: 35 #集群配置文件版本号
Cluster Name: mycluster #集群名称
Cluster Id: 56756
Cluster Member: Yes
Cluster Generation: 2764
Membership state: Cluster-Member
Nodes: 4 #集群节点数
Expected votes: 6 #期望的投票数
Quorum device votes: 2 #表决磁盘投票值
Total votes: 6 #集群中所有投票值大小
Quorum: 4 #集群法定投票值,低于这个值,集群将停止服务
Active subsystems: 9
Flags: Dirty
Ports Bound: 0 177
Node name: web1
Node ID: 4 #本节点在集群中的ID号
Multicast addresses: 239.192.221.146 #集群广播地址
Node addresses: 192.168.12.230 #本节点对应的IP地址
2. clustat命令
clustat命令使用非常简单,详细的使用方法可以通过“clustat -h”获取帮助信息,这里仅仅列举几个例子。
[root@web1 ~]#clustat -i 3
Cluster Status for mycluster @ Mon Aug 23 18:54:15 2010
Member Status: Quorate
Member Name ID Status
------ ---- ---- ------
web2 1 Online, rgmanager
Mysql1 2 Online, rgmanager
Mysql2 3 Online, rgmanager
web1 4 Online, Local, rgmanager
/dev/sdb7 0 Online, Quorum Disk
Service Name Owner (Last) State
------- ---- ----- ------ --------
service:mysqlserver Mysql1 started
service:webserver web1 started
对输出内容含义如下:
clustat的“-i”参数可以实时的显示集群系统中每个节点以及服务的运行状态,“-i 3”表示每三秒刷新一次集群状态。
在这个输出中,可以看到每个节点都处于“Online”状态,表明每个节点都运行正常,如果某个节点退出了集群,对应的状态应该是“Offline”,同时还可以看到,集群的两个服务也处于“started”状态,分别运行在Mysql1节点和web1节点。
另外,通过“ID”一列可以知道集群节点的对应关系,例如,web2在此集群中对应的就是“Node 1”节点,同理,web1对应的是“Node 4”节点。了解集群节点顺序有助于对集群日志的解读。
3. ccs_tool命令
ccs_tool主要用来管理集群配置文件cluster.conf,通过ccs_tool可以在集群中增加/删除节点、增加/删除fence设备、更新集群配置文件等操作。
下面是ccs_tool的几个应用实例:
当在一个节点修改完配置文件后,可以执行“ccs_tool update”指令将配置文件在所有节点进行更新,例如:
[root@web1 cluster]# ccs_tool update /etc/cluster/cluster.conf
Proposed updated config file does not have greater version number.
Current config_version :: 35
Proposed config_version:: 35
Failed to update config file.
ccs_tool是根据cluster.conf中的“config_version”值来决定是否进行更新的,因此在修改完cluster.conf文件后,一定要将cluster.conf的config_version值进行更新,这样执行ccs_tool时才能更新配置文件。
[root@web1 cluster]# ccs_tool update /etc/cluster/cluster.conf
Config file updated from version 35 to 36
Update complete.
五、管理和维护GFS2文件系统
GFS2文件系统提供了很多管理和维护工具,常用的有gfs2_fsck、gfs2_tool、gfs2_jadd、gfs2_quota、gfs2_convert等,这里重点介绍前三个命令的用法。
1. gfs2_fsck命令
类似与ext3文件系统下的fsck.ext3命令,主要用于检测和修复文件系统错误。其实GFS2还有一个fsck.gfs2命令,此命令与gfs2_fsck命令完全一致。
gfs2_fsck的用法如下:
gfs2_fsck [-afhnpqvVy]
[root@Mysql1 ~]# gfs2_fsck -y /dev/sdb5
Initializing fsck
Validating Resource Group index.
Level 1 RG check.
(level 1 passed)
Starting pass1
Starting pass1c
Pass1c complete
…………
Pass5 complete
gfs2_fsck complete
2. gfs2_tool命令
gfs2_tool命令参数较多,但使用并不复杂,它主要用来查看、修改GFS2文件系统的相关参数信息。
下面列举几个使用例子:
1)查看GFS2文件系统挂载信息
[root@web1 ~]# gfs2_tool df /gfs2
/gfs2:
SB lock proto = "lock_dlm"
SB lock table = "mycluster:my-gfs2"
SB ondisk format = 1801
SB multihost format = 1900
Block size = 4096
Journals = 4
Resource Groups = 19
Mounted lock proto = "lock_dlm"
Mounted lock table = "mycluster:my-gfs2"
Mounted host data = "jid=2:id=65539:first=0"
Journal number = 2
Lock module flags = 0
Local flocks = FALSE
Local caching = FALSE
Type Total Blocks Used Blocks Free Blocks use%
--------------- ----------------- ------------- ---------------- -----------
data 1220724 136578 1084146 11%
inodes 1084263 117 1084146 0%
(2)gfs2_tool命令
2)锁定与解锁GFS2文件系统:
[root@node1 gfs2]# gfs2_tool freeze /gfs2
[root@node1 gfs2]# gfs2_tool unfreeze /gfs2
GFS2文件系统被锁定后,无法进行读写操作,直到被解锁。
3)查询GFS2可挂载的接点数
[root@web1 ~]# gfs2_tool journals /gfs2
journal2 - 128MB
journal3 - 128MB
journal1 - 128MB
journal0 - 128MB
4 journal(s) found.
这里显示了可挂载节点数为4,并且每个journal的大小为128M。
4)显示GFS2的版本信息:
[root@web1 ~]# gfs2_tool version
gfs2_tool 0.1.62 (built Mar 31 2010 07:34:25)
Copyright (C) Red Hat, Inc. 2004-2006 All rights reserved
(3)gfs2-jadd命令
gfs2-jadd主要用来配置GFS2的Journals数量和大小,用法非常简单:
gfs2_jadd [-cDhJjqV] /path/to/filesystem
下面列举几个用例:
设置Journals的大小为64M
[root@Mysql1 ~]# gfs2_jadd -J 64M
将GFS2可同时挂载的节点数目增加到5个
[root@Mysql1 ~]# gfs2_jadd -j 5 /gfs2
另外,另外gfs2_quota用于GFS2文件系统磁盘配额管理,gfs2_convert是一个数据转换应用程序,它可以对GFS文件系统的元数据进行更新,把它转换为一个GFS2文件系统。要深入了解它们的使用,请参考帮助信息,这里不在进行讲述。