## 服务器搭建指南 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需要密码。 ```bash sudo gedit /etc/sudoers ``` %sudo ALL=(ALL:ALL) ALL 更改为 : %sudo ALL=(ALL:ALL) NOPASSWD:ALL 这样所有sudo操作均不需要输入密码 ,如果需要改回来,把NOPASSWD:删掉就好。 ## 一、准备工作 ### 1.新增用户,用户名为zx,给予zx管理员权限: ```bash sudo useradd -m zx -s /bin/bash sudo passwd zx sudo adduser zx sudo su zx ``` ### 2.重启或注销电脑登录zx用户: ```bash touch ~/.sudo_as_admin_successful ``` ### 3.修改,添加主机名称: node1改为zx-server-1,node2改为zx-server-2 ```bash sudo hostnamectl set-hostname zx-server-1 --static sudo gedit /etc/hostname ``` 内容改为zx-server-1保存关闭 ```bash 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同则说明修改生效。 ## 二、数据库集群的安装配置 ### 1.安装mysql: 有多种安装方式,建议直接命令安装 ```bash sudo apt update sudo apt install mysql-server -y ``` ### 2.设置mysql密码: ```bash sudo mysql ``` ```bash ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password by '123456'; ``` ![在这里插入图片描述](https://img-blog.csdnimg.cn/afb6c942fc3b4302a35d366d985b59ae.png#pic_center) ```bash exit; ``` ### 3.初步配置: ```bash sudo mysql_secure_installation ``` ![在这里插入图片描述](https://img-blog.csdnimg.cn/051299d95de24c96aecec89a6af49ea7.png#pic_center) 输入刚刚设置的密码123456 ![在这里插入图片描述](https://img-blog.csdnimg.cn/cdefbef09a6b4b47930268e73ab4df2e.png#pic_center) 选择N ,不会进行密码的强校验 ![在这里插入图片描述](https://img-blog.csdnimg.cn/3e14b62903f24602be7bf26c6fe80714.png#pic_center) 选择N ,不重设密码 ![在这里插入图片描述](https://img-blog.csdnimg.cn/d9ef32d4161d4fff82524e83359bfc9f.png#pic_center) 选择N,不删除匿名用户 ![在这里插入图片描述](https://img-blog.csdnimg.cn/6034e4fc7e124e73971802c46598b0b4.png#pic_center) 选择N,允许root远程连接 ![在这里插入图片描述](https://img-blog.csdnimg.cn/5a92c3dc8e8949b4bdd1bdffc298a653.png#pic_center) 选择N,不删除test数据库 ![在这里插入图片描述](https://img-blog.csdnimg.cn/0a37de51a1af42dbacdfaeea2746b4bf.png#pic_center) 选择Y,修改权限立即生效 ![在这里插入图片描述](https://img-blog.csdnimg.cn/b190df772be24ed8ba62b1f4030e7234.png#pic_center) 配置成功 ### 4.新建一个zx用户并授予权限: ```bash mysql -uroot -p123456 create user 'zx'@'%' identified by '123456'; grant all on *.* to "zx"@"%" with grant option; ``` ![在这里插入图片描述](https://img-blog.csdnimg.cn/0f1d262174664a19b1ede02ab69d4c7c.png#pic_center) ```bash flush privileges; exit; ``` ![在这里插入图片描述](https://img-blog.csdnimg.cn/27fdf89fd15e472e99bdf2d032533225.png#pic_center) ### 5.登录zx用户修改加密规则: ```bash mysql -uroot -p123456 ``` ```bash ALTER USER 'zx'@'%' IDENTIFIED WITH mysql_native_password BY '123456'; FLUSH PRIVILEGES; exit; ``` ### 6.修改配置文件: ```bash sudo gedit /etc/mysql/mysql.conf.d/mysqld.cnf ``` 把bind-address=127.0.0.1这行注释(前面加上#) 在文件最下方添加 skip-external-locking skip-name-resolve 保存退出 ### 7.Navicat测试远程连接: ![在这里插入图片描述](https://img-blog.csdnimg.cn/e5823ce4753045258323adb3eb21b9c8.png#pic_center) ### 8.配置双主集群: ```bash sudo gedit /etc/mysql/my.cnf ``` 复制粘贴以下内容 ```bash !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 保存关闭重启服务 ```bash systemctl restart mysql.service ``` ```bash mysql -uzx -p123456 ``` ```bash reset master; ``` node1: ```bash change master to SOURCE_HOST='192.168.2.11',SOURCE_PORT=3306,SOURCE_USER='zx',SOURCE_PASSWORD='123456',SOURCE_AUTO_POSITION=1; ``` node2: ```bash change master to SOURCE_HOST='192.168.2.10',SOURCE_PORT=3306,SOURCE_USER='zx',SOURCE_PASSWORD='123456',SOURCE_AUTO_POSITION=1; ``` 启动同步 ```bash start replica; ``` 查看配置状态 ```bash show slave status \G; ``` ![在这里插入图片描述](https://img-blog.csdnimg.cn/40551ae8e36e49f7866b034e1c81ec78.png#pic_center) 当以下两项都为YES时则集群配置成功: Slave_IO_Running:Yes Slave_SQL_Running:Yes 若为NO或Connecting大概率配置错误,可在 /var/log/mysql/error.log文件查看报错信息,根据报错信息予以解决。 **9.测试集群:** 使用Navicat连接两个服务器的数据库,增删或修改都是同步的话则配置成功。 ## 三、rabbitmq集群配置 ### 1.安装rabbitmq依赖erlang: ```bash sudo apt-get install erlang-nox ``` ### 2.安装rabbitmq: ```bash sudo apt-get update sudo apt-get install rabbitmq-server ``` ### 3.启动服务: ```bash sudo service rabbitmq-server start sudo rabbitmq-plugins enable rabbitmq_management ``` ![在这里插入图片描述](https://img-blog.csdnimg.cn/c3f80325a9a84cdb88192824fa6fe41e.png#pic_center) ### 4.查看版本: 登录网页http://127.0.0.1:15672,输入默认用户名密码guest,确认node1与node2版本号一致! ![在这里插入图片描述](https://img-blog.csdnimg.cn/53142f28a20e498bb96e9cb7b1ca8277.png#pic_center) ### 5.创建zx用户: 依次点击Admin→Add user配置如下,密码123456: ![在这里插入图片描述](https://img-blog.csdnimg.cn/5e3ef0959b8e4a7590797f400dd751dd.png#pic_center) 点击Adduser后新增一个用户 ![在这里插入图片描述](https://img-blog.csdnimg.cn/864f8aa9f6c44a078c450a57ad7ef5dd.png#pic_center) ### 6.设置zx用户权限: 点击用户名zx→Set permission→Set topic permission ![在这里插入图片描述](https://img-blog.csdnimg.cn/a37234796f8449ec9adc5d8507d58fac.png#pic_center) ### 7.检查是否成功: 点击Admin,如图所示则创建成功 ![在这里插入图片描述](https://img-blog.csdnimg.cn/6a5ebe2181534fe0be2f491fe6bfcb41.png#pic_center) ### 8.配置集群: 在node1上启动服务: ```bash sudo rabbitmqctl start_app ``` 安装ssh: ```bash sudo apt install ssh ``` 修改.erlang.cookie权限: ```bash sudo chmod 666 /var/lib/rabbitmq/.erlang.cookie sudo chown root:root /var/lib/rabbitmq/.erlang.cookie sudo chmod 777 /var/lib/rabbitmq ``` 拷贝,node1上执行: ```bash scp /var/lib/rabbitmq/.erlang.cookie zx@zx-server-2:/var/lib/rabbitmq/ ``` 恢复权限: ```bash sudo chmod 755 /var/lib/rabbitmq sudo chmod 400 /var/lib/rabbitmq/.erlang.cookie sudo chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie ``` 停止重置node2服务并加入到集群 ```bash sudo rabbitmqctl stop_app sudo rabbitmqctl reset sudo rabbitmqctl join_cluster rabbit@zx-server-1 ``` 在node1上开启镜像队列 ```bash sudo rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}' ``` 开启node2节点服务 ```bash sudo rabbitmqctl start_app ``` 登录网站127.0.0.1:15672查看集群是否成功搭建 ![在这里插入图片描述](https://img-blog.csdnimg.cn/359247aa780a4578b95a44bfaa17b238.png#pic_center) ## 四.配置keeplived ### 1.安装keeplived ```bash sudo apt-get install keepalived ``` ### 2.设置随系统自启动 ```bash sudo gedit /etc/rc.local ``` 在文件中添加以下内容后保存退出: #!/bin/sh -e # 服务类要以 & 结尾一行,表示不要等待运行结束 service keepalived start & #文末必须以exit 0结束 exit 0 ### 3.配置keepalived ```bash 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冲突 } } ### 4.重启服务: ```bash sudo service keepalived restart ``` ### 5.测试: 在192.168.2.10(MASTER)节点上执行:ip a ![在这里插入图片描述](https://img-blog.csdnimg.cn/58e663b1958c41ccb4a3241089a5dbdf.png#pic_center) 如果前面顺利,这里可以看到设置的虚拟ip 192.168.2.11(BACKUP)上没有虚拟IP 停掉192.168.2.10(MASTER)的keepalived ```bash sudo service keepalived stop ``` 再到192.168.2.11(BACKUP)上执行:ip a 可以看到虚拟IP说明配置成功 然后再启动192.168.2.10(MASTER)的keepalived ```bash 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