为什么80%的码农都做不了架构师?>>>
如需转载请注明出处https://my.oschina.net/feistel/blog/2996572
我丑 话说在前头:
192.168.1.200 主masterB, VMUbuntu18 MySQL8.0
192.168.1.123 主masterC, VMCentOS7 MySQL8.0
vip:192.168.1.199
B shell代表Ubuntu终端
C shell代表CentOS终端
shell代表两系统都需要操作
----------------------------------------------------------------------------------------------------------------
1
修改B的server-id为2,两个库的server-id不能相同
在B etc/mysqld.cnf里的[mysqld]添加:
# Server Id.
server-id=2
#开启GTID
gtid-mode=on
enforce_gtid_consistency=on
#开启binlog写二进制日志文件:
log_bin=on
保存
每次修改配置文件需要重启服务以便载入
B shell>service mysql restart
B mysql>show variables like "%id";
B mysql>show variables like "%slave";
查看相应值是否修改成功,否则说明配置文件不对
说明:如果etc/mysqld.cnf里新加的参数不对或打错什么的,重启数据库服务会出错
关闭AB防火墙,Windows控制面板,Ubuntu为:
B shell>service iptables stop
相应地,C也做相同操作,但是与CentOS略有区别,两Linux不同系别,Ubuntu是基于Debian,CentOS是基于Red Hat
在C etc/my.cnf里的[mysqld]添加:
# Server Id.
server-id=3
#开启GTID
gtid-mode=on
enforce_gtid_consistency=on
#开启binlog写二进制日志文件:
log_bin=on
保存
重启服务以便载入
C shell>service mysqld restart
注意是“mysqld”,已瞎,我什么都看不到,万恶的CentOS
关闭防火墙,CentOS为:
C shell>systemctl stop firewalld
可以参考:MySQL主从复制——异步方式(binlog+position、GTID)
这里采用GTID方式
----------------------------------------------------------------------------------------------------------------
2
创建主从复制账号并授权:
B mysql>create user 'lgl'@'%' identified by '123456';
B mysql>grant replication slave on *.* to 'lgl'@'%';
B mysql>flush privileges;
C mysql>create user 'lgl'@'%' identified by '123456';
C mysql>grant replication slave on *.* to 'lgl'@'%';
C mysql>flush privileges;
----------------------------------------------------------------------------------------------------------------
3
使用下面,保证双主库里的数据库、表和数据一致
必须参考:MySQL数据库备份
----------------------------------------------------------------------------------------------------------------
4
两两互从,即互主
B mysql>
CHANGE MASTER TO
MASTER_HOST='192.168.1.123',
MASTER_USER='lgl',
MASTER_PASSWORD='123456',
master_auto_position=1;
B mysql>start slave;
B mysql>show slave status\G;
C mysql>
CHANGE MASTER TO
MASTER_HOST='192.168.1.200',
MASTER_USER='lgl',
MASTER_PASSWORD='123456',
master_auto_position=1;
C mysql>start slave;
C mysql>show slave status\G;
----------------------------------------------------------------------------------------------------------------
5
安装keepalived
B shell>apt-get install libssl-dev
B shell>apt-get install openssl
B shell>apt-get install libpopt-dev
B shell>apt_get install keepalived
C shell>yum -y install keepalived
会看到安装完毕
----------------------------------------------------------------------------------------------------------------
6
两系统终端都新建shell脚本
shell>vim /etc/keepalived/checkmysql.sh
#!/bin/bash
mysqlstr=mysql
host=192.168.1.200
port=3306
user=lgl
password=123456
mysql_status=1
$mysqlstr -h $host -P $port -u $user -p$password -e "show status;" > /dev/null
if [ $? -eq 0 ] ;then
echo "mysql_status=1"
exit 0
else
/etc/init.d/keepalived stop
fi
shell脚本参考:Linux常用命令、Vim、Shell、计划任务
上述脚本意思是:当数据库服务(B mysql)正常运行时,回显mysql_status=1,否则停止keepalived
shell>chmod +x /etc/keepalived/checkmysql.sh
shell>/etc/keepalived/checkmysql.sh
mysql_status=1
----------------------------------------------------------------------------------------------------------------
7
B shell>ip addr
1: lo:
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2:
link/ether 00:0c:29:7c:0f:de brd ff:ff:ff:ff:ff:ff
inet 192.168.1.200/24 brd 192.168.1.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet 192.168.1.199/32 scope global ens33
valid_lft forever preferred_lft forever
inet6 fe80::2cf0:bf6d:e273:350d/64 scope link noprefixroute
valid_lft forever preferred_lft forever
显示出网卡,以及网卡对应的信息,通常“1”表示回环网络
这里记录下本机ip所在的网卡,Unbuntu的为ens33
C shell>ip addr
记下CentOS的为eno16777736
part8有用
----------------------------------------------------------------------------------------------------------------
8
B shell>vim /etc/keepalived/keepalived.conf
vrrp_svript vs_mysql_100 {
script "/etc/keepalived/checkmysql.sh" ##执行shell脚本
interval 10 ##间隔10s
}
vrrp_instance VI_100 { ##集群名
state BACKUP ##MASTER
nopreempt ##非抢占式
interface ens33 ##part7中所寻找的网卡
virtual_router_id 100 ##vrid,主备必须一致
priority 100 ##优先级
advert_int 5 ##主备同步间隔时间
authentication {
auth_type PASS
auth_pass 1111 ##主备密码一致
}
track_script {
vs_mysql_100 ##执行监控服务
}
virtual_ipaddress {
192.168.1.199
}
}
C shell>vim /etc/keepalived/keepalived.conf
vrrp_script vs_mysql_101 {
script "/etc/keepalived/checkmysql.sh" ##执行shell脚本
interval 10 ##间隔10s
}
vrrp_instance VI_101 { ##集群名
state BACKUP ##MASTER
nopreempt ##非抢占式
interface eno16777736 ##part7中所寻找的网卡
virtual_router_id 100 ##vrid,主备必须一致
priority 90 ##优先级,低于BMySQL的
advert_int 5 ##主备同步间隔时间
authentication {
auth_type PASS
auth_pass 1111 ##主备密码一致
}
track_script {
vs_mysql_101 ##执行监控服务
}
virtual_ipaddress {
192.168.1.199
}
}
----------------------------------------------------------------------------------------------------------------
9
启动keepalived进程,两系系统区别很大!
B shell>/etc/init.d/keepalived start
C shell>service keepalived start
B shell>ip addr |grep 192.168
表示成功绑定了虚拟地址,此时用A mysql客户端连接192.168.1.199。
如果不存在虚拟地址,说明绑定失败,跳回part7,看看网卡正误。
查看日志,一定要查!如果不存在文件,那肯定是不想给你看,怕你玩坏,跳part10(一)先解决
B shell>cat /var/log/messages
----------------------------------------------------------------------------------------------------------------
10
疑难杂症
一、
如果
B shell>cat /var/log/messages
出现
cat: /var/log/messages: 没有那个文件或目录
就
sudo vim /etc/rsyslog.d/50-default.conf
把
#*.=debug;\
# auth,authpriv.none;\
# news.none;mail.none -/var/log/debug
#*.=info;*.=notice;*.=warn;\
# auth,authpriv.none;\
# cron,daemon.none;\
# mail,news.none -/var/log/messages
这几行注释去掉
B shell>systemctl restart rsyslog
OK
----------------------------------------------------------------------------------------------------------------
至此,共勉,如需转载请注明出处https://my.oschina.net/feistel/blog/2996572