5.ShardingSphere-Proxy5 集群Zookeeper

ShardingSphere-Proxy5支持集群模式搭建。搭建集群时推荐使用Zookeeper作为注册中心,这是官方集成的注册中心。也可以使用其它如:consul、nacol等,但需要自己引入依赖。

Zookeeper安装

环境准备

Zookeeper需要jre环境。

单机模式部署

解压安装包,修改配置

解压Zookeeper安装包,进入conf文件夹,复制zoo-sample.cfg为zoo.cfg,zoo.cfg是Zookeeper的配置文件。
修改配置文件

# 作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔
tickTime=2000
# LF初始通信时限,集群中的follower服务器(F)与leader服务器(L)之间初始连接时能容忍的最多心跳数(tickTime的数量)
initLimit=10
# LF同步通信时限,集群中的follower服务器与leader服务器之间请求和应答之间能容忍的最多心跳数(tickTime的数量)
syncLimit=5
# Zookeeper 保存数据的目录,默认情况下,Zookeeper 将写数据的日志文件也保存在这个目录里
dataDir=../data
# Zookeeper服务端口
clientPort=2181
# server.N = YYY:A:B,其中N表示服务器编号,YYY表示服务器的IP地址,A为LF通信端口,表示该服务器与集群中的leader交换的信息的端口。B为选举端口,表示选举新leader时服务器间相互通信的端口(当leader挂掉时,其余服务器会相互通信,选择出新的leader)。一般来说,集群中每个服务器的A端口都是一样,每个服务器的B端口也是一样。但是当所采用的为伪集群时,IP地址都一样,只能时A端口和B端口不一样
server.4=127.0.0.1:2888:3888

启动Zookeeper

在bin目录下执行zkServer.cmd命令

测试

在bin目录下打开一个新窗口,通过zkCli.cmd连接Zookeeper服务。

# 连接服务
zkCli.cmd -server 127.0.0.1:2181

# 查询节点命令:ls path [watch]。path:查询节点的路径,'/'指根目录;watch:表示是否开启监控,监控 path 下的子节点变化(NodeChildrenChanged,NodeDeleted)
ls /

# 注册节点创建。-s:表示创建一个顺序节点;-e:表示创建一个临时节点;path:表示要创建的节点路径名;data:表示要创建的节点数据;acl:表示要创建的节点的访问控制列表。可以不写,默认为 world:anyone:cdrwa。
create [-s] [-e] path data acl

ShardingSphere-proxy集群配置

配置文件修改

修改配置文件server.yml,添加Zookeeper集群相关配置。

mode:  
  type: Cluster            # 运行模式类型,可选配置:Memory(内存)、Standalone(单机)、Cluster(集群)  
  repository:  
    type: ZooKeeper        # 持久化仓库类型,官方推荐Zookeeper。  
    props:  
      namespace: demoNode        # 注册中心命名空间  
      server-lists: localhost:2181   # 注册中心连接地址,多个地址用逗号隔开  
      retryIntervalMilliseconds: 500        # 重试间隔毫秒数  
      timeToLiveSeconds: 60                 # 临时数据失效的秒数  
      maxRetries: 3                         # 客户端连接最大重试次数  
      operationTimeoutMilliseconds: 500     # 客户端操作超时的毫秒数  
  overwrite: true                           # 是否使用本地配置覆盖持久化配置

保存配置文件重启。

验证集群

使用Zookeeper工具查看是否存在上面配置的demoNode节点,存在则集群配置成功。
如下图所示,已经存在demoNode节点,并且worker_id节点下显示已经有一个服务注册进来了。
5.ShardingSphere-Proxy5 集群Zookeeper_第1张图片

客户端透明高可用

接入Zookeeper后,ShardingProxy并不能实现客户端透明高可用,只能实现集群内各个proxy配置共享。如果要配置客户端透明的高可用,还需要使用nginx、haproxy、keeplive等类似的中间件。、

使用nginx做负载均衡

nginx可以用做mysql的代理,因此也可以代理ShardingSphere-proxy。

修改nignx配置文件

在nginx配置文件中添加如下配置

#四层负载,四层的负载不在http模块里面,他是和http模块同级别的
stream {        
        upstream mysql {
            server 127.0.0.1:3307 weight=9;   #后端数据库的ip和端口,如果进行了域名解析,直接写域名就好
			server 127.0.0.1:3308;
        }
        server {
            listen 33306;   #如果监听3306,远程登录的时候不用加-p参数
            proxy_connect_timeout 10s;
            proxy_timeout 30s;
            proxy_pass mysql;
        }
}

添加完配置后重启nginx。通过33306端口连接ShardingSphere-proxy,可以成功连接则代理成功。

Zookeeper接入认证

ShardingSphere-proxy可以采用Zookeeper的digest认证方式对节点加密

修改配置添加认证

修改server.yml,添加digest配置项

mode:  
  type: Cluster            # 运行模式类型,可选配置:Memory(内存)、Standalone(单机)、Cluster(集群)  
  repository:  
    type: ZooKeeper        # 持久化仓库类型,官方推荐Zookeeper。  
    props:  
      namespace: demoNode        # 注册中心命名空间  
      server-lists: localhost:2181   # 注册中心连接地址,多个地址用逗号隔开  
      retryIntervalMilliseconds: 500        # 重试间隔毫秒数  
      timeToLiveSeconds: 60                 # 临时数据失效的秒数  
      maxRetries: 3                         # 客户端连接最大重试次数  
      operationTimeoutMilliseconds: 500     # 客户端操作超时的毫秒数  
      digest: abc                        # 接入认证;digest认证是需要配置用户名密码,但这里好像只需要配置密码,而且实际上在Zookeeper中查看认证信息时,这里配置的是用户。注意:加密一旦配置无法修改,如果要修改只能通过Zookeeper删除节点,再重建
  overwrite: true                           # 是否使用本地配置覆盖持久化配置

修改完成后重启,这时使用Zookeeper工具查看节点,这时候demoNode节点已经无法查看了,这时因为工具已经没有权限查看。可以用Zookeeper命令行工具添加认证,就可以查看。

查看添加了认证信息的节点

127.0.0.1:2181	$	ls2 /demoNode
Authentication is not valid : /demoNode #此时无权限访问
127.0.0.1:2181	$	addauth digest abc #添加认证用户,这里不需要密码,具体原因未知
127.0.0.1:2181	$	ls2 /demoNode #有认证信息可以成功访问
[rules, metadata, nodes, props, worker_id]cZxid = 0x302
ctime = Wed Oct 26 10:04:34 CST 2022
mZxid = 0x302
mtime = Wed Oct 26 10:04:34 CST 2022
pZxid = 0x322
cversion = 5
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 5
127.0.0.1:2181	$	getAcl /demoNode #查看详细的认证信息,下面可以看到abc实际上是用户,而不是密码
'digest,'abc:E5BHDAna9MYXnBl+auvpghycqS0=
: cdrwa

你可能感兴趣的:(#,ShardingSphere,java-zookeeper,zookeeper,java)