在实际的企业当中,各种服务有对应集群,存储有存储的集群(数据有数据的集群),这里我们使用数据库。共享服务+共享存储=一个强壮的集群管理。 迁移服务集群的时候,数据的同步是非常重要的。
实验背景 :
实验是在做完RHCS高可用HA集群的基础上做的 高可用RHCS集群的搭建
主机名 | IP | 服务 |
---|---|---|
server1 | 172.25.7.101 | ricci,luci, iscsi,mysql-server |
server2 | 172.25.7.102 | ricci,iscsi,mysql-server |
server3 | 172.25.7.103 | scsi |
foundation7 | 172.25.7.250 | fence |
一、RHCS高可用集群下iscsi共享存储与mysql数据库的部署
1、确定server1和server2的httpd服务是关闭的(可在各结点上手动关闭,也可在浏览器中关闭 )
- 在浏览器中关闭时勾选apache,点击disabled即可关闭
也可以使用命令手动关闭
clusvcadm -d apache (-d表示disabled)
clusvcadm -e apache (-e表示enable)
clusvcadm -r 重新定位 (加入现在服务在server1上,执行clusvcadm -r apache之后服务就会被定位到srever2上 )
配置共享磁盘设备
2、在server3上 ,搭建共享磁盘设备的服务端
1)打开虚拟机管理器 virt-manager,给server3添加一个硬盘
2)cat /proc/partitions 可以发现多了一个/dev/vda
3) 在server3上安装服务: yum install -y scsi-*
4)编辑scsi的配置文件 : vim /etc/tgt/targets.conf
38 <target iqn.2019-02.com.example:server.target1>
39 backing-store /dev/vdb
##此处的设备名是通过fdisk -l看到的,每人可能都不一样
40 </target>
重启服务 :/etc/init.d/tgtd start
tgt-admin -s 查看tgt的信息
5)ps ax
- ps ax 发现应该有两个进程,查看进程,只有两个为正确。 如果大于2个就是错误的,删除重做 ,或者kill掉
- tgt-admin 0s(错误的),tgt-admin -s查看共享出来磁盘
3、 在客户端server1和server2上, 配置共享磁盘的客户端
1) 在客户端server1和server2上,上安装共享磁盘的客户端:yum install yum install -y iscsi-*
2)在客户端server1上,发现共享存储设备:
iscsiadm -m discovery -t st -p 172.25.7.103 ##查看服务器的共享设备
iscsiadm -m node -l ##挂载登录存储
3)fdisk -l 查看是否共享成功
4)fdisk -cu /dev/sdb 分区,只分一个
5)在server1上,开始创建逻辑卷 pvcreate /dev/sdb1 ,server2上,pvs
6) 在server1上,vgcreate ran /dev/sdb1 ,server2上,vgs
7) 在server1上,lvcreate -L 4G -n rr ran ,server2上,lvs
8) 格式化 :mkfs.ext4 /dev/ran/rr,格式化后才可以挂载
共享磁盘与httpd
4、httpd服务与共享存储
1)挂载/dev/ran/rr到/mnt下 mount /dev/ran/rr /mnt
2)写一个httpd服务的默认发布页面index.html vim /mnt/index.html
3)解挂 umount /mnt
4)重新挂载到httpd服务的默认发布目录/var/www/html里 mount /dev/ran/rr /var/www/html
此时,在server2中查看挂载 df
5)在web页面添加资源(按照顺序添加资源)。添加资源前,要先解挂。
提交。
6)此时,在真机可以访问到共享磁盘内的默认发布页面的内容。
将服务从server2迁移到server1:clusvcadm -r apache -m server1
服务在谁,谁挂载。
共享磁盘与Mysql
7、以mysql为例,使用共享磁盘
1)在 server1和server2 安装mysql服务端:yum install -y mysql-server
2)创建逻辑卷/dev/ran/mysql: lvcreate -L 4G -n mysql ran
并格式化 mkfs.ext4 /dev/ran/mysql
3)挂载逻辑卷到mysql的数据存放目录:mount /dev/ran/mysql /var/lib/mysql/
4)ll -d /var/lib/mysql/ 查看发现只允许root用户可写
5)chown mysql.mysql /var/lib/mysql/ 更改用户和用户组
6)ll -d /var/lib/mysql/
7)/etc/init.d/mysqld start 开启mysql服务
8)ll /var/lib/mysql/ 发现有了程序访问的接口
- 卸载设备:umount /var/lib/mysql/ ,发现不能卸载。
- 因为服务开启时,mysql.sock套接字就会开启,即设备就在使用中,所以不能卸载,当关闭服务时,就可以成功卸载了
10)关闭服务 : systemctl stop mysqld
11)成功卸载 : umount /var/lib/mysql/
- 在web界面配置mysql的资源
13) clustat 发现Mysql服务在server2上,服务在那运行,共享设备就挂载在那
14)手动迁移服务到server1上,clusvcadm -r mysql -m server1
实现同步存储(多点写入)
RHCS通过 GFS文件系统来提供存储集群功能,GFS是Global File System的缩写,它允许多个服务同时去读写一个单一的共享文件系统,存储集群通过将共享数据放到一个共享文件系统中,从而消除了同步数据的麻烦。GFS通过锁管理机制,来协调和管理多个服务节点对同一个文件系统的读写操作。
问题模拟:
[root@server1 ~]# iscsiadm -m discovery -t st -p 172.25.70.3
[root@server1 ~]# iscsiadm -m node -l
[root@server1 ~]# mkfs.ext4 /dev/sdb1
[root@server1 ~]# systemctl start mysqld
[root@server1 ~]# mount /dev/sdb1 /var/lib/mysql/
[root@server1 ~]# cd /var/lib/mysql/
[root@server1 mysql]# cp /etc/passwd /var/lib/mysql/
#复制一个文件到mysql的数据存放目录
[root@server1 mysql]# ll
#可以看到passwd文件
[root@server1 ~]# systemctl stop mysqld
在server2上:
[root@server2 ~]# iscsiadm -m discovery -t st -p 172.25.78.3
[root@server2 ~]# iscsiadm -m node -l
[root@server2 ~]# mount /dev/sdb1 /var/lib/mysql/
[root@server2 ~]# systemctl start mysqld
[root@server2 ~]# ll /var/lib/mysql/
# 查看不到server1在设备上建立的文件passwd
[root@server2 ~]# systemctl stop mysqld
此时,我们发现iscis 只支持单点共享,所以我们用gfs来解决这个问题。
同步存储的前提是有gfs集群文件系统。现在我们来创建gfs集群文件系统
1)确认clvmd服务状态为 开启。 **==/etc/init.d/clvmd status
- gfs是基于clvmd这个服务的,必须保证这个服务开启。
2)在server1上, 创建逻辑卷/dev/ran/rr2: lvcreate -L 5G -n rr2 ran
3)开始格式化 mkfs.gfs2 -p lock_dlm -j 2 -t ran_ha:mygfs2 /dev/ran/rr2
- 如果没有mkfs.gfs2这个命令,就要手动下载 :yum install -y gfs2-utils-3.0.12.1-59.el6.x86_64
- -p 指定要使用的锁定协议名称,集群的锁定协议为 lock_dlm
- -j 指定由 mkfs.gfs2 命令生成的日志数目,我们有两台服务,所以生成两份日志即可
- -t 指集群名字
此时,在server2中挂载,创建passwd文件,在sdrver1中可以删除
4)在server1和server2上,解挂且设置永久挂载。
此时就实现了同步。