haproxyエージェントmongodb
mongodbクラスタが採用するreplication setモードは、少なくとも3つのノード以上である.mongodbプライマリノードdownの場合、ceilometerに再選択したプライマリノードを自動的に接続する方法について質問があります.
ここには2つの解法があり、どちらを採用するかは、需要によって異なります.
1.vipを用いてmongodbマスターノードを位置決めする
keepalivedを使ってvipを起こします.ここには2つのvip、vrrp_があります.instance VI_1 mongodb専用vip,vrrp_instance VI_2 OpenStack HA用のvip
vrrp script chk_mongo_primaryスクリプトは、このノードがmongo masterノードであるかどうかを検出するために使用され、もしそうであれば重み+2、vrrp_instance VI_1のvipはプリエンプト可能です.
mongodbプライマリノードが切り替わるとvrrp_instance VI_1のvipも切り替わります.
keepalived.confプロファイル
2、haproxyのtcp-checkを使って検出する
haproyx mongodb構成
ここで問題があります.haproxyモニタリングページに表示される非masterノードは、tcp-checkのためdownです.
send-binaryはどうしてそう書きますか?(tcpdumでバッグをつかみ、wireshark分析を手に入れる)
詳細はこちらを参照してください.https://blog.danman.eu/mongodb-haproxy/
http://serverfault.com/questions/625492/how-to-construct-a-mongodb-health-check-in-haproxy
最後にmongodbのuri自体がmulti hostをサポートしていることが分かった.mongodb://ceilometer:ceilometer@controller2,controller1,controller3/ceilometer?readPreference=primaryPreferred&replicaSet=rs0
詳細はmongodb公式を参照:https://docs.mongodb.com/manual/reference/connection-string/
ここには2つの解法があり、どちらを採用するかは、需要によって異なります.
1.vipを用いてmongodbマスターノードを位置決めする
keepalivedを使ってvipを起こします.ここには2つのvip、vrrp_があります.instance VI_1 mongodb専用vip,vrrp_instance VI_2 OpenStack HA用のvip
vrrp script chk_mongo_primaryスクリプトは、このノードがmongo masterノードであるかどうかを検出するために使用され、もしそうであれば重み+2、vrrp_instance VI_1のvipはプリエンプト可能です.
mongodbプライマリノードが切り替わるとvrrp_instance VI_1のvipも切り替わります.
keepalived.confプロファイル
! Configuration File for keepalived
vrrp_script chk_haproxy {
script "killall -0 haproxy"
interval 2
weight 2
}
# Define the script used to check if mongod is running
vrrp_script chk_mongod {
script "killall -0 mongod"
interval 2 # every two seconds
weight 2
}
# Define the script to see if the local node is the primary
vrrp_script chk_mongo_primary {
script "mongo --eval '(!!db.runCommand("ismaster")["ismaster"])?quit(0):quit(1)'"
interval 2 # every two seconds
weight 2
}
# Configuation for the virtual interface
vrrp_instance VI_1 {
interface br-ex
state node MASTER # SLAVE on the other nodes
priority 101 # 100 on other nodes
virtual_router_id 55
authentication {
auth_type PASS
auth_pass secret # Set this to some secret phrase
}
# The virtual ip address shared between the two nodes
virtual_ipaddress {
172.16.140.251/24
}
# Use the script above to check if we should fail over
track_script {
chk_mongod
chk_mongo_primary
}
}
vrrp_instance VI_2 {
interface br-ex
virtual_router_id 51
state BACKUP
priority 200
# if use it,the openstack api do not response normally
# use_vmac virtualmac
#
advert_int 1
dont_track_primary
nopreempt
authentication {
auth_type PASS
auth_pass password
}
virtual_ipaddress {
172.16.140.250/24
}
track_script {
chk_haproxy
}
notify /usr/local/bin/keepalivednotify.sh
}
2、haproxyのtcp-checkを使って検出する
haproyx mongodb構成
listen mongodb_cluster
bind openstack_vip:27017
option tcpka
option tcplog
option tcp-check
# MongoDB Wire Protocol
tcp-check send-binary 3a000000 # Message Length (58)
tcp-check send-binary EEEEEEEE # Request ID (random value)
tcp-check send-binary 00000000 # Response To (nothing)
tcp-check send-binary d4070000 # OpCode (Query)
tcp-check send-binary 00000000 # Query Flags
tcp-check send-binary 61646d696e2e # fullCollectionName (admin.$cmd)
tcp-check send-binary 24636d6400 # continued
tcp-check send-binary 00000000 # NumToSkip
tcp-check send-binary FFFFFFFF # NumToReturn
# Start of Document
tcp-check send-binary 13000000 # Document Length (19)
tcp-check send-binary 10 # Type (Int32)
tcp-check send-binary 69736d617374657200 # ismaster:
tcp-check send-binary 01000000 # Value : 1
tcp-check send-binary 00 # Term
tcp-check expect binary 69736d61737465720001 #ismaster True
server controller1 controller1:27017 check inter 2000 rise 2 fall 3
server controller2 controller2:27017 check inter 2000 rise 2 fall 3
ここで問題があります.haproxyモニタリングページに表示される非masterノードは、tcp-checkのためdownです.
send-binaryはどうしてそう書きますか?(tcpdumでバッグをつかみ、wireshark分析を手に入れる)
詳細はこちらを参照してください.https://blog.danman.eu/mongodb-haproxy/
http://serverfault.com/questions/625492/how-to-construct-a-mongodb-health-check-in-haproxy
最後にmongodbのuri自体がmulti hostをサポートしていることが分かった.mongodb://ceilometer:ceilometer@controller2,controller1,controller3/ceilometer?readPreference=primaryPreferred&replicaSet=rs0
詳細はmongodb公式を参照:https://docs.mongodb.com/manual/reference/connection-string/