VIP : 192.168.56.100
Server 1 : 192.168.56.101
Server 2 : 192.168.56.102
Step 1 : 安装 MySQL(192.168.56.101)
//需删除 linux 系统自带的数据库配置文件/etc/my.cnf,否则安装过程中会默认加载此配置文件
useradd -r -g mysql -s /bin/false mysql
chown -R mysql:mysql .
bin/mysqld –initialize –user=mysql –basedir=/srv/mysql #如果安装目录不在 /url/local/mysql ,则需要使用 –basedir 指定
bin/mysql_ssl_rsa_setup –datadir=/srv/mysql/data #如果安装目录不在 /url/local/mysql ,则需要使用 –datadir 指定
chown -R root:root .
chown -R mysql:mysql data/
bin/mysqld_safe –user=mysql &
bin/mysqladmin -u root -p password #修改默认密码(注意前两步命令的输出有生成的默认密码)
cp support-files/mysql.server /etc/init.d/mysql.server
vim /etc/init.d/mysql.server #如果不是安装在 /url/local/mysql 目录,则需要编辑一下,指定 basedir 和 datadir
/etc/init.d/mysql.server stop
cp support-files/my-default.cnf my.cnf
vim my.cnf #添加或修改以下配置
log_bin=mysql-bin
log_error=mysql-bin.err
binlog_ignore_db=mysql # 忽略同步的数据库
/etc/init.d/mysql.server start # 启动MySQL并执行以下SQL添加复制账号
Step 2 : 安装 MySQL(192.168.56.102)
//重复 Step 1(将命令中的 101 替换成 102,102 替换成 101)
Step 3 : 配置主从互备
192.168.56.101 ~ MySQL 终端运行如下 SQL 查看此实例作为主库的状态
192.168.56.102 ~ MySQL 终端运行如下 SQL 配置此实例作为从库需要连接的主库信息
MASTER_HOST=’192.168.56.101′,
MASTER_USER=’slave’,
MASTER_PASSWORD=’password’,
MASTER_LOG_FILE=’mysql-bin.000003′, #这个值对应上条命令输出的 `File` 字段
MASTER_LOG_POS=154; #这个值对应上条命令输出的 `Position` 字段
192.168.56.102 ~ MySQL 终端运行如下 SQL 查看此实例作为主库的状态
192.168.56.101 ~ MySQL 终端运行如下 SQL 配置此实例作为从库需要连接的主库信息
MASTER_HOST=’192.168.56.102′,
MASTER_USER=’slave’,
MASTER_PASSWORD=’password’,
MASTER_LOG_FILE=’mysql-bin.000003′, #这个值对应上条命令输出的 `File` 字段
MASTER_LOG_POS=154; #这个值对应上条命令输出的 `Position` 字段
最后分别在 101 和 102 两台 MySQL 的终端执行以下命令
SHOW SLAVE STATUS; # 查看此实例作为从库的状态
查看上条命令的输出 Slave_IO_Running 和 Slave_SQL_Running 的值都为 Yes 则表示两台实例的互相复制进程已经可用了
以上配置是在两台数据库都是空闲的新实例中配置的 线上的实例不适用以上配置
线上的实例需要锁定数据库库以保证配置的 MASTER_LOG_FILE 和 MASTER_LOG_POS 是正确的
Step 4 : 安装 keepalived(192.168.56.101)
./configure –prefix=/srv/keepalived && make && make install
vim /srv/keepalived/etc/keepalived/keepalived.conf #编辑配置文件如下
router_id HA_MYSQL
}
script “/etc/init.d/mysql.server status” !定时检查MySQL状态,MySQL挂掉则将自己下线释放VIP
}
state BACKUP
interface enp0s8 !网络界面
virtual_router_id 51
priority 101 !权重
advert_int 1
nopreempt !自己上线后不抢占当前 master 的位置,即使其权重比自己低
virtual_ipaddress {
192.168.56.100 !VIP
}
track_script {
chk_mysql !启用头部定义的检查MySQL状态的脚本
}
}
delay_loop 3
lb_algo rr
lb_kind NAT
persistence_timeout 60
protocol TCP sorry_server 192.168.56.102 3306 ! real_server 挂掉后临时使用 sorry_server 顶上
real_server 192.168.56.101 3306 {
weight 1
TCP_CHECK {
connect_port 3306
connect_timeout 3
}
}
}
Step 5 : 安装 keepalived(192.168.56.102)
重复 Step 4(将配置中的 101 替换成 102,102 替换成 101)
Step 6 : 检验配置
分别启动两台机器上的 keepalived
使用 `ip a` 命令查看哪台机器抢到了 VIP ?
停止抢到 VIP 服务器的 MySQL 实例,去另一台机器看是否接管 VIP ?
重启或关闭抢到 VIP 的 keepalived 服务,去另一台机器看是否接管 VIP ?
直接断掉抢到 VIP 的服务器的网络,去另一台机器看是否接管 VIP ?
这个架构在同一时刻只有一台 MySQL 对外提供写服务,因此不存在混写的状态,不用另外设置自增的规则。
安装 PHP 7 :
./configure --prefix=/srv/php --enable-fpm --disable-ipv6 --with-openssl --enable-bcmath --with-curl --enable-exif --with-gd --enable-gd-native-ttf --with-mhash --enable-mbstring --with-mcrypt --with-mysqli --enable-pcntl --with-pdo-mysql --enable-shmop --enable-sockets --enable-sysvmsg --enable-sysvsem --enable-sysvshm --enable-mysqlnd && make && make install