1. 程式人生 > 其它 >二進位制部署(MySQL8、RabbitMQ叢集、Redis叢集、MongoDB主從)

二進位制部署(MySQL8、RabbitMQ叢集、Redis叢集、MongoDB主從)

部署文件

作者

劉暢

時間

2021-09-22

目錄

1 架構說明

2 安裝mysql

2.1 下載軟體包

2.2 安裝

3 安裝rabbitmq

3.1 安裝erlang

3.2 部署rabbitmq

4 安裝redis

4.1 下載軟體包

4.2 編譯部署

4.3 啟動redis

5 安裝mongodb

5.1 下載軟體包

5.2 安裝

5.3 主庫操作

5.4 從庫操作

5.5 延遲從庫操作

5.6 測試


1架構說明

作業系統Ubuntu-Server-18.04.x-LTS

主機名

IP

軟體

1-81

172.16.1.81

redis-5.0.13()mongodb-3.6.23()mysql-8.0.26

1-82

172.16.1.82

redis-5.0.13()mongodb-3.6.23()

1-83

172.16.1.83

redis-5.0.13()mongodb-3.6.23(延遲從庫)

1-84

172.16.1.84

redis-5.0.13()rabbitmq-3.8.22(叢集)

1-85

172.16.1.85

redis-5.0.13()rabbitmq-3.8.22(

叢集)

1-86

172.16.1.86

redis-5.0.13()rabbitmq-3.8.22(叢集)

:此部署文件為測試環境,為了節省機器,複用了些叢集,生產環境各節點機器獨立

伺服器優化配置

# sudo su - root

(1) 所有節點時間保持一致
# ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# apt-get install ntpdate -y
# if ! crontab -l | grep "ntpdate" &>/dev/null; then
(echo "*/5 * * * * /usr/sbin/ntpdate ntp.aliyun.com >/dev/null 2>&1"; crontab -l) | crontab


fi

(2) 使用sudo命令時載入/etc/profile中的環境變數
# echo 'alias sudo="sudo env PATH=$PATH"' >> /etc/profile
# source /etc/profile

(3)解決ssh連線速度慢的問題
# c
at >> /etc/ssh/sshd_config << EOF
GSSAPIAuthentication no
UseDNS no
EOF
# systemctl restart sshd.service

(4)系統核心優化
cat >> /etc/sysctl.conf << EOF
net.ipv4.tcp_tw_reuse = 1
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_tw_buckets = 20480
net.ipv4.tcp_max_syn_backlog = 20480
net.core.netdev_max_backlog = 262144
net.ipv4.tcp_fin_timeout = 20
vm.swappiness = 0
EOF
# sysctl -p

(5)
設定最開啟檔案描述符數量
參考文件: https://askubuntu.com/questions/1049058/how-to-increase-max-open-files-limit-on-ubuntu-18-04
# cat >> /etc/security/limits.conf << EOF
* soft nproc 65535
* hard nproc 65535
* soft nofile 65535
* hard nofile 65535

root soft nproc 65535
root hard nproc 65535
root soft nofile 65535
root hard nofile 65535
EOF

# su -
# ulimit -n

(6) 建立lc使用者

# sudo useradd lc -m -s /bin/bash

# echo "lc:123456"|sudo chpasswd

# sudo usermod -aG sudo lc

# su - lc

2安裝mysql

172.16.1.81節點上操作

2.1 下載軟體包

# wget https://mirrors.tuna.tsinghua.edu.cn/mysql/downloads/MySQL-8.0/mysql-8.0.26-linux-glibc2.12-x86_64.tar.xz

2.2 安裝

1前期準備

(1) 安裝依賴包
# apt-get install libaio1 -y

(2) 解壓安裝包
# tar -xf mysql-8.0.26-linux-glibc2.12-x86_64.tar.xz
# mv mysql-8.0.26-linux-glibc2.12-x86_64/ /opt/mysql/

(3) 建立mysql 使用者
# groupadd -g 1600 mysql
# useradd -g mysql -u 1600 -M -s /sbin/nologin mysql
# id mysql
uid=1600(mysql) gid=1600(mysql) =1600(mysql)

(4) 建立存放資料庫檔案的目錄並賦予mysql安裝目錄的屬主和屬組都是mysql
# mkdir -p /opt/mysql/data/
# chown -R mysql.mysql /opt/mysql/

2配置my.cnf 檔案

# cat > /etc/my.cnf << EOF
[client]
port = 3306
default-character-set = utf8mb4
socket = /opt/mysql/data/mysql.sock
[mysql]
no-auto-rehash
[mysqld]
user = mysql
port = 3306
basedir = /opt/mysql
datadir = /opt/mysql/data
socket = /opt/mysql/data/mysql.sock
bind-address = 0.0.0.0
pid-file = /opt/mysql/data/mysqld.pid
character-set-server = utf8mb4
collation-server = utf8mb4_0900_ai_ci
log-error = /opt/mysql/data/mysqld.log
slow_query_log = ON
long_query_time = 2
slow_query_log_file = /opt/mysql/data/mysql-slow.log
max_connections = 1024
open_files_limit = 65535
innodb_buffer_pool_size = 2G
innodb_flush_log_at_trx_commit = 2
innodb_log_file_size = 256M
transaction_isolation = READ-COMMITTE
default-storage-engine = innodb
innodb_file_per_table = on
innodb_flush_method = O_DIRECT
interactive_timeout = 1800
wait_timeout = 1800
innodb_open_files=1500
innodb_io_capacity=5000
innodb_buffer_pool_instances=4
innodb_autoextend_increment=64
innodb_purge_threads=1
innodb_purge_batch_size=150
innodb_write_io_threads=4
innodb_read_io_threads=4
innodb_concurrency_tickets=2500
explicit_defaults_for_timestamp = 1
skip-name-resolve
lower_case_table_names = 1
server-id = 1
skip-log-bin
[mysqldump]
quick
max_allowed_packet = 32M
EOF

3初始化mysql 資料庫

# /opt/mysql/bin/mysqld --initialize --user=mysql --basedir=/opt/mysql --datadir=/opt/mysql/data

4mysql 服務加入到systemctl

# cat /lib/systemd/system/mysqld.service
[Unit]
Description=MySQL Server 8.0.26
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
Type=forking
PIDFile=/opt/mysql/data/mysqld.pid
TimeoutSec=0
PermissionsStartOnly=true
# ExecStartPre=/usr/local/mysql/bin/mysqld_pre_systemd
ExecStart=/opt/mysql/bin/mysqld --defaults-file=/etc/my.cnf --daemonize --pid-file=/opt/mysql/data/mysqld.pid $MYSQLD_OPTS
EnvironmentFile=-/etc/sysconfig/mysql
LimitNOFILE = 65535
Restart=on-failure
RestartPreventExitStatus=1
PrivateTmp=false

5啟動mysql 資料庫

# systemctl daemon-reload
# systemctl start mysqld.service
# systemctl enable mysqld.service
# cat >> /etc/profile << EOF
export PATH=/opt/mysql/bin:\$PATH
EOF
# source /etc/profile

6修改資料庫密碼

# grep 'temporary password' /opt/mysql/data/mysqld.log
……[Note] [MY-010454] [Server] A temporary password is generated for root@localhost: dHZkG>feg6+A
# mysql -uroot -p'dHZkG>feg6+A'
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
mysql> update mysql.user set host='127.0.0.1' where user='root';
mysql> flush privileges;
mysql> exit;
# mysql -h
127.0.0.1 -uroot -p'123456'

3安裝rabbitmq

172.16.1.84-86節點

3.1 安裝erlang

172.16.1.84節點上操作

1下載erlang軟體包

# wget http://erlang.org/download/otp_src_24.0.tar.gz

2安裝依賴包

# apt-get update
# apt-get install build-essential libncurses5-dev libssl-dev
-y

3 編譯

# tar -xzf otp_src_24.0.tar.gz
# cd otp_src_24.0/
# ./configure --prefix=/opt/erlang --without-javac
#make && make install

驗證
# /opt/erlang/bin/erl
Erlang/OTP 24 [erts-12.0] [source] [64-bit] [smp:1:1] [ds:1:1:10] [async-threads:1] [jit]

Eshell V12.0 (abort with ^G)
1> 10+20 .
30
2>
按兩下Ctrl + c退出。

4將編譯好的erlang拷貝到172.16.1.85-86兩臺機器上

# scp -rp /opt/erlang [email protected]:/opt/
# scp -rp /opt/erlang [email protected]:/opt/

5配置環境變數

172.16.1.84-86節點上操作

# echo 'export PATH=/opt/erlang/bin:$PATH' >> /etc/profile
# source /etc/profile

3.2 部署rabbitmq

172.16.1.84節點上操作

1下載rabbitmq軟體包

# wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.8.22/rabbitmq-server-generic-unix-3.8.22.tar.xz

2配置rabbitmq配置檔案

(1) 解壓包
# tar -xf rabbitmq-server-generic-unix-3.8.22.tar.xz
# mv rabbitmq_server-3.8.22/ /opt/rabbitmq/

(2) rabbitmq-server啟動指令碼中新增erlang環境變數,解決指令碼找不到erl命令
# vim /opt/rabbitmq/sbin/rabbitmq-server +8
export PATH=$PATH:/opt/erlang/bin

(3)新增rabbitmq配置檔案
# echo
'[{rabbit,[{tcp_listeners,[5672]}]}].' > /opt/rabbitmq/etc/rabbitmq/rabbitmq.config

3將解壓的rabbitmq軟體包拷貝到172.16.1.85-86兩臺機器上

# scp -rp /opt/rabbitmq [email protected]:/opt/
# scp -rp /opt/rabbitmq [email protected]:/opt/

4 啟動rabbitmq

分別在172.16.1.84-86節點上操作

(1) 新增環境變數
# cat >> /etc/profile << EOF
export RABBITMQ_HOME=/opt/rabbitmq
export PATH=/opt/rabbitmq/sbin:\$PATH
EOF
# source /etc/profile

(2) 建立使用者並賦權
# useradd rabbitmq
# mkdir -p /home/rabbitmq/
# chown -R rabbitmq.rabbitmq /home/rabbitmq/
# chown -R rabbitmq.rabbitmq /opt/rabbitmq/

(3) 加入systemd管理
# cat rabbitmq-server.service
[Unit]
Description=RabbitMQ broker
After=syslog.target network.target

[Service]
Type=simple
User=rabbitmq
Group=rabbitmq
# UMask=0027
NotifyAccess=all
TimeoutStartSec=600
SuccessExitStatus=127
# To override LimitNOFILE, create the following file:
#
# /etc/systemd/system/rabbitmq-server.service.d/limits.conf
#
# with the following content:
#
# [Service]
# LimitNOFILE=65536

LimitNOFILE=32768

# Note: systemd on CentOS 7 complains about in-line comments,
# so only append them here
#
# Restart:
# The following setting will automatically restart RabbitMQ
# in the event of a failure. systemd service restarts are not a
# replacement for service monitoring. Please see
# https://www.rabbitmq.com/monitoring.html
Restart=on-failure
RestartSec=10
WorkingDirectory=/opt/rabbitmq
ExecStart=/opt/rabbitmq/sbin/rabbitmq-server
ExecStop=/opt/rabbitmq/sbin/rabbitmqctl shutdown
# See rabbitmq/rabbitmq-server-release#51
SuccessExitStatus=69
Restart=on-failure

[Install]
WantedBy=multi-user.target

(4) 啟動
# systemctl daemon-reload
# systemctl start rabbitmq-server.service
# systemctl enable rabbitmq-server.service

(5) 開啟rabbitmqweb管理介面
# /opt/rabbitmq/sbin/rabbitmq-plugins enable rabbitmq_management
# systemctl restart rabbitmq-server.service

(6) 驗證
可以通過埠進行訪問,出現了rabbitmq UI介面,說明rabbitmq搭建成功。
http://172.16.1.84-
86:15672

5 rabbitmq叢集配置

分別在172.16.1.84-86節點上操作

(1) 修改hosts解析
# cat >> /etc/hosts << EOF
172.16.1.84 1-84
172.16.1.85 1-85
172.16.1.86 1-86
EOF

(2) 停止RabbitMQ服務
# systemctl stop rabbitmq-server.service

(3) 設定Erlang Cookie
設定不同節點間同一認證的Erlang Cookie,這裡將1-84Cookie傳給1-851-86兩臺伺服器
172.16.1.84節點上操作
# scp -p /home/rabbitmq/.erlang.cookie root@1-85:/home/rabbitmq/
# scp -p /home/rabbitmq/.erlang.cookie root@1-86:/ho
me/rabbitmq/
:
cookie在所有節點上必須完全一樣,且許可權必須為400,屬主和屬組為rabbitmq,同步時一定要注意。erlang
通過主機名來連線服務,必須保證各個主機名之間可以ping通。可以通過編輯/etc/hosts來手工新增主機名和IP
對應關係。如果主機名ping不通,rabbitmq服務啟動會失敗。

(4) 設定好cookie後重啟rabbitmq
# systemctl restart rabbitmq-server.service

(5) 檢視單節點的叢集狀態(任意一臺都可,這裡以172.16.1.84節點為例)
# cp -a /home/rabbitmq/.erlang.cookie ./
# chown root.root /root/.erlang.cookie
#
rabbitmqctl cluster_status


:因為.erlang.cookie/home/rabbitmq/目錄下,要檢視rabbitmq叢集狀態時要使用下面的命令拷貝
.erlang.cookie到當前使用者的家目錄下,並更改屬主屬組為當前使用者。
# cp -a /home/rabbitmq/.erlang.cookie <當前使用者的家目錄>
#chown -R <當前使用者名稱>:<當前使用者名稱> <當前使用者的家目錄>/
.erlang.cookie

(6) 加入叢集
這裡將1-851-86加入到1-84當中,按照順序執行先1-851-86
1)1-85上操作
# rabbitmqctl stop_app
# rabbitmqctl join_cluster rabbit@1-84
# rabbitmqctl start_app

2)1-86上操作
# rabbitmqctl stop_app
# rabbitmqctl join_cluster rabbit@1-84
# rabbitmqctl start_app

(7) 檢視叢集狀態,任意一個節點有可以,這裡以1-84為例子
# rabbitmqctl cluster_status

:叢集狀態正常

(8) 建立使用者並授權(在任意節點都可)
# 建立使用者
rabbitmqctl add_user admin '123456'
# 新增使用者[管理員]標籤
rabbitmqctl set_user_tags admin administrator
# 為使用者授權可以訪問的[virtual /]和操作型別[配置、讀、寫]
rabbitmqctl set_permissions -p / admin '.*' '.*' '.*'
# 檢視所有使用者
# rabbitmqctl list_users

(9) UI介面中檢視叢集狀態
http://<Rabbit
mqIP>:15672/

4安裝redis

172.16.1.81-86節點

4.1 下載軟體包

# wget https://download.redis.io/releases/redis-5.0.13.tar.gz

4.2 編譯部署

172.16.1.81節點上操作

1安裝依賴包

# apt-get update
# apt-get install build-essential libncurses5-dev libssl-dev -y

2編譯

# tar -xzf redis-5.0.13.tar.gz
# cd redis-5.0.13/
# make
# make install PREFIX=/opt/redis
#mkdir -p /opt/redis/{cfg,logs,data}
# cp -a /root/redis-5.0.13/redis.conf /opt/redis/cfg/

3修改配置檔案

# cat > /opt/redis/cfg/redis.conf << EOF
bind 172.16.1.81
protected-mode yes
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize yes
supervised no
pidfile /opt/redis/cfg/redis_6379.pid
loglevel notice
logfile /opt/redis/logs/redis_6379.log
databases 16
always-show-logo yes
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir /opt/redis/data
masterauth 123456
replica-serve-stale-data yes
replica-read-only no
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
replica-priority 100
requirepass 123456
maxclients 10000
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble yes
lua-time-limit 5000
cluster-enabled yes
cluster-config-file /opt/redis/cfg/nodes.conf
cluster-node-timeout 15000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
stream-node-max-bytes 4096
stream-node-max-entries 100
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
dynamic-hz yes
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes
EOF

4 redis加入systemd管理

# cat > /lib/systemd/system/redis.service << EOF
[Unit]
Description=Redis persistent key-value database
After=network.target
After=network-online.target
Wants=network-online.target

[Service]
Type=forking
ExecStart=/opt/redis/bin/redis-server /opt/redis/cfg/redis.conf
# ExecStop=/usr/libexec/redis-shutdown
User=redis
Group=redis
Restart=on-failure

[Install]
WantedBy=multi-user.target
EOF

5 redis軟體包拷貝到172.16.1.82-86節點上

#scp -rp /opt/redis [email protected]:/opt/
#scp -rp /opt/redis [email protected]:/opt/
#scp -rp /opt/redis [email protected]:/opt/
#scp -rp /opt/redis [email protected]:/opt/
#scp -rp /opt/redis [email protected]:/opt/

# scp -p /lib/systemd/system/redis.service [email protected]:/lib/systemd/system/
# scp -p /lib/systemd/system/redis.service [email protected]:/lib/systemd/system/
# scp -p /lib/systemd/system/redis.service [email protected]:/lib/systemd/system/
# scp -p /lib/systemd/system/redis.service [email protected]:/lib/systemd/system/
# scp -p /lib/systemd/system/redis.service [email protected]:/lib/systemd/system/

4.3 啟動redis

分別在172.16.1.81-86節點上操作

1 安裝叢集所需要的依賴包

# apt-get update
# apt-getinstall ruby rubygems -y
#
gem install redis

2redis命令加入環境變數

# echo 'export PATH=/opt/redis/bin:$PATH' >> /etc/profile
# source /etc/profile

3修改redis繫結的ip地址為當前的ip地址

#vim /opt/redis/cfg/redis.conf
bind 172.16.1.81 #
此配置修改為當前的主機的ip地址

4 啟動redis服務

# useradd redis
# chown -R redis:redis /opt/redis/
# systemctl daemon-reload
# systemctl restart redis
# systemctl enable redis
# systemctl status redis

5檢視redis啟動日誌

(1) 警告項解決辦法
# cat /opt/redis/logs/redis_6379.log
……

看到依次從上到下有三個錯誤。

解決辦法如下
# cat >> /etc/sysctl.conf << EOF
net.core.somaxconn = 20480
vm.overcommit_memory = 1
EOF
# sysctl -p

# echo never > /sys/kernel/mm/transparent_hugepage/enabled
#加入開機自啟,但是Ubuntu已經棄用了/etc/rc.local配置檔案,按照如下方法自己新增
# cat >> /lib/systemd/system/rc-local.service << EOF
[Install]
WantedBy=multi-user.target
Alias=rc-local.service
EOF

# systemctl daemon-reload
# systemctl enable rc-local

# cat > /etc/rc.local << EOF
#!/bin/bash
echo never > /sys/kernel/mm/transparent_hugepage/enabled
EOF

# chmod +x /etc/rc.local

(2) 重啟redis
# systemctl restart redis

(3) 再次檢視日誌
# cat /opt/redis/logs/redis_6379.log

redis警告解決

6 建立叢集

172.16.1.81節點上操作

# redis-cli -a 123456 --cluster create \
172.16.1.81:6379 172.16.1.82:6379 \
172.16.1.83:6379 172.16.1.84:6379 \
172.16.1.85:6379 172.16.1.86:6379 \
--cluster-replicas 1

輸入yes,然後回車,叢集建立完畢。建立完成後預設前三個節點81-83為主節點,84-86
從節點。

7 檢視叢集資訊(訪問任意一個節點都可以)

# redis-cli -h 172.16.1.81 -a 123456 -c -p 6379
172.16.1.81:6379> cluster info


172.16.1.81:6379> cluster nodes

5 安裝mongodb

172.16.1.81-83節點

5.1 下載軟體包

# wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.6.23.tgz

5.2 安裝

172.16.1.81節點上操作

1解壓包

# tar -xzf mongodb-linux-x86_64-3.6.23.tgz
# mv mongodb-linux-x86_64-3.6.23/ /opt/mongodb/
# mkdir -p /opt/mongodb/{data,conf,log}
# touch /opt/mongodb/log/mongodb.log

2修改配置檔案

# cat > /opt/mongodb/conf/mongodb.conf << EOF
dbpath=/opt/mongodb/data
#資料庫檔案位置
bind_ip=172.16.1.81
#繫結地址,預設127.0.0.1,只能通過本地連線。
port=27017
#埠,預設27017MongoDB的預設服務TCP埠,監聽客戶端連線。
journal=true
#啟用日誌檔案,預設啟用。
logpath=/opt/mongodb/log/mongodb.log
#日誌檔案位置,該日誌檔案必須存在,否則會報錯
logappend=true
#以追加方式寫入日誌。
quiet=true
#這個選項可以過濾掉一些無用的日誌資訊,若需要除錯使用請設定為false
fork=true
#以守護程序方式執行
EOF

3mongodb加入systemd管理

# cat > /lib/systemd/system/mongodb.service << EOF
[Unit]
Description=mongodb 3.6.23
After=network.target

[Service]
Type=forking
#PIDFile=/opt/mongodb/mongodb.pid
ExecStart=/opt/mongodb/bin/mongod -f /opt/mongodb/conf/mongodb.conf
ExecReload=/bin/kill -s HUP \$MAINPID
#ExecStop=/bin/kill -s QUIT \$MAINPID
PrivateTmp=true
User=mongodb
Group=mongodb
Restart=on-failure

[Install]
WantedBy=multi-user.target
EOF

4分別拷貝安裝包到另外兩個節點

# scp -rp /opt/mongodb [email protected]:/opt/
#scp -rp /opt/mongodb [email protected]:/opt/

# scp -p /lib/systemd/system/mongodb.service [email protected]:/lib/systemd/system/
#
scp -p /lib/systemd/system/mongodb.service [email protected]:/lib/systemd/system/

5啟動mongodb

172.16.1.81-83節點上操作

(1) 新增環境變數
# echo 'export PATH=/opt/mongodb/bin:$PATH' >> /etc/profile
# source /etc/profile

(2) 授權
#useradd mongodb
# chown -R mongodb:mongodb /opt/mongodb/

(3) 修改mongodb繫結的ip地址為本地ip地址
#vim /opt/mongodb/conf/mongodb.conf
bind_ip=172.16.1.81 # 指定各自服務的的ip地址

(4) 啟動
# systemctl daemon-reload
# systemctl restart mongodb.service
# systemctl enable mongodb.service
# systemctl status mongodb.service

6開啟mongodb認證

172.16.1.81-83節點上操作

(1) 建立管理使用者rootroot許可權
# mongo --host 172.16.1.81 --port 27017
> use admin
> db.createUser({user: "root",pwd: "123456",roles: [ { role: "root", db: "admin" } ]})
> exit

(2) 開啟認證
# cat
>> /opt/mongodb/conf/mongodb.conf << EOF
#開啟認證
auth = true
EOF

(3) 認證登入
# systemctl restart mongodb.service
# mongo --host 172.16.1.81 --port 27017 -uroot -p'123456' admin

5.3 主庫操作

172.16.1.81節操作

1 修改配置檔案

# cat >> /opt/mongodb/conf/mongodb.conf << EOF
############主從複製配置####################################
# master節點
master = true
#叢集的私鑰的完整路徑,只對於Replica Set架構有效,
#auth = true 配置此項。
keyFile = /opt/mongodb/conf/mongodb-keyfile
#主節點設定oplog的大小,主節點操作記錄儲存到localoplog中,用於從庫拉取。
#單位mb,新的操作會覆蓋舊的操作。
oplogSize = 40960
EOF

2 建立叢集私鑰併發送到另外兩個節點

# openssl rand -base64 741 > /opt/mongodb/conf/mongodb-keyfile
# chmod 600 /opt/mongodb/conf/mongodb-keyfile
# chown mongodb:mongodb /opt/mongodb/conf/mongodb-keyfile

# scp -p /opt/mongodb/conf/mongodb-keyfile [email protected]:/opt/mongodb/conf/
# scp -p /opt/mongodb/conf/mongodb-keyfile [email protected]:/opt/mongodb/conf/
# ssh -p 22 [email protected] "chown mongodb:mongodb /opt/mongodb/conf/mongodb-keyfile"
# ssh -p 22 [email protected] "chown mongodb:
mongodb /opt/mongodb/conf/mongodb-keyfile"

3 重啟mongodb

# systemctl restart mongodb.service

5.4 從庫操作

172.16.1.82節點上操作

1修改配置檔案

# cat >> /opt/mongodb/conf/mongodb.conf << EOF
##################從庫配置###########################
#開啟從伺服器
slave = true
# 主資料庫埠
source = 172.16.1.81:27017
#叢集的私鑰的完整路徑,只對於Replica Set架構有效,
#auth = true 配置此項。
keyFile = /opt/mongodb/conf/mongodb-keyfile
#延遲複製,單位為秒
#slavedelay = 1800
#當發現從伺服器的資料不是最新時,向主伺服器請求同步資料
autoresync = true
EOF

2重啟mongodb

# systemctl restart mongodb.service
# systemctl status mongodb.service
# mongo --host 172.16.1.82 --port 27017 -uroot -p'123456' admin
> rs.secondaryOk()
>
show dbs

5.5 延遲從庫操作

172.16.1.83節點上操作

1修改配置檔案

# cat >> /opt/mongodb/conf/mongodb.conf << EOF
##################從庫配置###########################
#開啟從伺服器
slave = true
# 主資料庫埠
source = 172.16.1.81:27017
#叢集的私鑰的完整路徑,只對於Replica Set架構有效,
#auth = true 配置此項。
keyFile = /opt/mongodb/conf/mongodb-keyfile
#延遲複製,單位為秒
slavedelay = 1800
#當發現從伺服器的資料不是最新時,向主伺服器請求同步資料
autoresync = true
EOF

2重啟mongodb

# systemctl restart mongodb.service
# systemctl status mongodb.service
# mongo --host 172.16.1.83 --port 27017 -uroot -p'123456' admin
> rs.secondaryOk()
>
show dbs

5.6 測試

1172.16.1.81主庫上建立測試庫和資料

# mongo --host 172.16.1.81 --port 27017 -uroot -p'123456' admin
> use master_slave_test
> function add(){var i = 0;for(;i<7;i++){db.persons.insert({"name":"master_slave_test"+i})}}
> add()
> db.persons.find()

2172.16.1.82從庫上檢視

# mongo --host 172.16.1.82 --port 27017 -uroot -p'123456' admin
> use master_slave_test
> rs.secondaryOk()
> db.persons.find()

3172.16.1.82節點操作步驟相同,30分鐘後在172.16.1.83延遲從庫上檢視test資料也同步過來了。