Vertica也是MPP架构的数据库,相比大家熟悉的MPP架构,比如Greenplum和hadoop这些产品,Vertica最大的不同就是没有主节点这个概念。
也就是说Vertica集群中(K-safe=1情况),任何一个节点宕机都不会影响到其他节点对外提供服务。
而在其他有主节点的架构中,一旦主节点挂掉,整个集群就会挂掉,所以还需要考虑进一步冗余主节点。
对架构有深入了解的朋友会问,没有主节点,那Vertica的元数据存放在哪里呢?
答案是存放在每一个节点中,因为元数据并不会很大,所以每个节点冗余元数据是可行的。
基于上面的理解,我们在一个3节点的Vertica集群测试环境中,任意停掉一个节点,其他节点都是可以对外提供服务的。
admintools -> 7 Advanced Menu -> 2 Stop Vertica on Host / 3 Kill Vertica Process on Host -> Select host(s)
注:在选择“2 Stop Vertica on Host” 或者 “3 Kill Vertica Process on Host”,优先选择前者,前者停不掉才考虑后者杀掉。
这里杀掉第二个节点的vertica进程。
dbadmin=> select node_name, node_state from nodes;
node_name | node_state
-------------------+------------
v_testdb_node0001 | UP
v_testdb_node0002 | DOWN
v_testdb_node0003 | UP
(3 rows)
第二个节点宕机,但和预计的情况一样,从第一个节点和第三个节点的访问数据,都可以正常访问到。
--说明节点1访问正常:
[dbadmin@vertica1 ~]$ vsql
Password:
--说明节点3访问正常:
[dbadmin@vertica3 ~]$ vsql
Password:
从节点2访问,会报错:
[dbadmin@vertica2 ~]$ vsql
vsql: could not connect to server: 拒绝连接
Is the server running on host "???" and accepting
TCP/IP connections on port 5433?
所以,应用端配置连接,建议不要简单的固定集群某个节点的IP地址,而应该想办法配置一组IP,实现当发现有IP地址不能访问,可以连接别的节点IP地址正常访问数据库的逻辑。