端口
端口號 | 協議 | 作用 |
---|---|---|
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.ini
和default.d
文件夾。/Users/youruser/Library/Application Support/CouchDB2/etc/couchdb
下的default.ini
和default.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
文件壓縮默認snappy
。none
:不進行壓縮。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}
- Handler請求到
-
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
- 配置
AuthSession
Cookie的域屬性。默認為空。 - 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
選項要求代理身份認證
- true:
-
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"}]
- db_fragmentation:數據庫中數據壓縮率,包括元數據。計算方法:(file_size-data_size)/file_size*100
- view_fragmentation:數據庫中索引文件.....
- form,to:允許進行壓縮的時間段,格式:
HH:MM - HH:MM (HH in [0..23], MM in [0..59])
- strict_window:如果為true,並且在超時時間后還沒有壓縮完則終止壓縮。
- 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