1.添加共享存储资源
上一节已经讲了如何添加资源,这里练习一下如何添加共享存储资源,为httpd添加一个共享存储,使得资源切换的时候,用户看到的数据是一样的。
在node(物理机)上创建一个nfs共享存储
[root@server ~]#mkdir /web
[root@server ~]# chmod o+w /web
[root@server ~]# echo '/web *(rw,async)' > /etc/exports.d/aa.exports
[root@server ~]#systemctl start nfs-server
[root@server ~]#
在任一节点上测试nfs正常工作,并在共享存储里创建index.html
[root@nodeX ~]# showmount -e node
Export list for node:
/web *
[root@nodeX ~]# mount node:/web /mnt
[root@nodeX ~]# echo 'share storage node xxxxxxxx' > /mnt/index.html
[root@nodeX ~]# umount /mnt
下面添加资源
class/provider里选择ocf:heatbeat
Type里选择Filesystem
Resource Group里选择group_1
Resource ID里可以随便填写,这里填写nfs_web
device里填写nfs共享目录的路径,这里是node:/web
dirctory是在节点上的挂载点,因为默认httpd的文档目录是/var/www/html,所以这里填写/var/www/html
fstype填写nfs
点击"Create Resource"
因为涉及到资源约束条件(后面会讲),此处先把webserver所在组设置为none
点击"Apply Changes"
再次把webserver设置到group_1里:
点击"Apply Changes"
此时集群可以正常工作了
验证
查看集群运行状态:
可以看到所有节点均在node1上运行。
在node1~node3任一节点上对node1执行standby操作:
[root@node1 ~]# pcs cluster standby node1
可以看到集群已经跑到node2上运行,验证资源是否真的node2上运行:
因为访问的数据放在共享存储里,所以看到的内容仍然是相同的:
2.实战: mysql双机热备
创建mysql高可用集群需要三个资源:
mysql_vip: 192.168.122.201/24
mysql服务: mysql_service
mysql共享存储 : mysql_storage
所属组: group_2
先创建第一个资源mysql_vip:
Class/Provider选择ocf:heatbeat
Type选择IPaddr2
Resource ID 用来标记不同资源,这里填写mysql_ip
ip用来填写所选择的vip,这里填写为192.168.122.201,记住要选择一个没有使用过的ip
cidr_netmask 填写子网掩码长度,这里写24
点击"Create Resource"
创建组group_2,选中mysql_vip,点击"create group"
Group Name填写group_2
点击"Create Group"
添加共享存储
在node(物理机)上创建共享目录/mysql,并把所有者所属组设置为27
[root@server ~]# mkdir /mysql
[root@server ~]# chown 27:27 /mysql
[root@server ~]# echo '/mysql *(rw,async)' > /etc/exports.d/mysql.exports
[root@server ~]# exportfs -arv
exporting *:/mysql
exporting *:/web
[root@server ~]#
在node1~node3任一节点上上测试nfs共享目录正常工作:
[root@node2 ~]# mount node:/mysql /mnt
[root@node2 ~]# df -hT | tail -1
node:/mysql nfs4 120G 7.3G 113G 7% /mnt
[root@node2 ~]# umount /mnt
[root@node2 ~]#
[root@node2 ~]#
添加共享存储资源:
Class/Provider选择ocf:heatbeat
Type选择Filesystem
Resource Group选择group_2
Resource ID 用于区分不同的资源,这里填写mysql_storage
device处填写nfs共享目录的路径,这里填写node:/mysql
directory是mysql数据存放的目录,这里填写/var/lib/mysql
fstype填写nfs
点击"Create Resource"
添加第三个资源mariadb
在三个节点上安装mariadb
[root@nodeX ~]# yum install mariadb-server mariadb -y
已加载插件:product-id, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
正在解决依赖关系
–> 正在检查事务
…
已安装:
mariadb.x86_64 1:5.5.41-2.el7_0 mariadb-server.x86_64 1:5.5.41-2.el7_0
作为依赖被安装:
perl-Compress-Raw-Bzip2.x86_64 0:2.061-3.el7 perl-Compress-Raw-Zlib.x86_64 1:2.061-4.el7 perl-DBD-MySQL.x86_64 0:4.023-5.el7
perl-DBI.x86_64 0:1.627-4.el7 perl-Data-Dumper.x86_64 0:2.145-3.el7 perl-IO-Compress.noarch 0:2.061-2.el7
perl-Net-Daemon.noarch 0:0.48-5.el7 perl-PlRPC.noarch 0:0.2020-14.el7
完毕!
[root@nodeX ~]#
在node1~node3所有节点上修改配置文件,设置编码为utf8
[root@nodeX ~]# sed -i '/mysqld\]/acharacter-set-server=utf8' /etc/my.cnf
添加mariadb资源
Class/Provider选择systemd
Type选择mariadb
Resource Group选择group_2
Resource ID用于区分不同的资源,这里填写mysql_service
点击"Create Resource"
稍等一会集群正常工作:
由此可以看到集群现在在node3上工作,现在在node3上登录mysql创建一个可以远程登录的用户:
[root@node3 ~]# mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 5.5.41-MariaDB MariaDB Server
Copyright (c) 2000, 2014, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> grant all privileges on *.* to root@'%' identified by 'redhat';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]>
验证
下面开始在客户端(这里选择物理机node)上进行验证。
首先安装客户端工具:
[root@server ~]# yum install mariadb -y
已加载插件:langpacks, product-id, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
正在解决依赖关系
–> 正在检查事务
—> 软件包 mariadb.x86_64.1.5.5.41-2.el7_0 将被 安装
–> 解决依赖关系完成
依赖关系解决
….
已安装:
mariadb.x86_64 1:5.5.41-2.el7_0
完毕!
[root@server ~]#
连接mysql_vip
[root@server ~]# mysql -uroot -predhat -h192.168.122.201 -e \
> "create database aa ; use aa ; create table aa (id int); insert into aa values (1);"
[root@server ~]#
[root@server ~]# mysql -uroot -predhat -h192.168.122.201 -e \
> 'use aa; select * from aa;'
+——+
| id |
+——+
| 1 |
+——+
[root@server ~]#
现在对node3执行standby操作:
可以看到mysql已经在node2上运行了,我们仍然连接mysql_vip:
[root@server ~]# mysql -uroot -predhat -h192.168.122.201 -e 'use aa; select * from aa;'
+——+
| id |
+——+
| 1 |
+——+
[root@server ~]#
依然是可以连接的,mysql服务成功切换!