2.15 Rhcs套件----实现高可用并配置网络硬盘,实现全局文件系统
一、简介:
1、RHCS简介
RHCS即 RedHat Cluster Suite ,中文意思即红帽集群套件。
红帽集群套件(RedHat Cluter Suite, RHCS)是一套综合的软件组件,可以通过在部署时采用不同的配置,以满足你的对高可用性,负载均衡,可扩展性,文件共享和节约成本的需要。
它提供有如下两种不同类型的集群:
- 1、高可用性:应用/服务故障切换-通过创建n个节点的服务器集群来实现关键应用和服务的故障切换
- 2、负载均衡:IP 负载均衡-对一群服务器上收到的 IP 网络请求进行负载均衡
2、特点
1、最多支持128个节点(红帽企业Linux 3 和红帽企业Linux 4 支持 16 个节点)。
2、可同时为多个应用提供高可用性。
3、NFS/CIFS 故障切换:支持 Unix 和 Windows 环境下使用的高可用性文件。
4、完全共享的存储子系统:所有集群成员都可以访问同一个存储子系统。
5、综合数据完整性:使用最新的 I/O 屏障(barrier)技术,如可编程的嵌入式和外部电源开关装置(power switches)。
6、服务故障切换:红帽集群套件可以确保及时发现硬件停止运行或故障的发生并自动恢复系统,同时,它还可以通过监控应用来确保应用的正确运行并在其发生故障时进行自动重启。
3、集群中的相关术语
1.节点(node)
运行集群进程的一个独立主机,称为节点,节点是HA的核心组成部分,每个节点上运行着操作系统和集群软件服务,在集群中,节点有主次之分,分别称为主节点和备用/备份节点,每个节点拥有唯一的主机名,并且拥有属于自己的一组资源,例如,磁盘、文件系统、网络地址和应用服务等。主节点上一般运行着一个或多个应用服务。而备用节点一般处于监控状态。
2.资源(resource)
资源是一个节点可以控制的实体,并且当节点发生故障时,这些资源能够被其它节点接管
3.事件(event)
也就是集群中可能发生的事情,例如节点系统故障、网络连通故障、网卡故障、应用程序故障等。这些事件都会导致节点的资源发生转移,HA的测试也是基于这些事件来进行的。
4.动作(action)
事件发生时HA的响应方式,动作是由shell脚步控制的,例如,当某个节点发生故障后,备份节点将通过事先设定好的执行脚本进行服务的关闭或启动。进而接管故障节点的资源
4、集群大致结构
kvm:底层的虚拟机,来自底层的虚拟化
qemu:虚拟外围设备,例如i/o设备
libvird:虚拟化接口,管理虚拟化设备。
二、实验环境:
server1 172.25.38.1
server2 172.25.38.2
server3 172.25.38.3
server1 和 server2 的yum源
[rhel-source]
name=Red Hat Enterprise Linux $releasever - $basearch - Source
baseurl=http://172.25.38.250/6.5yumpak ##6.5镜像
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
[HighAvailability] ##高可用
name=HighAvailability
baseurl=http://172.25.38.250/6.5yumpak/HighAvailability
gpgcheck=0
[LoadBalancer] ##负载均衡
name=LoadBalancer
baseurl=http://172.25.38.250/6.5yumpak/LoadBalancer
gpgcheck=0
[ResilientStorage] ##存储管理
name=ResilientStorage
baseurl=http://172.25.38.250/6.5yumpak/ResilientStorage
gpgcheck=0
[ScalableFileSystem] ##文件系统
name=ScalableFileSystem
baseurl=http://172.25.38.250/6.5yumpak/ScalableFileSystem
gpgcheck=0
三、服务的搭建
1、server1 和 server2 安装软件
server1
yum install ricci luci -y
server2
yum install ricci -y
2、修改server1和server2的ricci的密码
cat /etc/passwd ##查看用户
passwd ricci ##修改密码为redhat
3、开启服务并设置开机启动,查看端口
server1
/etc/init.d/ricci start
/etc/init.d/luci start
chkconfig ricci on ##开机启动
chkconfig luci on
netstat -tnlp
server2
/etc/init.d/ricci start
chkconfig ricci on
4、真机网页访问https://172.25.38.1:8084
会出现证书问题:advanced --> confirm security exception
5、输入张号密码
帐号:root
密码:redhat
6、创建新的Cluster(集群)
Manage Clusters --> Create -->
配置如下图,密码为redhat
完成后,server1和server2会重新启动
7、server1和server2查看策略和状态
cat /etc/cluster/cluster.conf ##查看策略
clustat ##查看状态
8、添加Fence Device
Fence Device的作用是,当服务器荡机的话,可以通过其他的机器重新启动。
在真机访问https://172.25.38.1:8084
Manage Clusters --> westos_ha --> Force Devices --> Add --> Fence virt (Multicast Mode)--> name vmfence
9、真机安装fence_virtd软件
yum search fence
yum install fence-virtd.x86_64 fence-virtd-libvirt.x86_64 fence-virtd-multicast.x86_64 -y
10、fence_virtd初始化
fence_virtd -c
在接口的时候设置为:br0
11、生成**,并分发给server1和server2,完成后开启fence_virtd服务
mkdir /etc/cluster ##创建目录
dd if=/dev/urandom of=/etc/cluster/fence_xvm.key bs=128 count=1 ##创建密码
cd /etc/cluster/
ls
cat fence_xvm.key ##查看**
hexdump -C fence_xvm.key ##内核查看**
scp fence_xvm.key [email protected]:/etc/cluster/ ##分发**
scp fence_xvm.key [email protected]:/etc/cluster/
systemctl status fence_virtd.service ##启动fence_virtd服务
systemctl start fence_virtd.service
systemctl status fence_virtd.service
12、添加Fence Method
真机网页访问https://172.25.38.1:8084
Nodes --> server1 --> Add Fence Method --> Method Name : vmfence-1 --> Add Fence Instance --> domain : server1的UUID
Nodes --> server2 --> Add Fence Method --> Method Name : vmfence-2 --> Add Fence Instance --> domain : server1的UUID
测试:
打开server2机器,在server1输入重启server2的命令
fence_node server2
结果:
server2重新启动
四、高可用设置
真机网页访问https://172.25.38.1:8084
1、Failover Domains ##失效备源
Add
Name webfail
设置如下,优先级越小,越优先。
2、Resources ##添加资源
Add --> IP address,设置如下 ##添加虚拟IP
Add --> Script ##添加脚本
3、server1和server2,安装httpd,编写默认发布目录,
yum install httpd -y
vim /var/www/html/index.html
4、Service Groups ##集群设置
Add --> 设置如下,
5、整合资源
Service Groups --> apache(名称) --> Add Resource --> 分别添加虚拟ip和脚本
测试:
1、查看状态,server2打开
[[email protected] ~]# clustat
Cluster Status for westos_ha @ Fri Feb 15 14:28:53 2019
Member Status: Quorate
Member Name ID Status
------ ---- ---- ------
server1 1 Online, Local, rgmanager
server2 2 Online, rgmanager
Service Name Owner (Last) State
------- ---- ----- ------ -----
service:apache server2 started
2、server2的httpd被打开
[[email protected] ~]# /etc/init.d/httpd status
httpd (pid 2589) is running...
3、server2的存在虚拟IP:172.25.38.100/24
[[email protected] ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
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 state UP qlen 1000
link/ether 52:54:00:d5:43:0e brd ff:ff:ff:ff:ff:ff
inet 172.25.38.2/24 brd 172.25.38.255 scope global eth0
inet 172.25.38.100/24 scope global secondary eth0
inet6 fe80::5054:ff:fed5:430e/64 scope link
valid_lft forever preferred_lft forever
4、使用外部机器访问虚拟IP
[[email protected] 2.15]# curl 172.25.38.100
<h2>server2</h2>
5、将server2机器荡机
echo c> /proc/sysrq-trigger
发现5秒后重新启动
6、server2重启时,外部机访问虚拟IP,还是可以访问,此时访问的是server1的httpd,实现了高可用。
[[email protected] 2.15]# curl 172.25.38.100
<h1>server1</h1>
7、查看server1的ip ,发现有虚拟IP
[[email protected] ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
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 state UP qlen 1000
link/ether 52:54:00:52:7f:67 brd ff:ff:ff:ff:ff:ff
inet 172.25.38.1/24 brd 172.25.38.255 scope global eth0
inet 172.25.38.100/24 scope global secondary eth0
inet6 fe80::5054:ff:fe52:7f67/64 scope link
valid_lft forever preferred_lft forever
8、当server2完全开启后,恢复到原来的状态。
虚拟IP回到了server2,外部机器访问虚拟IP,为server2的httpd
五、给server1和server2配置网络硬盘,并将mysql的数据存储在网络硬盘上,并实现高可用。
1、配置一台服务器server3 ip为172.25.38.3,为server1和server2提供网络硬盘。
2、给server3添加一块8G的硬盘
虚拟机管理器 --> vm3 --> Add --> Storage --> 8G --> Bus type:Virtlo
3、安装scsi服务
server1和server2
yum install -y iscsi-*
server3
yum install -y scsi-*
4、server3修改配置文件,并开启服务
vim /etc/tgt/targets.conf
38 <target iqn.2019-02.com.example:server.target1>
39 backing-store /dev/vda
40 </target>
/etc/init.d/tgtd start
一般企业不会对磁盘进行分区,以防止主引导记录被破坏。
5、server1和server2发现硬盘,挂载硬盘,铺设文件系统
iscsiadm -m discovery -t st -p 172.25.38.3 ##发现硬盘
iscsiadm -m node -l ##挂载硬盘
fdisk -l
mkfs.ext4 /dev/sdb ##铺设文件系统
6、server1和server2安装mysql服务,并将网络硬盘挂载到mysql的数据目录,实现mysql数据存储到网络硬盘
yum install -y mysql-server
mount /dev/sdb /var/lib/mysql/
df
7、修改文件的用户名和所属组(否则无法写入root用户的),并开启服务
ll -d /var/lib/mysql/
chown mysql.mysql /var/lib/mysql/
ll -d /var/lib/mysql/
/etc/init.d/mysqld start ##开启数据库
cd /var/lib/mysql/
ll ##查看数据库
8、卸载硬盘
/etc/init.d/mysqld stop ##必须关闭服务,否则安全套接字没有关闭,无法卸载,安全套接字是入口
cd ##退出mysql目录
umount /var/lib/mysql/
df
9、实现HA(高可用)
Disable的apache
1)Resources ##资源
IP Address
Filesystem
Script
2)Failover Domain ##失效备源

3)Service Groups
添加sql集群
给集群添加三个资源
测试:
1、查看状态,apache为disable,mysql在server1
clustat
[[email protected] ~]# clustat
Cluster Status for westos_ha @ Fri Feb 15 16:53:52 2019
Member Status: Quorate
Member Name ID Status
------ ---- ---- ------
server1 1 Online, Local, rgmanager
server2 2 Online, rgmanager
Service Name Owner (Last) State
------- ---- ----- ------ -----
service:apache (server2) disabled
service:sql server1 started
2、查看ip,虚拟ip172.25.38.200在server1
[[email protected] ~]# /etc/init.d/mysqld status
mysqld (pid 30995) is running...
[[email protected] ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
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 state UP qlen 1000
link/ether 52:54:00:52:7f:67 brd ff:ff:ff:ff:ff:ff
inet 172.25.38.1/24 brd 172.25.38.255 scope global eth0
inet 172.25.38.200/24 scope global secondary eth0
inet6 fe80::5054:ff:fe52:7f67/64 scope link
valid_lft forever preferred_lft forever
3、开启apache服务
clusvcadm -e apache
[[email protected] ~]# clustat
Cluster Status for westos_ha @ Fri Feb 15 16:56:28 2019
Member Status: Quorate
Member Name ID Status
------ ---- ---- ------
server1 1 Online, rgmanager
server2 2 Online, Local, rgmanager
Service Name Owner (Last) State
------- ---- ----- ------ -----
service:apache server2 started
service:sql server1 started
4、如何改变apache服务到server1
首先真机网页访问https://172.25.38.1:8084,修改server groups
关闭:Run Exclusive ##只允许在一个服务器运行
clusvcadm -r apache -m server1
查看两个虚拟ip都到了server1
[[email protected] ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
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 state UP qlen 1000
link/ether 52:54:00:52:7f:67 brd ff:ff:ff:ff:ff:ff
inet 172.25.38.1/24 brd 172.25.38.255 scope global eth0
inet 172.25.38.200/24 scope global secondary eth0
inet 172.25.38.100/24 scope global secondary eth0
inet6 fe80::5054:ff:fe52:7f67/64 scope link
valid_lft forever preferred_lft forever
六、rhcs的全局文件系统
全局文件系统,gfs,glouble file system。当iscsi网络文件共享网盘后,同一个网盘共享到不同服务器后,数据无法实现同步。
1、server1关闭apache和sql
clusvcadm -d apache
clusvcadm -d sql
2、创建lvs
/etc/init.d/clvmd status ##查看lvm服务是否开启
fdisk -l ##查看网络硬盘是否共享成功
pvcreate /dev/sdb ##创建pv
pvs ##查看pv
vgcreate clustervg /dev/sdb ##创建vg
vgs ##vg查看
lvcreate -L +4G -n demo clustervg ##lvs创建
lvs ##创建lvs
3、铺设gfs
mkfs.gfs2 -p lock_dlm -j 2 -t westos_ha:mygfs2 /dev/clustervg/demo
westos_ha 为clus的名称
gfs2_tool sb /dev/clustervg/demo all ##查看文件系统
4、修改所属用户和所属组
ll -d /var/lib/mysql/
chown mysql.mysql /var/lib/mysql/
ll -d /var/lib/mysql/
5、server1和server2挂载,并开启服务
mount /dev/clustervg/demo /var/lib/mysql/
blkid ##查看设备
/etc/init.d/mysqld start
测试:
在server1的/var/lib/mysql传送 /etc/passwd,查看server2的/var/lib/mysql
[[email protected] mysql]# cp /etc/passwd .
[[email protected] mysql]# ll
total 20564
-rw-rw---- 1 mysql mysql 10485760 Feb 16 11:00 ibdata1
-rw-rw---- 1 mysql mysql 5242880 Feb 16 11:00 ib_logfile0
-rw-rw---- 1 mysql mysql 5242880 Feb 16 11:00 ib_logfile1
drwx------ 2 mysql mysql 2048 Feb 16 11:00 mysql
srwxrwxrwx 1 mysql mysql 0 Feb 16 11:00 mysql.sock
-rw-r--r-- 1 root root 1388 Feb 16 11:01 passwd
drwx------ 2 mysql mysql 3864 Feb 16 11:00 test
[[email protected] mysql]# ll
total 20564
-rw-rw---- 1 mysql mysql 10485760 Feb 16 11:00 ibdata1
-rw-rw---- 1 mysql mysql 5242880 Feb 16 11:00 ib_logfile0
-rw-rw---- 1 mysql mysql 5242880 Feb 16 11:00 ib_logfile1
drwx------ 2 mysql mysql 2048 Feb 16 11:00 mysql
srwxrwxrwx 1 mysql mysql 0 Feb 16 11:00 mysql.sock
-rw-r--r-- 1 root root 1388 Feb 16 11:01 passwd
drwx------ 2 mysql mysql 3864 Feb 16 11:00 test
6、卸载https://172.25.38.1:8084 存储资源
Server Group -- > sql -- > remove file system -- > submit
Reources -- > Delete -- > filesystem
7、server1和server2关闭数据库,卸载硬盘
/etc/init.d/mysqld stop
umount /var/lib/mysql/
8、server1和server2设置开机挂在网络硬盘
blkid ##查看lvs的uuid
vim /etc/fstab
编辑
UUID="2bf47d80-fd05-22b0-b575-8b3df96cc083" /var/lib/mysql gfs2 _netdev 0 0
mount -a ##查看开机挂载是否成功
df
clustat
测试:
1、https://172.25.38.1:8084 打开apache和sql
[[email protected] ~]# clustat
Cluster Status for westos_ha @ Sat Feb 16 11:44:12 2019
Member Status: Quorate
Member Name ID Status
------ ---- ---- ------
server1 1 Online, Local, rgmanager
server2 2 Online, rgmanager
Service Name Owner (Last) State
------- ---- ----- ------ -----
service:apache server2 started
service:sql server1 started
2、server2删除passwd,查看server1的passwd也被删除了,实现了全局文件共享。
[[email protected] ~]# rm -rf /var/lib/mysql/passwd
[[email protected] ~]# ll /var/lib/mysql/
total 20560
-rw-rw---- 1 mysql mysql 10485760 Feb 16 11:39 ibdata1
-rw-rw---- 1 mysql mysql 5242880 Feb 16 11:43 ib_logfile0
-rw-rw---- 1 mysql mysql 5242880 Feb 16 11:00 ib_logfile1
drwx------ 2 mysql mysql 2048 Feb 16 11:00 mysql
srwxrwxrwx 1 mysql mysql 0 Feb 16 11:43 mysql.sock
drwx------ 2 mysql mysql 3864 Feb 16 11:00 test
[[email protected] ~]# ll /var/lib/mysql/
total 20560
-rw-rw---- 1 mysql mysql 10485760 Feb 16 11:39 ibdata1
-rw-rw---- 1 mysql mysql 5242880 Feb 16 11:43 ib_logfile0
-rw-rw---- 1 mysql mysql 5242880 Feb 16 11:00 ib_logfile1
drwx------ 2 mysql mysql 2048 Feb 16 11:00 mysql
srwxrwxrwx 1 mysql mysql 0 Feb 16 11:43 mysql.sock
drwx------ 2 mysql mysql 3864 Feb 16 11:00 test