CouchDB學習一


端口

端口號 協議 作用
5984 tcp 標椎集群端口用於所有的HTTP API請求
5986 tcp 用於管理員對節點與分片的管理
4369 tcp Erlang端口到daemon的映射

配置介紹

配置文件

CouchDb從以下位置按順序讀取配置文件

  • etc/fefault.ini
  • etc/default.d/*.ini
  • etc/local.ini
  • etc/local.d/*.ini

類UNIX系統:/opt/couchdb/
Windows系統:C:\CouchDB
maxOS:Applications/Apache CouchDB.app/Contents/Resources/couchdbx-core/etc下的default.inidefault.d文件夾。/Users/youruser/Library/Application Support/CouchDB2/etc/couchdb下的default.inidefault.d文件夾.

通過HTTP API修改參數

集群

curl -X PUT http://localhost:5984/_node/name@host/_config/uuids/algorithm -d '"random"'

單節點

curl -X PUT http://localhost:5984/_node/_local/_config/uuids/algorithm -d '"random"'

基本配置

couchdb配置

curl地址:http://localhost:5984/_node/<name@host>/_config/couchdb/后接參數.

  • attachment_stream-buffer_size
    緩沖池大小,越大讀性能越好,但增加寫操作的響應時間.
  • database_dir
    數據庫文件地址
  • default_security
    默認的安全級別admin_local. everyone:任何人都可以讀和寫。admin_only:只有admin可以讀和寫.admin_local:被分片的數據庫可以被任何人讀和寫,但分片只可以被admin讀和寫.
  • delayed_commits
    延遲提交 false保證同步.true可以提高性能。
  • file_compression
    文件壓縮默認snappynone:不進行壓縮。snappy:使用谷歌的snappy.deflate_N:使用zlib,N為壓縮等級從1(速度最快,壓縮率最低)到9(速度最慢,壓縮率最高).
  • fsync_options
    緩沖區內的文件是否與操作系統同步刷新到硬盤中.一般不需要修改.fsync_options=[before_header,after_header,on_file_open]
  • max_dbs_open
    同時打開數據庫的最大數量默認為100.
  • os_process_timeout
    處理超時時間默認5000ms
  • uri_file
    該參數指定的文件包含完整的用來訪問CouchDB數據庫實例的URI.默認值:/var/run/couchdb/couchdb.uri
  • users_db_suffix
    用戶數據庫后綴,默認_users.
  • util_driver_dir
    二進制驅動的位置。
  • uuid
    CouchDb服務器實例的唯一標識符
  • view_index_dir
    CouchDB視圖索引文件的位置。默認值:/var/lib/couchdb
  • maintenance_mode
    CouchDb節點可以使用的兩種維護模式 true:該節點不會響應集群中其他節點的請求並且/_up端點將返回404響應.nolb:/_up端點將返回404響應.false:該節點正常響應200。
  • max_document_size
    文檔的最大的大小默認為4GB

cluster 配置

集群選項

curl地址:http://localhost:5984/_node/<name@host>/_config/cluster/后接參數.

  • q
    新創建的數據庫的分片數量,默認為8
  • n
    集群中每一個數據庫文檔的副本數。單節點為1,每個節點最多僅持有一個副本。
  • placement
  • seedlist
    以逗號分隔的節點名稱列表,當前節點應與之通信加入集群。

couch_peruser

couch_peruser配置

curl地址:http://localhost:5984/_node/<name@host>/_config/couch_peruser/后接參數.

  • enable
    如果設置為true,則_users為私有的數據庫。且只允許當前節點操作。
  • delete_dbs
    如果設置為true,當用戶被刪除,則相關的數據庫也一同刪除。

CouchDB HTTP 服務器

HTTP Server配置

[chttpd]
curl地址:http://localhost:5984/_node/<name@host>/_config/chttpd/后接參數.

  • bind_address :集群端口綁定的IP地址
    • 127.0.0.1
    • 0.0.0.0:任何IP地址
    • ::1:IPV6
    • :: 任何IPV6的地址
  • port:集群端口號
    • 5984:默認
    • 0:可使用任何端口號
  • prefer_minimal:如果一個請求含有請求頭:Prefer,則只返回prefer_minimal配置列表的頭部信息
  • authentication_handlers:CouchDB使用的認證頭部信息。可以使用第三方插件進行擴展。
    • {chttpd_auth, cookie_authentication_handler}: Cookie認證;
    • {couch_httpd_auth, proxy_authentication_handler}:代理認證;
    • {chttpd_auth, default_authentication_handler}: 基本認證:
    • {couch_httpd_auth, null_authentication_handler}:取消認證

[httpd]
curl地址:http://localhost:5984/_node/<name@host>/_config/httpd/后接參數.
在CouchDB2.X版本,這一部分默認使用5986為默認端口。用於管理員任務與系統維護。應該總是綁定私有的LAN 127.0.0.1地址。

  • allow_jsonp

    • 是否支持JSONP,默認false
  • bind_address

    • 本地節點可獲得的IP地址。建議總是使用127.0.0.1或IPV6 ::1
  • changes_timeout

    • 默認超時時間默認為6000ms
  • config_whitelist

    • 配置信息修改白名單。只有白名單內的值可以通過CONFIG API修改配置。為了允許管理員通過HTTP修改該值,需要包括{httpd,config——whitelist}自己。
    • config_whitelist = [{httpd,config_whitelist}, {log,level}, {etc,etc}]
  • default_handler

    • 具體的默認HTTP請求Handler
    • default_handler = {couch_httpd_db, handle_request}
  • enable_cors

    • 控制CORS特性,默認false
  • port

    • 定義監聽的端口號 默認5986
  • redirect_vhost_handler

    • Handler請求到virtual hosts的定制的默認功能
    • redirect_vhost_handler = {Module, Fun}
  • server_options

    • 可以被添加到配置文件的MochiWeb組件的服務器選項。
    • server_options = [{backlog, 128}, {acceptor_pool_size, 16}]
  • secure_rewrites

    • 是否允許通過子域隔離數據庫。
  • socket_options

    • CouchDB監聽Socket選項。可以定義為元組列表.
    • socket_options = [{sndbuf, 262144}, {nodelay, true}]
  • server_options

    • CouchDB中mochiweb acceptor池中任何socket服務器選項,可以定義為元組列表.
    • server_options = [{recbuf, undefined}]
  • vhost_global_handlers

    • 對於virtual hosts全局的Handlers列表
    • vhost_global_handlers = _utils, _uuids, _session, _users
  • x_forwarded_host

    • 用於轉發HOST頭部字段的原始值。例如一個轉發代理在請求Couchd前重寫Host頭部信息到內部主機。
    • x_forwarded_host = X-Forwarded-Host
  • x_forwarded_proto

    • 認證原始的HTTP協議
  • x_forwarded_ssl

    • 用於告訴CouchDB使用https代替http
  • enable_xframe_options

    • 控制是否開啟特性
  • WWW-Authenticate

    • 設置在基本認證下不具備權限的請求頭部信息
  • max_http_request_size

    • 限制HTTP請求體最大值大小默認4GB

HTTPS (SSL/TLS)選項

CouchDb支持本地TLS/SSL,不需要使用代理服務器.HTTPS設置比較容器,只需要兩個文件:一個證書個一個私鑰。可以通過OpenSSL命令生成自簽名證書。

shell> mkdir /etc/couchdb/cert
shell> cd /etc/couchdb/cert
shell> openssl genrsa > privkey.pem
shell> openssl req -new -x509 -key privkey.pem -out couchdb.pem -days 1095
shell> chmod 600 privkey.pem couchdb.pem
shell> chown couchdb privkey.pem couchdb.pem

編輯CouchDB配置文件local.ini

enable = true
cert_file = /etc/couchdb/cert/couchdb.pem
key_file = /etc/couchdb/cert/privkey.pem

使用自簽名證書可以通過參數-k忽略警告信息

curl -k https://127.0.0.1:6984

[ssl]
curl地址:http://localhost:5984/_node/<name@host>/_config/ssl/后接參數.

  • cacert_file
    • 包含PEM編碼的CA證書路徑,CA證書用於構建服務器證書鏈。用於客戶端權限認證。
  • cert_file
    • 包含用戶證書文件的路徑
  • key_file
    • 包含用戶PEM編碼的私鑰文件路徑
  • password
    • 包含用戶密碼的字符串,當用戶私鑰通過密碼保護時使用
  • ssl_certifacate_max_depth
    • 最大的節點證書深度
  • verify_fun
    • 如果不指定具體的驗證功能,則使用默認的驗證功能
  • verify_ssl_certificates
    • 如果為true則驗證節點證書
  • fail_if_no_peer_cert
    • true:如果客戶端沒有發送證書,則終止TLS/SSL握手
    • false:只當客戶端發送無效證書時,終止TLS/SSL握手
  • secure_renegotiate
  • ciphers
    • 設置erlang格式的被支持的加密套件
    • ciphers = ["ECDHE-ECDSA-AES128-SHA256", "ECDHE-ECDSA-AES128-SHA"]
  • tls_versions
    • 設置允許的SSL/TLS協議版本列表
    • tls_versions = [tlsv1 | 'tlsv1.1' | 'tlsv1.2']

跨域資源分享

跨域資源分享.比如瀏覽器中運行js的網頁通過AJAX請求到不同的域。不需要破壞任何一方的安全。
一個典型的用例是通過靜態網頁通過CDN請求另一資源。比如CouchDB實例。這避免了使用JSONP或類似的變通方法來檢索和托管內容的中間代理。
CouchDB實例可以接受直接的連接保護數據庫和實例。不會造成瀏覽器功能由於相同的域的限制被阻塞。CORS支持當前90%的瀏覽器。
[cors]
curl地址:http://localhost:5984/_node/<name@host>/_config/httpd/后接參數.

  • enable_cors
    需要將httpd/enable_cors選項設置為true
    curl地址:http://localhost:5984/_node/<name@host>/_config/cors/后接參數.

  • credentials

    • 默認情況下,請求和響應中均不包含身份驗證標頭或cookie。
  • origins

    • 通過,分隔接受的原始的URL列表。不能同時設置origins=*和credentials=true
  • headers

    • 通過,分隔的可接受的請求頭列表。
  • methods

    • 可接受的請求方法
  • max_age

    • Access-Control-Max-Age

虛擬主機

虛擬主機
CouchDB可以基於Host請求頭映射請求到綁定同一個IP地址的不同的位置。
允許同一機器上不同虛擬機映射到不同的數據庫或者是設計文檔。
通過為域名添加一個CNAME指針到DNS。在測試或者開發環境下,添加一個實體到hosts文件,如類UNIX系統:

127.0.0.1       couchdb.local

最后添加一個實體到配置文件的[vhosts]部分:

couchdb.local:5984 = /example
*.couchdb.local:5984 = /example

如果CouchDB監聽在默認的HTTP端口80,或者之前設置了代理,則不需要在vhosts中指定端口號.
第一行將重寫請求以顯示示例數據庫的內容。 僅當Host標頭為couchdb.local且不適用於CNAME時,此規則才有效,另一方面,第二條規則將所有CNAME與示例db匹配,這樣www.couchdb.local和db.couchdb.local都可以使用。
[vhosts]
curl地址:http://localhost:5984/_node/<name@host>/_config/vhosts/后接參數.

  • couchdb.local

認證與權限

服務器管理員

默認的CouchDB提供了管理員級別的可以訪問所有連接的用戶。配置在Admin Party部分。不應該在生產環境中使用。可以在創建第一個管理員賬戶后刪除這一部分。CouchDB服務管理員和密碼沒有存儲在_users數據庫。但是CouchDB加載ini文件時可以在最后發現admin部分。這個文件(可能為etc/local.ini或者etc/local.d/10-admins.ini在Debian/Ubuntu系統從包中安裝時發現。)應該安全並且只能由系統管理員可讀.
管理員可以直接添加到admin部分,當CouchDB重新啟動時,密碼將會自動加密。也可以通過HTTP接口創建管理員賬戶不需要重啟CouchDB。HTTP/_node/{node-name}/_config/admins地址支持查詢,刪除或者是創建新管理員賬戶。
[admins]
curl地址:http://localhost:5984/_node/<name@host>/_config/admins/后接參數.

認證配置

[chttpd]
curl地址:http://localhost:5984/_node/<name@host>/_config/chttpd/后接參數.

  • require_valid_user
    • true:不允許來自匿名用戶的任何請求

[couch_httpd_auth]
curl地址:http://localhost:5984/_node/<name@host>/_config/couch_httpd_auth/后接參數.

  • allow_persistent_cookies

    • 使得Cookie持久性。
  • cookie_domain

    • 配置AuthSessionCookie的域屬性。默認為空。
    • cookie_domain=example.com
  • auth_cache_size

    • 內容中用戶對象緩存數量,減少硬盤讀寫,默認50
  • authentication_redirect

    • 權限成功驗證后,客戶端接受text/html響應情況下具體的重定向的位置。
    • authentication_redirect = /_utils/session.html
  • iterations

    • 由PBKDF2算法哈希的密碼迭代的數量。
  • min_iterations

    • 最小迭代的數量
  • max_iterations

    • 最大迭代的數量
  • proxy_use_secret

    • true:couch_httpd_auth/secret選項要求代理身份認證
  • public_fields

    • 用戶文檔中可以被任何用戶讀的由逗號分隔的字段名稱。
    • public_fields = first_name, last_name, contacts, url
  • require_valid_user

    • true:不允許來自匿名用戶的任何請求
  • secret

    • 用於代理身份認證與Cookie身份認證的secret
  • timeout

    • 最后一次請求之后session超時過期時間默認600
  • users_db_public

    • 允許用戶查看所有用戶文檔,默認情況下,只有管理員可以查看所有用戶的文檔,用戶只能查看自己的文檔。
  • x_auth_roles

    • HTTP請求頭包含用戶的角色,用逗號分隔。用於代理身份認證
  • x_auth_token

    • HTTP請求頭包含用戶的token,用逗號分隔。用於代理身份認證
  • x_auth_username

    • HTTP請求頭包含用戶的用戶名,用逗號分隔。用於代理身份認證

壓縮配置

數據庫壓縮配置

[database_compaction]
curl地址:http://localhost:5984/_node/<name@host>/_config/database_compaction/后接參數.

  • doc_buffer_size
    • 具體的拷貝緩沖區大小
  • checkpoint_after
    • 在具體數量的比特后激活檢查點拷貝到壓縮數據庫。

壓縮程序規則

[compactions]
curl地址:http://localhost:5984/_node/<name@host>/_config/compactions/后接參數.
列表中的規則確定什么時候運行自動壓縮。配置可以是指定數據庫或者是全局的。格式如下:

database_name = [ {ParamName, ParamValue}, {ParamName, ParamValue}, ... ]
_default = [ {ParamName, ParamValue}, {ParamName, ParamValue}, ... ]
_default = [{db_fragmentation, "70%"}, {view_fragmentation, "60%"}, {from,"23:00"}, {to, "04:00"}]
  1. db_fragmentation:數據庫中數據壓縮率,包括元數據。計算方法:(file_size-data_size)/file_size*100
  2. view_fragmentation:數據庫中索引文件.....
  3. form,to:允許進行壓縮的時間段,格式:HH:MM - HH:MM (HH in [0..23], MM in [0..59])
  4. strict_window:如果為true,並且在超時時間后還沒有壓縮完則終止壓縮。
  5. parallel_view_compaction:是否數據和視圖同時進行壓縮。

壓縮程序配置

[compaction_daemon]
curl地址:http://localhost:5984/_node/<name@host>/_config/compaction_daemon/后接參數.

  • check_interval
    • 兩次檢查數據庫和視圖索引是否需要被壓縮的時間間隔,默認為3600
  • min_file_size
    • 如果數據庫或者視圖索引文件大小小於該值,則不進行壓縮。
  • snooze_period_ms

視圖壓縮選項

[view_compaction]
curl地址:http://localhost:5984/_node/<name@host>/_config/view_compaction/后接參數.

  • keyvalue_buffer_size
    • 壓縮時具體的最大拷貝緩沖區大小.

日志

日志選項

[log]
curl地址:http://localhost:5984/_node/<name@host>/_config/log/后接參數.

  • writer
    • stderr:日志信息發送到stderr(默認)
    • file:日志信息存儲到文件
    • syslog:日志信息發送到syslog daemon
  • file
    • 日志保存到文件的具體的位置(默認/var/log/couchdb/couch.log)
  • write_buffer
    • 寫日志緩沖區大小默認0
  • write_delay
    • 寫日志到硬盤延遲默認為0
  • level
    • 日志級別
    • debug
    • info:包括HTTP請求,啟動外部程序
    • notice
    • warning,warn:警告信息,例如硬盤空間不足
    • error,err:只輸出錯誤信息
    • critical crit
    • alert
    • emergency emerg
    • none:不輸入任何日志
  • include_sasl
    • 是否在日志中包含SASL信息
  • syslog_host
    • 具體的syslog 主機將日志發送到的位置默認localhost
  • syslog_port
    • 當發送日志信息時連接的syslog端口
  • syslog_appid
    • 具體的應用名稱默認couchdb
  • syslog_facility

復制者

數據庫復制配置

[replicator]
curl地址:http://localhost:5984/_node/<name@host>/_config/replicator/后接參數.

  • max_jobs
    • 活躍的運行的復制任務數量。
  • interval
  • max_churn
  • update_docs
  • worker_batch_size
  • worker_processes
  • http_connections
  • connection_timeout
  • retries_per_request
  • socket_options
  • checkpoint_interval
  • use_checkpoints
  • cert_file
  • key_file
  • password
  • verify_ssl_certificates
  • ssl_trusted_certificates_file
  • ssl_certificate_max_depth
  • auth_plugins

Query Servers

Query Servers Definition

[query_servers]
curl地址:http://localhost:5984/_node/<name@host>/_config/query_servers/后接參數.

Query Servers Configuration

[query_sercver_config]
curl地址:http://localhost:5984/_node/<name@host>/_config/query_sercver_config/后接參數.

  • commit_freq
  • os_process_limit
  • os_process_soft_limit
  • reduce_limit

Native Erlang Query Server

[native_query_servers]
curl地址:http://localhost:5984/_node/<name@host>/_config/native_query_servers/后接參數.

CouchDB Internal Services

CouchDB Daemonized Mini Apps

[daemons]
curl地址:http://localhost:5984/_node/<name@host>/_config/daemons/后接參數.

  • auth_cache
  • compaction_daemon
  • external_manager
  • httpd
  • index_server
  • query_servers
  • replicator_manager
  • stats_aggregator
  • stats_collector
  • uuids
  • vhosts

Miscellaneous Parameters

Configuration of Attachment Storage

[attachments]
curl地址:http://localhost:5984/_node/<name@host>/_config/attachments/后接參數.

  • compression_level
  • compressible_types

Statistic Calculation

[stats]
curl地址:http://localhost:5984/_node/<name@host>/_config/stats/后接參數.

  • rate
  • samples

UUIDs Configuration

[uuids]
curl地址:http://localhost:5984/_node/<name@host>/_config/uuids/后接參數.

  • algorithm
  • utc_id_suffix
  • max_count

Vendor information

[vendor]
curl地址:http://localhost:5984/_node/<name@host>/_config/vendor/后接參數.

Content-Security_Policy

[csp]
curl地址:http://localhost:5984/_node/<name@host>/_config/csp/后接參數.

  • enable
  • header_value

操作

節點操作

查看所有節點

curl -u admin:adminpw -X GET http://localhost:5984/_membership
{
    "all_nodes":[   # 當前節點所知道的節點
        "node1@xxx.xxx.xxx.xxx"],
    "cluster_nodes":[ #當前節點所連接的節點
        "node1@xxx.xxx.xxx.xxx"],
}

添加一個節點

curl -u admin:adminpw -X PUT http://localhost:5986/_nodes/node2@yyy.yyy.yyy.yyy -d {}

刪除一個節點

#首先獲取關於文檔的revision
curl -u admin:adminpw -X GET "http://xxx.xxx.xxx.xxx:5986/_nodes/node2@yyy.yyy.yyy.yyy"
{"_id":"node2@yyy.yyy.yyy.yyy","_rev":"1-967a00dff5e02add41820138abb3284d"}	
#刪除節點
curl -u admin:adminpw -X DELETE http://localhost:5986/_nodes/node2@yyy.yyy.yyy.yyy?rev=1-967a00dff5e02add41820138abb3284d

數據庫操作

創建數據庫

數據庫名字不支持大寫字符,只支持[a-z],[0-9],以及特殊字符:_ $ ( ) + - /

#創建一個數據庫名字為db_name 
curl -u admin:adminpw -X PUT http://localhost:5984/db_name?q=4&n=2

刪除數據庫

curl -u admin:adminpw -X DELETE http://localhost:5984/db_name


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM