1. apt-get install libssl-dev
2. apt-get install openssl
3. apt-get install libpopt-dev
4、apt-get install nmap
4、apt-get install keepalived
libssl-dev、openssl、libpopt-dev
为安装keepalived
的必备组件。首先安装它,不然后面会报错。namp
检测端口开放情况,用于后面mysql检测脚本。
1、官网下载安装包(以keepalived-2.0.18.tar.gz为例)
2、tar -zxvf keepalived-2.0.18.tar.gz
3、cd ./keepalived-2.0.18
4 ./configure --prefix=/usr/local/keepalived
5、make && make install
在/opt
目录下新建检测脚本,任意目录下都行,你自己决定
#!/bin/sh
# check mysql server status
PORT=3306
nmap localhost -p $PORT | grep "$PORT/tcp open"
#echo $?
if [ $? -ne 0 ];then
service mysql stop
service mysql start
sleep 5
nmap localhost -p $PORT | grep "$PORT/tcp open"
if [ $? -ne 0 ];then
pkill -f keepalived
fi
fi
给脚本赋予执行权限
chmod +x /opt/chk_mysql.sh
注意点:检测脚本不要再windows环境下编写,Windows下为dos
格式,需要转成unix
格式即可。如果你在windows下面编写的,脚本写完以后可以以下方法检查一下格式。
vim chk_mysql.sh
:set ff # 显示 filefomate=dos
:set ff=unix
:set ff # 显示 filefomate=unix
# 再退出编辑就可以执行脚本了
接下来将配置文件复制到系统的etc
目录下面,不进行这一步的话,keepzlived
就无法启动。系统默认读取/etc/keepalived
下的keepalived.conf
文件。
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
[email protected]
[email protected]
[email protected]
}
notification_email_from [email protected]
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
# 检测mysql是否正常运行
vrrp_script check_mysql {
script "/opt/chk_mysql.sh"
interval 2
weirht 2
}
vrrp_instance VI_1 {
state BACKUP # MASTER或者BACKUP,我们选择两台都为BACKUP
interface eth0 # 网卡名称,可使用 ip addr在系统里查看
virtual_router_id 51
priority 100 # 优先级,两台均为BACKUP的话,优先级设置成一样。
advert_int 1
track_script # 加上这个检测上面编写的脚本
{
check_mysql
}
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.200.16 # 虚拟ip
}
}
然后就可以使用service命令启动
service keepalived start #启动服务
service keepalived stop #停止服务
service keepalived status #查看状态
阿里云上面不支持keepalived,你就别想在这个上面用了。目前使用的是华为云的服务器。
登陆虚拟私有云,进入vpc-default
进入子网
申请虚拟ip
绑定服务器
只能绑定同一个子网下的服务器。一个个的绑定,官方建议最多可绑定10台服务器。
申请弹性公网ip绑定虚拟ip
将刚刚申请的虚拟ip与弹性公网ip绑定,提供对外连接属性。
服务器里输入ip addr
可查看虚拟ip
service mysql start
的步骤,手动验证时最好删除这个,不然无法观察到ip漂移现象。当你想要两个数据库互为主备的时候,需要在mysql.cnf
中加上下面这个配置,本篇中就需要加入这个。
log-slave-updates=true
my.cnf(或者my.ini)
,我的在/etc/mysql/mysql.conf.d/mysqld.cnf
,在[mysqld]部分插入如下两行:[mysqld]
log-bin=mysql-bin #开启二进制日志
server-id=1 #设置server-id,主从的不一样
log-slave-updates=true # 双主互备
service mysql stop
service mysql start
mysql> CREATE USER 'repl'@'%' IDENTIFIED BY 'slaveMysql'; #创建用户
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'138.159.140.61' idedtified by '密码'; #分配权限
mysql> flush privileges; #刷新权限
查看master状态,记录二进制文件名(mysql-bin.000006)和位置(154):
mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000006 | 154 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
找到从数据库的配置文件my.cnf(或者my.ini)
,我的在/etc/mysql/mysql.conf.d/mysqld.cnf
,在[mysqld]部分插入如下行:
[mysqld]
server-id=2 #设置server-id,必须唯一
mysql> CHANGE MASTER TO MASTER_HOST='139.9.7.204 ',MASTER_USER='repl',MASTER_PASSWORD='密码', MASTER_LOG_FILE='mysql-bin.000006', MASTER_LOG_POS=154;
start slave;
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 139.9.7.204
Master_User: mysql
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 154
Relay_Log_File: ecs-t6-large-2-linux-20190918162959-relay-bin.000002
Relay_Log_Pos: 320
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes # 这两个同时为yes代表成功了
Slave_SQL_Running: Yes # 这两个同时为yes代表成功了
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 154
A:从数据库:139.9.7.204
B:主数据库:138.159.140.61
按照上面的步骤角色相反进行同样的操作就行了。
建议:同步账号设置成与“A主B从”的一样的,便于后面使用弹性公网连接查看数据库。
主从配置参考博客
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 154
## 3、B主A从
- A:从数据库:139.9.7.204
- B:主数据库:138.159.140.61
按照上面的步骤角色相反进行同样的操作就行了。
建议:同步账号设置成与“A主B从”的一样的,便于后面使用弹性公网连接查看数据库。
[主从配置参考博客](https://www.cnblogs.com/gl-developer/p/6170423.html)