RHCS套件实现高可用集群

使用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:
添加VIP服务
nginx:
添加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
向群集添加服务组
添加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上,负载均衡依然正常,证明集群可正常工作
停掉server1上的nginx服务
在“双机热备”高可用(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_xvm.key文件
创建 Fence 设备
创建 Fence 设备
创建 Fence 设备
为集群成员配置 Fencing
在Nodes中选择需要加入fence设备的节点,选择Add Fence Method
Add Fence Method
选择Add Fence Instance
Add Fence Instance
在Domain一栏中添如server1的UUID
在server4节点中重复以上步骤
server1
server4

fence_node server4

fence_node server4

clvmd存储机制+mysql

集群化的 LVM (Clustered LVM,CLVM)是 LVM 的一个集群方面的扩展。允许一个集群的计算机通过 LVM 管理共享存储。

clvmd 守护进程是 CLVM 的核心。clvmd 守护进程在每个集群计算机上运行,并更新 LVM 元数据,让集群的每个计算机上的 LVM 信息都保持一致

配置clvmd

1,server2充当共享磁盘服务器,实际生产中应该专门有一个作为共享磁盘服务器
添加一个8G虚拟磁盘
添加一个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 #查看信息

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
fdisk -l

查看clvmd是否启动

/etc/init.d/clvmd status

查看clvmd是否启动

创建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

查看demo的信息

在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 

测试

猜你喜欢

转载自blog.csdn.net/qq_40303205/article/details/81383105
今日推荐