方案背景
随着计算机应用的不断深入,企业对计算机系统的依赖程度也日渐增加。在一些关键应用中,后台数据库是否可以提供及时、可靠的信息和服务是必不可少的,甚至会成为影响公司业务的关键因素。
计算机硬件与操作系统都不可避免地会发生故障,这些故障有可能给企业带来极大的损失,甚至整个服务的终止。对于那些任何服务的终止,都可能给企业造成严重的财产损失、名誉损失的关键应用,系统的高可用性显得更为重要。因此,必须有适当的措施来确保计算机信息系统提供不间断的服务。
信息系统的可用性通常在两种情况下会受到影响,一种是操作系统宕机、硬件故障、错误操作和管理引起的异常失败;另一种是由于系统维护和升级,需要安装新的硬件或软件而正常关机。高可靠性方案必须为这两种情况提供不间断的系统服务。
拓扑结构
基于Rose HA的GBase 8a双机高可用系统的两台服务器(主机)都与磁盘阵列(共享存储)系统直接连接,用户的操作系统、GBase 8a数据库系统和Rose HA分别安装在两台主机上的本地磁盘上,数据库业务数据存放在磁盘阵列上,两台主机之间通过私用心跳网络连接。配置好的系统主机开始工作后,Rose HA开始监控系统,通过私用网络传递的心跳信息,每台主机上的Rose HA软件都可监控另一台主机上的GBase 8a状态。当工作主机发生故障时,心跳信息就会产生变化,这种变化可以通过私用网络被Rose HA软件捕捉。当捕捉到这种变化后Rose HA就会控制系统进行主机切换,即备份机启动和工作主机一样的GBase 8a数据库服务,接管工作主机的GBase 8a数据库服务,并进行报警,提示管理人员对故障主机进行维修。当维修完毕后,可以根据Rose HA的设定自动或手动再切换回来,也可以不切换,此时维修好的主机就作为备份机,双机GBase 8a数据库系统继续工作。
基于Rose HA的GBase 8a高可用实现容错功能的关键在于,对客户端来说主机是透明的,当系统发生错误而进行切换时,即主机的切换在客户端看来没有变化,所有基于主机的应用都仍然正常运行。Rose HA采用了虚拟IP地址映射技术来实现此功能。客户端通过虚拟地址和工作主机通讯,无论系统是否发生切换,虚拟地址始终指向工作主机。在进行网络服务时, Rose HA提供一个逻辑的虚拟地址,任何一个客户端需要请求服务时只需要使用这个虚拟地址。正常运行时,虚拟地址及网络服务由主服务器提供。当主服务器出现故障时,Rose HA会将虚拟地址转移到另外一台服务器的网卡上,继续提供网络服务。切换完成后,在客户端看来系统并没有出现故障,网络服务仍然可以使用。除IP地址外,HA还可以提供虚拟的计算机别名供客户端访问。对于数据库服务,当有主服务器出现故障时,另外一台服务器就会自动接管,同时启动数据库和应用程序,使用户的数据库可以正常操作。
系统要求
- 两台服务器配置无需相同
- 操作系统版本一致Linux 5.X
- 双主机通道的磁盘阵列系统
- 用于公用网络的网卡
- 于私用网络的网卡或RS-232串口线
功能特点
- 当一台GBase 8a服务器宕机时,其IP地址、服务器名称及运行的作业会自动转移至另一台GBase 8a服务器,客户端软件不需要重新设定,只要重新连结至原来的IP地址及服务器名称即可继续作业;
- 采取高可靠的错误检测和故障恢复机制减少系统宕机,停机时间并防范错误,提供故障警告;
- 设定故障排除后自动或手动恢复;
- 安装时不需要修改操作系统的核心,也无需特殊的硬件;
- 两台服务器的信息交换可通过:RS232、TCP/IP进行。
配置与管理步骤
安装Rose HA
启动Rose HA控制中心
创建集群
创建应用资源
管理资源组
切换资源组
虚拟IP管理:部署后,不但可以连接实际的服务器IP,也可以连接虚拟的IP。当采用虚拟IP进行应用程序连接时,虚拟IP自动会将连接请求转到实际的IP,保证了高可用的自动IP处理。
高可用测试
关机测试:svr661为工作服务器,在工作服务器上插入数据后,重启该服务器,模拟该服务器被意外重启或断电情况。
[linna@svr661 ~]$ ps -ef | grep gbased
linna 14556 1 0 10:13 ? 00:00:00 /home/linna/GBase/server/bin/gbased --log-queries-not-using-indexes --pid-file=/home/linna/GBase/log/gbase8a/gbased.pid
linna 14918 1841 0 10:14 pts/2 00:00:00 grep gbased
[linna@svr661 ~]$ gbase -uroot -plinna
Welcome to the GBase monitor. Commands end with ; or \g.
Your gbase connection id is 3
Server version: 8.3.1.7
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
gbase> use cmcc;
Query OK, 0 rows affected (0.00 sec)
gbase> show tables;
+----------------+
| Tables_in_cmcc |
+----------------+
| t_user |
+----------------+
1 row in set (0.00 sec)
gbase> select * from t_user;
+----------+------------+-------------+
| f_userid | f_username | f_phone |
+----------+------------+-------------+
| 1 | Rose | 13821600123 |
| 2 | Jack | 13821600001 |
| 3 | Mary | 15920256789 |
+----------+------------+-------------+
3 rows in set (0.03 sec)
gbase> insert into t_user values(4,'Kate','18828088888');
Query OK, 1 row affected (0.13 sec)
gbase> quit
Bye
[linna@svr661 ~]$ exit
logout
[root@svr661 bin]# reboot
Broadcast message from root (pts/2) (Tue May 8 10:15:37 2012):
The system is going down for reboot NOW!
[root@svr661 bin]#
在另外一台服务器上查询数据。
[linna@svr662 ~]$ ps -ef | grep gbased
linna 12360 1 0 10:16 ? 00:00:00 /home/linna/GBase/server/bin/gbased --log-queries-not-using-indexes --pid-file=/home/linna/GBase/log/gbase8a/gbased.pid
linna 12625 12517 0 10:16 pts/1 00:00:00 grep gbased
[linna@svr662 ~]$ gbase -uroot -plinna
Welcome to the GBase monitor. Commands end with ; or \g.
Your gbase connection id is 4
Server version: 8.3.1.7
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
gbase> use cmcc;
Query OK, 0 rows affected (0.00 sec)
gbase> select * from t_user;
+----------+------------+-------------+
| f_userid | f_username | f_phone |
+----------+------------+-------------+
| 1 | Rose | 13821600123 |
| 2 | Jack | 13821600001 |
| 3 | Mary | 15920256789 |
| 4 | Kate | 18828088888 |
+----------+------------+-------------+
4 rows in set (0.05 sec)
gbase>
经过测试,两台服务器在其中一台意外关机时,数据库服务仍然可以正常工作,在被意外关机服务器上对数据库的修改操作,不会因为服务器的意外关闭而丢失。、
杀进程测试
当工作服务器的数据库进程被意外杀死后,会尝试重启指定次数。当可以重启成功时,不切换工作服务器。当数据库服务不能重启成功时,自动切换到备用服务器,保证数据库服务不被中断。
[linna@svr661 ~]$ gbase -uroot -plinna
Welcome to the GBase monitor. Commands end with ; or \g.
Your gbase connection id is 3
Server version: 8.3.1.7
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
gbase> use cmcc;
Query OK, 0 rows affected (0.00 sec)
gbase> select * from t_user;
+----------+------------+-------------+
| f_userid | f_username | f_phone |
+----------+------------+-------------+
| 1 | Rose | 13821600123 |
| 2 | Jack | 13821600001 |
| 3 | Mary | 15920256789 |
| 4 | Kate | 18828088888 |
+----------+------------+-------------+
4 rows in set (0.09 sec)
gbase> update t_user set f_phnotallow='18920054321' where f_userid=1;
Query OK, 1 row affected (0.11 sec)
Rows matched: 1 Changed: 1 Warnings: 0
gbase> quit
Bye
[linna@svr661 ~]$ ps -ef | grep gbased
linna 3561 1 0 10:18 ? 00:00:00 /home/linna/GBase/server/bin/gbased --log-queries-not-using-indexes --pid-file=/home/linna/GBase/log/gbase8a/gbased.pid
linna 17219 16708 0 10:58 pts/1 00:00:00 grep gbased
[linna@svr661 ~]$ kill -9 3561
[linna@svr661 ~]$ ps -ef | grep gbased
linna 17413 1 0 10:59 ? 00:00:00 /home/linna/GBase/server/bin/gbased --log-queries-not-using-indexes --pid-file=/home/linna/GBase/log/gbase8a/gbased.pid
linna 17604 16708 0 10:59 pts/1 00:00:00 grep gbased
[linna@svr661 ~]$ gbase -uroot -plinna
Welcome to the GBase monitor. Commands end with ; or \g.
Your gbase connection id is 3
Server version: 8.3.1.7
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
gbase> use cmcc;
Query OK, 0 rows affected (0.00 sec)
gbase> select * from t_user;
+----------+------------+-------------+
| f_userid | f_username | f_phone |
+----------+------------+-------------+
| 1 | Rose | 18920054321 |
| 2 | Jack | 13821600001 |
| 3 | Mary | 15920256789 |
| 4 | Kate | 18828088888 |
+----------+------------+-------------+
4 rows in set (0.03 sec)
gbase>
标签:00,linna,Rose,8a,GBase,服务器,HA,gbase From: https://blog.51cto.com/u_17026136/12058021