第十九周-文檔數據庫MongoDB、消息隊列和微服務

?1. 完成redis單機安裝,哨兵模式安裝,主從安裝,集群安裝

單機安裝

#安裝依賴包
[root@centos8~]#yum -y install gcc make jemalloc-devel
#如果支持systemd需要安裝下面包
[root@ubuntu2204 ~]#apt update && apt -y install make gcc libjemalloc-dev
libsystemd-dev
[root@ubuntu2004 ~]#apt update && apt -y install make gcc libjemalloc-dev
libsystemd-dev
[root@ubuntu1804 ~]#apt update && apt -y install make gcc libjemalloc-dev
libsystemd-dev
[root@centos8 ~]#yum -y install gcc jemalloc-devel systemd-devel


[root@centos7 ~]#yum -y install gcc jemalloc-devel systemd-devel
#下載源碼
[root@centos8 ~]#wget http://download.redis.io/releases/redis-6.2.4.tar.gz
[root@centos8 ~]#tar xvf redis-6.2.4.tar.gz
#編譯安裝
[root@centos8 ~]#cd redis-6.2.4/
#如果支持systemd,需要執行下面
[root@centos8 redis-6.2.4]#make -j 2 USE_SYSTEMD=yes PREFIX=/apps/redis
install
#如果不支持systemd,執行下面
[root@centos8 redis-6.2.4]#make -j 2 PREFIX=/apps/redis install #指定redis安裝目錄
#配置環境變量
[root@centos8 ~]#echo 'PATH=/apps/redis/bin:$PATH' >> /etc/profile
[root@centos8 ~]#. /etc/profile
#目錄結構
[root@centos8 ~]#tree /apps/redis/
/apps/redis/
└── bin
├── redis-benchmark
├── redis-check-aof
├── redis-check-rdb
├── redis-cli
├── redis-sentinel -> redis-server
└── redis-server
1 directory, 6 files
#準備相關目錄和配置文件
[root@centos8 ~]#mkdir /apps/redis/{etc,log,data,run} #創建配置文件、日志、數據等目錄
#默認配置文件有問題,需要修改
[root@centos8 redis-6.2.4]#cp redis.conf /apps/redis/etc/

哨兵安裝

#在所有主從節點執行
#基于包安裝
[root@centos8 ~]#yum -y install redis
[root@ubuntu2004 ~]#apt -y install redis redis-sentinel
#所有節點的masterauth和requirepass必須相同
[root@centos8 ~]#vim /etc/redis.conf
bind 0.0.0.0
masterauth "123456"
requirepass "123456"
#或者非交互執行
[root@centos8 ~]#sed -i -e 's/bind 127.0.0.1/bind 0.0.0.0/' -e 's/^# masterauth
.*/masterauth 123456/' -e 's/^# requirepass .*/requirepass 123456/'
/etc/redis.conf
#在所有從節點執行
[root@centos8 ~]#echo "replicaof 10.0.0.8 6379" >> /etc/redis.conf
#在所有主從節點執行
[root@centos8 ~]#systemctl enable --now redis

配置slave1

[root@redis-slave1 ~]#redis-cli -a 123456
Warning: Using a password with '-a' or '-u' option on the command line interface
may not be safe.
127.0.0.1:6379> REPLICAOF 10.0.0.8 6379
OK
127.0.0.1:6379> CONFIG SET masterauth "123456"
OK
127.0.0.1:6379> INFO replication
# Replication
role:slave
master_host:10.0.0.8
master_port:6379
master_link_status:up
master_last_io_seconds_ago:4
master_sync_in_progress:0
slave_repl_offset:140
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:8fdca730a2ae48fb9c8b7e739dcd2efcc76794f3
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:140
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:99
repl_backlog_histlen:42

配置slave2

[root@redis-slave2 ~]#redis-cli -a 123456
Warning: Using a password with '-a' or '-u' option on the command line interface
may not be safe.
127.0.0.1:6379> REPLICAOF 10.0.0.8 6379
OK
127.0.0.1:6379> CONFIG SET masterauth "123456"
OK
127.0.0.1:6379> INFO replication
# Replication
role:slave
master_host:10.0.0.8
master_port:6379
master_link_status:up
master_last_io_seconds_ago:3
master_sync_in_progress:0
slave_repl_offset:182
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:8fdca730a2ae48fb9c8b7e739dcd2efcc76794f3
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:182
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:15
repl_backlog_histlen:168
127.0.0.1:6379>

sentinel 配置
#如果是編譯安裝,在源碼目錄有sentinel.conf,復制到安裝目錄即可,
如:/apps/redis/etc/sentinel.conf
[root@ubuntu2204 ~]#cp redis-7.0.5/sentinel.conf /apps/redis/etc/sentinel.conf
[root@centos8 ~]#cp redis-6.2.5/sentinel.conf /apps/redis/etc/sentinel.conf
[root@ubuntu2204 ~]#chown redis.redis /apps/redis/etc/sentinel.conf
#編譯安裝修改配置文件
[root@ubuntu2204 ~]#vim /apps/redis/etc/sentinel.conf
[root@ubuntu2204 ~]#grep -Ev "#|^$" /apps/redis/etc/sentinel.conf
protected-mode no
port 26379
daemonize no
pidfile "/apps/redis/run/redis-sentinel.pid"
logfile "/apps/redis/log/redis-sentinel.log"
dir "/tmp"
sentinel monitor mymaster 10.0.0.102 6379 2
#mymaster是集群的名稱,此行指定當前mymaster集群中master服務器的地址和端口
#2為法定人數限制(quorum),即有幾個sentinel認為master down了就進行故障轉移,一般此值是所有
sentinel節點(一般總數是>=3的 奇數,如:3,5,7等)的一半以上的整數值,比如,總數是3,即3/2=1.5,
取整為2,是master的ODOWN客觀下線的依據
sentinel auth-pass mymaster 123456
#mymaster集群中master的密碼,注意此行要在上面行的下面,注意:要求這組redis主從復制所有節點的密
碼是一樣的
sentinel down-after-milliseconds mymaster 3000
#判斷mymaster集群中所有節點的主觀下線(SDOWN)的時間,單位:毫秒,建議3000
acllog-max-len 128
sentinel deny-scripts-reconfig yes
sentinel resolve-hostnames no
sentinel announce-hostnames no
#包安裝修改配置文件
[root@centos8 ~]#vim /etc/redis-sentinel.conf
bind 0.0.0.0
port 26379
daemonize yes
pidfile "redis-sentinel.pid"
logfile "sentinel_26379.log"
dir "/tmp" #工作目錄
sentinel monitor mymaster 10.0.0.8 6379 2
#mymaster是集群的名稱,此行指定當前mymaster集群中master服務器的地址和端口
#2為法定人數限制(quorum),即有幾個sentinel認為master down了就進行故障轉移,一般此值是所有
sentinel節點(一般總數是>=3的 奇數,如:3,5,7等)的一半以上的整數值,比如,總數是3,即3/2=1.5,
取整為2,是master的ODOWN客觀下線的依據
sentinel auth-pass mymaster 123456
#mymaster集群中master的密碼,注意此行要在上面行的下面,注意:要求這組redis主從復制所有節點的密
碼是一樣的
sentinel down-after-milliseconds mymaster 30000
#判斷mymaster集群中所有節點的主觀下線(SDOWN)的時間,單位:毫秒,建議3000
sentinel parallel-syncs mymaster 1
#發生故障轉移后,可以同時向新master同步數據的slave的數量,數字越小總同步時間越長,但可以減輕新
master的負載壓力
sentinel failover-timeout mymaster 180000
#所有slaves指向新的master所需的超時時間,單位:毫秒
sentinel deny-scripts-reconfig yes #禁止修改腳本
logfile /var/log/redis/sentinel.log
三個哨兵服務器的配置都如下
[root@redis-master ~]#grep -vE "^#|^$" /etc/redis-sentinel.conf
port 26379
daemonize no
pidfile "/var/run/redis-sentinel.pid"
logfile "/var/log/redis/sentinel.log"
dir "/tmp"

sentinel monitor mymaster 10.0.0.8 6379 2
sentinel auth-pass mymaster 123456
sentinel down-after-milliseconds mymaster 3000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
sentinel deny-scripts-reconfig yes
#修改此行
#增加此行
#修改此行

#注意此行自動生成必須唯一,一般不需要修改,如果相同則修改此值需重啟redis和sentinel服務
sentinel myid 50547f34ed71fd48c197924969937e738a39975b
.....
# Generated by CONFIG REWRITE
protected-mode no
supervised systemd
sentinel leader-epoch mymaster 0
sentinel known-replica mymaster 10.0.0.28 6379
sentinel known-replica mymaster 10.0.0.18 6379
sentinel current-epoch 0
[root@redis-master ~]#scp /etc/redis-sentinel.conf redis-slave1:/etc/
[root@redis-master ~]#scp /etc/redis-sentinel.conf redis-slave2:/etc/

啟動哨兵服務
#確保每個哨兵主機myid不同,如果相同,必須手動修改為不同的值
[root@redis-slave1 ~]#vim /etc/redis-sentinel.conf
sentinel myid 50547f34ed71fd48c197924969937e738a39975c
[root@redis-slave2 ~]#vim /etc/redis-sentinel.conf
sentinel myid 50547f34ed71fd48c197924969937e738a39975d
[root@redis-master ~]#systemctl enable --now redis-sentinel.service
[root@redis-slave1 ~]#systemctl enable --now redis-sentinel.service
[root@redis-slave2 ~]#systemctl enable --now redis-sentinel.service

主從安裝

Redis Server 默認為 master節點,如果要配置為從節點,需要指定master服務器的IP,端口及連接密碼
在從節點執行 REPLICAOF MASTER_IP PORT 指令可以啟用主從同步復制功能,早期版本使用 SLAVEOF
指令

127.0.0.1:6379> REPLICAOF MASTER_IP PORT #新版推薦使用
127.0.0.1:6379> SLAVEOF MasterIP Port #舊版使用,將被淘汰
127.0.0.1:6379> CONFIG SET masterauth <masterpass>
#在mater上設置key1
[root@centos8 ~]#redis-cli
127.0.0.1:6379> AUTH 123456
OK
127.0.0.1:6379> INFO replication
# Replication
role:master
connected_slaves:0
master_replid:a3504cab4d33e9723a7bc988ff8e022f6d9325bf
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
127.0.0.1:6379> SET key1 v1-master
OK
127.0.0.1:6379> KEYS *
1) "key1"
127.0.0.1:6379> GET key1
"v1-master"
127.0.0.1:6379>
#以下都在slave上執行,登錄
[root@centos8 ~]#redis-cli
127.0.0.1:6379> info
NOAUTH Authentication required.
127.0.0.1:6379> AUTH 123456
OK
127.0.0.1:6379> INFO replication #查看當前角色默認為master
# Replication
role:master
connected_slaves:0
master_replid:a3504cab4d33e9723a7bc988ff8e022f6d9325bf
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
127.0.0.1:6379> SET key1 v1-slave-18

OK
127.0.0.1:6379> KEYS *
1) "key1"
127.0.0.1:6379> GET key1
"v1-slave-18"
127.0.0.1:6379>
#在第二個slave,也設置相同的key1,但值不同
127.0.0.1:6379> KEYS *
1) "key1"
127.0.0.1:6379> GET key1
"v1-slave-28"
127.0.0.1:6379>
127.0.0.1:6379> INFO replication
# Replication
role:master
connected_slaves:0
master_replid:a3504cab4d33e9723a7bc988ff8e022f6d9325bf
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
127.0.0.1:6379>
#在slave上設置master的IP和端口,4.0版之前的指令為slaveof
127.0.0.1:6379> REPLICAOF 10.0.0.8 6379 #仍可使用SLAVEOF MasterIP Port
OK
#在slave上設置master的密碼,才可以同步
127.0.0.1:6379> CONFIG SET masterauth 123456
OK
127.0.0.1:6379> INFO replication
# Replication #角色變為slave
role:slave
master_host:10.0.0.8 #指向master
master_port:6379
master_link_status:up
master_last_io_seconds_ago:8
master_sync_in_progress:0
slave_repl_offset:42
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:b69908f23236fb20b810d198f7f4539f795e0ee5
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:42
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:42
#查看已經同步成功
127.0.0.1:6379> GET key1
"v1-master

#在master上可以看到所有slave信息
127.0.0.1:6379> INFO replication
# Replication
role:master
connected_slaves:2
slave0:ip=10.0.0.18,port=6379,state=online,offset=112,lag=1 #slave信息
slave1:ip=10.0.0.28,port=6379,state=online,offset=112,lag=1
master_replid:dc30f86c2d3c9029b6d07831ae3f27f8dbacac62
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:112
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:112
127.0.0.1:6379>

驗證同步

[root@centos8 ~]#tail /var/log/redis/redis.log
24402:M 06 Oct 2020 09:09:16.448 * Replica 10.0.0.18:6379 asks for
synchronization
24402:M 06 Oct 2020 09:09:16.448 * Full resync requested by replica
10.0.0.18:6379
24402:M 06 Oct 2020 09:09:16.448 * Starting BGSAVE for SYNC with target: disk
24402:M 06 Oct 2020 09:09:16.453 * Background saving started by pid 24507
24507:C 06 Oct 2020 09:09:16.454 * DB saved on disk
24507:C 06 Oct 2020 09:09:16.455 * RDB: 2 MB of memory used by copy-on-write
24402:M 06 Oct 2020 09:09:16.489 * Background saving terminated with success
24402:M 06 Oct 2020 09:09:16.490 * Synchronization with replica 10.0.0.18:6379
succeeded


在 slave 節點觀察日志
[root@centos8 ~]#tail -f /var/log/redis/redis.log
24395:S 06 Oct 2020 09:09:16.411 * Connecting to MASTER 10.0.0.8:6379
24395:S 06 Oct 2020 09:09:16.412 * MASTER <-> REPLICA sync started
24395:S 06 Oct 2020 09:09:16.412 * Non blocking connect for SYNC fired the
event.
24395:S 06 Oct 2020 09:09:16.412 * Master replied to PING, replication can
continue...
24395:S 06 Oct 2020 09:09:16.414 * Partial resynchronization not possible (no
cached master)
24395:S 06 Oct 2020 09:09:16.419 * Full resync from master:
20ec2450b850782b6eeaed4a29a61a25b9a7f4da:0
24395:S 06 Oct 2020 09:09:16.456 * MASTER <-> REPLICA sync: receiving 196 bytes
from master
24395:S 06 Oct 2020 09:09:16.456 * MASTER <-> REPLICA sync: Flushing old data
24395:S 06 Oct 2020 09:09:16.456 * MASTER <-> REPLICA sync: Loading DB in memory
24395:S 06 Oct 2020 09:09:16.457 * MASTER <-> REPLICA sync: Finished with
success

修改 Slave 節點配置文件
[root@centos8 ~]#vim /etc/redis.conf
.......
# replicaof <masterip> <masterport>
replicaof 10.0.0.8 6379 #指定master的IP和端口號
......
# masterauth <master-password>
masterauth 123456 #如果密碼需要設置

requirepass 123456
.......
#和masterauth保持一致,用于將來從節點提升主后使用

[root@centos8 ~]#systemctl restart redis

Master 和 Slave查看狀態
#在master上查看狀態
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=10.0.0.18,port=6379,state=online,offset=1104403,lag=0
master_replid:b2517cd6cb3ad1508c516a38caed5b9d2d9a3e73
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:1104403
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:55828
repl_backlog_histlen:1048576
127.0.0.1:6379>
#在slave上查看狀態

127.0.0.1:6379> get key1
"v1-master"

#同步成功后,slave原key信息丟失,獲取master復制過來新的值

127.0.0.1:6379> INFO replication
# Replication
role:slave
master_host:10.0.0.8
master_port:6379
master_link_status:up

master_last_io_seconds_ago:6#如果主從復制通信正常,每10秒重新從0計數,此值無法修改,如
果無法通信,當計數到60時,master_link_status顯示為down
master_sync_in_progress:0#0表示同步完成,1表示正在同步

slave_repl_offset:1104431
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:b2517cd6cb3ad1508c516a38caed5b9d2d9a3e73
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:1104431
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:55856
repl_backlog_histlen:1048576
127.0.0.1:6379>
#停止master的redis服務:systemctl stop redis,在slave上可以觀察到以下現象
127.0.0.1:6379> INFO replication
# Replication
role:slave
master_host:10.0.0.8
master_port:6379
master_link_status:down #顯示down,表示無法連接master
master_last_io_seconds_ago:-1
master_sync_in_progress:0
slave_repl_offset:1104529
master_link_down_since_seconds:4
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:b2517cd6cb3ad1508c516a38caed5b9d2d9a3e73
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:1104529
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:55954
repl_backlog_histle

集群安裝


2. 總結redis的持久化算法和淘汰策略

持久化算法

RDB(Redis DataBase):是基于某個時間點的快照,注意RDB只保留當前最新版本的一個快照
相當于MySQL中的完全備份
RDB 持久化功能所生成的 RDB 文件是一個經過壓縮的二進制文件,通過該文件可以還原生成該 RDB 文
件時數據庫的狀態。因為 RDB 文件是保存在磁盤中的,所以即便 Redis 服務進程甚至服務器宕機,只要
磁盤中 RDB 文件存在,就能將數據恢復
RDB 支持save和bgsave兩種命令實現數據文件的持久化
注意: save 指令使用主進程進行備份,而不生成新的子進程,但是也會生成臨時文件temp-<主進程
PID>.rdb文件

AOF 即 AppendOnlyFile,AOF 和 RDB 都采有COW機制
AOF 可以指定不同的保存策略,默認為每秒鐘執行一次 fsync,按照操作的順序地將變更命令追加至指定的
AOF日志文件尾部
在第一次啟用AOF功能時,會做一次完全備份,后續將執行增量性備份,相當于完全數據備份+增量變化
如果同時啟用RDB和AOF,進行恢復時,默認AOF文件優先級高于RDB文件,即會使用AOF文件進行恢復
在第一次開啟AOF功能時,會自動備份所有數據到AOF文件中,后續只會記錄數據的更新指令
注意: AOF 模式默認是關閉的,第一次開啟AOF后,并重啟服務生效后,會因為AOF的優先級高于RDB,而
AOF默認沒有數據文件存在,從而導致所有數據丟失

淘汰策略

  1. noeviction?(不淘汰 - 默認策略):

    • 行為:?當內存不足時,新寫入操作會報錯(如OOM command not allowed)。讀請求不受影響。

    • 適用場景:?數據絕對不能丟失,且你確信有足夠內存或愿意處理寫入失敗。

  2. volatile-*?(只淘汰設置了過期時間的鍵):

    • volatile-lru: 從設置了過期時間的鍵中,淘汰最近最少使用的鍵。

    • volatile-lfu?(Redis 4.0+): 從設置了過期時間的鍵中,淘汰最不經常使用的鍵。

    • volatile-random: 從設置了過期時間的鍵中,隨機淘汰一個鍵。

    • volatile-ttl: 從設置了過期時間的鍵中,淘汰剩余生存時間最短的鍵。

    • 適用場景:?數據集中有部分數據是臨時緩存(有TTL),部分數據是持久重要的(無TTL)。只允許淘汰緩存部分。

  3. allkeys-*?(淘汰所有鍵,無論是否設置過期時間):

    • allkeys-lru: 從所有鍵中,淘汰最近最少使用的鍵。

    • allkeys-lfu?(Redis 4.0+): 從所有鍵中,淘汰最不經常使用的鍵。

    • allkeys-random: 從所有鍵中,隨機淘汰一個鍵。

    • 適用場景:?整個數據集都可視為緩存,所有數據在內存不足時都可以被淘汰。


3. 完成mongodb的安裝

#安裝相關包
#Red Hat/CentOS:
yum install libcurl openssl
#Ubuntu 18.04 LTS ("Bionic")/Debian 10 "Buster":
sudo apt-get install libcurl4 openssl
#Ubuntu 16.04 LTS ("Xenial")/Debian 9 "Stretch":
sudo apt-get install libcurl3 opensslcat >> /etc/rc.local <<EOF
echo never > /sys/kernel/mm/transparent hugepage/enabled
EOF
chmod +x /etc/rc.local#創建所需用戶和組
useradd mongod
#創建mongodb所需目錄結構
mkdir -p /mongodb/{conf,data,log}
#創建YAML格式的配置文件,早期3.0版本以前是普通文本格式
cat > /mongodb/conf/mongo.conf <<EOF
#日志相關
systemLog:
destination: file
path: "/mongodb/log/mongodb.log" #日志位置
logAppend: true #追加日志#數據存儲有關
storage:
dbPath: "/mongodb/data/" #數據路徑的位置
#進程控制
processManagement:
fork : true #后臺守護進程
#網絡配置有關
net:
port: 27017 #端口號,默認不配置端口號,是27017
bindIp: 0.0.0.0 #監聽地址自MongoDB 3.6版本后默認監聽在localhost
#安全驗證有關配置
security:
authorization: enabled #是否打開用戶名密碼驗證,默認此項為關掉
EOF
cat /mongodb/conf/mongo.conf
systemLog:
destination: file
path: "/mongodb/log/mongodb.log"
logAppend: true
storage:
dbPath: "/mongodb/data/"
processManagement:
fork: true
net:
port: 27017
bindIp: 0.0.0.0
chown -R mongod.mongod /mongodb/
tar xf mongodb-linux-x86_64-rhel70-v3.6-latest.tgz -C /usr/local
ln -s /usr/local/mongodb-linux-x86_64-rhel70-3.6.23-8-gc2609ed/
/usr/local/mongodb
#設置PATH變量
echo PATH=/usr/local/mongodb/bin/:'$PATH' > /etc/profile.d/mongodb.sh
. /etc/profile.d/mongodb.sh
#啟動
su - mongod
mongod --dbpath /mongodb/data --bind_ip_all --port 27017 --logpath
/mongodb/log/mongod.log --logappend --fork
mongod -f /mongodb/conf/mongo.conf
#登錄mongodb
mongo
#mongodb的關閉方式
mongod -f /mongodb/conf/mongo.conf --shutdown
#mongodb使用systemd管理
cat > /lib/systemd/system/mongod.service <<EOF
[Unit]
Description=mongodb
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
User=mongod
Group=mongod
ExecStart=/usr/local/mongodb/bin/mongod --config /mongodb/conf/mongo.conf
ExecReload=/bin/kill -s HUP \$MAINPID
ExecStop=/usr/local/mongodb/bin/mongod --config /mongodb/conf/mongo.conf --
shutdown
PrivateTmp=true
# file size
LimitFSIZE=infinity
# cpu time
LimitCPU=infinity
# virtual memory size
LimitAS=infinity
# open files
LimitNOFILE=64000
# processes/threads
LimitNPROC=64000
# locked memory
LimitMEMLOCK=infinity
# total threads (user+kernel)
TasksMax=infinity
TasksAccounting=false
# Recommended limits for mongod as specified in
# https://docs.mongodb.com/manual/reference/ulimit/#recommended-ulimit-settings
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable --now mongod

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/91292.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/91292.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/91292.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C++中sizeof運算符全面詳解和代碼示例

sizeof 是 C 中的一個編譯時運算符&#xff0c;用于獲取對象或類型所占的字節數&#xff08;以 size_t 返回&#xff09;。它是掌握底層內存模型、結構體對齊、數組大小計算等的重要工具。1. 基本語法 sizeof(type) // 獲取類型的大小 sizeof expression // 獲取表達式結果…

內容中臺:在一個地方管理多渠道內容

在數字化競爭愈演愈烈的今天&#xff0c;企業官網、社交平臺、移動應用、郵件營銷等渠道已成為品牌觸達用戶的關鍵接口。內容仍是連接企業與客戶的核心資產。然而&#xff0c;內容創作與分發的復雜性持續攀升&#xff0c;多平臺運營面臨重復維護、更新不一致、資源冗余等諸多挑…

【刷題】東方博宜oj 1307 - 數的計數

樣例輸入&#xff1a; 6輸出&#xff1a; 16 26 126 36 136原版是直接輸出總數量&#xff0c;但我修改了一些&#xff0c;輸出所有的新數。 #include <iostream> #include <vector> #include <string> using namespace std; //int c; void g(int num, string…

阿里云AI代碼助手通義靈碼開發指導

與阿里云一起輕松實現數智化讓算力成為公共服務&#xff1a;用大規模的通用計算&#xff0c;幫助客戶做從前不能做的事情&#xff0c;做從前做不到的規模。讓數據成為生產資料&#xff1a;用數據的實時在線&#xff0c;幫助客戶以數據為中心改變生產生活方式創造新的價值。智能…

設計模式(二十三)行為型:模板方法模式詳解

設計模式&#xff08;二十三&#xff09;行為型&#xff1a;模板方法模式詳解模板方法模式&#xff08;Template Method Pattern&#xff09;是 GoF 23 種設計模式中的行為型模式之一&#xff0c;其核心價值在于定義一個操作中的算法骨架&#xff0c;而將一些步驟延遲到子類中實…

Postgresql 查詢使用正則

今天接到任務&#xff0c;要從數據庫中查詢數據&#xff0c;對于postgresql 我并不熟悉&#xff0c;問了百度&#xff0c;問了通義千問。發現Postgresql 在寫query sql 的時候&#xff0c;可以使用正則匹配&#xff0c;不單是使用like 這種關鍵字。我像發現了新大陸一樣的興奮。…

【WRF-Chem Emissions教程第八期】轉換實用程序

轉換實用程序 8.1 將中間二進制文件轉換為 WRF-Chem 數據文件 文件命名規范與風格 8.2 Binary data file format(中間二進制排放數據文件的格式和結構) FORTRAN 示例程序說明 8.3 Building the WRF-Chemistry emissions conversion code 編譯步驟 驗證編譯結果 8.4 Namelist …

Qt Ribbon效果界面

實現效果&#xff1a;頭文件&#xff1a;#pragma once #include <QMdiArea> #include <QMdiSubWindow> #include <QMainWindow> #include "ui_MainFrame1.h" #include "DockManager.h" #include "DockAreaWidget.h"class Main…

如何修改 MySQL 8.0 的密碼,和忘記密碼時如何修改

要修改 MySQL 8.0 的密碼&#xff0c;可以通過以下幾種方法實現&#xff1a;方法 1&#xff1a;使用 ALTER USER 命令&#xff08;推薦&#xff09;這是 MySQL 8.0 推薦的修改密碼方式&#xff1a;-- 修改當前登錄用戶的密碼 ALTER USER USER() IDENTIFIED BY 新密碼;-- 修改指…

圖像處理控件Aspose.Imaging教程:使用 C# 編程將 CMX 轉換為 PNG

PNG圖像文件格式是廣泛使用的圖像格式之一。這種圖像文件格式提供了增強的共享和顯示功能。另一方面&#xff0c;CMX也是 Corel 應用程序主要使用的圖像文件格式。然而&#xff0c;將 CMX 轉換為 PNG 可以幫助用戶在網絡上查看和共享文件。因此&#xff0c;在本指南中&#xff…

迪麗熱巴寫真壁紙

下載&#xff1a;https://pan.quark.cn/s/a740dbac8274迪麗熱巴絕美寫真&#xff0c;高清壁紙展現獨特魅力&#xff0c;每一張都是視覺盛宴

C++11 std::function 詳解:通用多態函數包裝器

在C11標準中&#xff0c;引入了std::function這一通用多態函數包裝器&#xff0c;定義于<functional>頭文件中。它徹底改變了C中函數對象的使用方式&#xff0c;為不同類型的可調用實體提供了統一的接口。std::function能夠存儲、復制和調用任何可復制構造的可調用目標&a…

Kafka運維實戰 16 - kafka 分區重新分配【實戰】

?? Kafka運維實戰 (17篇) ??Kafka運維實戰 17 - kafka 分區副本從 1 增加到 3【實戰】 ??Kafka運維實戰 16 - kafka 分區重新分配【實戰】 ??Kafka運維實戰 15 - kafka 重設消費者組位移入門和實戰【實戰】 ??Kafka運維實戰 14 - kafka消費者組消費進度(Lag)深入理…

智匯AI,應用領航 | 華宇萬象問數入選2025全景賦能典型案例

7月29日&#xff0c;以“AI城市&#xff1a;數啟新紀元”為主題中關村人工智能與未來城市論壇在中關村國家自主創新示范區展示中心舉辦。本次論壇圍繞人工智能創新應用落地實踐、新型數據基礎設施建設、數據要素價值釋放機制、城市智能治理等關鍵議題&#xff0c;邀請院士專家和…

sqli-labs:Less-7關卡詳細解析

1. 思路&#x1f680; 本關的SQL語句為&#xff1a; $sql"SELECT * FROM users WHERE id(($id)) LIMIT 0,1";注入類型&#xff1a;字符串型&#xff08;單引號、雙括號包裹&#xff09;提示&#xff1a;參數id需以))閉合 同樣無法像常規一樣回顯&#xff0c;php輸出語…

編程算法:從理論基石到產業變革的核心驅動力

文章目錄 算法的本質與效率衡量 基礎算法范式的實踐價值 排序算法的演進與選擇 動態規劃的實用技巧 算法在現代技術棧中的應用 大數據處理的算法框架 編譯器中的算法優化 算法驅動的產業變革 金融領域的算法應用 醫療健康領域的算法創新 制造業的算法優化 算法的未來趨勢 結語 …

深度學習中的注意力機制:原理、應用與未來展望

在人工智能領域&#xff0c;深度學習技術已經取得了巨大的突破&#xff0c;而注意力機制&#xff08;Attention Mechanism&#xff09;作為深度學習中的一個重要概念&#xff0c;正在逐漸改變我們對模型的理解和應用。本文將深入探討注意力機制的原理、在不同領域的應用以及未來…

LeetCode 4:尋找兩個正序數組的中位數

LeetCode 4&#xff1a;尋找兩個正序數組的中位數問題定義與核心挑戰 給定兩個有序&#xff08;升序&#xff09;數組 nums1 和 nums2&#xff0c;要求找到它們的中位數&#xff0c;且算法時間復雜度為 O(log(mn))&#xff08;m 和 n 分別是兩個數組的長度&#xff09;。 中位數…

獨立站如何吃掉平臺蛋糕?DTC模式下的成本重構與利潤躍升

一、成本結構革命&#xff1a;從「流量稅」到「用戶終身價值」亞馬遜賣家需支付15%傭金12%廣告費&#xff0c;導致每$100收入中平臺抽成$27。而成熟獨立站通過SEO&#xff08;自然流量占比超40%&#xff09;和社交媒體內容引流&#xff0c;將獲客成本壓縮至$8-$15。更關鍵的是用…

應用驅動 協同創新:中國人工智能開啟高質量發展新篇章

人工智能技術的突破性發展正引發全球產業格局的深刻變革。在2025年這個關鍵節點&#xff0c;中國以"應用導向"為戰略支點&#xff0c;依托新型舉國體制優勢&#xff0c;正在構建具有中國特色的人工智能發展體系&#xff0c;為全球智能革命貢獻東方智慧。一、戰略布局…