RHCS(Red Hat Cluster Suite),也就是红帽子集群套件,RHCS是一个能够
提供高可用性、高可靠性、负载均衡、存储共享且经济廉价的集群工具集合,它将
集群系统中三大集群架构融合一体,可以给web应用、数据库应用等提供安全、稳定的运行环境。
更确切的说,RHCS是一个功能完备的集群应用解决方案,它从应用的前端访问到
后端的数据存储都提供了一个行之有效的集群架构实现,通过RHCS提供的这种解
决方案,不但能保证前端应用持久、稳定的提供服务,同时也保证了后端数据存储的安全。
RHCS提供了集群系统中三种集群构架,分别是高可用性集群、负载均衡集群、存储集群。
一、配置图形化Web端
将server1做h1,server4做h2,两个调度器作为高可用节点
server1:172.25.61.1 server4:172.25.61.4
server1:
作为h1,并作为集群管理节点
1、yum源配置
并将yum源配置文件传至server4
scp /etc/yum.repos.d/rhel-source.repo 172.25.61.4:/etc/yum.repos.d
2、把nginx传至server4
scp -r /usr/local/nginx/ 172.25.61.4:/usr/local/
3、安装服务、打开服务
yum install luci ricci -y
/etc/init.d/ricci start
/etc/init.d/luci start
设置开机自启
chkconfig luci on
chkconfig ricci on
4、创建密码
passwd ricci
5、建立用户
useradd -M -d /usr/local/nginx/ nginx
id nginx
uid=500(nginx) gid=500(nginx) groups=500(nginx)
6、添加主机名解析
vim /etc/hosts
172.25.61.1 server1
172.25.61.4 server4
server4:仅作为h2
1、同步yum源
yum clean all
yum repolist
2、制作软连接
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
3、添加用户
useradd -u 500 nginx
4、安装服务、打开服务
yum install ricci -y
/etc/init.d/ricci start
chkconfig ricci on
5、创建密码
passwd ricci
6、添加解析地址
vim /etc/hosts
172.25.61.1 server1
172.25.61.4 server4
物理机:
添加解析地址
vim /etc/hosts
172.25.61.1 server1
172.25.61.4 server4
浏览器访问:https://172.25.61.1:8084,luci自动开启8084端口接受集群节点的11111端口的数据包
使用server1的root密码登陆;
创建集群并添加集群节点;
设置中,server1和server4会重新启动
可以通过ps ax查看进程知道,两个集群节点开始安装集群套件,之后重启后加入集群中
浏览器看到创建成功:
命令查看 clustat
二、在搭建好的集群上添加Nginx服务
配置 Luci web 端
1、选择Failover Domains,用来做业务切换
数字小的优先级高
2、添加共享服务
IP:选择Resourcs,点击Add,选择添加IPAddress如图,添加的ip必须是
未被占用的ip,24是子网掩码的位数,5指的是等待时间为5秒。选择Submit
IP:nginx:以相同的方法添加Script,nginx是服务的名字,/etc/init.d/nginx是服务启动脚本的路径,选择Submit
注:脚本设置
server1:
脚本位置 /etc/init.d/nginx
脚本内容
#!/bin/bash
# nginx Startup script for the Nginx HTTP Server
# it is v.0.0.2 version.
# chkconfig: - 85 15
# description: Nginx is a high-performance web and proxy server.
# It has a lot of features, but it's not for everyone.
# processname: nginx
# pidfile: /var/run/nginx.pid
# config: /usr/local/nginx/conf/nginx.conf
nginxd=/usr/local/nginx/sbin/nginx
nginx_config=/usr/local/nginx/conf/nginx.conf
nginx_pid=/var/run/nginx.pid
RETVAL=0
prog="nginx"
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0
[ -x $nginxd ] || exit 0
# Start nginx daemons functions.
start() {
if [ -e $nginx_pid ];then
echo "nginx already running...."
exit 1
fi
echo -n $"Starting $prog: "
daemon $nginxd -c ${nginx_config}
RETVAL=$?
echo
[ $RETVAL = 0 ] && touch /var/lock/subsys/nginx
return $RETVAL
}
# Stop nginx daemons functions.
stop() {
echo -n $"Stopping $prog: "
killproc $nginxd
RETVAL=$?
echo
[ $RETVAL = 0 ] && rm -f /var/lock/subsys/nginx /var/run/nginx.pid
}
# reload nginx service functions.
reload() {
echo -n $"Reloading $prog: "
#kill -HUP `cat ${nginx_pid}`
killproc $nginxd -HUP
RETVAL=$?
echo
}
# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
reload)
reload
;;
restart)
stop
start
;;
status)
status $prog
RETVAL=$?
;;
*)
echo $"Usage: $prog {start|stop|restart|reload|status|help}"
exit 1
esac
exit $RETVAL
给权限
chmod +x nginx
检测:nginx能够打开和关闭且有进程
/etc/init.d/nginx start
ps ax 查看nginx进程
/etc/init.d/nginx stop
ps ax 查看无进程
脚本无误后传给server4:
[root@server1 init.d]# scp nginx server4:/etc/init.d/
server4:
收到脚本后,开启关闭nginx服务查看能否开启关闭且有进程
3、
选择Service Groups,点击Add如图,nginx是服务的名字,下面两个勾指分别
的是自动开启服务、运行 ,选择Add Resource,将全局资源IP Address 和Script按顺序加入
4、检测:
此时我们的nginx高可用已经做好了,在server1或4中使用clustat可以查看状态
网页输入IP查看
可看到nginx的访问页面
测试nginx的负载均衡,停掉一个server上的nginx,另一台server的nginx就自动启动
[root@server4 init.d]# /etc/init.d/nginx stop
server4重启,nginx在server1自动启动
三、安装fence系统
但是当意外原因导致主机异常或宕机时(而不是简单的停掉服务时),备用机会首先调用fence设备,然后通过fence设备将异常的主机重启或从网络上隔离,释放异常主机占据的资源,当隔离操作成功后,返回信息给备用机,备用机在接到信息后,开始接管主机的服务和资源。
FENCE的原理:通过栅设备可以从集群共享存储中断开一个节点,切断I/O以保证数据的完整性。
当CMAN确定一个节点失败后,它在集群结构中通告这个失败的节点,fenced进程将失败的节点隔离,
以保证失败节点不破坏共享数据。它可以避免因出现不可预知的情况而造成的“脑裂”(split-brain)现象。
“脑裂”是指当两个节点之间的心跳线中断时,两台主机都无法获取对方的信息,此时两台主机都认为自己
是主节点,于是对集群资源(共享存储,公共IP地址)进行争用,抢夺。
RHCS的Fence设备可以分为两种:内部Fence和外部Fence。内部fence有IBMRSAII卡,
HP的ILO卡,以及IPMI设备等;外部FENCE设备有UPS,SAN switch ,Network switch等。
当节点A上的栅过程发现C节点失效时,它通过栅代理通知光纤通道交换机将C节点隔离,从而释放占用的共享存储。
当A上的栅过程发现C节点失效时,它通过栅代理直接对服务器做电源power on/off,而不是去执行操作系统的开关机指令。
物理机:
1、安装服务
yum install fence-virtd-multicast.x86_64 fence-virt.x86_64 fence-virtd-libvirt.x86_64 -y
2、创建fence
fence_virtd -c
重启服务
systemctl restart fence_virtd
3、创建cluster目录
[root@foundation61 ~]# mkdir /etc/cluster
[root@foundation61 ~]# cd /etc/cluster/
4、生成随机密钥文件,重启服务
[root@foundation61 cluster]# dd if=/dev/urandom of=/etc/cluster/fence_xvm.key bs=128 count=1
1+0 records in
1+0 records out
128 bytes (128 B) copied, 0.000138642 s, 923 kB/s
[root@foundation61 cluster]# systemctl restart fence_virtd
5、查看端口
[root@foundation61 cluster]# netstat -anulp |grep fence_virtd
udp 0 0 0.0.0.0:1229 0.0.0.0:* 8545/fence_virtd
6、把密钥文件传递给server1和server4
scp fence_xvm.key 172.25.61.1:/etc/cluster/
scp fence_xvm.key 172.25.61.4:/etc/cluster/
#注意:fence_xvm.key用于fence连接集群节点的认证
7、创建fence设备
选择Fence Devices 中点击Add如图
选择Nodes点server1,点击Add Fence Method 为vmfence1
选择 vmence1 中 Add Fence Instance
添加Domain为虚拟机的uuid
server4同理
测试:
server1中输入命令让server4重启
[root@server1 cluster]# fence_node server4
将server1网络关闭,本机重启,nginx自动在server4上运行
而在未安装fence之前,如果某个节点的网络断掉或者宕机时,集群调度会出问题,是FENCE服务完美的解决了这个问题。
四、在搭建好的集群上添加服务sicis共享磁盘
服务端:server2 客户端:server1、server4
1、服务端配置
server2:
添加一个8G的磁盘
fdisk -l 查看
安装服务
yum install -y scsi-*
编辑文件
vim /etc/tgt/targets.conf
38 <target iqn.2018-08.com.example:server.target1>
39 backing-store /dev/vdb
40 initiator-address 172.25.10.1
41 initiator-address 172.25.10.4
42 </target>
/etc/init.d/tgtd start
查看配置是否成功
tgt-admin -s
2、客户端配置
server1:
安装服务
yum install -y iscsi-*
登陆
[root@server1 ~]# iscsiadm -m discovery -t st -p 172.25.61.2
Starting iscsid: [ OK ]
172.25.61.2:3260,1 iqn.2018-08.com.example:server.target1
[root@server1 ~]# iscsiadm -m node -l
Logging in to [iface: default, target: iqn.2018-08.com.example:server.target1, portal: 172.25.61.2,3260] (multiple)
Login to [iface: default, target: iqn.2018-08.com.example:server.target1, portal: 172.25.61.2,3260] successful.
查看共享磁盘
fdisk -l
查看状态
[root@server1 ~]# /etc/init.d/clvmd status
clvmd (pid 1261) is running...
Clustered Volume Groups: (none)
Active clustered Logical Volumes: (none)
[root@server1 ~]# lvs
LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert
lv_root VolGroup -wi-ao---- 18.54g
lv_swap VolGroup -wi-ao---- 992.00m
server4:
安装服务
yum install -y iscsi-*
登陆
iscsiadm -m discovery -t st -p 172.25.10.2
iscsiadm -m node -l
查看是否同步
[root@server4 ~]# cat /proc/partitions
major minor #blocks name
252 0 20971520 vda
252 1 512000 vda1
252 2 20458496 vda2
253 0 19439616 dm-0
253 1 1015808 dm-1
8 0 8388608 sda
3、创建lvm分区
server1:
给设备拉伸
[root@server1 ~]# pvcreate /dev/sda
Physical volume "/dev/sda" successfully created
[root@server1 ~]# vgcreate clustervg /dev/sda
Clustered volume group "clustervg" successfully created
[root@server1 ~]# lvcreate -L 2G -n demo clustervg
Logical volume "demo" created
在server1和server4用lvs查看
注:在扩展分区时最好做一步在另一端lvs查看一步,以免发生做到最后不同步的现象
格式化分区
[root@server1 ~]# mkfs.ext4 /dev/clustervg/demo
五、在搭好的集群上添加mysql服务
1、停用nginx高可用
命令
[root@server1 ~]# clusvcadm -d nginx
在luci Web端
1、选择Service Groups,在nginx前面打勾,选择Delete (无图)
2、选择Resourcs,在nginx前面打勾,选择Delete
2、安装mysql服务
server1:
[root@server1 ~]# yum install -y mysql
[root@server1 ~]# yum install -y mysql-server
server4:
[root@server4 ~]# yum install -y mysql-server
3、mysql调试
server1:
尝试挂载
[root@server1 ~]# cd /var/lib/mysql/
[root@server1 mysql]# mount /dev/clustervg/demo /var/lib/mysql/
[root@server1 mysql]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/VolGroup-lv_root 19134332 1315256 16847096 8% /
tmpfs 510188 25656 484532 6% /dev/shm
/dev/vda1 495844 33472 436772 8% /boot
/dev/mapper/clustervg-demo 4128448 139256 3779480 4% /var/lib/mysql
修改组
[root@server1 mysql]# ll -d /var/lib/mysql/
drwxr-xr-x 3 root root 4096 Aug 2 15:42 /var/lib/mysql/
[root@server1 mysql]# chown mysql.mysql /var/lib/mysql/
[root@server1 mysql]# ll -d /var/lib/mysql/
drwxr-xr-x 3 mysql mysql 4096 Aug 2 15:42 /var/lib/mysql/
开启服务
[root@server1 mysql]# /etc/init.d/mysqld start
查看目录
[root@server1 ~]# cd /var/lib/mysql/
[root@server1 mysql]# ls
ibdata1 ib_logfile0 ib_logfile1 lost+found mysql mysql.sock test
[root@server1 mysql]# cd
关闭服务
[root@server1 ~]# /etc/init.d/mysqld stop
[root@server1 ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/VolGroup-lv_root 19134332 1315260 16847092 8% /
tmpfs 510188 25656 484532 6% /dev/shm
/dev/vda1 495844 33472 436772 8% /boot
/dev/mapper/clustervg-demo 4128448 160724 3758012 5% /var/lib/mysql
取消挂载
[root@server1 ~]# umount /var/lib/mysql/
server4:
[root@server4 ~]# mount /dev/clustervg/demo /var/lib/mysql/
随着server1的修改,server4也修改了
[root@server4 ~]# ll -d /var/lib/mysql/
drwxr-xr-x 5 mysql mysql 4096 Aug 2 15:49 /var/lib/mysql/
查看目录
[root@server4 ~]# cd /var/lib/mysql/
[root@server4 mysql]# ls
ibdata1 ib_logfile0 ib_logfile1 lost+found mysql test
将服务开启和关闭
[root@server4 mysql]# /etc/init.d/mysqld start
[root@server4 mysql]# /etc/init.d/mysqld stop
[root@server4 mysql]# cd
查看挂载
[root@server4 ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/VolGroup-lv_root 19134332 1077736 17084616 6% /
tmpfs 510188 25656 484532 6% /dev/shm
/dev/vda1 495844 33472 436772 8% /boot
/dev/mapper/clustervg-demo 4128448 160724 3758012 5% /var/lib/mysql
取消挂载
[root@server4 ~]# umount /var/lib/mysql/
[root@server4 ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/VolGroup-lv_root 19134332 1077736 17084616 6% /
tmpfs 510188 25656 484532 6% /dev/shm
/dev/vda1 495844 33472 436772 8% /boot
4、
luci Web端
选择Resourcs,点击Add,添加Filesystem,如图
选择Resources,点击Add,添加Script,如图
选择Service Group添加组
按顺序添加Resources:IP Filesystem Script
Web端配置后,server1中自动挂载
df
ps ax查看进程
数据库查看
可查看目录
luci Web端
选择Service Groups
在mysql组前打勾
Status Running on server1 处选择server4
点右边的start键
clustat查看