Могу ли я узнать, кто сделал HTTP-запрос?

Вместо того, чтобы использовать команду для всех членов набора реплик, чтобы выяснить, какой из них является текущим основным, следует использовать строку подключения набора реплик в командной строке mongo. При желании вы можете включить учетные данные имени пользователя и пароля в строку подключения вместо использования отдельных параметров командной строки.

Пример использования оболочки MongoDB 3.6.3:

mongo "mongodb://USERNAME:PASSWORD@mngdb-cbt-stg-01:27058,mngdb-cbt-stg-02:27058/DATABASE?replicaSet=cdt_prod_playground" --eval "db.${file%.*}.remove({})"

Вам не нужно перечислять все элементы вашего набора реплик в строке подключения. Я использовал два в своем примере выше, так как это должно гарантировать обнаружение основного в наборе реплик из трех участников (, которому требуется 2/3 членов с правом голоса, доступных для обслуживания основного ). Драйвер/клиент определит текущие элементы, если вы включите имя replicaSetв строку подключения и хотя бы один из элементов в строке подключения исправен.

См. Формат URI строки подключения для справки о доступных параметрах.

Также обратите внимание, что вызов db.collection.remove({})приведет к удалению отдельных документов при сохранении определений индекса. Если вам нужно удалить значительный объем данных коллекции, будет быстрее вызвать db.colellection.drop()и воссоздать все необходимые индексы.

The reason is I need to do this is because I don't know which host is the replica set PRIMARY, so I just have to test it brute force, because I don't have the authorization to run rs.status()

Если вам нужно определить текущий первичный сервер программно, вы можете использовать командуisMaster. Эта команда используется драйверами и клиентами MongoDB (, такими как оболочка mongo), как часть начального согласования соединения. При подключении к члену набора реплик вывод isMasterвключает primaryи другие сведения о текущем состоянии набора реплик .

Как и в MongoDB 3.6, команда isMasterне требует аутентификации, поскольку она используется для предоставления информации, необходимой драйверам/клиентам для обнаружения сервера и согласования аутентифицированного соединения.

0
12.03.2020, 05:59
1 ответ

если вы используете сервер httpd, то у вас есть журнал http, это может помочь вам с вашим запросом (есть дополнительный мод для мода Apache _dumpio может обеспечить лучшую обратную связь ), и Я предлагаю вам запустить эту команду по запросу, чтобы лучше узнать, что в настоящее время запрашивает http на вашем сервере

# tcpdump filter for HTTP GET 
sudo tcpdump -s 0 -A 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420'

# tcpdump filter for HTTP POST 
sudo tcpdump -s 0 -A 'tcp dst port 80 and (tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354)'

# tcpdump for specific client
tcpdump -vvvnn port 80 and host ip_addr_of_client -i any
0
28.04.2021, 23:20

Теги

Похожие вопросы