## 服务器搭建指南  Rabbitmq集群+Mysql双主集群+Keeplive高可用
建议换源后再进行一下操作 换源教程：https://blog.csdn.net/frighting_ing/article/details/122688413


看不了图片可以直接访问网页版
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
	保存退出
```bash
sudo service mysql restart
```

### 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
```
重启
```
reboot
```
在node1上开启镜像队列

```bash
sudo rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
```
停止重置node2服务并加入到集群

```bash
sudo rabbitmqctl stop_app
sudo rabbitmqctl reset
sudo rabbitmqctl join_cluster rabbit@zx-server-1
```

开启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 install aio_pika
	pip3 install pymysql
	pip3 install DBUtils==1.3
	pip3 install colorlog



