一、什么是多实例?
1.什么是实例?
前文已经说过,实例是一种概念,举个例子:
公司:老板+经理+员工+办公区
实例:mysqld+master thread+干活的thread+预分配内存
2.那么多实例就好理解了,就是单台机器上多个实例哈哈哈
借用老男孩老师的例子,一台服务器比作一套房子,那么服务器上的硬件资源(硬盘,CPU等)软件资源(操作系统等)可以看作公用资源,而一个实例就比做一个卧室,卧室里住的有人,这些人会使用这些公共资源。多实例就是一台服务器同时开启多个不同的端口,同时运行mysql服务进程,这些服务通过不同的socket文件监听不同的服务端口来提供服务。
二、为什么要使用多实例?
1.优点:
还是上边的例子,一个人使用三室一厅必然有些奢侈(富二代除外),那么对于北漂的人来讲,多个人合租三室一厅会不会好一些呢?这就是使用多实例的原因。放到企业来讲,一台服务器的资源很大,一个mysql实例固然无法让这台服务器发挥到它最大的承受范围,剩下的资源就浪费了,所以就会使用多实例的方法,来尽可能的去让服务器的资源不浪费。
2.缺点:
虽然可以更大程度上去使用服务器的现有资源,但是也会出现资源抢占的问题,就像同一时刻多实例都需要提供服务的话,就像早上六点半房子里的人都要洗脸刷牙上班,这就会导致资源互相抢占的问题。当一个SQL语句慢查询时,就会大幅度消耗系统的CPU,磁盘I/O等资源,导致其他实例提供服务的效率也会随之下降。
三、应用场景
结合多实例的优缺点,总结多实例的应用场景:
1.公司刚起步(没钱)
2.访问量不是特别大的业务
3.购买了性能极佳的服务器(节约机房空间)
接下来就是重点了*****
mysql多实例配置方案有两种:
第一种:单一配置文件,单一启动程序部署方案
这种方案老师说不重要,也基本不会有人用,(我也不会,所以不说了)
第二种:多配置文件,多启动程序部署方案:*****
话不多说,咱直接是那个代码
1.创建三个目录(存放三个实例的配置文件及数据等)
mkdir -p /data/330{7,8,9}/data
2.写入配置文件
cat > /data/3307/my.cnf <<EOF
[mysqld]
basedir=/application/mysql
datadir=/data/3307/data
socket=/data/3307/mysql.sock
log_error=/data/3307/mysql.log
port=3307
server_id=7
log_bin=/data/3307/mysql-bin
EOF
cat > /data/3308/my.cnf <<EOF
[mysqld]
basedir=/application/mysql
datadir=/data/3308/data
socket=/data/3308/mysql.sock
log_error=/data/3308/mysql.log
port=3308
server_id=8
log_bin=/data/3308/mysql-bin
EOF
cat > /data/3309/my.cnf <<EOF
[mysqld]
basedir=/application/mysql
datadir=/data/3309/data
socket=/data/3309/mysql.sock
log_error=/data/3309/mysql.log
port=3309
server_id=9
log_bin=/data/3309/mysql-bin
EOF
3.把原配置文件改名或移动(避免冲突)
mv /etc/my.cnf /etc/my.cnf.bak
4.初始化三套数据
mysqld --initialize-insecure --user=mysql --datadir=/data/3307/data --basedir=/application/mysql
mysqld --initialize-insecure --user=mysql --datadir=/data/3308/data --basedir=/application/mysql
mysqld --initialize-insecure --user=mysql --datadir=/data/3309/data --basedir=/application/mysql
5.配置systemd管理多实例
cd /etc/systemd/system
cp mysqld.service mysqld3307.service
cp mysqld.service mysqld3308.service
cp mysqld.service mysqld3309.service
6.更改每个实例启动时指定的my.cnf
vim mysqld3307.service
ExecStart=/application/mysql/bin/mysqld --defaults-file=/data/3307/my.cnf
vim mysqld3308.service
ExecStart=/application/mysql/bin/mysqld --defaults-file=/data/3308/my.cnf
vim mysqld3309.service
ExecStart=/application/mysql/bin/mysqld --defaults-file=/data/3309/my.cnf
7.授权
chown -R mysql.mysql /data/*
8.启动(注意,可以先把虚拟机的内存调大一点(3G),不然可能带不动三个实例)
systemctl start mysqld3307.service
systemctl start mysqld3308.service
systemctl start mysqld3309.service
8.验证多实例是否启动成功和可用
netstat -lntup|grep 330
mysql -S /data/3307/mysql.sock -e "select @@server_id"
mysql -S /data/3308/mysql.sock -e "select @@server_id"
mysql -S /data/3309/mysql.sock -e "select @@server_id"
总结:多实例配置这一块没有什么大坑,主要是第六步更改每一个单实例的启动指定my.cnf文件,路径要写对了。还有就是内存尽可能调到3G,足够的内存才可以运行的更加通畅。(当然也可以调更大)
网友评论