klvchen

架构

环境

主机名 IP
db1 192.168.31.205
db2 192.168.31.206

前期准备

开启防火墙,安装配置 mysql (db1,db2)

firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.31.0/24" accept"
firewall-cmd --reload

mkdir /software
# 把软件 mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz 上传到  /software
cd /usr/local/
tar zxf /software/mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz
mv mysql-5.7.20-linux-glibc2.12-x86_64 mysql

# 初始化数据
mkdir /data/33{07..10}/data -p
mysqld --initialize-insecure  --user=mysql --datadir=/data/3307/data --basedir=/usr/local/mysql
mysqld --initialize-insecure  --user=mysql --datadir=/data/3308/data --basedir=/usr/local/mysql
mysqld --initialize-insecure  --user=mysql --datadir=/data/3309/data --basedir=/usr/local/mysql
mysqld --initialize-insecure  --user=mysql --datadir=/data/3310/data --basedir=/usr/local/mysql

配置 MySQL my.cnf配置 及启动脚本(db1)

cat >/data/3307/my.cnf<<EOF
[mysqld]
basedir=/usr/local/mysql
datadir=/data/3307/data
socket=/data/3307/mysql.sock
port=3307
log-error=/data/3307/mysql.log
log_bin=/data/3307/mysql-bin
binlog_format=row
skip-name-resolve
server-id=7
gtid-mode=on
enforce-gtid-consistency=true
log-slave-updates=1
EOF

cat >/data/3308/my.cnf<<EOF
[mysqld]
basedir=/usr/local/mysql
datadir=/data/3308/data
port=3308
socket=/data/3308/mysql.sock
log-error=/data/3308/mysql.log
log_bin=/data/3308/mysql-bin
binlog_format=row
skip-name-resolve
server-id=8
gtid-mode=on
enforce-gtid-consistency=true
log-slave-updates=1
EOF

cat >/data/3309/my.cnf<<EOF
[mysqld]
basedir=/usr/local/mysql
datadir=/data/3309/data
socket=/data/3309/mysql.sock
port=3309
log-error=/data/3309/mysql.log
log_bin=/data/3309/mysql-bin
binlog_format=row
skip-name-resolve
server-id=9
gtid-mode=on
enforce-gtid-consistency=true
log-slave-updates=1
EOF

cat >/data/3310/my.cnf<<EOF
[mysqld]
basedir=/usr/local/mysql
datadir=/data/3310/data
socket=/data/3310/mysql.sock
port=3310
log-error=/data/3310/mysql.log
log_bin=/data/3310/mysql-bin
binlog_format=row
skip-name-resolve
server-id=10
gtid-mode=on
enforce-gtid-consistency=true
log-slave-updates=1
EOF

cat >/etc/systemd/system/mysqld3307.service<<EOF
[Unit]
Description=MySQL Server
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
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/data/3307/my.cnf
LimitNOFILE = 5000
EOF

cat >/etc/systemd/system/mysqld3308.service<<EOF
[Unit]
Description=MySQL Server
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
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/data/3308/my.cnf
LimitNOFILE = 5000
EOF

cat >/etc/systemd/system/mysqld3309.service<<EOF
[Unit]
Description=MySQL Server
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
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/data/3309/my.cnf
LimitNOFILE = 5000
EOF
cat >/etc/systemd/system/mysqld3310.service<<EOF
[Unit]
Description=MySQL Server
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
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/data/3310/my.cnf
LimitNOFILE = 5000
EOF

配置 MySQL my.cnf配置 及启动脚本(db2)

cat >/data/3307/my.cnf<<EOF
[mysqld]
basedir=/usr/local/mysql
datadir=/data/3307/data
socket=/data/3307/mysql.sock
port=3307
log-error=/data/3307/mysql.log
log_bin=/data/3307/mysql-bin
binlog_format=row
skip-name-resolve
server-id=17
gtid-mode=on
enforce-gtid-consistency=true
log-slave-updates=1
EOF

cat >/data/3308/my.cnf<<EOF
[mysqld]
basedir=/usr/local/mysql
datadir=/data/3308/data
port=3308
socket=/data/3308/mysql.sock
log-error=/data/3308/mysql.log
log_bin=/data/3308/mysql-bin
binlog_format=row
skip-name-resolve
server-id=18
gtid-mode=on
enforce-gtid-consistency=true
log-slave-updates=1
EOF

cat >/data/3309/my.cnf<<EOF
[mysqld]
basedir=/usr/local/mysql
datadir=/data/3309/data
socket=/data/3309/mysql.sock
port=3309
log-error=/data/3309/mysql.log
log_bin=/data/3309/mysql-bin
binlog_format=row
skip-name-resolve
server-id=19
gtid-mode=on
enforce-gtid-consistency=true
log-slave-updates=1
EOF

cat >/data/3310/my.cnf<<EOF
[mysqld]
basedir=/usr/local/mysql
datadir=/data/3310/data
socket=/data/3310/mysql.sock
port=3310
log-error=/data/3310/mysql.log
log_bin=/data/3310/mysql-bin
binlog_format=row
skip-name-resolve
server-id=20
gtid-mode=on
enforce-gtid-consistency=true
log-slave-updates=1
EOF

cat >/etc/systemd/system/mysqld3307.service<<EOF
[Unit]
Description=MySQL Server
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
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/data/3307/my.cnf
LimitNOFILE = 5000
EOF

cat >/etc/systemd/system/mysqld3308.service<<EOF
[Unit]
Description=MySQL Server
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
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/data/3308/my.cnf
LimitNOFILE = 5000
EOF

cat >/etc/systemd/system/mysqld3309.service<<EOF
[Unit]
Description=MySQL Server
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
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/data/3309/my.cnf
LimitNOFILE = 5000
EOF
cat >/etc/systemd/system/mysqld3310.service<<EOF
[Unit]
Description=MySQL Server
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
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/data/3310/my.cnf
LimitNOFILE = 5000
EOF

修改权限,启动多实例(db1, db2)

chown -R mysql.mysql /data/*

systemctl start mysqld3307
systemctl start mysqld3308
systemctl start mysqld3309
systemctl start mysqld3310

mysql -S /data/3307/mysql.sock -e "show variables like \'server_id\'"
mysql -S /data/3308/mysql.sock -e "show variables like \'server_id\'"
mysql -S /data/3309/mysql.sock -e "show variables like \'server_id\'"
mysql -S /data/3310/mysql.sock -e "show variables like \'server_id\'"

分片规划

shard1:
    Master:192.168.31.205:3307
    slave1:192.168.31.205:3309
    Standby Master:192.168.31.206:3307
    slave2:192.168.31.206:3309
shard2:
    Master:192.168.31.206:3308
    slave1:192.168.31.206:3310
    Standby Master:192.168.31.205:3308
    slave2:192.168.31.205:3310

配置 shard1

# 192.168.31.205:3307 <-----> 192.168.31.206:3307(互为主从)
# db2:
mysql  -S /data/3307/mysql.sock -e "grant replication slave on *.* to repl@\'192.168.31.%\' identified by \'123\';"
mysql  -S /data/3307/mysql.sock -e "grant all  on *.* to root@\'192.168.31.%\' identified by \'123\'  with grant option;"
# db1:
mysql  -S /data/3307/mysql.sock -e "CHANGE MASTER TO MASTER_HOST=\'192.168.31.206\', MASTER_PORT=3307, MASTER_AUTO_POSITION=1, MASTER_USER=\'repl\', MASTER_PASSWORD=\'123\';"
mysql  -S /data/3307/mysql.sock -e "start slave;"
mysql  -S /data/3307/mysql.sock -e "show slave status\G"
# db2:
mysql  -S /data/3307/mysql.sock -e "CHANGE MASTER TO MASTER_HOST=\'192.168.31.205\', MASTER_PORT=3307, MASTER_AUTO_POSITION=1, MASTER_USER=\'repl\', MASTER_PASSWORD=\'123\';"
mysql  -S /data/3307/mysql.sock -e "start slave;"
mysql  -S /data/3307/mysql.sock -e "show slave status\G"

# 192.168.31.205:3309 ------> 192.168.31.205:3307(3307 为主库,3309为从库)
# db1:
mysql  -S /data/3309/mysql.sock  -e "CHANGE MASTER TO MASTER_HOST=\'192.168.31.205\', MASTER_PORT=3307, MASTER_AUTO_POSITION=1, MASTER_USER=\'repl\', MASTER_PASSWORD=\'123\';"
mysql  -S /data/3309/mysql.sock  -e "start slave;"
mysql  -S /data/3309/mysql.sock  -e "show slave status\G"

# 192.168.31.206:3309 ------> 192.168.31.206:3307(3307 为主库,3309为从库)
# db2:
mysql  -S /data/3309/mysql.sock -e "CHANGE MASTER TO MASTER_HOST=\'192.168.31.206\', MASTER_PORT=3307, MASTER_AUTO_POSITION=1, MASTER_USER=\'repl\', MASTER_PASSWORD=\'123\';"
mysql  -S /data/3309/mysql.sock -e "start slave;"
mysql  -S /data/3309/mysql.sock -e "show slave status\G"

配置 shard2

# 192.168.31.206:3308 <-----> 192.168.31.205:3308(互为主从)
# db2:
mysql  -S /data/3308/mysql.sock -e "grant replication slave on *.* to repl@\'192.168.31.%\' identified by \'123\';"
mysql  -S /data/3308/mysql.sock -e "grant all  on *.* to root@\'10.0.0.%\' identified by \'123\'  with grant option;"
# db1: 
mysql  -S /data/3308/mysql.sock -e "CHANGE MASTER TO MASTER_HOST=\'192.168.31.206\', MASTER_PORT=3308, MASTER_AUTO_POSITION=1, MASTER_USER=\'repl\', MASTER_PASSWORD=\'123\';"
mysql  -S /data/3308/mysql.sock -e "start slave;"
mysql  -S /data/3308/mysql.sock -e "show slave status\G"
# db2:
mysql  -S /data/3308/mysql.sock -e "CHANGE MASTER TO MASTER_HOST=\'192.168.31.205\', MASTER_PORT=3308, MASTER_AUTO_POSITION=1, MASTER_USER=\'repl\', MASTER_PASSWORD=\'123\';"
mysql  -S /data/3308/mysql.sock -e "start slave;"
mysql  -S /data/3308/mysql.sock -e "show slave status\G"

# 192.168.31.206:3310 -----> 192.168.31.206:3308(3308 为主库,3310为从库)
# db2:
mysql  -S /data/3310/mysql.sock -e "CHANGE MASTER TO MASTER_HOST=\'192.168.31.206\', MASTER_PORT=3308, MASTER_AUTO_POSITION=1, MASTER_USER=\'repl\', MASTER_PASSWORD=\'123\';"
mysql  -S /data/3310/mysql.sock -e "start slave;"
mysql  -S /data/3310/mysql.sock -e "show slave status\G"

# 192.168.31.205:3310 -----> 192.168.31.205:3308(3308 为主库,3310为从库)
# db1: 
mysql  -S /data/3310/mysql.sock -e "CHANGE MASTER TO MASTER_HOST=\'192.168.31.205\', MASTER_PORT=3308, MASTER_AUTO_POSITION=1, MASTER_USER=\'repl\', MASTER_PASSWORD=\'123\';"
mysql  -S /data/3310/mysql.sock -e "start slave;"
mysql  -S /data/3310/mysql.sock -e "show slave status\G"

检测主从状态

mysql -S /data/3307/mysql.sock -e "show slave status\G"|grep Yes
mysql -S /data/3308/mysql.sock -e "show slave status\G"|grep Yes
mysql -S /data/3309/mysql.sock -e "show slave status\G"|grep Yes
mysql -S /data/3310/mysql.sock -e "show slave status\G"|grep Yes

分类:

技术点:

相关文章:

  • 2021-11-10
  • 2021-05-19
  • 2021-03-03
  • 2021-09-03
  • 2021-08-21
  • 2021-06-01
  • 2021-02-26
  • 2021-06-20
猜你喜欢
  • 2021-09-25
  • 2021-09-25
  • 2021-09-25
  • 2021-09-03
  • 2022-02-25
  • 2021-09-25
  • 2021-09-25
相关资源
相似解决方案