集群是指一组相互独立的计算机,利用高速通信网络组成的一个较大的计算机服务系统,每个集群节点都是运行各自服务的独立服务器
这些服务器之间可以彼此通信,协同向用户提供应用程序,系统资源和数据,并以单一系统的模式加以管理
Pacemaker是一个集群资源管理器,它利用集群基础构件(OpenAIS、heartbeat或corosync)提供的消息和成员管理能力来探测并从节点或资源级别的故障中恢复,以实现群集服务(亦称资源)的最大可用性,它可以做几乎任何规模的集群,并带有一个强大的依赖模式,让管理员能够准确地表达群集资源之间的关系(包括顺序和位置)。
Corosync是集群管理套件的一部分,通常会与其他资源管理器一起组合使用它在传递信息的时候可以通过一个简单的配置文件来定义信息传递的方式和协议等。它是一个新兴的软件,2008年推出,但其实它并不是一个真正意义上的新软件,在2002年的时候有一个项目Openais
, 它由于过大,分裂为两个子项目,其中可以实现HA心跳信息传输的功能就是Corosync ,它的代码60%左右来源于Openais.
Corosync可以提供一个完整的HA功能,但是要实现更多,更复杂的功能,那就需要使用Openais了。Corosync是未来的发展方向。在以后的新项目里,一般采用Corosync,而hb_gui可以提供很好的HA管理功能,可以实现图形化的管理。另外相关的图形化有RHCS的套件luci+ricci,当然还有基于java开发的LCMC集群管理工具。
实验环境:
server1 172.25.254.1 master
server2 172.25.254.2 chunk
server3 172.25.254.3 chunk
server4 172.25.254.4 作master的备用节点
实验:
(1)这里用server1和server4做高可用节点,server2和server3做数据存储,server1上已经配置好MFS,将server1上的moosefs-master安装包发给server4
在server4上安装mfs master并配置启动脚本,加上-a参数避免server1异常退出后服务无法启动
(2)在四台主机上配置yum源(高可用数据库和存储数据库),里面包含pacemaker和corosync的包
将server1上配置好的yum源复制到其它三台主机上
开启server4删的moosefs-master服务
(3)在server1和server4上安装pacemaker、corosync和pcs
pacemaker 主软件
corosync 同步复制和心跳检测
pcs 命令行
(4)在server1 和 4 主机之间做免密
ssh-keygen -f /root/.ssh/id_rsa -P ""
(5)在server1和server4上开启pcsd服务,为用户hacluster设置密码,hacluster是用来启动主备切换的
做主机认证:(当前的集群主机是server1和server4)
(6)配置集群,开启集群
pcs cluster setup --name mycluster server1 server4 ##配置一个集群(mycluster),会重新做认证,重启pcsd服务
pcs cluster start --all ##在所有节点上开启集群,开启集群后,会自动帮你开启两个服务pacemaker、Corosync
corosync-cfgtool -s ##查看当前节点上的状态
pcs status corosync ##查看集群状态
(8)检查并解决报错
WANRINGS处:fence设备是用来配置当前系统出现不可预期的问题后(系统突然卡死、内核崩溃),强制重启主机,有利于资源释放,不至于让它一直占着资源
pcs property set stonith-enable=false ##关闭stonith-enable(没有这个设备还要把它设置为true,所以关闭它)
crm_verify -L -V
pcs property set no-quorum-policy=ignore ##此节点投票不生效时就忽略掉它
pcs status ##查看状态,没有WARNING警告
vip:集群的统一入口,让用户从统一的入口进来
pcs resource list ## 列出资源
pcs resource standards ##列出资源类型
pcs resource create vip ocf:heartbeat:IPaddr2 ip=172.25.254.100 cidr_netmask=32 op monitor interval=30s
pcs resource show ##列出资源
ip a ##vip已经添加上了
crm_mon ##控制台上查看,server4上同样也可以查看到
测试高可用:ip能否切换
停止集群中的server1节点,vip漂移到server4
重新开启server1,vip不会切换回去
注意:
来回切换回增加你的服务器的风险,减少来回切换的次数回降低服务器的风险
在server1和server4上安装apache,并配置默认发布页
创建apache资源
pcs resource create apache systemd:httpd op monitor interval=1min ## 控制启动方式为systemd的方式
pcs resource show
curl localhost ##httpd开启
查看日志,可以看到是集群控制的httpd
开启之后,服务已经配置好了,但是作为客户端可以ping不能访问,连接被拒绝
server1和server4是集群,vip在server4上,Apache在server1上
入口对应的后端服务不在一起,需要把这两个服务都放在一起,把它们放到一个组里去
创建资源组
pcs resource group add apache_group vip apache
(1)在server1和server4上做解析
172.25.254.100 mfsmaster
(2)在server3上添加一块磁盘,用作共享(/dev/vdb)
server1和server4为客户端,安装mfs服务,共享server3的磁盘
在server3上
[root@server3 ~]# yum install targetcli.noarch -y
[root@server3 ~]# targetcli
/> backstores/block create my_disk1 /dev/vdb
Created block storage object my_disk1 using /dev/vdb.
/> iscsi/ create iqn.2020-05.com.example:server3 ## 创建iqn
Created target iqn.2020-05.com.example:server3.
Created TPG 1.
Global pref auto_add_default_portal=true
Created default portal listening on all IPs (0.0.0.0), port 3260.
/> iscsi/iqn.2020-05.com.example:server3/tpg1/luns create /backstores/block/my_disk1
Created LUN 0.
/> iscsi/iqn.2020-05.com.example:server3/tpg1/acls create iqn.2020-05.com.example:client
Created Node ACL for iqn.2020-05.com.example:client #允许这个名称的访问
Created mapped LUN 0.
查看端口,可以看到3260端口已经打开
(3)server3上创建一块共享磁盘后,这时server1和server4作客户端去使用它
在server1中:
yum install iscsi-* -y
vim /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.2020-05.com.example:client # 改为上面设定的iqn
systemctl restart iscsid
iscsiadm -m discovery -t st -p 192.168.43.73 发现磁盘
iscsiadm -m node -l ##调用磁盘
fdisk /dev/sda ##磁盘分区
mkfs.xfs /dev/sda1 ##格式化
[root@server1 ~]# mount /dev/sda1 /mnt/ ##挂载设备
[root@server1 ~]# cp -p /var/lib/mfs/ * /mnt/ ##存入数据
[root@server1 ~]# chown mfs.mfs /mnt/ ##更改权限属于mfs用户
[root@server1 ~]# ls /mnt
[root@server1 ~]# umount /mnt/
[root@server1 ~]# mount /dev/sda1 /var/lib/mfs/ ##挂载到mfs数据目录下
[root@server1 ~]# systemctl start moosefs-master ##mfs正常开启,说明配置正确
[root@server1 ~]# systemctl stop moosefs-master.service
[root@server1 ~]# umount /var/lib/mfs ##卸载
[root@server1 ~]# pcs resource create mfsdata ocf:heartbeat:Filesystem device=/dev/sda1 directory=/var/lib/mfs fstype=xfs op monitor interval=30s
## 资源名称mfsdata, 文件系统类型 ,设备是/dev/sdb1,挂载点为 /var/lib/mfs
[root@server1 ~]# pcs resource show
[root@server1 ~]# pcs resource create mfsd systemd:moosefs-master op monitor interval=1min ##设置自启动
[root@server1 ~]# pcs resource show
[root@server1 ~]# systemctl status moosefs-master.service ##服务自动开启
自动挂载上了
(5)创建资源组,把vip、mfsdata 和mfsd 放到一个资源组中
pcs resource delete apache ##删除apache资源
pcs resource group add mfsgroup vip mfsdata mfsd ##创建资源组
pcs resource show ##三个资源都在server4上
server4中查看
测试集群的高可用
关闭server4,并在server1中监控
这时候发现切换为server1,server4已经下线
在server1上查看服务、挂载和vip
查看server4
fence工作原理
当集群中主机的内核崩溃,fence就会主动重启它,释放资源,防止集群中的资源争抢
(1)在server1和server4上安装fence,创建存放key的目录/etc/cluster
(2)物理机上安装fence,物理机是给它们拔插销的角色,哪一台出现问题,通过物理机开启的这个端口,让它重启
[root@foundation65 ~]# fence_virtd -c
Interface [virbr0]: br0 ## 其它设定都选用默认,只更改接口为br0
mkdir /etc/cluster/ ##建立目录
cd /etc/cluster/
dd if=/dev/urandom of=/etc/cluster/fence_xvm.key bs=128 count=1 ##用随机数生成key文件
将key文件传给server1和server4中存放key的目录下
开启服务
查看物理机的1229端口已经开启
(3)在server1上
pcs stonith create vmfence fence_xvm pcmk_host_map="server1:node1;server4:node4" op monitor interval=1min # 主机映射方式,主机名:虚拟机名
[root@server1 ~]# pcs property set stonith-enabled=true ##开启stonith设备
[root@server1 ~]# crm_verify -L -V ##检测
控制台查看,fence设备资源在server4上
测试:
现在down掉集群中的server1
所有资源都在server4上
重新开启server1
fence切换到了server1上,说明fence总是不跟资源在同一台主机上
测试:
使server4内核崩溃,fence是否可以使server4重启
server4已经是online状态,说明已经重启了
(1)删除集群上的vip、mfsdata和mfsd资源
(2)在server1和server4安装maraidb服务
(3)配置数据库并启动
[root@server1 ~]# mount /dev/sda1 /var/lib/mysql ##挂载到mysql数据目录下,数据其实存放在共享设备上,server3的iscsi上
[root@server1 ~]# chown mysql.mysql /var/lib/mysql ##更改目录的所有人和所有组
[root@server1 ~]# systemctl start mariadb ##不能正常开启
[root@server1 ~]# vim /var/log/messages ##查看日志,告诉我们mysql数据目录下不为空,需要让它为空
[root@server1 ~]# rm -rf /var/lib/mysql/.bgwriter.lock
[root@server1 ~]# systemctl start mariadb ##可以正常开启
[root@server1 ~]# ls
[root@server1 ~]# systemctl stop mariadb ##关闭mariadb服务
[root@server1 ~]# umount /var/lib/mysql ##卸载
(4)创建一个vip资源
(5)创建数据库资源,数据库启动方式资源
pcs resource create mysql_data ocf:heartbeat:Filesystem device=/dev/sda1 directory=/var/lib/mysql fstype=xfs op monitor interval=30s
pcs resource show
pcs resource create mariadb systemd:mariadb op monitor interval=1min ## 控制启动方式为systemd的方式
pcs resource show
(6)将三个资源放到同一个资源组中,资源都在server1上
测试:
使server1内核崩溃,资源都到server4上,可以发现数据库管理由server4接管