二進位制部署(MySQL8、RabbitMQ叢集、Redis叢集、MongoDB主從)
部署文件
作者 |
劉暢 |
時間 |
2021-09-22 |
目錄
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連線速度慢的問題
#
cat >> /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/
# 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
# 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
# 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
-h127.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-84的Cookie傳給1-85、1-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:/home/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-85和1-86加入到1-84當中,按照順序執行先1-85再1-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://<RabbitmqIP>: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
2將redis命令加入環境變數
# 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
#埠,預設27017,MongoDB的預設服務TCP埠,監聽客戶端連線。
journal=true
#啟用日誌檔案,預設啟用。
logpath=/opt/mongodb/log/mongodb.log
#日誌檔案位置,該日誌檔案必須存在,否則會報錯
logappend=true
#以追加方式寫入日誌。
quiet=true
#這個選項可以過濾掉一些無用的日誌資訊,若需要除錯使用請設定為false。
fork=true
#以守護程序方式執行
EOF
3將mongodb加入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) 建立管理使用者root為root許可權
#
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的大小,主節點操作記錄儲存到local的oplog中,用於從庫拉取。
#單位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 測試
1在172.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()
2在172.16.1.82從庫上檢視
# mongo --host 172.16.1.82 --port 27017 -uroot
-p'123456' admin
>
use master_slave_test
>
rs.secondaryOk()
> db.persons.find()
3同172.16.1.82節點操作步驟相同,30分鐘後在172.16.1.83延遲從庫上檢視test資料也同步過來了。