暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

华为云GaussDB(for Redis)数据库——连接数据库

原创 章芋文 2020-12-14
2626

上节,我们在华为云中创建了3个节点的GaussDB(for Redis)数据库集群,本节我们将探讨如何连接华为云中的GaussDB(for Redis)实例。
image.png

官方文档中给出了使用内网连接GaussDB(for Redis)实例可通过如下两种方式实现:

  • 方式一:通过连接各节点的内网IP访问数据库实例。
  • 方式二:为数据库实例配置一个内网域名,通过该域名访问数据库实例。

使用限制:

  • GaussDB(for Redis)实例的默认端口为8635。(目前不支持修改端口)
  • 目标实例必须与弹性云服务器在同一个虚拟私有云和子网内才能访问。
  • 弹性云服务器必须处于目标实例所属安全组允许访问的范围内。

另外,如果需要连接GaussDB(for Redis),还需要安装redis客户端,这里我们直接使用yum安装:

[root@ecs-ae88 ~]# yum install redis
Last metadata expiration check: 0:00:28 ago on Mon 14 Dec 2020 03:46:07 PM CST.
Dependencies resolved.
===========================================================================================================================================================================
 Package                         Architecture                     Version                                                        Repository                           Size
===========================================================================================================================================================================
Installing:
 redis                           x86_64                           5.0.3-2.module_el8.2.0+318+3d7e67ea                            AppStream                           925 k

Transaction Summary
===========================================================================================================================================================================
Install  1 Package

Total download size: 925 k
Installed size: 3.2 M
Is this ok [y/N]: y
Downloading Packages:
redis-5.0.3-2.module_el8.2.0+318+3d7e67ea.x86_64.rpm                                                                                       1.4 MB/s | 925 kB     00:00    
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                                                      424 kB/s | 925 kB     00:02     
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                                                                                                                   1/1 
  Running scriptlet: redis-5.0.3-2.module_el8.2.0+318+3d7e67ea.x86_64                                                                                                  1/1 
  Installing       : redis-5.0.3-2.module_el8.2.0+318+3d7e67ea.x86_64                                                                                                  1/1 
  Running scriptlet: redis-5.0.3-2.module_el8.2.0+318+3d7e67ea.x86_64                                                                                                  1/1 
  Verifying        : redis-5.0.3-2.module_el8.2.0+318+3d7e67ea.x86_64                                                                                                  1/1 

Installed:
  redis-5.0.3-2.module_el8.2.0+318+3d7e67ea.x86_64                                                                                                                         

Complete!
[root@ecs-ae88 ~]# redis-cli -h
redis-cli 5.0.3

Usage: redis-cli [OPTIONS] [cmd [arg [arg ...]]]
  -h <hostname>      Server hostname (default: 127.0.0.1).

接下来我们分别通过两种方式来连接GaussDB(for Redis)实例。

方式一,通过节点IP连接

通过命令行客户端redis-cli连接,-h指定节点ip,-p端口,-a密码:

[root@ecs-ae88 ~]# redis-cli -h 192.168.0.201 -p 8635 -a 'Redis2020!'
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.0.201:8635> info
# Proxy
Version:2.6.1
Name:gemini-proxy-conf
Bind:192.168.0.201:8635
RedisMode:proxy
SingleThread:false
WorkerThreads:8
Uptime:1607930669
UptimeSince:2020-12-14 07:24:29

# SystemResource
UsedMemory:948824
MaxMemory:0
MaxRSS:69521408
UsedCpuSys:0.875
UsedCpuUser:0.569

# Stats
Accept:894
ClientConnections:-891
TotalRequests:5436
TotalResponses:5437
TotalRecvClientBytes:59320
TotalSendServerBytes:86860
TotalRecvServerBytes:2972178
TotalSendClientBytes:206979

# Servers
Server:172.16.1.141:6378
Role:unknown
Group:
DC:
CurrentIsFail:0
Connections:0
Connect:0
Requests:0
Responses:0
SendBytes:0
RecvBytes:0

Server:172.16.34.102:6378
Role:unknown
Group:
DC:
CurrentIsFail:0
Connections:0
Connect:0
Requests:0
Responses:0
SendBytes:0
RecvBytes:0

Server:172.16.34.81:6378
Role:unknown
Group:
DC:
CurrentIsFail:0
Connections:0
Connect:0
Requests:0
Responses:0
SendBytes:0
RecvBytes:0


# LatencyMonitor
LatencyMonitorName:all
redis_all_avgsec:0           
redis_all_usec:0                   
redis_all_count:1969     

从上面我们可以看到有172.16.34.81:6378、172.16.34.102:6378、172.16.1.141:6378三个server,192.168.0.201:8635只是作为其中的一个Proxy。

连接另外两个节点:

[root@ecs-ae88 ~]# redis-cli -h 192.168.0.206 -p 8635 -a 'Redis2020!'
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.0.206:8635> info
# Proxy
Version:2.6.1
Name:gemini-proxy-conf
Bind:192.168.0.206:8635
RedisMode:proxy
SingleThread:false
WorkerThreads:8
Uptime:1607930669
UptimeSince:2020-12-14 07:24:29

# SystemResource
UsedMemory:920672
MaxMemory:0
MaxRSS:69517312
UsedCpuSys:0.990
UsedCpuUser:0.693

# Stats
Accept:1062
ClientConnections:-1059
TotalRequests:6382
TotalResponses:6381
TotalRecvClientBytes:70405
TotalSendServerBytes:101260
TotalRecvServerBytes:3523322
TotalSendClientBytes:246078

# Servers
Server:172.16.1.141:6378
Role:unknown
Group:
DC:
CurrentIsFail:0
Connections:0
Connect:0
Requests:0
Responses:0
SendBytes:0
RecvBytes:0

Server:172.16.34.102:6378
Role:unknown
Group:
DC:
CurrentIsFail:0
Connections:0
Connect:0
Requests:0
Responses:0
SendBytes:0
RecvBytes:0

Server:172.16.34.81:6378
Role:unknown
Group:
DC:
CurrentIsFail:0
Connections:0
Connect:0
Requests:0
Responses:0
SendBytes:0
RecvBytes:0


# LatencyMonitor
LatencyMonitorName:all
redis_all_avgsec:0           
redis_all_usec:0                   
redis_all_count:2337            

192.168.0.206:8635> 

[root@ecs-ae88 ~]# redis-cli -h 192.168.0.223 -p 8635 -a 'Redis2020!'
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.0.223:8635> info
# Proxy
Version:2.6.1
Name:gemini-proxy-conf
Bind:192.168.0.223:8635
RedisMode:proxy
SingleThread:false
WorkerThreads:8
Uptime:1607930669
UptimeSince:2020-12-14 07:24:29

# SystemResource
UsedMemory:868400
MaxMemory:0
MaxRSS:71577600
UsedCpuSys:0.956
UsedCpuUser:0.723

# Stats
Accept:1082
ClientConnections:-1079
TotalRequests:6472
TotalResponses:6471
TotalRecvClientBytes:71787
TotalSendServerBytes:102298
TotalRecvServerBytes:3582255
TotalSendClientBytes:254786

# Servers
Server:172.16.1.141:6378
Role:unknown
Group:
DC:
CurrentIsFail:0
Connections:0
Connect:0
Requests:0
Responses:0
SendBytes:0
RecvBytes:0

Server:172.16.34.102:6378
Role:unknown
Group:
DC:
CurrentIsFail:0
Connections:0
Connect:0
Requests:0
Responses:0
SendBytes:0
RecvBytes:0

Server:172.16.34.81:6378
Role:unknown
Group:
DC:
CurrentIsFail:0
Connections:0
Connect:0
Requests:0
Responses:0
SendBytes:0
RecvBytes:0


# LatencyMonitor
LatencyMonitorName:all
redis_all_avgsec:0           
redis_all_usec:0                   
redis_all_count:2385            

192.168.0.223:8635> 

我们通过内网的3个代理,连接到了3个后台的server,这三个server并不是一个Rediscluster,不是通过Replication同步数据,而是通过后台共享存储达到数据一致的效果。

暂时不支持keys *查询所有key:

192.168.0.223:8635> keys *
(error) ERR unknown command 'keys'
192.168.0.223:8635> 

简单的set、get、del数据测试:

192.168.0.223:8635> set modb www.modb.pro
OK
192.168.0.223:8635> get modb
"www.modb.pro"
192.168.0.223:8635> exit
[root@ecs-ae88 ~]# redis-cli -h 192.168.0.206 -p 8635 -a 'Redis2020!'
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.0.206:8635> get modb
"www.modb.pro"
192.168.0.206:8635> exit
[root@ecs-ae88 ~]# redis-cli -h 192.168.0.201 -p 8635 -a 'Redis2020!'
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.0.201:8635> get modb
"www.modb.pro"
192.168.0.201:8635> del modb
(integer) 1
192.168.0.201:8635> get modb
(nil)
192.168.0.201:8635> 

其他一些操作:

192.168.0.201:8635> ping
PONG
192.168.0.201:8635> DBSIZE
(error) ERR unknown command 'dbsize'
192.168.0.201:8635> dbsize
(error) ERR unknown command 'dbsize'
192.168.0.201:8635> set modb www.modb.pro
OK
192.168.0.201:8635> type modb
string
192.168.0.201:8635> ttl modb
(integer) -1
192.168.0.201:8635> expire modb 120
(integer) 1
192.168.0.201:8635> ttl modb
(integer) 117
192.168.0.201:8635> rename modb modb120
(error) ERR unknown or unsupported command 'rename'
192.168.0.201:8635> strlen modb
(integer) 12
192.168.0.201:8635> flushdb
(error) ERR unknown command 'flushdb'
192.168.0.201:8635> flushall
(error) ERR unknown command 'flushall'

方式二:通过内网域名

首先针对当前的VPC创建一个内网域名,modb.com
image.png

添加记录集,然后将3个节点的IP映射到gaussdb-redis.modb.com子域名中:
image.png

使用redis-cli通过域名连接数据库:

[root@ecs-ae88 ~]# redis-cli -h gaussdb-redis.modb.com -p 8635 -a 'Redis2020!'
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
gaussdb-redis.modb.com:8635> info
# Proxy
Version:2.6.1
Name:gemini-proxy-conf
Bind:192.168.0.201:8635
RedisMode:proxy
SingleThread:false
WorkerThreads:8
Uptime:1607930669
UptimeSince:2020-12-14 07:24:29

# SystemResource
UsedMemory:998808
MaxMemory:0
MaxRSS:69521408
UsedCpuSys:1.539
UsedCpuUser:1.045

# Stats
Accept:1628
ClientConnections:-1625
TotalRequests:9650
TotalResponses:9658
TotalRecvClientBytes:108467
TotalSendServerBytes:151700
TotalRecvServerBytes:5405697
TotalSendClientBytes:401181

# Servers
Server:172.16.1.141:6378
Role:unknown
Group:
DC:
CurrentIsFail:0
Connections:0
Connect:0
Requests:0
Responses:0
SendBytes:0
RecvBytes:0

Server:172.16.34.102:6378
Role:unknown
Group:
DC:
CurrentIsFail:0
Connections:10
Connect:10
Requests:32
Responses:32
SendBytes:840
RecvBytes:239

Server:172.16.34.81:6378
Role:unknown
Group:
DC:
CurrentIsFail:0
Connections:0
Connect:0
Requests:0
Responses:0
SendBytes:0
RecvBytes:0


# LatencyMonitor
LatencyMonitorName:all
redis_all_avgsec:0           
redis_all_usec:0                   
redis_all_count:3610            

LatencyMonitorName:get
redis_get_avgsec:0           
redis_get_usec:0                   
redis_get_count:2               

LatencyMonitorName:set
redis_set_avgsec:0           
redis_set_usec:0                   
redis_set_count:1               

gaussdb-redis.modb.com:8635> exit
[root@ecs-ae88 ~]# redis-cli -h gaussdb-redis.modb.com -p 8635 -a 'Redis2020!'
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
gaussdb-redis.modb.com:8635> info
# Proxy
Version:2.6.1
Name:gemini-proxy-conf
Bind:192.168.0.206:8635
RedisMode:proxy
SingleThread:false
WorkerThreads:8
Uptime:1607930669
UptimeSince:2020-12-14 07:24:29

# SystemResource
UsedMemory:944016
MaxMemory:0
MaxRSS:69517312
UsedCpuSys:1.483
UsedCpuUser:1.093

# Stats
Accept:1642
ClientConnections:-1639
TotalRequests:9675
TotalResponses:9674
TotalRecvClientBytes:108907
TotalSendServerBytes:151584
TotalRecvServerBytes:5433858
TotalSendClientBytes:394778

# Servers
Server:172.16.1.141:6378
Role:unknown
Group:
DC:
CurrentIsFail:0
Connections:0
Connect:0
Requests:0
Responses:0
SendBytes:0
RecvBytes:0

Server:172.16.34.102:6378
Role:unknown
Group:
DC:
CurrentIsFail:0
Connections:1
Connect:1
Requests:3
Responses:3
SendBytes:74
RecvBytes:31

Server:172.16.34.81:6378
Role:unknown
Group:
DC:
CurrentIsFail:0
Connections:0
Connect:0
Requests:0
Responses:0
SendBytes:0
RecvBytes:0


# LatencyMonitor
LatencyMonitorName:all
redis_all_avgsec:0           
redis_all_usec:0                   
redis_all_count:3618            

LatencyMonitorName:get
redis_get_avgsec:0           
redis_get_usec:0                   
redis_get_count:1               

gaussdb-redis.modb.com:8635> exit
[root@ecs-ae88 ~]# redis-cli -h gaussdb-redis.modb.com -p 8635 -a 'Redis2020!'
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
gaussdb-redis.modb.com:8635> info
# Proxy
Version:2.6.1
Name:gemini-proxy-conf
Bind:192.168.0.223:8635
RedisMode:proxy
SingleThread:false
WorkerThreads:8
Uptime:1607930669
UptimeSince:2020-12-14 07:24:29

# SystemResource
UsedMemory:982808
MaxMemory:0
MaxRSS:71577600
UsedCpuSys:1.454
UsedCpuUser:1.083

# Stats
Accept:1648
ClientConnections:-1645
TotalRequests:9737
TotalResponses:9739
TotalRecvClientBytes:109638
TotalSendServerBytes:152756
TotalRecvServerBytes:5453170
TotalSendClientBytes:412821

# Servers
Server:172.16.1.141:6378
Role:unknown
Group:
DC:
CurrentIsFail:0
Connections:0
Connect:0
Requests:0
Responses:0
SendBytes:0
RecvBytes:0

Server:172.16.34.102:6378
Role:unknown
Group:
DC:
CurrentIsFail:0
Connections:8
Connect:8
Requests:24
Responses:24
SendBytes:646
RecvBytes:187

Server:172.16.34.81:6378
Role:unknown
Group:
DC:
CurrentIsFail:0
Connections:0
Connect:0
Requests:0
Responses:0
SendBytes:0
RecvBytes:0


# LatencyMonitor
LatencyMonitorName:all
redis_all_avgsec:0           
redis_all_usec:0                   
redis_all_count:3645            

LatencyMonitorName:get
redis_get_avgsec:0           
redis_get_usec:0                   
redis_get_count:4               

LatencyMonitorName:set
redis_set_avgsec:0           
redis_set_usec:0                   
redis_set_count:3               

gaussdb-redis.modb.com:8635> 

从上面可以看出,通过内网域名可以随机连接到不同的节点,相当于在proxy外再加了一层DNS解析。

总结:
1、GaussDB(for Redis)通过内网的3个代理,连接到了3个后台的server,这三个server并不是一个Rediscluster,不是通过Replication同步数据,而是通过后台共享存储达到数据一致的效果。
2、目前仅支持数据相关的操作,针对redis数据库很多命令不支持,比如keys *、dbsize、flushdb等命令
3、通过内网域名可以随机连接到不同的节点,相当于在proxy外再加了一层DNS解析。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论