TongRDS2.2 Center 哨兵配置

发布时间:2023年12月20日

本TongRDS配置由中心节点管理 2 个服务节点,这 2 个服务节点工作在主备模式,并 由 Center 中心节点提供哨兵功能。

1.1 样例环境

本次测试采用 2 台主机,分别为服务器 1(192.168.0.86)和服务器 2(192.168.0.87),服务器 1 主机上运行中心(Center)节点和服务节点 1,服务 器 2 主机上运行服务节点 2。

两台主机采用相同的 ntp 服务器同步时钟。 java 版本为 OpenJdk 1.8(openjdk version "1.8.0_302")。 验证用 Jedis

1.2 软件安装

将 TongRDS-2.2.1.2.MC.tar.gz 中 心 节 点 程 序 包 和 TongRDS-2.2.1.2.Node.tar.gz 上 传 到 服 务 器 1 , 将 TongRDS-2.2.1.2.Node.tar.gz 上传到服务器 2。

分别解 tar 包,生成 pmemdb 目录和 pcenter 目录。其中 pmemdb 目录为服务 节点程序,pcenter 目录下为中心节点程序

1.3 服务节点配置

首先,检查一下 cfg.xml 中的 Server.Service 的配置为 WebSession。该服务名 必须和 Center 节点中的配置对应,无法对应则节点不允许接入。 然后修改 dynamic.xml 配置文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<Server>
  <Center>
    <Password>454d51192b1704c60e19734ce6b38203</Password>
    <EndPoint>
      <Host>192.168.0.86</Host>
      <Port>6300</Port>
    </EndPoint>
  </Center>
</Server>

其中Server.Center.Password为连接Center时的认证密码,测试时可不用修改。 Sever.Center.EndPoint 配置修改 IP 地址为 192.168.0.86,端口为 6300。如果 有多台 Center 节点,EndPoint 可配置多条,只需要更改IP地址

<?xml version="1.0" encoding="UTF-8"?>
<Server>
  <Center>
    <Password>454d51192b1704c60e19734ce6b38203</Password>
    <EndPoint>
      <Host>192.168.0.86</Host>
      <Port>6300</Port>
    </EndPoint>
    <EndPoint>
      <Host>192.168.0.87</Host>
      <Port>6300</Port>
    </EndPoint>
  </Center>
</Server>

1.4 中心节点配置

1.4.1config. properteis

首先检查config.properteis文件中的service.port=6300(Center的主服务端口), sentinel.port=26379(Redis 哨兵的仿真接口,26379 为哨兵的缺省端口), server.password=454d51192b1704c60e19734ce6b38203(节点接入时的认证密码, 采用 SM4 加密)

1.4.2cluster.properties

然后修改 cluster.properties(该文件用于定义服务节点的工作状态,如集群状 态、哨兵状态等),cluster.properties 配置修改如下(哨兵模式):

WebSession.type=sentinel
WebSession.nodes=2
WebSession.node0=192.168.0.86:6200
WebSession.node1=192.168.0.87:6200

其中 WebSession.type 定义名为 WebSessio(n 对应服务节点中的 Server.Service) 的服务状态为哨兵模式。 WebSession.nodes 定义 2 个服务节点的地址和端口(此处配置需要和节点的 实际的运行配置对应)

1.4.3active.properties

检查 active.properties 文件中是否有 WebSession 的定义,例如:

acioweor_483kja03np4h8238G = WebSession, AuthService

其中的“acioweor_483kja03np4h8238G”是激活码,对应哨兵接入时的密码,等号后面的内容是该激活码对应的服务名称,多个名称用“,”分隔。

1.4.4sync.properties

如果有多台中心节点集群,可修改此配置文件。例如配置 2 台 Center 集群

sync.servers=2
sync.server1.host=192.168.0.86
sync.server1.port=6300
sync.server2.host=192.168.0.87
sync.server2.port=6300

本例可不配置此文件。

1.5 启动服务

分别启动中心节点和两个服务节点。 启动成功后,服务节点的 dynamic.xml 文件将被修改为类似如下

<?xml version="1.0" encoding="UTF-8"?>
  <Server>
    <Center>
       <Password>454d51192b1704c60e19734ce6b38203</Password>
       <EndPoint>
         <Host>node1</Host>
         <Port>6300</Port>
       </EndPoint>
    </Center>
  <Synchronize>
    <EndPoint>
      <Host>192.168.0.86</Host>
      <Port>6200</Port>
    </EndPoint>
    <EndPoint>
      <Host>192.168.0.87</Host>
      <Port>6200</Port>
      </EndPoint>
  </Synchronize>
</Server>

其中的 Synchronize 部分是从 Center 节点的 cluster.properties 配置中同步来

1.6 测试

1.6.1测试目的

使用 jedis 客户端的哨兵模式接入,验证 RDS 中心节点模拟哨兵的功能;采 用 jedis 多次接入,验证 RDS 模拟主节点功能。

本例使用 jedis 3.7.0(group: 'redis.clients', name: 'jedis', version: '3.7.0') 测试通过。

注:jedis 不同版本存在连接哨兵的 bug,例如 3.6.x 版本,无法采用有密码 方式连接哨兵。如果测试不成功请首先检查 jedis 版

1.6.2Jedis 接入(jedis 版本 3.7.0)

创建一个 java 类,输入如下代

public static void main(String args[]) {
    JedisSentinelPool pool = new JedisSentinelPool("WebSession",
    new HashSet<String>() {{
        this.add("192.168.0.86:26379");
    }}, (String) null, "acioweor_483kja03np4h8238G");
    Jedis jedis = pool.getResource();
    jedis.set("aaa", "ddd")
    System.out.println("aaa = " + jedis.get("aaa"));
    jedis.close();
    pool.close();
}

其中:“WebSession”是服务名,需要与中心节点、服务节点的配置一致;

“ 192.168.0.86:26379 ” 为 Center 节 点 仿 真 哨 兵 的 端 口 位 置 ; “acioweor_483kja03np4h8238G”是哨兵接入的密码,对应 Center 的 active.properties 中的配置。

运行程序,在服务器 1(192.168.0.86)上观察到如下日志:
?

CacheServer::set() Set aaa<> = ddd ok
CacheServer::process_get() Get aaa = 'ddd' ok.

在服务器 2(192.168.0.87)上观察到如下日志:

CacheServer::sync() Sync aaa<> = ddd at 1629777554660 ok(0).

日志分析可知,jedis 从哨兵端口获得了主节点的访问端口,并成功完成读写 操作,节点 2 获得同步数据。 注:Center 的哨兵功能不允许无密码接入,较低版本的 jedis

1.6.3验证主节点保持

继续上例测试,多次运行程序,观察读写操作均出现在节点 1 的日志中,节 点 2 中始终是同步日志,说明正常情况下每次接入的操作均发生在一个节点上, 另外的节点只负责备份。

1.6.4备份节点异常测试

将备份节点杀掉。再次运行上述程序,观察主节点日志有正常的读写记录, 说明服务正常。 将备份节点恢复,再次运行程序,读写仍然发生在主节点,说明备份节点的 启动停止不会引起主备切换。

1.6.5主节点异常测试

将主节点杀掉,再次运行程序,程序可正常完成。观察 2 节点日志发现,set 和 get 的操作日志出现在备份节点,说明中心节点做了主备切换。 将主节点恢复(等待其启动完成),再次运行程序,程序可正常完成。观察 节点日志,set 和 get 操作的日志出现在主节点(节点 1),节点 2 上仍然是同步 日志,说明 Center 将主节点切换回了节点 1。

文章来源:https://blog.csdn.net/LG_15011399296/article/details/135113224
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。