## 服务器搭建指南 Rabbitmq集群+Mysql双主集群+Keeplive高可用
看不了图片可以直接访问网页版 https://blog.csdn.net/a1003779438/article/details/130077551 @[toc]
目前项目上主要使用rabbitmq集群与mysql集群来保存任务流程数据,车位数据,车辆记录等信息,使用keepalived来配置集群高可用。再加上各个程序运行所需软件包。 以两台服务器为例,ip假设分别为192.168.2.10与192.168.2.11。命名假设分别为node1与node2。下列所有操作node1与node2均需要进行。
可选操作:sudo不需要输入命令。因为配置环境会频繁输入sudo,如果每次都需要密码就会非常影响效率。可使用以下方法取消sudo需要密码。
sudo gedit /etc/sudoers
%sudo ALL=(ALL:ALL) ALL 更改为 :
%sudo ALL=(ALL:ALL) NOPASSWD:ALL
这样所有sudo操作均不需要输入密码 ,如果需要改回来,把NOPASSWD:删掉就好。
sudo useradd -m zx -s /bin/bash
sudo passwd zx
sudo adduser zx sudo
su zx
touch ~/.sudo_as_admin_successful
node1改为zx-server-1,node2改为zx-server-2
sudo hostnamectl set-hostname zx-server-1 --static
sudo gedit /etc/hostname
内容改为zx-server-1保存关闭
sudo gedit /etc/hosts/
添加以下内容
192.168.10 zx-server-1
192.168.11 zx-server-2
测试是否成功,node1上ping zx-server-2,node2上ping zx-server-1,能ping同则说明修改生效。
有多种安装方式,建议直接命令安装
sudo apt update
sudo apt install mysql-server -y
sudo mysql
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password by '123456';
exit;
sudo mysql_secure_installation
输入刚刚设置的密码123456
选择N ,不会进行密码的强校验
选择N ,不重设密码
选择N,不删除匿名用户
选择N,允许root远程连接
选择N,不删除test数据库
选择Y,修改权限立即生效
配置成功
mysql -uroot -p123456
create user 'zx'@'%' identified by '123456';
grant all on *.* to "zx"@"%" with grant option;
flush privileges;
exit;
mysql -uroot -p123456
ALTER USER 'zx'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
FLUSH PRIVILEGES;
exit;
sudo gedit /etc/mysql/mysql.conf.d/mysqld.cnf
把bind-address=127.0.0.1这行注释(前面加上#)
在文件最下方添加
skip-external-locking
skip-name-resolve
保存退出
sudo gedit /etc/mysql/my.cnf
复制粘贴以下内容
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/
[mysqld]
#事务隔离级别,默认为可重复读,mysql默认可重复读级别(此级别下可能参数很多间隙锁,影响性能)
transaction_isolation = READ-COMMITTED
# ------------------集群--------------
# 每台服务器ID为集群内唯一, 例如1,2,3
# A
server-id = 1
# B
#server-id = 2
# 开启binlog,数据同步的关键
log-bin=on
# 步进值auto_imcrement 。一般有n台主mysql就填n
auto_increment_increment=2
# 自增起始位置,一般填写第n台主机mysql.此时为第一台主
auto_increment_offset=1
#auto_increment_offset=2
#忽略mysql库,可以不填写
#binlog-ignore=mysql
#忽略information_schema库,一般不填写
#binlog-ignore=infomation_schema
#指定同步的数据库,不填写则默认所有的数据库
#replicate-do-db=test_db
# 从库连接
default_authentication_plugin=mysql_native_password
# 将复制事件写入binlog,一台服务器既做主库又做从库此选项必须要开启
log-slave-updates = true
# 主从复制模式开启
gtid_mode=on
enforce_gtid_consistency=1
注:server-id 与auto_increment_offset需修改,node1为1,node2为2
保存关闭重启服务
systemctl restart mysql.service
mysql -uzx -p123456
reset master;
node1:
change master to SOURCE_HOST='192.168.2.11',SOURCE_PORT=3306,SOURCE_USER='zx',SOURCE_PASSWORD='123456',SOURCE_AUTO_POSITION=1;
node2:
change master to SOURCE_HOST='192.168.2.10',SOURCE_PORT=3306,SOURCE_USER='zx',SOURCE_PASSWORD='123456',SOURCE_AUTO_POSITION=1;
启动同步
start replica;
查看配置状态
show slave status \G;
当以下两项都为YES时则集群配置成功:
Slave_IO_Running:Yes
Slave_SQL_Running:Yes
若为NO或Connecting大概率配置错误,可在 /var/log/mysql/error.log文件查看报错信息,根据报错信息予以解决。
9.测试集群:
使用Navicat连接两个服务器的数据库,增删或修改都是同步的话则配置成功。
sudo apt-get install erlang-nox
sudo apt-get update
sudo apt-get install rabbitmq-server
sudo service rabbitmq-server start
sudo rabbitmq-plugins enable rabbitmq_management
登录网页http://127.0.0.1:15672,输入默认用户名密码guest,确认node1与node2版本号一致!
依次点击Admin→Add user配置如下,密码123456:
点击用户名zx→Set permission→Set topic permission
点击Admin,如图所示则创建成功
在node1上启动服务:
sudo rabbitmqctl start_app
安装ssh:
sudo apt install ssh
修改.erlang.cookie权限:
sudo chmod 666 /var/lib/rabbitmq/.erlang.cookie
sudo chown root:root /var/lib/rabbitmq/.erlang.cookie
sudo chmod 777 /var/lib/rabbitmq
拷贝,node1上执行:
scp /var/lib/rabbitmq/.erlang.cookie zx@zx-server-2:/var/lib/rabbitmq/
恢复权限:
sudo chmod 755 /var/lib/rabbitmq
sudo chmod 400 /var/lib/rabbitmq/.erlang.cookie
sudo chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie
停止重置node2服务并加入到集群
sudo rabbitmqctl stop_app
sudo rabbitmqctl reset
sudo rabbitmqctl join_cluster rabbit@zx-server-1
在node1上开启镜像队列
sudo rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
开启node2节点服务
sudo rabbitmqctl start_app
sudo apt-get install keepalived
sudo gedit /etc/rc.local
在文件中添加以下内容后保存退出:
#!/bin/sh -e
# 服务类要以 & 结尾一行,表示不要等待运行结束
service keepalived start &
#文末必须以exit 0结束
exit 0
sudo gedit /etc/keepalived/keepalived.conf
在文件中加入以下内容:
global_defs {
router_id zx01 #路由id号,不可重复
}
vrrp_instance VI_1{ #定义一个实例
state MASTER #MASTER为主节点、BACKUP为备用节点 只是说明,具体根据优先级,node2填写BACKUP
interface eno1 #虚拟IP地址放置的网卡位置,使用ipconfig查看虚拟网卡名称
virtual_router_id 51 #当前虚拟路由唯一标识,同一个集群id需要一致,范围0-255
priority 101 #当前节点在虚拟路由中的优先级,值越大优先级越大;范围1-254
advert_int 1 #主备通讯间隔
authentication {
auth_type PASS
auth_pass 123456 #认证号,集群中需要一致
}
virtual_ipaddress {
192.168.2.100 #使用的虚拟IP,不能和网段内IP冲突
}
}
sudo service keepalived restart
在192.168.2.10(MASTER)节点上执行:ip a
如果前面顺利,这里可以看到设置的虚拟ip
192.168.2.11(BACKUP)上没有虚拟IP
停掉192.168.2.10(MASTER)的keepalived
sudo service keepalived stop
再到192.168.2.11(BACKUP)上执行:ip a
可以看到虚拟IP说明配置成功
然后再启动192.168.2.10(MASTER)的keepalived
sudo service keepalived start
sudo apt install git
sudo apt install python3-pip
pip3 apt install aio_pika
pip3 apt install pymysql
pip3 install DBUtils==1.3
pip3 install colorlog