tigase8集群化搭建按官方文档来看,是很容易整的,但实际上,坑不少。摸索了好几天终于把tigase8集群化搞出来了。
主要参考官方文档来安装:
集群配置
集群搭建
我的环境如下,在/etc/hosts文件中将地址和域名配置上去
IP地址 | 主机名和域名 |
192.168.43.23 | ubuntu |
192.168.43.24 | ubuntu24 |
先按正常方法把两个节点给安装好,安装方法可参考此专栏内的内容。然后两个节点分别创建好自己的管理员用户,此时将配置文件改成如下后再重启。
方案一,不同节点使用不同的用户数据源
23节点
admins = [
'admin@ubuntu'
]
'config-type' = 'default'
debug = [ 'server', 'cluster' ]
'default-virtual-host' = 'ubuntu'
dataSource () {
default () {
uri = 'mongodb://root:666@192.168.43.23:28017/tigasedb2'
}
'ubuntu' () {
uri = 'mongodb://root:666@192.168.43.23:28017/tigasedb2'
}
'ubuntu24' () {
uri = 'mongodb://root:666@192.168.43.23:28017/tigasedb3'
}
}
userRepository {
ubuntu () {}
ubuntu24 () {}
}
authRepository {
ubuntu () {
'data-source' = 'ubuntu'
}
ubuntu24 () {
'data-source' = 'ubuntu24'
}
}
http () {
setup () {
'admin-password' = '666'
'admin-user' = 'admin@ubuntu'
}
}
pubsub () {
trusted = [ 'http@{clusterNode}' ]
}
'cluster-mode' = true
'cluster-nodes' = [ 'ubuntu' , 'ubuntu24' ]
'cl-comp' {
'connect-all' = true
}
24节点
admins = [
'admin24@ubuntu24'
]
'config-type' = 'default'
debug = [ 'server', 'cluster' ]
'default-virtual-host' = 'ubuntu24'
dataSource () {
default () {
uri = 'mongodb://root:666@192.168.43.23:28017/tigasedb2'
}
'ubuntu' () {
uri = 'mongodb://root:666@192.168.43.23:28017/tigasedb2'
}
'ubuntu24' () {
uri = 'mongodb://root:666@192.168.43.23:28017/tigasedb3'
}
}
userRepository {
ubuntu () {}
ubuntu24 () {}
}
authRepository {
ubuntu () {
'data-source' = 'ubuntu'
}
ubuntu24 () {
'data-source' = 'ubuntu24'
}
}
http () {
setup () {
'admin-password' = '666'
'admin-user' = 'admin24@ubuntu24'
}
}
pubsub () {
trusted = [ 'http@{clusterNode}' ]
}
'cluster-mode' = true
'cluster-nodes' = [ 'ubuntu' , 'ubuntu24' ]
'cl-comp' {
'connect-all' = true
}
按这两个配置文件,集群就已经搭建成功了。成功的关键是,两个节点都要使用相同的默认数据库tigasedb2,这样可以确保全部节点都注册到相同数据库的tig_cluster_nodes表。这样两个节点才可以相互感知。
此时,使用psi客户端来测试发现无论是单聊还是群聊都可以正常了。注意,使用spark不行,可能是spark客户端对集群化不支持。
测试如下,使用psi,分别登录admin和admin24,设置host的时候,admin设置23节点,admin24设置为24节点,确保两个用户登录到不同的服务器。然后测试单聊和群聊,发现消息正常在集群中流转。
单聊测试图片
上面单聊测试没问题了,接下来测试一下群聊。先在23上创建一个固定群组testroom@muc.ubuntu
,从jid可以看出,这个群是ubuntu这个域名上创建的,我们使用psi先先admin加入到群聊。右键选中Groupchat-->Join Groupchat即可。填写内容如下
这样admin就可以顺利的进入testroom了,下一步,演示将admin24加入群聊,但是admin24是另一个服务节点的用户,是否可以顺利加入?
发现是可以正常进入群聊并收发消息的。
发布订阅功能经测试也是正常的。
方案二,使用相同数据库搭建集群
两个节点配置如下
23
admins = [
'admin@ubuntu'
]
'config-type' = 'default'
debug = [ 'server', 'cluster' ]
'default-virtual-host' = 'ubuntu'
dataSource () {
default () {
uri = 'mongodb://root:666@192.168.43.23:28017/tigasedb'
}
}
http () {
setup () {
'admin-password' = '666'
'admin-user' = 'admin@ubuntu'
}
}
pubsub () {
trusted = [ 'http@{clusterNode}' ]
}
'cluster-mode' = true
'cluster-nodes' = [ 'ubuntu' , 'ubuntu24' ]
'cl-comp' {
'connect-all' = true
}
24
admins = [
'admin24@ubuntu24'
]
'config-type' = 'default'
debug = [ 'server', 'cluster' ]
'default-virtual-host' = 'ubuntu24'
dataSource () {
default () {
uri = 'mongodb://root:666@192.168.43.23:28017/tigasedb'
}
}
http () {
setup () {
'admin-password' = '666'
'admin-user' = 'admin24@ubuntu24'
}
}
pubsub () {
trusted = [ 'http@{clusterNode}' ]
}
'cluster-mode' = true
'cluster-nodes' = [ 'ubuntu' , 'ubuntu24' ]
'cl-comp' {
'connect-all' = true
}
测试正常,不同域名注册的用户可以随意使用一个节点进行登录,然后消息收发均正常。群聊等均正常,这种安装方法好处是没有多数据库,管理不复杂。暂时没出现说有数据包循环的问题。另外,实测使用ip地址作为domain在集群化的时候会有问题。
高可用配置
高可用只需要配置nginx4层负载即可,使用keepalived做统一虚拟IP入口。nginx.conf配置如下
stream {
upstream tigaseSocket {
server 192.168.43.23:5222;
server 192.168.43.24:5222;
}
server {
listen 5222;
proxy_pass tigaseSocket;
}
}