使用server1 和 server4作为节点
server1
yum install ricci luci -y
/etc/init.d/ricci start
chkconfig ricci on
/etc/init.d/luci start
chkconfig luci on
server4
yum install ricci -y
/etc/init.d/ricci start
chkconfig ricci on
浏览器
https://server1:8084
创建集群
使用 luci 创建集群包括命名集群、在集群中添加集群节点、为每个节点输入 ricci 密码并提交创建集群请求。如果节点信息和密码正确,则 Conga 会自动在集群节点中安装软件(如果当前没有安装适当的软件包)并启动集群。
点击create 创建集群
Download Packages #安装yum源中的包并更新
Use Locally Installed Packages #使用本地安装的包
Reboot Nodes Before Joining Cluster #在cluster中添加节点后重启
Enable Shared Storage Support #支持共享磁盘
添加的节点都会生成/etc/cluster文件中
[root@server4 ~]# clustat
Cluster Status for haha @ Thu Aug 2 10:38:07 2018
Member Status: Quorate
Member Name ID Status
------ ---- ---- ------
server1 1 Online
server4 2 Online, Local
配置故障切换域
Prioritized: 在故障切换域成员间设置故障切换优先权,选择 Prioritized 复选框后,可以为选择作为故障切换域成员的每个节点设置优先值
Restricted: 限制这个故障切换域成员的故障切换,选择 Restricted 复选框后,分配给这个故障切换域的服务只能切换到这个故障切换域中的节点
No Failback: 将那个节点指定为不在这个故障切换域中恢复,选择 No Failback 后,如果从首选节点中恢复某个服务,则该服务不会切换到恢复它的节点中
添加服务
VIP:
nginx:
在添加nginx服务之前需要在server1和server4中制作nginx的服务脚本
vim /etc/init.d/nginx
#!/bin/sh
#
# nginx - this script starts and stops the nginx daemon
#
# chkconfig: - 85 15
# description: Nginx is an HTTP(S) server, HTTP(S) reverse \
# proxy and IMAP/POP3 proxy server
# processname: nginx
# config: /etc/nginx/nginx.conf
# config: /etc/sysconfig/nginx
# pidfile: /var/run/nginx.pid
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0
nginx="/usr/local/nginx/sbin/nginx"
prog=$(basename $nginx)
NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"
[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx
lockfile=/var/lock/subsys/nginx
start() {
[ -x $nginx ] || exit 5
[ -f $NGINX_CONF_FILE ] || exit 6
echo -n $"Starting $prog: "
daemon $nginx -c $NGINX_CONF_FILE
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval
}
stop() {
echo -n $"Stopping $prog: "
killproc $prog -QUIT
retval=$?
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
killall -9 nginx
}
restart() {
configtest || return $?
stop
sleep 1
start
}
reload() {
configtest || return $?
echo -n $"Reloading $prog: "
killproc $nginx -HUP
RETVAL=$?
echo
}
force_reload() {
restart
}
configtest() {
$nginx -t -c $NGINX_CONF_FILE
}
rh_status() {
status $prog
}
rh_status_q() {
rh_status >/dev/null 2>&1
}
case "$1" in
start)
rh_status_q && exit 0
$1
;;
stop)
rh_status_q || exit 0
$1
;;
restart|configtest)
$1
;;
reload)
rh_status_q || exit 7
$1
;;
force-reload)
force_reload
;;
status)
rh_status
;;
condrestart|try-restart)
rh_status_q || exit 0
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
exit 2
esac
chmod 755 /etc/init.d/nginx
chkconfig --add nginx
service nginx start #测试脚本是否可以正常使用
srveice nginx stop
向群集添加服务组
添加资源的顺序就是集群启动后服务启动的顺序,所以要先添加VIP,再添加nginx
添加的节点都会生成/etc/cluster文件中
[root@server1 ~]# clustat #查看集群状态
Cluster Status for haha @ Fri Aug 3 11:06:08 2018
Member Status: Quorate
Member Name ID Status
------ ---- ---- ------
server1 1 Online, Local, rgmanager
server4 2 Online, rgmanager
Service Name Owner (Last) State
------- ---- ----- ------ -----
service:nginx server1 started
在server1和server4的nginx上均配置负载均衡,详见:https://blog.csdn.net/qq_40303205/article/details/81325283
打开server2、3上的阿帕奇服务,测试集群是否正常工作
停掉server1上的nginx服务,服务转到server4上,负载均衡依然正常,证明集群可正常工作
在“双机热备”高可用(HA)系统中,当联系2个节点的“心跳线”断开时,本来为一整体、动作协调的HA系统,就分裂成为2个独立的个体。由于相互失去了联系,都以为是对方出了故障,2个节点上的HA软件像“裂脑人”一样,“本能”地争抢“共享资源”、争起“应用服务”,就会发生严重后果,可以在集群中加入fence设备解决这一问题
配置 Fence 设备
“Fence技术”核心在于解决高可用集群在出现极端问题情况下的运行保障问题,在高可用集群的运行过程中,有时候会检测到某个节点功能不正常,比如在两台高可用服务器间的心跳线突然出现故障,这时一般高可用集群技术将由于链接故障而导致系统错判服务器宕机从而导致资源的抢夺,为解决这一问题就必须通过集群主动判断及检测发现问题并将其从集群中删除以保证集群的稳定运行
在物理机中安装fence安装包,配置fence
yum install fence-virtd fence-virtd-multicast.x86_fence_virtd -c64 fence-virtd-libvirt.x86_64 -y
fence_virtd -c #交互式配置fence文件
[root@foundation31 ~]# fence_virtd -c
Module search path [/usr/lib64/fence-virt]:
Available backends:
libvirt 0.1
Available listeners:
multicast 1.2
Listener modules are responsible for accepting requests
from fencing clients.
Listener module [multicast]:
The multicast listener module is designed for use environments
where the guests and hosts may communicate over a network using
multicast.
The multicast address is the address that a client will use to
send fencing requests to fence_virtd.
Multicast IP Address [225.0.0.12]:
Using ipv4 as family.
Multicast IP Port [1229]:
Setting a preferred interface causes fence_virtd to listen only
on that interface. Normally, it listens on all interfaces.
In environments where the virtual machines are using the host
machine as a gateway, this *must* be set (typically to virbr0).
Set to 'none' for no interface.
Interface [br0]:
The key file is the shared key information which is used to
authenticate fencing requests. The contents of this file must
be distributed to each physical host and virtual machine within
a cluster.
Key File [/etc/cluster/fence_xvm.key]:
Backend modules are responsible for routing requests to
the appropriate hypervisor or management layer.
Backend module [libvirt]:
Configuration complete.
=== Begin Configuration ===
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";
}
=== End Configuration ===
Replace /etc/fence_virt.conf with the above [y/N]? y
生成fence_xvm.key文件
cd /etc/cluster/
dd if=/dev/urandom of=fence_xvm.key bs=128 count=1#生成文件
scp fence_xvm.key root@172.25.31.1:/etc/cluster/ #将文件传给服务端1
scp fence_xvm.key root@172.25.31.4:/etc/cluster/ #将文件传给服务端4
systemctl restart fence_fence_virtd.service #开启fence
创建 Fence 设备
为集群成员配置 Fencing
在Nodes中选择需要加入fence设备的节点,选择Add Fence Method
选择Add Fence Instance
在Domain一栏中添如server1的UUID
在server4节点中重复以上步骤
fence_node server4
clvmd存储机制+mysql
集群化的 LVM (Clustered LVM,CLVM)是 LVM 的一个集群方面的扩展。允许一个集群的计算机通过 LVM 管理共享存储。
clvmd 守护进程是 CLVM 的核心。clvmd 守护进程在每个集群计算机上运行,并更新 LVM 元数据,让集群的每个计算机上的 LVM 信息都保持一致
配置clvmd
1,server2充当共享磁盘服务器,实际生产中应该专门有一个作为共享磁盘服务器
添加一个8G虚拟磁盘
在server2上安装服务端软件
yum install -y scsi-*
配置/etc/tgt/targets.conf
vim /etc/tgt/targets.conf
# Sample target with one LUN only. Defaults to allow access for all initiators:
<target iqn.2018-08.com.example:server.target1>
backing-store /dev/vdb
initiator-address 172.25.31.1 #只有这两个ip才能使用共享设备
initiator-address 172.25.31.4
</target>
# Similar, but we use "direct-store" instead of "backing-store".
/etc/init.d/tgtd start #启动服务
tgt-admin -s #查看信息
在server1,server4中安装客户端软件
yum install -y iscsi-*
发现设备
iscsiadm -m discovery -t st -p 172.25.31.2
登录设备
iscsiadm -m node -l
fdisk -l 出现/dev/sda
查看clvmd是否启动
/etc/init.d/clvmd status
创建lvm
只需要在一个节点做,另外一个节点会同步,但是另一个节点需要用pvs,vgs,lvs查看刷新
pvcreate /dev/sda
vgcreate clustervg /dev/sda
lvcreate -L 4G -n demo clustervg
mkfs.ext4 /dev/clustervg/demo #格式化为ext4文件系统
clusvcadm -d nginx #禁用nginx
在https://server1:8084上面删除nginx脚本和集群
配置mysql
在server1中
yum install -y mysql mysql-server
在server4中
yum install -y mysql-server
测试服务是否没问题
在servre1中:
/var/lib/mysql/ #数据库目录,如果没有启动数据库,那么这里面什么都没有
mount /dev/clustervg/demo /var/lib/mysql/
ll -d /var/lib/mysql/ #挂载之后所有者和组发生了改变,都是root
chown mysql.mysql /var/lib/mysql/ #改变所有者和组
/etc/init.d/mysqld start #启动数据库
/etc/init.d/mysqld stop
umount /var/lib/mysql/
在server4中:
mount /dev/clustervg/demo /var/lib/mysql/
/etc/init.d/mysqld start
/etc/init.d/mysqld stop
umount /var/lib/mysql/
luci管理
添加文件系统和数据库资源
添加顺序VIP、文件系统、数据库
ext4文件系统是本地文件系统,向一个节点写东西时不能立即同步到另一个节点,而且可能会发生脑裂,所以我们换用gfs2文件系统
clusvcadm -d mysqld #禁用mysqld服务组
删除mysqldata文件系统资源
修改文件系统
mkfs.gfs2 -j 3 -p lock_dlm -t haha:mygfs /dev/clustervg/demo #-j 日志数,一般为节点数+1 -p 锁文件 (只有数据库开启时才会有,数据库stop就消失) -t cluster name集群名
在server1和server4中都挂载:mount /dev/clustervg/demo /var/lib/mysql/
ll -d /var/lib/mysql/
chown mysql.mysql /var/lib/mysql/ #挂载之后的权限可能会发生变化,修改权限
gfs2_tool sb /dev/clustervg/demo all #查看demo的信息
gfs2_tool journals /dev/clustervg/demo #查看有几个日志,每个默认大小128M
在server1,server4中设置自动挂载
vim /etc/fstab
/dev/clustervg/demo /var/lib/mysql gfs2 _netdev 0 0
clusvcadm -e mysql #激活mysql服务组
测试
clustat
clusvcadm -r mysql -m server4 #把服务迁移到servre4上
clustat