HA(High Available),高可用集群,是减少服务中断时间为目的的服务器集群技术。是保证业务连续性的有效解决方案。集群,简单的来说就是一组计算机。一般有两个或者两个以上的计算机组成,这些组成集群的计算机被称为节点。
其中由两个节点组成的集群被称为双机热备,即使用两台服务器互相备份,当其中一台服务器出现问题时,另一台服务器马上接管服务,来保护用户的业务程序对外不间断提供的服务,当然集群系统更可以支持两个以上的节点,提供比双机热备更多、更高级的功能,把因软件/硬件/人为造成的故障对业务的影响降低到最小程度。
在集群中为了防止服务器出现“脑裂”的现象,集群中一般会添加Fence设备,有的是使用服务器本身的的硬件接口称为内部Fence,有的则是外部电源设备称为外部Fence,当一台服务出现问题响应超时的时候,Fence设备会对服务器直接发出硬件管理指令,将服务器重启或关机,并向其他节点发出信号接管服务。
在红帽系统中我们通过luci和ricci来配置管理集群,其中luci安装在一台独立的计算机上或者节点上,luci只是用来通过web访问来快速的配置管理集群的,它的存在与否并不影响集群。ricci是安装在每个节点上,它是luci与集群给节点通信的桥梁。
接下来是集群的配置了。
主机环境: rhel6.5 iptables and selinux disable
实验主机
server4.example.com 172.25.9.4 luci端
server2.example.com 172.25.9.2 节点1
server3.example.com 722.25.9.2 节点2
在节点端:
yum install ricci
给ricci用户设置密码
echo redhat | passwd --stdin ricci
开启ricci并确保ricci开机启动
/etc/init.d/ricci start chkconfig ricci on
在luci端:
安装集群管理软件
yum install luci
开启luci
/etc/init.d/luci start
用web登录https://server4.example.com:8084通过网页来配置其中8084端口就是luci启动的端口
luci端的主机的root用户就是luci的管理用户;其他用户登录需要root用户授权这里为了方 便直接用root登录
创建集群
创建集群成功
输入节点主机clustat命令也可查看到
Member Status: Quorate Member Name ID Status ------ ---- ---- ------ server2.example.com 1 Online, Local server3.example.com 2 Online
为集群添加外部fence:
因为实验主机是虚拟机所以用物理机来模拟fence 在物理机中安装所需的软件包
yum install fence-virtd-multicast.x86_64 fence-virtd.x86_64 fence-virtd-libvirt.x86_64
开始创建:
执行fence_virtd -c
命令后按要求配置
寻找module路径默认即可:
监听module设为多波:
多波IP设为225.0.0.12:
端口设为1229:
接口为br0:
创建fence的key文件默认即可,要确保有/etc/cluster目录:
后端module为libvirt:
成功后会将以下信息写入/etc/fence_virt.conf
backends { libvirt { uri = "qemu:///system"; } } listeners { multicast { port = "1229"; family = "ipv4"; interface = "br0"; address = "225.0.0.12"; key_file = "/etc/cluster/fence_xvm.key"; } } fence_virtd { module_path = "/usr/lib64/fence-virt"; backend = "libvirt"; listener = "multicast"; }
采集随即信息到刚刚生成的key文件里
dd if=/dev/urandom of=/etc/cluster/fence_xvm.key bs=128 count=1
启动fence_virtd服务
systemctl start fence_virtd.service
将key文件传到节点的/etc/cluster目录下就可以通过luci给集群添加fence了 点击Fence Devices添加fence,有多种fence设备可供选择这里选的是Fence virt(MulticastMode ):
然后点击Nodes里的节点为集群添加fence
这里选择vmfence(xvm Virtual Machine Fencing)其中Domain填写虚拟机的名字或UUID。
每个节点都添加了以后测试一下:
在server2.example.com中执行fence_node server3.example.com
命令可以看到server3主机关闭重起了
配置完fence后接着配置failover:
#Prioritized设置优先级
#Restricted设置只在勾选节点中运行
#No Failback设置当优先级高的节点恢复时不会接管正在运行的服务
然后在Resource中添加资源这里添加虚拟ip和httpd的脚本(集群要安装httpd):
最后设置Server Group:
#Automatically Start This Service设置自动开启服务
#Run Exclusive 设置当运行此服务时不再运行其他服务
点击 Add Resource 增加Resource中的资源这里添加的是上一步配置的虚拟IP和httpd脚本
测试:
在网页输入设置的虚拟IP172.25.9.100可以看到server2主机的网页内容server2.example.com
在server2主机执行clusvcadm -r apache -m server3.example.com
命令让server3主机接管服务
或者执行echo c > /proc/sysrq-trigger
让server2内核崩溃,server2主机将在fence的作用下重起.
刷新172.25.9.100的页面可以看到server3的主页内容server3.example.com。
集群存储:
在luci端安装iscsi服务端
yum install scsi-target-utils.x86_64
添加配置:
vim /etc/tgt/targets.conf <target iqn.2016-06.com.example:server.target1> backing-store /dev/vdb initiator-address 172.25.9.2 initiator-address 172.25.9.3 </target> /etc/init.d/tgtd start
输入tgt-admin -s看到如下信息表示成功
在集群安装iscsi客户端
yum install iscsi-initiator-utils.x86_64 -y
找到服务端分享的磁盘
iscsiadm -t st -m discovery -p 172.25.9.4
链接
iscsiadm -m node -l
对磁盘进行分区并创建lvm(只需在集群的一个节点做)
fdisk -cu /dev/sda pvcreate /dev/sda1 vgcreate clust0 /dev/sda1 lvcreate -L +2G -n lv0 clust0
磁盘可以格式化为本地系统或者集群文件系统
1.磁盘格式化为本地文件系统 mkfs.ext4 /dev/clust0/lv0
节点执行pvs,vgs,lvs。
命令进行同步
最后在网页进行配置:
点击Resource添加资源:选择File System
在之前的Resource Group中的apache组添加资源顺序为虚拟IP -> File System ->httpd脚本
因为server2主机的优先级高所以先挂载在server2主机,在server2主机执行
echo www.redhat.com > /var/www/html/index.html
访问虚拟ip172.25.9.100可以看到这个主页
2.磁盘格式化为集群文件系统
lvcreate -L 2G -n demo clust0 mkfs.gfs2 -p lock_dlm -t memory:mygfs2s -j 3 /dev/clust0/demo gfs2_tool sb /dev/clust0/demo all #查看demo的信息
在/etc/fstab中写入(UUID可以通过blkid查看,所用节点都做) vim /etc/fstab UUID=c705c698-7dbb-b831-2cd5-1d553660d393 /var/www/html gfs2 _netdev 0 0 mount -a