3.9.2
一个Leader,两个Follower
。/data/arango
在3个节点上分别安装ArangoDB,执行安装命令:
# Ubuntu系统安装命令
dpkg -i arangodb3_3.9.2-1_amd64.deb
# CentOS系统安装命令
rpm -ivh arangodb3-3.9.2-1.0.x86_64.rpm
Ubuntu系统使用deb包安装过程中会出现如,设置密码、是否自动更新数据库文件、更新前是否自动备份的对话框,根据需要设置即可。 CentOS系统使用rpm包安装过程会为arangodb的root用户设置一个默认的密码,可以用 arango-secure-installation 命令重新设置一下。
sudo arango-secure-installation
注意:安装过程中设置的密码仅适用于单机启动情况下root用户的登陆密码,部署集群、主动故障转移等需要另外设置密码
ArangoDB安装完成后会自动启动,输入以下命令查看ArangoDB的状态
systemctl status arangodb3
若状态表示已经启动,则先关闭单机的ArangoDB服务
systemctl stop arangodb3
安装完成后修改/etc/arangodb3/arangod.conf
中endpoint配置项为
endpoint = tcp://0.0.0.0:8529
生成用于主动故障转移机器间的jwt认证的密钥文件,在一个节点上生成然后同步至另外两个节点
# 在/etc目录下创建arangodb目录
mkdir /etc/arangodb
# 在arangodb目录下生成秘钥文件
arangodb create jwt-secret --secret=arangodb.secret
# 给密钥文件设置只读权限
chmod 400 arangodb.secret
注意:这个密钥文件要同步到所有节点,保持一致,一定不要多次生成
1.以主动故障转移的方式在所有节点上启动ArangoDB服务
使用Starter –starter.mode=activefailover选项 ,启动 Active Failover 设置。在3个节点上分别执行启动命令,默认前台启动。
arangodb --starter.mode=activefailover --starter.data-dir=/data/arangodb --auth.jwt-secret=/etc/arangodb/arangodb.secret --starter.join bigdata10,bigdata11,bigdata12
为避免不必要的故障转移,请注意可以增加 –agents.agency.supervision-grace-period选项,将启动选项的值增加到 30 秒以上可能是有意义的。
若想要后台启动则需要在启动时加一个 start
arangodb start --starter.mode=activefailover --starter.data-dir=/data/arangodb --auth.jwt-secret=/etc/arangodb/arangodb.secret --starter.join bigdata10,bigdata11,bigdata12
2.查看 leader 和可用节点
以主动故障转移的方式启动 ArangoDB 后,可以通过询问任何涉及的单服务器实例来确定 leader。执行以下命令,第一次启动默认无密码,该命令将返回所有可用的端点,第一个端点被定义为当前的Leader
curl --user "root:" -X GET http://192.168.11.13:8529/_api/cluster/endpoints && echo
构成:
X-Arango-Allow-Dirty-Read: true
时才允许读取请求,Follower将始终拒绝来自客户端应用程序的写入请求,直到Follower成为新的master(发生故障转移)。说明:
在主动故障转移部署的情况下,应按以下方式配置驱动程序:
LoadBalancingStrategy.NONE
或根本不设置,因为这是默认设置acquireHostList
应该设置为true
。acquireHostList
配置来获取集群中所有已知主机的列表,然后它可以在需要回退时使用此列表。这样做只需要手动配置一台当前可以连接上的主机即可。ArangoDB arangoDB = new ArangoDB.Builder()
.host("host", 8529)
.user("admin")
.password("admin")
.loadBalancingStrategy(LoadBalancingStrategy.NONE)
.acquireHostList(true)
.build();
conn, err := http.NewConnection(http.ConnectionConfig{
Endpoints: []string{"http://192.168.11.13:8529","http://192.168.11.14:8529","http://192.168.11.15:8529"},
TLSConfig: &tls.Config{ /*...*/ },
})
if err != nil {
fmt.Println("err :",err.Error())
}
client, err := driver.NewClient(driver.ClientConfig{
Connection: conn,
Authentication: driver.BasicAuthentication("admin", "admin"),
})
if err != nil {
fmt.Println("err :",err.Error())
}
Reference: