根据搜集的资料安装测试并在安装测试过程中整理的文档,部分参考文档在相应位置有标记。如有不足希望不吝赐教。
目录
一、安装mysql
本步骤两台主机都要执行一遍。两台主机都要安装,mysql安装见《CentOS7安装mysql8.0.12》或自行搜索。
安装完成后使用命令登录,密码为自己配置的密码:
mysql -uroot -p
创建一个测试数据库:
CREATE DATABASE `test`;
使用test库(use test;)创建一个测试空表:
create table tb_mobile( mobile VARCHAR(20) comment'手机号码', time timestamp DEFAULT now() comment'时间' );
二、服务器配置
1.创建同步用户
使用mysql库,
use mysql
然后分别为另一主机创建一个链接用户,该帐户必须授予REPLICATION SLAVE权限,因为mysql8在授权语句中不能出现IDENTIFIED BY ‘password’;,因此创建用户和授予权限需要分开执行:
1) 在136上执行创建用户并赋权:
CREATE USER 'replicate'@'172.17.3.134' IDENTIFIED WITH 'mysql_native_password' BY 'TestBicon@123';
GRANT REPLICATION SLAVE ON *.* TO 'replicate'@'172.17.3.134';
2) 在134上执行:
CREATE USER 'replicate'@'172.17.1.136' IDENTIFIED WITH 'mysql_native_password' BY 'TestBicon@123';
GRANT REPLICATION SLAVE ON *.* TO 'replicate'@'172.17.1.136';
创建完成后我们可以通过使用对方主机对本机数据库进行访问,看下是否能链接成功【注意:链接对方主机时需要先退出本机mysql或者打开新的终端】:
mysql -h172.17.3.134 -ureplicate -pTestBicon@123
mysql -h172.17.1.136 -ureplicate -pTestBicon@123
如果登录成功,则可以对两台服务器进行双机热备操作。
2.修改mysql配置文件
安装mysql后会在/etc/目录下生成一个my.cnf配置文件(如果没有可以从/usr/share/mysql目录下复制一份:cp /usr/share/mysql/my-medium.cnf /etc/my.cnf),找到配置文件后编辑(vim /etc/my.cnf),在[mysqld]中添加(修改)如下内容:
1)172.17.1.136主机
2)172.17.3.134主机
三、重启并配置同步
1.重启两台主机上的mysql
两台主机分别执行:
systemctl restart mysqld
或者
service mysqld restart
2.查看两个服务器作为主服务器的状态
show master status\G
3.用change mster 语句指定同步位置
进入mysql操作界面(mysql -uroot -p),先执行如下指令:
unlock tables;
否则在执行stop slave;时会报如下异常:ERROR 1192 (HY000): Can't execute the given command because you have active locked tables or an active transaction。
1)172.17.1.136主机
先停步slave服务线程,这个是很重要的,如果不这样做会造成以下操作不成功。
stop slave;
然后:
change master to
master_host='172.17.3.134',master_user='replicate',master_password='TestBicon@123',
master_log_file='mysql-bin-2.000001',master_log_pos=749;
分别在服务器上重启从服务线程:
start slave;
2)172.17.3.134主机
先停步slave服务线程,这个是很重要的,如果不这样做会造成以下操作不成功。
stop slave;
然后:
change master to
master_host='172.17.1.136',master_user='replicate',master_password='TestBicon@123',
master_log_file='mysql-bin-1.000001',master_log_pos=749;
分别在服务器上重启从服务线程:
start slave;
4.查看从服务器状态
show slave status\G
如果如下两项状态为yes则说明配置成功:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
四、验证
在两台主机的mysql中插入/删除数据等操作,另一台会自动将操作同步。
五、配置keepalived实现mysql双主高可用
上面的配置已经可以实现mysql双击热备,两台主机分别对外提供服务,如果服务链接某一台主机mysql故障,不能自动切换到另一台主机实现高可用,如果此可以满足需要或者不用切换,则可以不继续进行配置。下面将配置keepalived实现其高可用。
1.下载安装keepalived
官网地址:http://www.keepalived.org(以下以2.0.6版本为例)
安装位置:/usr/local/ cd /usr/local/
使用下面命令下载并解压:
wget http://www.keepalived.org/software/keepalived-2.0.6.tar.gz
tar -xzvf keepalived-2.0.6.tar.gz -C keepalived
在安装之前需要使用下面命令安装相关依赖:
yum -y install curl gcc openssl-devel libnl3-devel net-snmp-devel
yum -y install libnfnetlink-devel
yum -y install ipvsadm
然后安装keepalived:
cd keepalived
./configure
make && make install
编译安装后,会根据系统环境,生成启动脚本,如下:
cat /usr/lib/systemd/system/keepalived.service
将keepalved加进系统服务并且在/etc/sysconfig/写入配置文件以及将keepalived命令加进/usr/bin 和 /usr/sbin(下面命令中注释在使用中忽略):
cp /usr/local/keepalived/keepalived/etc/init.d/keepalived /etc/init.d/keepalived #最好查看下keeplaived是否有执行权限
mkdir /etc/keepalived/
cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/
cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
cp /usr/local/sbin/keepalived /usr/bin/ #方便以后查看keepalived的版本,用keepalived -v可以查看
cp /usr/local/sbin/keepalived /usr/sbin/
拷贝完成后修改配置文件:
vim /etc/keepalived/keepalived.conf
以下是配置的内容,根据实际修改,不可直接复制
1)172.17.1.136主机
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
#vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 100
advert_int 1
nopreempt #不抢占模式,只有优先级高的机器上设置即可,优先级低的机器可不设置
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.17.3.210
}
}
virtual_server 172.17.3.210 3306 {
delay_loop 2
lb_algo wrr
lb_kind DR
persistence_timeout 60 #会话保持时间
protocol TCP
real_server 172.17.1.136 3306 {
weight 3
notify_down /root/shutdown.sh #检测到服务down后执行的脚本
TCP_CHECK {
nb_get_retry 3 #重连次数
connect_timeout 10 #连接超时时间
delay_before_retry 3 #重连间隔时间
connect_port 3306 #健康检查端口
}
}
}
2)172.17.3.134主机
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL # 标识本节点的字条串,通常为hostname
vrrp_skip_check_adv_addr
#vrrp_strict #这个最好注释掉,否则可能造成物理机的浏览器无法访问应用
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
#state MASTER
state BACKUP
interface eno16777736
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { # Block limited to 20 IP addresses @IP
172.17.3.210
}
}
#虚拟服务器定义块
virtual_server 172.17.3.210 3306 {
delay_loop 2
lb_algo wrr
lb_kind DR
persistence_timeout 60
protocol TCP
real_server 172.17.3.134 {
weight 3
notify_down /root/shutdown.sh
TCP_CHECK {
nb_get_retry 3 #重连次数
connect_timeout 10 #连接超时时间
delay_before_retry 3 #重连间隔时间
connect_port 3306 #健康检查端口
}
}
}
编写检测服务down后所要执行的脚本shutdown.sh:
vim /root/shtdown.sh
内容为
注:此脚本是上面配置文件notify_down选项所用到的,keepalived使用notify_down选项来检查real_server的服务状态,当发现real_server服务故障时,便触发此脚本;我们可以看到,脚本就一个命令,通过killall keepalived强制杀死keepalived进程,从而实现了MySQL故障自动转移。另外,我们不用担心两个MySQL会同时提供数据更新操作,因为每台MySQL上的keepalived的配置里面只有本机MySQL的IP+VIP,而不是两台MySQL的IP+VIP
2.启动keepalived并查看日志
chkconfig keepalived on
service keepalived start #启动服务
service keepalived stop #停止服务
service keepalived restart #重启服务
systemctl enable keepalived.service #设置开机启动
启动后查看日志:
tail -f /var/log/messages
3.测试
在远程客户端通过vip登陆测试
mysql -h 172.17.3.210 -uroot -p
4.其他
1)修改日志位置
修改日志文件存放位置/var/log/keepalived/keepalived.log
echo 'local0.* /var/log/keepalived/keepalived.log' >>/etc/rsyslog.conf
重启日志服务
systemctl restart rsyslog
2)keepalived配置参数